44 #define F(b, c, d) (d ^ (b & (c ^ d)))    45 #define G(b, c, d) F (d, b, c)    46 #define H(b, c, d) (b ^ c ^ d)    47 #define I(b, c, d) (c ^ (b | ~d))    50 #define ROTATE_LEFT(x,n) \    51   (((x) << (n)) | ((x) >> (32 - (n))))    55 #define FF(a,b,c,d,x,s,ac)                      \    57   a += F (b, c, d) + x + ac;                    \    58   a = ROTATE_LEFT (a, s);                       \    62 #define GG(a,b,c,d,x,s,ac)                      \    64   a += G (b, c, d) + x + ac;                    \    65   a = ROTATE_LEFT (a, s);                       \    69 #define HH(a,b,c,d,x,s,ac)                      \    71   a += H (b, c, d) + x + ac;                    \    72   a = ROTATE_LEFT (a, s);                       \    76 #define II(a,b,c,d,x,s,ac)                      \    78   a += I (b, c, d) + x + ac;                    \    79   a = ROTATE_LEFT (a, s);                       \   111   FF (a, b, 
c, d, clib_host_to_little_u32 (x[0]), 
S11, 0xd76aa478);     
   112   FF (d, a, b, 
c, clib_host_to_little_u32 (x[1]), 
S12, 0xe8c7b756);     
   113   FF (
c, d, a, b, clib_host_to_little_u32 (x[2]), 
S13, 0x242070db);     
   114   FF (b, 
c, d, a, clib_host_to_little_u32 (x[3]), 
S14, 0xc1bdceee);     
   115   FF (a, b, 
c, d, clib_host_to_little_u32 (x[4]), 
S11, 0xf57c0faf);     
   116   FF (d, a, b, 
c, clib_host_to_little_u32 (x[5]), 
S12, 0x4787c62a);     
   117   FF (
c, d, a, b, clib_host_to_little_u32 (x[6]), 
S13, 0xa8304613);     
   118   FF (b, 
c, d, a, clib_host_to_little_u32 (x[7]), 
S14, 0xfd469501);     
   119   FF (a, b, 
c, d, clib_host_to_little_u32 (x[8]), 
S11, 0x698098d8);     
   120   FF (d, a, b, 
c, clib_host_to_little_u32 (x[9]), 
S12, 0x8b44f7af);     
   121   FF (
c, d, a, b, clib_host_to_little_u32 (x[10]), 
S13, 0xffff5bb1);    
   122   FF (b, 
c, d, a, clib_host_to_little_u32 (x[11]), 
S14, 0x895cd7be);    
   123   FF (a, b, 
c, d, clib_host_to_little_u32 (x[12]), 
S11, 0x6b901122);    
   124   FF (d, a, b, 
c, clib_host_to_little_u32 (x[13]), 
S12, 0xfd987193);    
   125   FF (
c, d, a, b, clib_host_to_little_u32 (x[14]), 
S13, 0xa679438e);    
   126   FF (b, 
c, d, a, clib_host_to_little_u32 (x[15]), 
S14, 0x49b40821);    
   129   GG (a, b, 
c, d, x[1], 
S21, 0xf61e2562);       
   130   GG (d, a, b, 
c, x[6], 
S22, 0xc040b340);       
   131   GG (
c, d, a, b, x[11], 
S23, 0x265e5a51);      
   132   GG (b, 
c, d, a, x[0], 
S24, 0xe9b6c7aa);       
   133   GG (a, b, 
c, d, x[5], 
S21, 0xd62f105d);       
   134   GG (d, a, b, 
c, x[10], 
S22, 0x02441453);      
   135   GG (
c, d, a, b, x[15], 
S23, 0xd8a1e681);      
   136   GG (b, 
c, d, a, x[4], 
S24, 0xe7d3fbc8);       
   137   GG (a, b, 
c, d, x[9], 
S21, 0x21e1cde6);       
   138   GG (d, a, b, 
c, x[14], 
S22, 0xc33707d6);      
   139   GG (
c, d, a, b, x[3], 
S23, 0xf4d50d87);       
   140   GG (b, 
c, d, a, x[8], 
S24, 0x455a14ed);       
   141   GG (a, b, 
c, d, x[13], 
S21, 0xa9e3e905);      
   142   GG (d, a, b, 
c, x[2], 
S22, 0xfcefa3f8);       
   143   GG (
c, d, a, b, x[7], 
S23, 0x676f02d9);       
   144   GG (b, 
c, d, a, x[12], 
S24, 0x8d2a4c8a);      
   147   HH (a, b, 
c, d, x[5], 
S31, 0xfffa3942);       
   148   HH (d, a, b, 
c, x[8], 
S32, 0x8771f681);       
   149   HH (
c, d, a, b, x[11], 
S33, 0x6d9d6122);      
   150   HH (b, 
c, d, a, x[14], 
S34, 0xfde5380c);      
   151   HH (a, b, 
c, d, x[1], 
S31, 0xa4beea44);       
   152   HH (d, a, b, 
c, x[4], 
S32, 0x4bdecfa9);       
   153   HH (
c, d, a, b, x[7], 
S33, 0xf6bb4b60);       
   154   HH (b, 
c, d, a, x[10], 
S34, 0xbebfbc70);      
   155   HH (a, b, 
c, d, x[13], 
S31, 0x289b7ec6);      
   156   HH (d, a, b, 
c, x[0], 
S32, 0xeaa127fa);       
   157   HH (
c, d, a, b, x[3], 
S33, 0xd4ef3085);       
   158   HH (b, 
c, d, a, x[6], 
S34, 0x04881d05);       
   159   HH (a, b, 
c, d, x[9], 
S31, 0xd9d4d039);       
   160   HH (d, a, b, 
c, x[12], 
S32, 0xe6db99e5);      
   161   HH (
c, d, a, b, x[15], 
S33, 0x1fa27cf8);      
   162   HH (b, 
c, d, a, x[2], 
S34, 0xc4ac5665);       
   165   II (a, b, 
c, d, x[0], 
S41, 0xf4292244);       
   166   II (d, a, b, 
c, x[7], 
S42, 0x432aff97);       
   167   II (
c, d, a, b, x[14], 
S43, 0xab9423a7);      
   168   II (b, 
c, d, a, x[5], 
S44, 0xfc93a039);       
   169   II (a, b, 
c, d, x[12], 
S41, 0x655b59c3);      
   170   II (d, a, b, 
c, x[3], 
S42, 0x8f0ccc92);       
   171   II (
c, d, a, b, x[10], 
S43, 0xffeff47d);      
   172   II (b, 
c, d, a, x[1], 
S44, 0x85845dd1);       
   173   II (a, b, 
c, d, x[8], 
S41, 0x6fa87e4f);       
   174   II (d, a, b, 
c, x[15], 
S42, 0xfe2ce6e0);      
   175   II (
c, d, a, b, x[6], 
S43, 0xa3014314);       
   176   II (b, 
c, d, a, x[13], 
S44, 0x4e0811a1);      
   177   II (a, b, 
c, d, x[4], 
S41, 0xf7537e82);       
   178   II (d, a, b, 
c, x[11], 
S42, 0xbd3af235);      
   179   II (
c, d, a, b, x[2], 
S43, 0x2ad7d2bb);       
   180   II (b, 
c, d, a, x[9], 
S44, 0xeb86d391);       
   189       result[0] = clib_host_to_little_u32 (a);
   190       result[1] = clib_host_to_little_u32 (b);
   191       result[2] = clib_host_to_little_u32 (
c);
   192       result[3] = clib_host_to_little_u32 (d);
   204     memset (m, ~0, 
sizeof (m[0]));
   205   else if (zero_buffer)
   213   memset (c, 0, 
sizeof (c[0]));
   216   c->
