62 #include <openssl/md2.h>
71 #define UCHAR unsigned char
73 static void md2_block(
MD2_CTX *c,
const unsigned char *d);
76 static const MD2_INT S[256]={
77 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01,
78 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13,
79 0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C,
80 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA,
81 0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16,
82 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12,
83 0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49,
84 0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A,
85 0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, 0x07, 0x3F,
86 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21,
87 0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27,
88 0x35, 0x3E, 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03,
89 0xFF, 0x19, 0x30, 0xB3, 0x48, 0xA5, 0xB5, 0xD1,
90 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, 0xAA, 0xC6,
91 0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6,
92 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1,
93 0x45, 0x9D, 0x70, 0x59, 0x64, 0x71, 0x87, 0x20,
94 0x86, 0x5B, 0xCF, 0x65, 0xE6, 0x2D, 0xA8, 0x02,
95 0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, 0xB9, 0xF6,
96 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F,
97 0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A,
98 0xC3, 0x5C, 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26,
99 0x2C, 0x53, 0x0D, 0x6E, 0x85, 0x28, 0x84, 0x09,
100 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, 0x4D, 0x52,
101 0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA,
102 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A,
103 0x78, 0x88, 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D,
104 0xE9, 0xCB, 0xD5, 0xFE, 0x3B, 0x00, 0x1D, 0x39,
105 0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, 0xD0, 0xE4,
106 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A,
107 0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A,
108 0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14,
113 if (
sizeof(MD2_INT) == 1)
122 memset(
c->state,0,
sizeof c->state);
123 memset(
c->cksm,0,
sizeof c->cksm);
124 memset(
c->data,0,
sizeof c->data);
132 if (len == 0)
return 1;
140 md2_block(c,c->
data);
148 memcpy(&(p[c->
num]),data,len);
167 static void md2_block(
MD2_CTX *c,
const unsigned char *d)
169 register MD2_INT
t,*sp1,*sp2;
180 state[i+32]=(t^sp1[i]);
186 for (j=0; j<48; j+=8)
188 t= state[j+ 0]^=S[
t];
189 t= state[j+ 1]^=S[
t];
190 t= state[j+ 2]^=S[
t];
191 t= state[j+ 3]^=S[
t];
192 t= state[j+ 4]^=S[
t];
193 t= state[j+ 5]^=S[
t];
194 t= state[j+ 6]^=S[
t];
195 t= state[j+ 7]^=S[
t];
199 memcpy(sp1,state,16*
sizeof(MD2_INT));
207 register MD2_INT *p1,*p2;
223 md[i]=(
UCHAR)(p1[i]&0xff);
224 memset((
char *)&c,0,
sizeof(c));