Exemple #1
0
void handle_md4(array_t *out, bio_t *in) {
  md4_ctx_t ctx;
  char hex[sizeof(ctx.hash) * 2];
  size_t r;
  
  md4_init(&ctx);
  
  do {
    r = bio_feed(in);
    md4_update(&ctx, BIO_PEEK(in), r);
    BIO_SEEK(in, r);
  } while (r > 0);
  
  md4_finish(&ctx);
  
  array_append(out, hex, fmt_hex_pad(hex, ctx.hash, sizeof(ctx.hash)));
  array_append_null(out);
}
Exemple #2
0
static void md4_finish_wrap( void *ctx, unsigned char *output )
{
    md4_finish( (md4_context *) ctx, output );
}
Exemple #3
0
int main() {
  md4_ctx_t ctx;
  char hex_str[33];
  char digest[16];
  int i;
  uint32_t vector[][4] = {
    { 0x31d6cfe0, 0xd16ae931, 0xb73c59d7, 0xe0c089c0 },
    { 0xbde52cb3, 0x1de33e46, 0x245e05fb, 0xdbd6fb24 },
    { 0xa448017a, 0xaf21d852, 0x5fc10ae8, 0x7aa6729d },
    { 0xd9130a81, 0x64549fe8, 0x18874806, 0xe1c7014b },
    { 0xd79e1c30, 0x8aa5bbcd, 0xeea8ed63, 0xdf412da9 },
    { 0x043f8582, 0xf241db35, 0x1ce627e1, 0x53e7f0e4 },
    { 0xe33b4ddc, 0x9c38f219, 0x9c3e7b16, 0x4fcc0536 },
    { 0xe33b4ddc, 0x9c38f219, 0x9c3e7b16, 0x4fcc0536 }
  };
  
  md4s(&ctx, "");
  for (i = 0; i < 4; i++) {
    if (vector[0][i] != be32toh(ctx.hash[i]))
      return 1;
  }
  
  md4s(&ctx, "a");
  for (i = 0; i < 4; i++) {
    if (vector[1][i] != be32toh(ctx.hash[i]))
      return 2;
  }
  
  md4s(&ctx, "abc");
  for (i = 0; i < 4; i++) {
    if (vector[2][i] != be32toh(ctx.hash[i]))
      return 3;
  }
  
  md4s(&ctx, "message digest");
  for (i = 0; i < 4; i++) {
    if (vector[3][i] != be32toh(ctx.hash[i]))
      return 4;
  }
  
  md4s(&ctx, "abcdefghijklmnopqrstuvwxyz");
  for (i = 0; i < 4; i++) {
    if (vector[4][i] != be32toh(ctx.hash[i]))
      return 5;
  }
  
  md4s(&ctx, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
  for (i = 0; i < 4; i++) {
    if (vector[5][i] != be32toh(ctx.hash[i]))
      return 6;
  }
  
  md4s(&ctx, "12345678901234567890123456789012345678901234567890123456789012345678901234567890");
  for (i = 0; i < 4; i++) {
    if (vector[6][i] != be32toh(ctx.hash[i]))
      return 7;
  }
  
  md4_init(&ctx);
  md4_update(&ctx, "1234567890", 10);
  md4_update(&ctx, "1234567890", 10);
  md4_update(&ctx, "1234567890", 10);
  md4_update(&ctx, "1234567890", 10);
  md4_update(&ctx, "1234567890", 10);
  md4_update(&ctx, "1234567890", 10);
  md4_update(&ctx, "1234567890", 10);
  md4_update(&ctx, "1234567890", 10);
  md4_finish(&ctx);
  for (i = 0; i < 4; i++) {
    if (vector[7][i] != be32toh(ctx.hash[i]))
      return 8;
  }
  
  return 0;
}