state[0] = 0x67452301;
   217   c->
state[1] = 0xefcdab89;
   218   c->
state[2] = 0x98badcfe;
   219   c->
state[3] = 0x10325476;
   227     c->input_buffer.b32[
i] = d32[
i];
   244   data_bytes_left = data_bytes;
   250       int is_last_iteration;
   255           is_last_iteration = data_bytes_left < 
sizeof (c->
input_buffer);
   260       while (!is_last_iteration);
   270     while (data_bytes_left > 0)
   273         data_bytes_left -= 1;
   305     = clib_host_to_little_u64 (n_bits_save);
 void md5_finish(md5_context_t *c, u8 *digest)
sll srl srl sll sra u16x4 i
void md5_init(md5_context_t *c)
#define GG(a, b, c, d, x, s, ac)
#define II(a, b, c, d, x, s, ac)
union md5_context_t::@13 input_buffer
static void md5_fill_buffer_aligned(md5_context_t *c, u32 *d32)
static uword pointer_to_uword(const void *p)
#define HH(a, b, c, d, x, s, ac)
#define FF(a, b, c, d, x, s, ac)
void md5_add(md5_context_t *c, void *data, int data_bytes)
static void md5_transform(md5_context_t *m, u32 *data, u32 *result, int zero_buffer)