/* */ #include "ldns/config.h" #include int test_duration(void) { ldns_duration_type *d1 = NULL, *d2 = NULL; char *s1 = NULL, *s2 = NULL, *s3 = NULL; int r = -1; if (!(d1 = ldns_duration_create())) fprintf(stderr, "ldns_duration_create() returned NULL\n"); else if (!(s1 = ldns_duration2string(d1))) fprintf(stderr, "ldns_duration2string() returned NULL\n"); else if (!(d2 = ldns_duration_create_from_string("PT0S"))) fprintf( stderr , "ldns_duration_create_from_string(\"P0D\") returned NULL\n"); else if (ldns_duration_compare(d1, d2)) fprintf(stderr, "0 durations not equal\n"); else if ((d1->years = 1), (d1->months = 3), 0) ; /* pass */ else if (!(s2 = ldns_duration2string(d1))) fprintf(stderr, "ldns_duration2string() returned NULL\n"); else if (strcmp(s2, "P1Y3M")) fprintf(stderr, "\"%s\" should have been \"P1Y3M\"\n", s2); else if ((d1->minutes = 3), 0) ; /* pass */ else if (!(s3 = ldns_duration2string(d1))) fprintf(stderr, "ldns_duration2string() returned NULL\n"); else if (strcmp(s3, "P1Y3MT3M")) fprintf(stderr, "\"%s\" should have been \"P1Y3MT3M\"\n", s3); else if (ldns_duration_compare(d1, d2) <= 0) fprintf(stderr, "ldns_duration_compare() error\n"); else r = 0; if (d1) ldns_duration_cleanup(d1); if (d2) ldns_duration_cleanup(d2); if (s1) free(s1); if (s2) free(s2); if (s3) free(s3); return r; } void print_data_ar(const uint8_t *data, const size_t len) { size_t i; for (i = 0; i < len; i++) { printf("%02x ", data[i]); } } int test_base64_encode(uint8_t *data, size_t data_len, const char *expect_result) { int result; char *text; size_t text_len; text_len = ldns_b64_ntop_calculate_size(data_len); text = malloc(text_len); result = ldns_b64_ntop(data, data_len, text, text_len); text_len = result; if (result < 0) { printf("Error 1 encoding base64 test data (result %d):\n", result); print_data_ar(data, data_len); printf("\n"); result = 1; } else { if (strncmp(expect_result, text, text_len) != 0) { printf("Bad base64 encoding: got: "); printf("%s\n", text); printf("Expected: "); printf("%s\n", expect_result); printf("Data:\t"); print_data_ar(data, data_len); printf("\n"); result = 2; } else { result = 0; } } free(text); return result; } int test_base64_decode(const char *str, const uint8_t *expect_data, size_t expect_data_len) { int result; uint8_t *data; size_t data_len; size_t i; data_len = ldns_b64_pton_calculate_size(strlen(str)); if(!(data = malloc(data_len))) return -1; result = ldns_b64_pton(str, data, data_len); data_len = result; if (result < 0) { printf("Error 2 decoding base64 test data (return code %d): %s\n", result, str); result = 1; } else { result = 0; if (data_len != expect_data_len) { printf("Bad base64 decoding, wrong result length for string %s:\n", str); printf("Got: "); print_data_ar(data, data_len); printf("\n"); printf("Expected: "); print_data_ar(expect_data, expect_data_len); printf("\n"); result = 2; } else { for (i = 0; i < data_len; i++) { if (data[i] != expect_data[i]) { result = 3; } } if (result != 0) { printf("Bad base64 decoding string %s:\n", str); printf("Got: "); print_data_ar(data, data_len); printf("\n"); printf("Expected: "); print_data_ar(expect_data, expect_data_len); printf("\n"); } } } free(data); return result; } int test_base32_encode(uint8_t *data, size_t data_len, const char *expect_result) { int result; char *text; size_t text_len; text_len = ldns_b32_ntop_calculate_size(data_len) + 10; text = malloc(text_len); result = ldns_b32_ntop(data, data_len, text, text_len); if (result < 0) { printf("Error 3 encoding base32 test data (result %d):\n", result); print_data_ar(data, data_len); printf("\n"); result = 1; } else { if (strncmp(expect_result, text, text_len) != 0) { printf("Bad base32 encoding: got: "); printf("%s\n", text); printf("Expected: "); printf("%s\n", expect_result); printf("Data:\t"); print_data_ar(data, data_len); printf("\n"); result = 2; } else { result = 0; } } free(text); return result; } int test_base32_decode(const char *str, const uint8_t *expect_data, size_t expect_data_len) { int result; uint8_t *data; size_t data_len; size_t i; data_len = ldns_b32_pton_calculate_size(strlen(str)) + 10; if (!(data = malloc(data_len))) return -1; result = ldns_b32_pton(str, strlen(str), data, data_len); data_len = result; if (result < 0) { printf("Error 4 decoding base32 test data (result %d): %s\n", result, str); result = 1; } else { result = 0; if (data_len != expect_data_len) { printf("Bad base32 decoding, wrong result length for string %s:\n", str); printf("Got: "); print_data_ar(data, data_len); printf("\n"); printf("Expected: "); print_data_ar(expect_data, expect_data_len); printf("\n"); result = 2; } else { for (i = 0; i < data_len; i++) { if (data[i] != expect_data[i]) { result = 3; } } if (result != 0) { printf("Bad base32 decoding string %s:\n", str); printf("Got: "); print_data_ar(data, data_len); printf("\n"); printf("Expected: "); print_data_ar(expect_data, expect_data_len); printf("\n"); } } } free(data); return result; } int test_base32_encode_extended_hex(uint8_t *data, size_t data_len, const char *expect_result) { int result; char *text; size_t text_len; text_len = ldns_b32_ntop_calculate_size(data_len) + 10; text = malloc(text_len); result = ldns_b32_ntop_extended_hex(data, data_len, text, text_len); if (result < 0) { printf("Error 5 encoding base32 extended hex test data (result %d):\n", result); print_data_ar(data, data_len); printf("\n"); result = 1; } else { data_len = result; if (strncmp(expect_result, text, text_len) != 0) { printf("Bad base32 encoding: got: "); printf("%s\n", text); printf("Expected: "); printf("%s\n", expect_result); printf("Data:\t"); print_data_ar(data, data_len); printf("\n"); result = 2; } else { result = 0; } } free(text); return result; } int test_base32_decode_extended_hex(const char *str, const uint8_t *expect_data, size_t expect_data_len) { int result; uint8_t *data; size_t data_len; size_t i; data_len = ldns_b32_pton_calculate_size(strlen(str)) + 10; if (!(data = malloc(data_len))) return -1; result = ldns_b32_pton_extended_hex(str, strlen(str), data, data_len); data_len = result; if (result < 0) { printf("Error 6 decoding base32 extended hex test data (result %d): %s\n", result, str); result = 1; } else { result = 0; if (data_len != expect_data_len) { printf("Bad base32 decoding, wrong result length for string %s:\n", str); printf("Got: "); print_data_ar(data, data_len); printf("\n"); printf("Expected: "); print_data_ar(expect_data, expect_data_len); printf("\n"); result = 2; } else { for (i = 0; i < data_len; i++) { if (data[i] != expect_data[i]) { result = 3; } } if (result != 0) { printf("Bad base32 decoding string %s:\n", str); printf("Got: "); print_data_ar(data, data_len); printf("\n"); printf("Expected: "); print_data_ar(expect_data, expect_data_len); printf("\n"); } } } free(data); return result; } int test_sha1(const void *data, const void *expect_result_str) { int result; unsigned char *digest, *d; unsigned int digest_len; uint8_t *expect_result; size_t data_len; data_len = strlen(data); expect_result = malloc(strlen((char *)expect_result_str) / 2); (void) ldns_hexstring_to_data(expect_result, expect_result_str); digest_len = LDNS_SHA1_DIGEST_LENGTH; digest = malloc(digest_len); d = ldns_sha1(data, data_len, digest); if (!d) { printf("Error in digest of test data (digesting failed):\n"); print_data_ar(data, data_len); printf("\n"); result = 1; } else { if (strncmp((char *)expect_result, (char *)digest, digest_len) != 0) { printf("Bad sha1 digest: got: "); print_data_ar(digest, digest_len); printf("Expected: "); printf("%s\n", (char *)expect_result); printf("Data:\t%s\n", (char *)data); result = 2; } else { result = 0; } } free(digest); free(expect_result); return result; } int test_sha256(const void *data, const void *expect_result_str) { int result; unsigned char *digest, *d; unsigned int digest_len; uint8_t *expect_result; size_t data_len; data_len = strlen(data); expect_result = malloc(strlen((char *)expect_result_str) / 2); (void) ldns_hexstring_to_data(expect_result, expect_result_str); digest_len = LDNS_SHA256_DIGEST_LENGTH; digest = malloc(digest_len); d = ldns_sha256(data, data_len, digest); if (!d) { printf("Error in digest of test data (digesting failed):\n"); print_data_ar(data, data_len); printf("\n"); result = 1; } else { if (strncmp((char *)expect_result, (char *)digest, digest_len) != 0) { printf("Bad sha256 digest: got: "); print_data_ar(digest, digest_len); printf("Expected: "); printf("%s\n", (char *)expect_result); printf("Data:\t%s\n", (char *)data); result = 2; } else { result = 0; } } free(digest); free(expect_result); return result; } int main(void) { uint8_t *data; size_t data_len; int result = EXIT_SUCCESS; /* rfc3548 example 1 */ data_len = 6; data = malloc(data_len); data[0] = 0x14; data[1] = 0xfb; data[2] = 0x9c; data[3] = 0x03; data[4] = 0xd9; data[5] = 0x7e; if (test_base64_encode(data, data_len, "FPucA9l+") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("FPucA9l+", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* rfc3548 example 2 */ data_len = 5; data = malloc(data_len); data[0] = 0x14; data[1] = 0xfb; data[2] = 0x9c; data[3] = 0x03; data[4] = 0xd9; if (test_base64_encode(data, data_len, "FPucA9k=") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("FPucA9k=", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* rfc3548 example 3 */ data_len = 4; data = malloc(data_len); data[0] = 0x14; data[1] = 0xfb; data[2] = 0x9c; data[3] = 0x03; if (test_base64_encode(data, data_len, "FPucAw==") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("FPucAw==", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* base32 from http://www.garykessler.net/library/base64.html */ data_len = 5; data = malloc(data_len); data[0] = 0xc9; data[1] = 0x6e; data[2] = 0x96; data[3] = 0x17; data[4] = 0xad; /* if (test_base32_encode(data, data_len, "ZFXJMF5N") != 0) {*/ if (test_base32_encode(data, data_len, "zfxjmf5n") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode("ZFXJMF5N", data, data_len) != 0) {*/ if (test_base32_decode("zfxjmf5n", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); data_len = 3; data = malloc(data_len); data[0] = 0x4d; data[1] = 0x5a; data[2] = 0x90; /* if (test_base32_encode(data, data_len, "JVNJA===") != 0) {*/ if (test_base32_encode(data, data_len, "jvnja===") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode("JVNJA===", data, data_len) != 0) {*/ if (test_base32_decode("jvnja===", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* base32 extended_hex */ data_len = 5; data = malloc(data_len); data[0] = 0xc9; data[1] = 0x6e; data[2] = 0x96; data[3] = 0x17; data[4] = 0xad; /* if (test_base32_encode_extended_hex(data, data_len, "P5N9C5TD") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "p5n9c5td") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("P5N9C5TD", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("p5n9c5td", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); data_len = 3; data = malloc(data_len); data[0] = 0x4d; data[1] = 0x5a; data[2] = 0x90; /* if (test_base32_encode_extended_hex(data, data_len, "9LD90===") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "9ld90===") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("9LD90===", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("9ld90===", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* base32 extended_hex (TODO no source! these need to be checked)*/ /* and an encoding that went wrong once */ data_len = 20; data = malloc(data_len); data[0] = 0x8a; data[1] = 0xb3; data[2] = 0xeb; data[3] = 0x19; data[4] = 0xd3; data[5] = 0x4f; data[6] = 0xc3; data[7] = 0xa2; data[8] = 0x76; data[9] = 0xf5; data[10] = 0x9f; data[11] = 0x3b; data[12] = 0x7d; data[13] = 0xe6; data[14] = 0x6e; data[15] = 0x2f; data[16] = 0x10; data[17] = 0x3b; data[18] = 0x58; data[19] = 0x3a; /* if (test_base32_encode_extended_hex(data, data_len, "HAPUM6EJ9V1Q4TNLJSTNRPJE5S83MM1Q") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "hapum6ej9v1q4tnljstnrpje5s83mm1q") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("HAPUM6EJ9V1Q4TNLJSTNRPJE5S83MM1Q", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("hapum6ej9v1q4tnljstnrpje5s83mm1q", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* tests from josfessons draft */ /* BASE64("") = "" */ /* BASE32("") = "" */ /* BASE32-HEX("") = "" */ data_len = 0; if (test_base64_encode(data, data_len, "") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("", data, data_len) != 0) { result = EXIT_FAILURE; } if (test_base32_encode(data, data_len, "") != 0) { result = EXIT_FAILURE; } if (test_base32_decode("", data, data_len) != 0) { result = EXIT_FAILURE; } if (test_base32_encode_extended_hex(data, data_len, "") != 0) { result = EXIT_FAILURE; } if (test_base32_decode_extended_hex("", data, data_len) != 0) { result = EXIT_FAILURE; } /* BASE64("f") = "Zg==" */ /* BASE32("f") = "MY======" */ /* BASE32-HEX("f") = "CO======" */ data_len = 1; data = malloc(data_len); data[0] = 'f'; if (test_base64_encode(data, data_len, "Zg==") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("Zg==", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode(data, data_len, "MY======") != 0) {*/ if (test_base32_encode(data, data_len, "my======") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode("MY======", data, data_len) != 0) {*/ if (test_base32_decode("my======", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode_extended_hex(data, data_len, "CO======") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "co======") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("CO======", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("co======", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* BASE64("fo") = "Zm8=" */ /* BASE32("fo") = "MZXQ====" */ /* BASE32-HEX("fo") = "CPNG====" */ data_len = 2; data = malloc(data_len); data[0] = 'f'; data[1] = 'o'; if (test_base64_encode(data, data_len, "Zm8=") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("Zm8=", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode(data, data_len, "MZXQ====") != 0) {*/ if (test_base32_encode(data, data_len, "mzxq====") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode("MZXQ====", data, data_len) != 0) {*/ if (test_base32_decode("mzxq====", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode_extended_hex(data, data_len, "CPNG====") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "cpng====") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("CPNG====", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("cpng====", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* BASE64("foo") = "Zm9v" */ /* BASE32("foo") = "MZXW6===" */ /* BASE32-HEX("foo") = "CPNMU===" */ data_len = 3; data = malloc(data_len); data[0] = 'f'; data[1] = 'o'; data[2] = 'o'; if (test_base64_encode(data, data_len, "Zm9v") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("Zm9v", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode(data, data_len, "MZXW6===") != 0) {*/ if (test_base32_encode(data, data_len, "mzxw6===") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode("MZXW6===", data, data_len) != 0) {*/ if (test_base32_decode("mzxw6===", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode_extended_hex(data, data_len, "CPNMU===") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "cpnmu===") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("CPNMU===", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("cpnmu===", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* BASE64("foob") = "Zm9vYg==" */ /* BASE32("foob") = "MZXW6YQ=" */ /* BASE32-HEX("foob") = "CPNMUOG=" */ data_len = 4; data = malloc(data_len); data[0] = 'f'; data[1] = 'o'; data[2] = 'o'; data[3] = 'b'; if (test_base64_encode(data, data_len, "Zm9vYg==") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("Zm9vYg==", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode(data, data_len, "MZXW6YQ=") != 0) {*/ if (test_base32_encode(data, data_len, "mzxw6yq=") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode("MZXW6YQ=", data, data_len) != 0) {*/ if (test_base32_decode("mzxw6yq=", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode_extended_hex(data, data_len, "CPNMUOG=") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "cpnmuog=") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("CPNMUOG=", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("cpnmuog=", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* BASE64("fooba") = "Zm9vYmE=" */ /* BASE32("fooba") = "MZXW6YTB" */ /* BASE32-HEX("fooba") = "CPNMUOJ1" */ data_len = 5; data = malloc(data_len); data[0] = 'f'; data[1] = 'o'; data[2] = 'o'; data[3] = 'b'; data[4] = 'a'; if (test_base64_encode(data, data_len, "Zm9vYmE=") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("Zm9vYmE=", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode(data, data_len, "MZXW6YTB") != 0) {*/ if (test_base32_encode(data, data_len, "mzxw6ytb") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode("MZXW6YTB", data, data_len) != 0) {*/ if (test_base32_decode("mzxw6ytb", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode_extended_hex(data, data_len, "CPNMUOJ1") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "cpnmuoj1") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("CPNMUOJ1", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("cpnmuoj1", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* BASE64("foobar") = "Zm9vYmFy" */ /* BASE32("foobar") = "MZXW6YTBOI======" */ /* BASE32-HEX("foobar") = "CPNMUOJ1E8======" */ data_len = 6; data = malloc(data_len); data[0] = 'f'; data[1] = 'o'; data[2] = 'o'; data[3] = 'b'; data[4] = 'a'; data[5] = 'r'; if (test_base64_encode(data, data_len, "Zm9vYmFy") != 0) { result = EXIT_FAILURE; } if (test_base64_decode("Zm9vYmFy", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode(data, data_len, "MZXW6YTBOI======") != 0) {*/ if (test_base32_encode(data, data_len, "mzxw6ytboi======") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode("MZXW6YTBOI======", data, data_len) != 0) {*/ if (test_base32_decode("mzxw6ytboi======", data, data_len) != 0) { result = EXIT_FAILURE; } /* if (test_base32_encode_extended_hex(data, data_len, "CPNMUOJ1E8======") != 0) {*/ if (test_base32_encode_extended_hex(data, data_len, "cpnmuoj1e8======") != 0) { result = EXIT_FAILURE; } /* if (test_base32_decode_extended_hex("CPNMUOJ1E8======", data, data_len) != 0) {*/ if (test_base32_decode_extended_hex("cpnmuoj1e8======", data, data_len) != 0) { result = EXIT_FAILURE; } free(data); /* BASE16("") = "" */ /* BASE16("f") = "gg" */ /* BASE16("fo") = "gggp" */ /* BASE16("foo") = "gggpgp" */ /* BASE16("foob") = "gggpgpgc" */ /* BASE16("fooba") = "gggpgpgcgb" */ /* BASE16("foobar") = "gggpgpgcgbhc" */ /* some random stuff to see if (decode(encode(data)) works */ data_len = 20; data = malloc(data_len); data[0] = 0x21; data[1] = 0x99; data[2] = 0x1f; data[3] = 0xc0; data[4] = 0xdf; data[5] = 0x02; data[6] = 0xd1; data[7] = 0xd5; data[8] = 0xb6; data[9] = 0xd0; data[10] = 0xf8; data[11] = 0xf4; data[12] = 0xff; data[13] = 0xfe; data[14] = 0x38; data[15] = 0xff; data[16] = 0x1e; data[17] = 0xae; data[18] = 0xc8; data[19] = 0x3a; if (test_base32_encode_extended_hex(data, data_len, "46chvg6v0b8tbdmgv3qfvvhovsfati1q") != 0) { result = EXIT_FAILURE; } if (test_base32_decode_extended_hex("46chvg6v0b8tbdmgv3qfvvhovsfati1q", data, data_len) != 0) { result = EXIT_FAILURE; } if (test_sha1("abc", "A9993E364706816ABA3E25717850C26C9CD0D89D") != 0) { result = EXIT_FAILURE; } if (test_sha1("", "da39a3ee5e6b4b0d3255bfef95601890afd80709") != 0) { result = EXIT_FAILURE; } if (test_sha1("Test vector from febooti.com", "a7631795f6d59cd6d14ebd0058a6394a4b93d868") != 0) { result = EXIT_FAILURE; } if (test_sha1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "84983E441C3BD26EBAAE4AA1F95129E5E54670F1") != 0) { result = EXIT_FAILURE; } if (test_sha256("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") != 0) { result = EXIT_FAILURE; } if (test_sha256("Test vector from febooti.com", "077b18fe29036ada4890bdec192186e10678597a67880290521df70df4bac9ab") != 0) { result = EXIT_FAILURE; } free(data); if (test_duration()) result = EXIT_FAILURE; printf("unit test is %s\n", result==EXIT_SUCCESS?"ok":"fail"); exit(result); }