115 lines · cpp
1// RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s2 3#include <sys/param.h>4 5#include <assert.h>6#include <endian.h>7#include <md4.h>8#include <stdio.h>9#include <stdlib.h>10#include <string.h>11 12void test1() {13 MD4_CTX ctx;14 uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};15 uint8_t digest[MD4_DIGEST_LENGTH];16 17 MD4Init(&ctx);18 MD4Update(&ctx, entropy, __arraycount(entropy));19 MD4Final(digest, &ctx);20 21 printf("test1: '");22 for (size_t i = 0; i < __arraycount(digest); i++)23 printf("%02x", digest[i]);24 printf("'\n");25}26 27void test2() {28 MD4_CTX ctx;29 uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};30 char digest[MD4_DIGEST_STRING_LENGTH];31 32 MD4Init(&ctx);33 MD4Update(&ctx, entropy, __arraycount(entropy));34 char *p = MD4End(&ctx, digest);35 assert(p == digest);36 37 printf("test2: '%s'\n", digest);38}39 40void test3() {41 MD4_CTX ctx;42 uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};43 44 MD4Init(&ctx);45 MD4Update(&ctx, entropy, __arraycount(entropy));46 char *p = MD4End(&ctx, NULL);47 assert(strlen(p) == MD4_DIGEST_STRING_LENGTH - 1);48 49 printf("test3: '%s'\n", p);50 51 free(p);52}53 54void test4() {55 char digest[MD4_DIGEST_STRING_LENGTH];56 57 char *p = MD4File("/etc/fstab", digest);58 assert(p == digest);59 60 printf("test4: '%s'\n", p);61}62 63void test5() {64 char *p = MD4File("/etc/fstab", NULL);65 assert(strlen(p) == MD4_DIGEST_STRING_LENGTH - 1);66 67 printf("test5: '%s'\n", p);68 69 free(p);70}71 72void test6() {73 uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};74 char digest[MD4_DIGEST_STRING_LENGTH];75 76 char *p = MD4Data(entropy, __arraycount(entropy), digest);77 assert(p == digest);78 79 printf("test6: '%s'\n", p);80}81 82void test7() {83 uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};84 85 char *p = MD4Data(entropy, __arraycount(entropy), NULL);86 assert(strlen(p) == MD4_DIGEST_STRING_LENGTH - 1);87 88 printf("test7: '%s'\n", p);89 90 free(p);91}92 93int main(void) {94 printf("MD4\n");95 96 test1();97 test2();98 test3();99 test4();100 test5();101 test6();102 test7();103 104 // CHECK: MD4105 // CHECK: test1: 'bf78fda2ca35eb7a026bfcdd3d17283d'106 // CHECK: test2: 'bf78fda2ca35eb7a026bfcdd3d17283d'107 // CHECK: test3: 'bf78fda2ca35eb7a026bfcdd3d17283d'108 // CHECK: test4: '{{.*}}'109 // CHECK: test5: '{{.*}}'110 // CHECK: test6: 'bf78fda2ca35eb7a026bfcdd3d17283d'111 // CHECK: test7: 'bf78fda2ca35eb7a026bfcdd3d17283d'112 113 return 0;114}115