30 #include <sys/types.h> 
   33 # include "unlocked-io.h" 
   38 # if __BYTE_ORDER == __BIG_ENDIAN 
   39 #  define WORDS_BIGENDIAN 1 
   43 # define md5_init_ctx __md5_init_ctx 
   44 # define md5_process_block __md5_process_block 
   45 # define md5_process_bytes __md5_process_bytes 
   46 # define md5_finish_ctx __md5_finish_ctx 
   47 # define md5_read_ctx __md5_read_ctx 
   48 # define md5_stream __md5_stream 
   49 # define md5_buffer __md5_buffer 
   52 #ifdef WORDS_BIGENDIAN 
   54     (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) 
   59 #define BLOCKSIZE 32768 
   60 #if BLOCKSIZE % 64 != 0 
   61 # error "invalid BLOCKSIZE" 
   66 static const unsigned char fillbuf[64] = { 0x80, 0  };
 
   89   memcpy (cp, &v, 
sizeof v);
 
   98   set_uint32 (r + 0 * 
sizeof ctx->
A, 
SWAP (ctx->
A));
 
   99   set_uint32 (r + 1 * 
sizeof ctx->
B, 
SWAP (ctx->
B));
 
  100   set_uint32 (r + 2 * 
sizeof ctx->
C, 
SWAP (ctx->
C));
 
  101   set_uint32 (r + 3 * 
sizeof ctx->
D, 
SWAP (ctx->
D));
 
  113   size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4;
 
  116   ctx->
total[0] += bytes;
 
  117   if (ctx->
total[0] < bytes)
 
  124   memcpy (&((
char *) ctx->
buffer)[bytes], fillbuf, (size - 2) * 4 - bytes);
 
  160           n = fread (buffer + sum, 1, 
BLOCKSIZE - sum, stream);
 
  177               goto process_partial_block;
 
  184             goto process_partial_block;
 
  193 process_partial_block:
 
  232       size_t left_over = ctx->
buflen;
 
  233       size_t add = 128 - left_over > len ? len : 128 - left_over;
 
  235       memcpy (&((
char *) ctx->
buffer)[left_over], buffer, add);
 
  245                   &((
char *) ctx->
buffer)[(left_over + add) & ~63],
 
  249       buffer = (
const char *) buffer + add;
 
  256 #if !_STRING_ARCH_unaligned 
  257 # define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) 
  262             buffer = (
const char *) buffer + 64;
 
  269           buffer = (
const char *) buffer + (len & ~63);
 
  277       size_t left_over = ctx->
buflen;
 
  279       memcpy (&((
char *) ctx->
buffer)[left_over], buffer, len);
 
  296 #define FF(b, c, d) (d ^ (b & (c ^ d))) 
  297 #define FG(b, c, d) FF (d, b, c) 
  298 #define FH(b, c, d) (b ^ c ^ d) 
  299 #define FI(b, c, d) (c ^ (b | ~d)) 
  309   size_t nwords = len / 
sizeof (
uint32_t);
 
  310   const uint32_t *endp = words + nwords;
 
  319   ctx->
