diff options
Diffstat (limited to 'src/md5.cpp')
| -rw-r--r-- | src/md5.cpp | 190 |
1 files changed, 0 insertions, 190 deletions
diff --git a/src/md5.cpp b/src/md5.cpp deleted file mode 100644 index c0cacdd..0000000 --- a/src/md5.cpp +++ /dev/null | |||
| @@ -1,190 +0,0 @@ | |||
| 1 | #include <stdio.h> | ||
| 2 | #include <stdlib.h> | ||
| 3 | #include <string.h> | ||
| 4 | #include "md5.h" | ||
| 5 | |||
| 6 | // This is a fun macro that tells us where the length char goes after the data | ||
| 7 | // section in the padded data segment. It's short for OBfuscation LOCaction. | ||
| 8 | #define OBLOC(len) ((((len + 64) >> 9) << 4) + 14) | ||
| 9 | // This performs a wrapping bitwise shift, kinda' fun! | ||
| 10 | |||
| 11 | #define bit_roll( num, cnt ) \ | ||
| 12 | (((num) << (cnt)) | (((num) >> (32 - (cnt))) & ~(-1<<(cnt)))) | ||
| 13 | |||
| 14 | //#define md5_cmn( q, a, b, x, s, t ) (bit_roll((a + q + x + t), s) + b) | ||
| 15 | |||
| 16 | // The following are handy wrappers for the cmn function | ||
| 17 | #define md5_ff( a, b, c, d, x, s, t ) \ | ||
| 18 | (md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)) | ||
| 19 | |||
| 20 | #define md5_gg( a, b, c, d, x, s, t ) \ | ||
| 21 | (md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)) | ||
| 22 | |||
| 23 | #define md5_hh( a, b, c, d, x, s, t ) \ | ||
| 24 | (md5_cmn(b ^ c ^ d, a, b, x, s, t)) | ||
| 25 | |||
| 26 | #define md5_ii( a, b, c, d, x, s, t ) \ | ||
| 27 | (md5_cmn(c ^ (b | (~d)), a, b, x, s, t)) | ||
| 28 | |||
| 29 | inline long md5_cmn( long q, long a, long b, long x, long s, long t ) | ||
| 30 | { | ||
| 31 | return bit_roll((a + q + x + t), s) + b; | ||
| 32 | } | ||
| 33 | |||
| 34 | md5::md5() | ||
| 35 | { | ||
| 36 | } | ||
| 37 | |||
| 38 | md5::~md5() | ||
| 39 | { | ||
| 40 | } | ||
| 41 | |||
| 42 | /* | ||
| 43 | * Calculate the MD5 of an array of little-endian words, and a bit length | ||
| 44 | */ | ||
| 45 | void md5::core_md5( long *x, long len, md5sum *output ) | ||
| 46 | { | ||
| 47 | long a = 1732584193, olda; | ||
| 48 | long b = -271733879, oldb; | ||
| 49 | long c = -1732584194, oldc; | ||
| 50 | long d = 271733878, oldd; | ||
| 51 | |||
| 52 | for( long i = 0; i < len; i += 16 ) | ||
| 53 | { | ||
| 54 | olda = a; | ||
| 55 | oldb = b; | ||
| 56 | oldc = c; | ||
| 57 | oldd = d; | ||
| 58 | |||
| 59 | a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); | ||
| 60 | d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); | ||
| 61 | c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); | ||
| 62 | b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); | ||
| 63 | a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); | ||
| 64 | d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); | ||
| 65 | c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); | ||
| 66 | b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); | ||
| 67 | a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); | ||
| 68 | d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); | ||
| 69 | c = md5_ff(c, d, a, b, x[i+10], 17, -42063); | ||
| 70 | b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); | ||
| 71 | a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); | ||
| 72 | d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); | ||
| 73 | c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); | ||
| 74 | b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); | ||
| 75 | |||
| 76 | a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); | ||
| 77 | d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); | ||
| 78 | c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); | ||
| 79 | b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); | ||
| 80 | a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); | ||
| 81 | d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); | ||
| 82 | c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); | ||
| 83 | b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); | ||
| 84 | a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); | ||
| 85 | d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); | ||
| 86 | c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); | ||
| 87 | b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); | ||
| 88 | a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); | ||
| 89 | d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); | ||
| 90 | c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); | ||
| 91 | b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); | ||
| 92 | |||
| 93 | a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); | ||
| 94 | d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); | ||
| 95 | c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); | ||
| 96 | b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); | ||
| 97 | a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); | ||
| 98 | d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); | ||
| 99 | c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); | ||
| 100 | b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); | ||
| 101 | a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); | ||
| 102 | d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); | ||
| 103 | c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); | ||
| 104 | b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); | ||
| 105 | a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); | ||
| 106 | d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); | ||
| 107 | c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); | ||
| 108 | b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); | ||
| 109 | |||
| 110 | a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); | ||
| 111 | d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); | ||
| 112 | c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); | ||
| 113 | b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); | ||
| 114 | a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); | ||
| 115 | d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); | ||
| 116 | c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); | ||
| 117 | b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); | ||
| 118 | a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); | ||
| 119 | d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); | ||
| 120 | c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); | ||
| 121 | b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); | ||
| 122 | a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); | ||
| 123 | d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); | ||
| 124 | c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); | ||
| 125 | b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); | ||
| 126 | |||
| 127 | a = a + olda; | ||
| 128 | b = b + oldb; | ||
| 129 | c = c + oldc; | ||
| 130 | d = d + oldd; | ||
| 131 | } | ||
| 132 | |||
| 133 | output->data[0] = a; | ||
| 134 | output->data[1] = b; | ||
| 135 | output->data[2] = c; | ||
| 136 | output->data[3] = d; | ||
| 137 | delete[] x; | ||
| 138 | } | ||
| 139 | |||
| 140 | long *md5::c2l( const char *str, long len, long *nNewLen ) | ||
| 141 | { | ||
| 142 | long len8 = len*8; | ||
| 143 | long mlen = OBLOC( len8 ); | ||
| 144 | long flen = (((mlen/16)+((mlen%16)?(1):(0))))*16; | ||
| 145 | long *aBin = new long[flen]; | ||
| 146 | memset( aBin, 0, flen*4 ); | ||
| 147 | |||
| 148 | for( long i = 0; i < len8; i+=8 ) | ||
| 149 | { | ||
| 150 | aBin[i>>5] |= ((long)str[i/8]) << (i%32); | ||
| 151 | } | ||
| 152 | |||
| 153 | aBin[len8 >> 5] |= 0x80 << ((len8) % 32); | ||
| 154 | aBin[OBLOC( len8 )] = len8; | ||
| 155 | |||
| 156 | (*nNewLen) = flen; | ||
| 157 | |||
| 158 | return aBin; | ||
| 159 | } | ||
| 160 | |||
| 161 | void md5::l2hexstr( long *binarray, char *str ) | ||
| 162 | { | ||
| 163 | static const char hex_tab[] = {"0123456789abcdef"}; | ||
| 164 | //static char str[33]; | ||
| 165 | |||
| 166 | int k = 0; | ||
| 167 | for( int i = 0; i < 16; i++) | ||
| 168 | { | ||
| 169 | str[k++] = hex_tab[(binarray[i>>2] >> ((i%4)*8+4)) & 0xF]; | ||
| 170 | str[k++] = hex_tab[(binarray[i>>2] >> ((i%4)*8 )) & 0xF]; | ||
| 171 | } | ||
| 172 | } | ||
| 173 | |||
| 174 | void md5::sumString( md5sum *pSum, const char *sStr ) | ||
| 175 | { | ||
| 176 | sumData( pSum, sStr, strlen( sStr ) ); | ||
| 177 | } | ||
| 178 | |||
| 179 | void md5::sumData( md5sum *pSum, const char *aData, long nLen ) | ||
| 180 | { | ||
| 181 | long nNewLen; | ||
| 182 | long *aOb = c2l( aData, nLen, &nNewLen ); | ||
| 183 | core_md5( aOb, nNewLen, pSum ); | ||
| 184 | } | ||
| 185 | |||
| 186 | void md5::sumToHex( md5sum *pSum, char *sHex ) | ||
| 187 | { | ||
| 188 | l2hexstr( pSum->data, sHex ); | ||
| 189 | } | ||
| 190 | |||
