print "void test_%d() {" % counter.next() print " uint8_t secret[%d] = {" % len(secret), print ",".join([str(ord(x)) for x in secret]) + "};" print " uint32_t m[5] = { 0 };" print " const uint32_t expected_m[5] = {" + ", ".join(m_out) + "};" print "" print " poly1305_load_m(m, secret, %d);" % len(secret) print " assert(memcmp(m, expected_m, sizeof(m)) == 0);" print "}" print "" print "#ifdef NDEBUG" print "#undef NDEBUG" print "#endif" print "#include <assert.h>" print "#include <string.h>" print "#include <stdint.h>" print "#include <stdio.h>" print print "void poly1305_load_m(uint32_t r[5], const uint8_t data[], size_t len);" for len_secret in range(16+1): make_test(b"\xaa" * len_secret) make_test(b"\xcc" * 16) make_test(b"\xff" * 16) make_test(b"12\x00kjskskjp39027") make_test(b"\x00") make_test(b"\x00" * 16) make_main()
print "" print " product(t, scratchpad, a, b, %d);" % len(a) print " assert(memcmp(t, expected_t, 8*%d) == 0);" % result_len #print ' printf("t[{0}]=0x%016lX\\n", t[{0}]);'.format(result_len) print " assert(t[%d] == 0xAAAAAAAAAAAAAAAAULL);" % result_len print "}" print "" print "#include <assert.h>" print "#include <string.h>" print "#include <stdint.h>" print "#include <stdio.h>" print "" print "void product(uint64_t *t, uint64_t *product, const uint64_t *a, const uint64_t *b, size_t words);" make_test(0, 0) make_test(1, 0) make_test(27, 98) make_test(27832782374324, 78237487324872348723847234) make_test( 0x786BF, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ) make_test( 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ) make_main()