total[0] += len;
 
  320   if (ctx->
total[0] < len)
 
  340 #define OP(a, b, c, d, s, T)                                            \ 
  343           a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T;             \ 
  352 #define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s))) 
  365       OP (A, B, C, D, 7, 0xd76aa478);
 
  366       OP (D, A, B, C, 12, 0xe8c7b756);
 
  367       OP (C, D, A, B, 17, 0x242070db);
 
  368       OP (B, C, D, A, 22, 0xc1bdceee);
 
  369       OP (A, B, C, D, 7, 0xf57c0faf);
 
  370       OP (D, A, B, C, 12, 0x4787c62a);
 
  371       OP (C, D, A, B, 17, 0xa8304613);
 
  372       OP (B, C, D, A, 22, 0xfd469501);
 
  373       OP (A, B, C, D, 7, 0x698098d8);
 
  374       OP (D, A, B, C, 12, 0x8b44f7af);
 
  375       OP (C, D, A, B, 17, 0xffff5bb1);
 
  376       OP (B, C, D, A, 22, 0x895cd7be);
 
  377       OP (A, B, C, D, 7, 0x6b901122);
 
  378       OP (D, A, B, C, 12, 0xfd987193);
 
  379       OP (C, D, A, B, 17, 0xa679438e);
 
  380       OP (B, C, D, A, 22, 0x49b40821);
 
  386 #define OP(f, a, b, c, d, k, s, T)                                      \ 
  389           a += f (b, c, d) + correct_words[k] + T;                      \ 
  396       OP (
FG, A, B, C, D, 1, 5, 0xf61e2562);
 
  397       OP (
FG, D, A, B, C, 6, 9, 0xc040b340);
 
  398       OP (
FG, C, D, A, B, 11, 14, 0x265e5a51);
 
  399       OP (
FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
 
  400       OP (
FG, A, B, C, D, 5, 5, 0xd62f105d);
 
  401       OP (
FG, D, A, B, C, 10, 9, 0x02441453);
 
  402       OP (
FG, C, D, A, B, 15, 14, 0xd8a1e681);
 
  403       OP (
FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
 
  404       OP (
FG, A, B, C, D, 9, 5, 0x21e1cde6);
 
  405       OP (
FG, D, A, B, C, 14, 9, 0xc33707d6);
 
  406       OP (
FG, C, D, A, B, 3, 14, 0xf4d50d87);
 
  407       OP (
FG, B, C, D, A, 8, 20, 0x455a14ed);
 
  408       OP (
FG, A, B, C, D, 13, 5, 0xa9e3e905);
 
  409       OP (
FG, D, A, B, C, 2, 9, 0xfcefa3f8);
 
  410       OP (
FG, C, D, A, B, 7, 14, 0x676f02d9);
 
  411       OP (
FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
 
  414       OP (
FH, A, B, C, D, 5, 4, 0xfffa3942);
 
  415       OP (
FH, D, A, B, C, 8, 11, 0x8771f681);
 
  416       OP (
FH, C, D, A, B, 11, 16, 0x6d9d6122);
 
  417       OP (
FH, B, C, D, A, 14, 23, 0xfde5380c);
 
  418       OP (
FH, A, B, C, D, 1, 4, 0xa4beea44);
 
  419       OP (
FH, D, A, B, C, 4, 11, 0x4bdecfa9);
 
  420       OP (
FH, C, D, A, B, 7, 16, 0xf6bb4b60);
 
  421       OP (
FH, B, C, D, A, 10, 23, 0xbebfbc70);
 
  422       OP (
FH, A, B, C, D, 13, 4, 0x289b7ec6);
 
  423       OP (
FH, D, A, B, C, 0, 11, 0xeaa127fa);
 
  424       OP (
FH, C, D, A, B, 3, 16, 0xd4ef3085);
 
  425       OP (
FH, B, C, D, A, 6, 23, 0x04881d05);
 
  426       OP (
FH, A, B, C, D, 9, 4, 0xd9d4d039);
 
  427       OP (
FH, D, A, B, C, 12, 11, 0xe6db99e5);
 
  428       OP (
FH, C, D, A, B, 15, 16, 0x1fa27cf8);
 
  429       OP (
FH, B, C, D, A, 2, 23, 0xc4ac5665);
 
  432       OP (
FI, A, B, C, D, 0, 6, 0xf4292244);
 
  433       OP (
FI, D, A, B, C, 7, 10, 0x432aff97);
 
  434       OP (
FI, C, D, A, B, 14, 15, 0xab9423a7);
 
  435       OP (
FI, B, C, D, A, 5, 21, 0xfc93a039);
 
  436       OP (
FI, A, B, C, D, 12, 6, 0x655b59c3);
 
  437       OP (
FI, D, A, B, C, 3, 10, 0x8f0ccc92);
 
  438       OP (
FI, C, D, A, B, 10, 15, 0xffeff47d);
 
  439       OP (
FI, B, C, D, A, 1, 21, 0x85845dd1);
 
  440       OP (
FI, A, B, C, D, 8, 6, 0x6fa87e4f);
 
  441       OP (
FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
 
  442       OP (
FI, C, D, A, B, 6, 15, 0xa3014314);
 
  443       OP (
FI, B, C, D, A, 13, 21, 0x4e0811a1);
 
  444       OP (
FI, A, B, C, D, 4, 6, 0xf7537e82);
 
  445       OP (
FI, D, A, B, C, 11, 10, 0xbd3af235);
 
  446       OP (
FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
 
  447       OP (
FI, B, C, D, A, 9, 21, 0xeb86d391);
 
void md5_process_block(const void *buffer, size_t len, struct md5_ctx *ctx)
 
void md5_init_ctx(struct md5_ctx *ctx)
 
#define OP(a, b, c, d, s, T)
 
void * md5_finish_ctx(struct md5_ctx *ctx, void *resbuf)
 
void * md5_read_ctx(const struct md5_ctx *ctx, void *resbuf)
 
int md5_stream(FILE *stream, void *resblock)
 
void * md5_buffer(const char *buffer, size_t len, void *resblock)
 
void md5_process_bytes(const void *buffer, size_t len, struct md5_ctx *ctx)