X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fcrypto%2Fsha256%2Ftest%2Frun-test-vectors.c;fp=ccan%2Fcrypto%2Fsha256%2Ftest%2Frun-test-vectors.c;h=a64c35e468698632cf897e225834e02f2d0d5aef;hb=0d73f8ebb66d2613ecc0b87c6e608de59be110f6;hp=0000000000000000000000000000000000000000;hpb=7011546929cfc537028eb4fd091104b383b5c86f;p=ccan diff --git a/ccan/crypto/sha256/test/run-test-vectors.c b/ccan/crypto/sha256/test/run-test-vectors.c new file mode 100644 index 00000000..a64c35e4 --- /dev/null +++ b/ccan/crypto/sha256/test/run-test-vectors.c @@ -0,0 +1,83 @@ +#include +/* Include the C files directly. */ +#include +#include + +/* Test vectors. */ +struct test { + const char *test; + size_t repetitions; + beint32_t result[8]; +}; + +static struct test tests[] = { + { "", 1, + { CPU_TO_BE32(0xe3b0c442), CPU_TO_BE32(0x98fc1c14), + CPU_TO_BE32(0x9afbf4c8), CPU_TO_BE32(0x996fb924), + CPU_TO_BE32(0x27ae41e4), CPU_TO_BE32(0x649b934c), + CPU_TO_BE32(0xa495991b), CPU_TO_BE32(0x7852b855) } }, + { "abc", 1, + { CPU_TO_BE32(0xba7816bf), CPU_TO_BE32(0x8f01cfea), + CPU_TO_BE32(0x414140de), CPU_TO_BE32(0x5dae2223), + CPU_TO_BE32(0xb00361a3), CPU_TO_BE32(0x96177a9c), + CPU_TO_BE32(0xb410ff61), CPU_TO_BE32(0xf20015ad) } }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 1, + { CPU_TO_BE32(0x248d6a61), CPU_TO_BE32(0xd20638b8), + CPU_TO_BE32(0xe5c02693), CPU_TO_BE32(0x0c3e6039), + CPU_TO_BE32(0xa33ce459), CPU_TO_BE32(0x64ff2167), + CPU_TO_BE32(0xf6ecedd4), CPU_TO_BE32(0x19db06c1) } }, + { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", 1, + { CPU_TO_BE32(0xcf5b16a7), CPU_TO_BE32(0x78af8380), + CPU_TO_BE32(0x036ce59e), CPU_TO_BE32(0x7b049237), + CPU_TO_BE32(0x0b249b11), CPU_TO_BE32(0xe8f07a51), + CPU_TO_BE32(0xafac4503), CPU_TO_BE32(0x7afee9d1) } }, + { "a", 1000000, + { CPU_TO_BE32(0xcdc76e5c), CPU_TO_BE32(0x9914fb92), + CPU_TO_BE32(0x81a1c7e2), CPU_TO_BE32(0x84d73e67), + CPU_TO_BE32(0xf1809a48), CPU_TO_BE32(0xa497200e), + CPU_TO_BE32(0x046d39cc), CPU_TO_BE32(0xc7112cd0) } } +#if 0 /* Good test, but takes ages! */ + , { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno", 16777216, + { CPU_TO_BE32(0x50e72a0e), CPU_TO_BE32(0x26442fe2), + CPU_TO_BE32(0x552dc393), CPU_TO_BE32(0x8ac58658), + CPU_TO_BE32(0x228c0cbf), CPU_TO_BE32(0xb1d2ca87), + CPU_TO_BE32(0x2ae43526), CPU_TO_BE32(0x6fcd055e) } } +#endif +}; + +static bool do_test(const struct test *t, bool single) +{ + struct sha256 h; + + if (single) { + if (t->repetitions != 1) + return true; + sha256(&h, t->test, strlen(t->test)); + } else { + struct sha256_ctx ctx = SHA256_INIT; + size_t i; + + for (i = 0; i < t->repetitions; i++) + sha256_update(&ctx, t->test, strlen(t->test)); + sha256_done(&ctx, &h); + } + + return memcmp(&h.u, t->result, sizeof(t->result)) == 0; +} + +int main(void) +{ + size_t i; + + /* This is how many tests you plan to run */ + plan_tests(sizeof(tests) / sizeof(struct test) * 2); + + for (i = 0; i < sizeof(tests) / sizeof(struct test); i++) + ok1(do_test(&tests[i], false)); + + for (i = 0; i < sizeof(tests) / sizeof(struct test); i++) + ok1(do_test(&tests[i], true)); + + /* This exits depending on whether all tests passed */ + return exit_status(); +}