/* _md5.p RSA Data Security, Inc. MD5 Message-Digest Algorithm Progress implementation courtesy Ultramain Systems, Inc. 12/20/00 Andrew Brooman NOTES: 1) The MD5 algorithm is described at www.landfield.com/rfcs/rfc1321.html. 2) For ease of debugging, I have used the variable names from the algorithm as described (e.g. M, A, B, C, D, X, Y, Z, FF, GG, HH, II) hence the inconsistency with Progress naming conventions (e.g. cMessage). 3) A "word" in this algorithm is a long word (32 bits). 4) Progress INTEGERs are signed long words. Despite the signing, AND, OR, XOR, NOT, Shift, Add seem to work fine. You will notice use of negative numbers (e.g. initializing MD5 buffers A B C D) when the high-order bit needs to be set. MAX INT = +2147483647 MIN INT = -2147483648 MAX INT + 1 = MIN INT (overflows) 29 Aug 2006 - Removed Functions to _md5.i */ {_md5.i} /* main */ DEFINE INPUT PARAMETER cMessage AS CHARACTER NO-UNDO. DEFINE OUTPUT PARAMETER cDigest AS CHARACTER NO-UNDO. cDigest = MD5(cMessage). RETURN. /* End of _md5.p */