10957b409SSimon J. Gerraty /*
20957b409SSimon J. Gerraty * Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
30957b409SSimon J. Gerraty *
40957b409SSimon J. Gerraty * Permission is hereby granted, free of charge, to any person obtaining
50957b409SSimon J. Gerraty * a copy of this software and associated documentation files (the
60957b409SSimon J. Gerraty * "Software"), to deal in the Software without restriction, including
70957b409SSimon J. Gerraty * without limitation the rights to use, copy, modify, merge, publish,
80957b409SSimon J. Gerraty * distribute, sublicense, and/or sell copies of the Software, and to
90957b409SSimon J. Gerraty * permit persons to whom the Software is furnished to do so, subject to
100957b409SSimon J. Gerraty * the following conditions:
110957b409SSimon J. Gerraty *
120957b409SSimon J. Gerraty * The above copyright notice and this permission notice shall be
130957b409SSimon J. Gerraty * included in all copies or substantial portions of the Software.
140957b409SSimon J. Gerraty *
150957b409SSimon J. Gerraty * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
160957b409SSimon J. Gerraty * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
170957b409SSimon J. Gerraty * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
180957b409SSimon J. Gerraty * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
190957b409SSimon J. Gerraty * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
200957b409SSimon J. Gerraty * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
210957b409SSimon J. Gerraty * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
220957b409SSimon J. Gerraty * SOFTWARE.
230957b409SSimon J. Gerraty */
240957b409SSimon J. Gerraty
250957b409SSimon J. Gerraty #include <stdio.h>
260957b409SSimon J. Gerraty #include <stdlib.h>
270957b409SSimon J. Gerraty #include <string.h>
280957b409SSimon J. Gerraty #include "bearssl.h"
290957b409SSimon J. Gerraty #include "inner.h"
300957b409SSimon J. Gerraty
310957b409SSimon J. Gerraty /*
320957b409SSimon J. Gerraty * Decode an hexadecimal string. Returned value is the number of decoded
330957b409SSimon J. Gerraty * bytes.
340957b409SSimon J. Gerraty */
350957b409SSimon J. Gerraty static size_t
hextobin(unsigned char * dst,const char * src)360957b409SSimon J. Gerraty hextobin(unsigned char *dst, const char *src)
370957b409SSimon J. Gerraty {
380957b409SSimon J. Gerraty size_t num;
390957b409SSimon J. Gerraty unsigned acc;
400957b409SSimon J. Gerraty int z;
410957b409SSimon J. Gerraty
420957b409SSimon J. Gerraty num = 0;
430957b409SSimon J. Gerraty z = 0;
440957b409SSimon J. Gerraty acc = 0;
450957b409SSimon J. Gerraty while (*src != 0) {
460957b409SSimon J. Gerraty int c = *src ++;
470957b409SSimon J. Gerraty if (c >= '0' && c <= '9') {
480957b409SSimon J. Gerraty c -= '0';
490957b409SSimon J. Gerraty } else if (c >= 'A' && c <= 'F') {
500957b409SSimon J. Gerraty c -= ('A' - 10);
510957b409SSimon J. Gerraty } else if (c >= 'a' && c <= 'f') {
520957b409SSimon J. Gerraty c -= ('a' - 10);
530957b409SSimon J. Gerraty } else {
540957b409SSimon J. Gerraty continue;
550957b409SSimon J. Gerraty }
560957b409SSimon J. Gerraty if (z) {
570957b409SSimon J. Gerraty *dst ++ = (acc << 4) + c;
580957b409SSimon J. Gerraty num ++;
590957b409SSimon J. Gerraty } else {
600957b409SSimon J. Gerraty acc = c;
610957b409SSimon J. Gerraty }
620957b409SSimon J. Gerraty z = !z;
630957b409SSimon J. Gerraty }
640957b409SSimon J. Gerraty return num;
650957b409SSimon J. Gerraty }
660957b409SSimon J. Gerraty
670957b409SSimon J. Gerraty static void
check_equals(const char * banner,const void * v1,const void * v2,size_t len)680957b409SSimon J. Gerraty check_equals(const char *banner, const void *v1, const void *v2, size_t len)
690957b409SSimon J. Gerraty {
700957b409SSimon J. Gerraty size_t u;
710957b409SSimon J. Gerraty const unsigned char *b;
720957b409SSimon J. Gerraty
730957b409SSimon J. Gerraty if (memcmp(v1, v2, len) == 0) {
740957b409SSimon J. Gerraty return;
750957b409SSimon J. Gerraty }
760957b409SSimon J. Gerraty fprintf(stderr, "\n%s failed\n", banner);
770957b409SSimon J. Gerraty fprintf(stderr, "v1: ");
780957b409SSimon J. Gerraty for (u = 0, b = v1; u < len; u ++) {
790957b409SSimon J. Gerraty fprintf(stderr, "%02X", b[u]);
800957b409SSimon J. Gerraty }
810957b409SSimon J. Gerraty fprintf(stderr, "\nv2: ");
820957b409SSimon J. Gerraty for (u = 0, b = v2; u < len; u ++) {
830957b409SSimon J. Gerraty fprintf(stderr, "%02X", b[u]);
840957b409SSimon J. Gerraty }
850957b409SSimon J. Gerraty fprintf(stderr, "\n");
860957b409SSimon J. Gerraty exit(EXIT_FAILURE);
870957b409SSimon J. Gerraty }
880957b409SSimon J. Gerraty
890957b409SSimon J. Gerraty #define HASH_SIZE(cname) br_ ## cname ## _SIZE
900957b409SSimon J. Gerraty
910957b409SSimon J. Gerraty #define TEST_HASH(Name, cname) \
920957b409SSimon J. Gerraty static void \
930957b409SSimon J. Gerraty test_ ## cname ## _internal(char *data, char *refres) \
940957b409SSimon J. Gerraty { \
950957b409SSimon J. Gerraty br_ ## cname ## _context mc; \
960957b409SSimon J. Gerraty unsigned char res[HASH_SIZE(cname)], ref[HASH_SIZE(cname)]; \
970957b409SSimon J. Gerraty size_t u, n; \
980957b409SSimon J. Gerraty \
990957b409SSimon J. Gerraty hextobin(ref, refres); \
1000957b409SSimon J. Gerraty n = strlen(data); \
1010957b409SSimon J. Gerraty br_ ## cname ## _init(&mc); \
1020957b409SSimon J. Gerraty br_ ## cname ## _update(&mc, data, n); \
1030957b409SSimon J. Gerraty br_ ## cname ## _out(&mc, res); \
1040957b409SSimon J. Gerraty check_equals("KAT " #Name " 1", res, ref, HASH_SIZE(cname)); \
1050957b409SSimon J. Gerraty br_ ## cname ## _init(&mc); \
1060957b409SSimon J. Gerraty for (u = 0; u < n; u ++) { \
1070957b409SSimon J. Gerraty br_ ## cname ## _update(&mc, data + u, 1); \
1080957b409SSimon J. Gerraty } \
1090957b409SSimon J. Gerraty br_ ## cname ## _out(&mc, res); \
1100957b409SSimon J. Gerraty check_equals("KAT " #Name " 2", res, ref, HASH_SIZE(cname)); \
1110957b409SSimon J. Gerraty for (u = 0; u < n; u ++) { \
1120957b409SSimon J. Gerraty br_ ## cname ## _context mc2; \
1130957b409SSimon J. Gerraty br_ ## cname ## _init(&mc); \
1140957b409SSimon J. Gerraty br_ ## cname ## _update(&mc, data, u); \
1150957b409SSimon J. Gerraty mc2 = mc; \
1160957b409SSimon J. Gerraty br_ ## cname ## _update(&mc, data + u, n - u); \
1170957b409SSimon J. Gerraty br_ ## cname ## _out(&mc, res); \
1180957b409SSimon J. Gerraty check_equals("KAT " #Name " 3", res, ref, HASH_SIZE(cname)); \
1190957b409SSimon J. Gerraty br_ ## cname ## _update(&mc2, data + u, n - u); \
1200957b409SSimon J. Gerraty br_ ## cname ## _out(&mc2, res); \
1210957b409SSimon J. Gerraty check_equals("KAT " #Name " 4", res, ref, HASH_SIZE(cname)); \
1220957b409SSimon J. Gerraty } \
1230957b409SSimon J. Gerraty memset(&mc, 0, sizeof mc); \
1240957b409SSimon J. Gerraty memset(res, 0, sizeof res); \
1250957b409SSimon J. Gerraty br_ ## cname ## _vtable.init(&mc.vtable); \
1260957b409SSimon J. Gerraty mc.vtable->update(&mc.vtable, data, n); \
1270957b409SSimon J. Gerraty mc.vtable->out(&mc.vtable, res); \
1280957b409SSimon J. Gerraty check_equals("KAT " #Name " 5", res, ref, HASH_SIZE(cname)); \
1290957b409SSimon J. Gerraty memset(res, 0, sizeof res); \
1300957b409SSimon J. Gerraty mc.vtable->init(&mc.vtable); \
1310957b409SSimon J. Gerraty mc.vtable->update(&mc.vtable, data, n); \
1320957b409SSimon J. Gerraty mc.vtable->out(&mc.vtable, res); \
1330957b409SSimon J. Gerraty check_equals("KAT " #Name " 6", res, ref, HASH_SIZE(cname)); \
1340957b409SSimon J. Gerraty }
1350957b409SSimon J. Gerraty
1360957b409SSimon J. Gerraty #define KAT_MILLION_A(Name, cname, refres) do { \
1370957b409SSimon J. Gerraty br_ ## cname ## _context mc; \
1380957b409SSimon J. Gerraty unsigned char buf[1000]; \
1390957b409SSimon J. Gerraty unsigned char res[HASH_SIZE(cname)], ref[HASH_SIZE(cname)]; \
1400957b409SSimon J. Gerraty int i; \
1410957b409SSimon J. Gerraty \
1420957b409SSimon J. Gerraty hextobin(ref, refres); \
1430957b409SSimon J. Gerraty memset(buf, 'a', sizeof buf); \
1440957b409SSimon J. Gerraty br_ ## cname ## _init(&mc); \
1450957b409SSimon J. Gerraty for (i = 0; i < 1000; i ++) { \
1460957b409SSimon J. Gerraty br_ ## cname ## _update(&mc, buf, sizeof buf); \
1470957b409SSimon J. Gerraty } \
1480957b409SSimon J. Gerraty br_ ## cname ## _out(&mc, res); \
1490957b409SSimon J. Gerraty check_equals("KAT " #Name " 5", res, ref, HASH_SIZE(cname)); \
1500957b409SSimon J. Gerraty } while (0)
1510957b409SSimon J. Gerraty
TEST_HASH(MD5,md5)1520957b409SSimon J. Gerraty TEST_HASH(MD5, md5)
1530957b409SSimon J. Gerraty TEST_HASH(SHA-1, sha1)
1540957b409SSimon J. Gerraty TEST_HASH(SHA-224, sha224)
1550957b409SSimon J. Gerraty TEST_HASH(SHA-256, sha256)
1560957b409SSimon J. Gerraty TEST_HASH(SHA-384, sha384)
1570957b409SSimon J. Gerraty TEST_HASH(SHA-512, sha512)
1580957b409SSimon J. Gerraty
1590957b409SSimon J. Gerraty static void
1600957b409SSimon J. Gerraty test_MD5(void)
1610957b409SSimon J. Gerraty {
1620957b409SSimon J. Gerraty printf("Test MD5: ");
1630957b409SSimon J. Gerraty fflush(stdout);
1640957b409SSimon J. Gerraty test_md5_internal("", "d41d8cd98f00b204e9800998ecf8427e");
1650957b409SSimon J. Gerraty test_md5_internal("a", "0cc175b9c0f1b6a831c399e269772661");
1660957b409SSimon J. Gerraty test_md5_internal("abc", "900150983cd24fb0d6963f7d28e17f72");
1670957b409SSimon J. Gerraty test_md5_internal("message digest", "f96b697d7cb7938d525a2f31aaf161d0");
1680957b409SSimon J. Gerraty test_md5_internal("abcdefghijklmnopqrstuvwxyz",
1690957b409SSimon J. Gerraty "c3fcd3d76192e4007dfb496cca67e13b");
1700957b409SSimon J. Gerraty test_md5_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu"
1710957b409SSimon J. Gerraty "vwxyz0123456789", "d174ab98d277d9f5a5611c2c9f419d9f");
1720957b409SSimon J. Gerraty test_md5_internal("1234567890123456789012345678901234567890123456789"
1730957b409SSimon J. Gerraty "0123456789012345678901234567890",
1740957b409SSimon J. Gerraty "57edf4a22be3c955ac49da2e2107b67a");
1750957b409SSimon J. Gerraty KAT_MILLION_A(MD5, md5,
1760957b409SSimon J. Gerraty "7707d6ae4e027c70eea2a935c2296f21");
1770957b409SSimon J. Gerraty printf("done.\n");
1780957b409SSimon J. Gerraty fflush(stdout);
1790957b409SSimon J. Gerraty }
1800957b409SSimon J. Gerraty
1810957b409SSimon J. Gerraty static void
test_SHA1(void)1820957b409SSimon J. Gerraty test_SHA1(void)
1830957b409SSimon J. Gerraty {
1840957b409SSimon J. Gerraty printf("Test SHA-1: ");
1850957b409SSimon J. Gerraty fflush(stdout);
1860957b409SSimon J. Gerraty test_sha1_internal("abc", "a9993e364706816aba3e25717850c26c9cd0d89d");
1870957b409SSimon J. Gerraty test_sha1_internal("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlm"
1880957b409SSimon J. Gerraty "nomnopnopq", "84983e441c3bd26ebaae4aa1f95129e5e54670f1");
1890957b409SSimon J. Gerraty
1900957b409SSimon J. Gerraty KAT_MILLION_A(SHA-1, sha1,
1910957b409SSimon J. Gerraty "34aa973cd4c4daa4f61eeb2bdbad27316534016f");
1920957b409SSimon J. Gerraty printf("done.\n");
1930957b409SSimon J. Gerraty fflush(stdout);
1940957b409SSimon J. Gerraty }
1950957b409SSimon J. Gerraty
1960957b409SSimon J. Gerraty static void
test_SHA224(void)1970957b409SSimon J. Gerraty test_SHA224(void)
1980957b409SSimon J. Gerraty {
1990957b409SSimon J. Gerraty printf("Test SHA-224: ");
2000957b409SSimon J. Gerraty fflush(stdout);
2010957b409SSimon J. Gerraty test_sha224_internal("abc",
2020957b409SSimon J. Gerraty "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7");
2030957b409SSimon J. Gerraty test_sha224_internal("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlm"
2040957b409SSimon J. Gerraty "nomnopnopq",
2050957b409SSimon J. Gerraty "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525");
2060957b409SSimon J. Gerraty
2070957b409SSimon J. Gerraty KAT_MILLION_A(SHA-224, sha224,
2080957b409SSimon J. Gerraty "20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67");
2090957b409SSimon J. Gerraty printf("done.\n");
2100957b409SSimon J. Gerraty fflush(stdout);
2110957b409SSimon J. Gerraty }
2120957b409SSimon J. Gerraty
2130957b409SSimon J. Gerraty static void
test_SHA256(void)2140957b409SSimon J. Gerraty test_SHA256(void)
2150957b409SSimon J. Gerraty {
2160957b409SSimon J. Gerraty printf("Test SHA-256: ");
2170957b409SSimon J. Gerraty fflush(stdout);
2180957b409SSimon J. Gerraty test_sha256_internal("abc",
2190957b409SSimon J. Gerraty "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad");
2200957b409SSimon J. Gerraty test_sha256_internal("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlm"
2210957b409SSimon J. Gerraty "nomnopnopq",
2220957b409SSimon J. Gerraty "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
2230957b409SSimon J. Gerraty
2240957b409SSimon J. Gerraty KAT_MILLION_A(SHA-256, sha256,
2250957b409SSimon J. Gerraty "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0");
2260957b409SSimon J. Gerraty printf("done.\n");
2270957b409SSimon J. Gerraty fflush(stdout);
2280957b409SSimon J. Gerraty }
2290957b409SSimon J. Gerraty
2300957b409SSimon J. Gerraty static void
test_SHA384(void)2310957b409SSimon J. Gerraty test_SHA384(void)
2320957b409SSimon J. Gerraty {
2330957b409SSimon J. Gerraty printf("Test SHA-384: ");
2340957b409SSimon J. Gerraty fflush(stdout);
2350957b409SSimon J. Gerraty test_sha384_internal("abc",
2360957b409SSimon J. Gerraty "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded163"
2370957b409SSimon J. Gerraty "1a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7");
2380957b409SSimon J. Gerraty test_sha384_internal(
2390957b409SSimon J. Gerraty "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
2400957b409SSimon J. Gerraty "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
2410957b409SSimon J. Gerraty "09330c33f71147e83d192fc782cd1b4753111b173b3b05d2"
2420957b409SSimon J. Gerraty "2fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039");
2430957b409SSimon J. Gerraty
2440957b409SSimon J. Gerraty KAT_MILLION_A(SHA-384, sha384,
2450957b409SSimon J. Gerraty "9d0e1809716474cb086e834e310a4a1ced149e9c00f24852"
2460957b409SSimon J. Gerraty "7972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985");
2470957b409SSimon J. Gerraty printf("done.\n");
2480957b409SSimon J. Gerraty fflush(stdout);
2490957b409SSimon J. Gerraty }
2500957b409SSimon J. Gerraty
2510957b409SSimon J. Gerraty static void
test_SHA512(void)2520957b409SSimon J. Gerraty test_SHA512(void)
2530957b409SSimon J. Gerraty {
2540957b409SSimon J. Gerraty printf("Test SHA-512: ");
2550957b409SSimon J. Gerraty fflush(stdout);
2560957b409SSimon J. Gerraty test_sha512_internal("abc",
2570957b409SSimon J. Gerraty "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"
2580957b409SSimon J. Gerraty "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f");
2590957b409SSimon J. Gerraty test_sha512_internal(
2600957b409SSimon J. Gerraty "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
2610957b409SSimon J. Gerraty "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
2620957b409SSimon J. Gerraty "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"
2630957b409SSimon J. Gerraty "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909");
2640957b409SSimon J. Gerraty
2650957b409SSimon J. Gerraty KAT_MILLION_A(SHA-512, sha512,
2660957b409SSimon J. Gerraty "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb"
2670957b409SSimon J. Gerraty "de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b");
2680957b409SSimon J. Gerraty printf("done.\n");
2690957b409SSimon J. Gerraty fflush(stdout);
2700957b409SSimon J. Gerraty }
2710957b409SSimon J. Gerraty
2720957b409SSimon J. Gerraty static void
test_MD5_SHA1(void)2730957b409SSimon J. Gerraty test_MD5_SHA1(void)
2740957b409SSimon J. Gerraty {
2750957b409SSimon J. Gerraty unsigned char buf[500], out[36], outM[16], outS[20];
2760957b409SSimon J. Gerraty unsigned char seed[1];
2770957b409SSimon J. Gerraty br_hmac_drbg_context rc;
2780957b409SSimon J. Gerraty br_md5_context mc;
2790957b409SSimon J. Gerraty br_sha1_context sc;
2800957b409SSimon J. Gerraty br_md5sha1_context cc;
2810957b409SSimon J. Gerraty size_t u;
2820957b409SSimon J. Gerraty
2830957b409SSimon J. Gerraty printf("Test MD5+SHA-1: ");
2840957b409SSimon J. Gerraty fflush(stdout);
2850957b409SSimon J. Gerraty
2860957b409SSimon J. Gerraty seed[0] = 0;
2870957b409SSimon J. Gerraty br_hmac_drbg_init(&rc, &br_sha256_vtable, seed, sizeof seed);
2880957b409SSimon J. Gerraty for (u = 0; u < sizeof buf; u ++) {
2890957b409SSimon J. Gerraty size_t v;
2900957b409SSimon J. Gerraty
2910957b409SSimon J. Gerraty br_hmac_drbg_generate(&rc, buf, u);
2920957b409SSimon J. Gerraty br_md5_init(&mc);
2930957b409SSimon J. Gerraty br_md5_update(&mc, buf, u);
2940957b409SSimon J. Gerraty br_md5_out(&mc, outM);
2950957b409SSimon J. Gerraty br_sha1_init(&sc);
2960957b409SSimon J. Gerraty br_sha1_update(&sc, buf, u);
2970957b409SSimon J. Gerraty br_sha1_out(&sc, outS);
2980957b409SSimon J. Gerraty br_md5sha1_init(&cc);
2990957b409SSimon J. Gerraty br_md5sha1_update(&cc, buf, u);
3000957b409SSimon J. Gerraty br_md5sha1_out(&cc, out);
3010957b409SSimon J. Gerraty check_equals("MD5+SHA-1 [1]", out, outM, 16);
3020957b409SSimon J. Gerraty check_equals("MD5+SHA-1 [2]", out + 16, outS, 20);
3030957b409SSimon J. Gerraty br_md5sha1_init(&cc);
3040957b409SSimon J. Gerraty for (v = 0; v < u; v ++) {
3050957b409SSimon J. Gerraty br_md5sha1_update(&cc, buf + v, 1);
3060957b409SSimon J. Gerraty }
3070957b409SSimon J. Gerraty br_md5sha1_out(&cc, out);
3080957b409SSimon J. Gerraty check_equals("MD5+SHA-1 [3]", out, outM, 16);
3090957b409SSimon J. Gerraty check_equals("MD5+SHA-1 [4]", out + 16, outS, 20);
3100957b409SSimon J. Gerraty }
3110957b409SSimon J. Gerraty
3120957b409SSimon J. Gerraty printf("done.\n");
3130957b409SSimon J. Gerraty fflush(stdout);
3140957b409SSimon J. Gerraty }
3150957b409SSimon J. Gerraty
3160957b409SSimon J. Gerraty /*
3170957b409SSimon J. Gerraty * Compute a hash function, on some data, by ID. Returned value is
3180957b409SSimon J. Gerraty * hash output length.
3190957b409SSimon J. Gerraty */
3200957b409SSimon J. Gerraty static size_t
do_hash(int id,const void * data,size_t len,void * out)3210957b409SSimon J. Gerraty do_hash(int id, const void *data, size_t len, void *out)
3220957b409SSimon J. Gerraty {
3230957b409SSimon J. Gerraty br_md5_context cmd5;
3240957b409SSimon J. Gerraty br_sha1_context csha1;
3250957b409SSimon J. Gerraty br_sha224_context csha224;
3260957b409SSimon J. Gerraty br_sha256_context csha256;
3270957b409SSimon J. Gerraty br_sha384_context csha384;
3280957b409SSimon J. Gerraty br_sha512_context csha512;
3290957b409SSimon J. Gerraty
3300957b409SSimon J. Gerraty switch (id) {
3310957b409SSimon J. Gerraty case br_md5_ID:
3320957b409SSimon J. Gerraty br_md5_init(&cmd5);
3330957b409SSimon J. Gerraty br_md5_update(&cmd5, data, len);
3340957b409SSimon J. Gerraty br_md5_out(&cmd5, out);
3350957b409SSimon J. Gerraty return 16;
3360957b409SSimon J. Gerraty case br_sha1_ID:
3370957b409SSimon J. Gerraty br_sha1_init(&csha1);
3380957b409SSimon J. Gerraty br_sha1_update(&csha1, data, len);
3390957b409SSimon J. Gerraty br_sha1_out(&csha1, out);
3400957b409SSimon J. Gerraty return 20;
3410957b409SSimon J. Gerraty case br_sha224_ID:
3420957b409SSimon J. Gerraty br_sha224_init(&csha224);
3430957b409SSimon J. Gerraty br_sha224_update(&csha224, data, len);
3440957b409SSimon J. Gerraty br_sha224_out(&csha224, out);
3450957b409SSimon J. Gerraty return 28;
3460957b409SSimon J. Gerraty case br_sha256_ID:
3470957b409SSimon J. Gerraty br_sha256_init(&csha256);
3480957b409SSimon J. Gerraty br_sha256_update(&csha256, data, len);
3490957b409SSimon J. Gerraty br_sha256_out(&csha256, out);
3500957b409SSimon J. Gerraty return 32;
3510957b409SSimon J. Gerraty case br_sha384_ID:
3520957b409SSimon J. Gerraty br_sha384_init(&csha384);
3530957b409SSimon J. Gerraty br_sha384_update(&csha384, data, len);
3540957b409SSimon J. Gerraty br_sha384_out(&csha384, out);
3550957b409SSimon J. Gerraty return 48;
3560957b409SSimon J. Gerraty case br_sha512_ID:
3570957b409SSimon J. Gerraty br_sha512_init(&csha512);
3580957b409SSimon J. Gerraty br_sha512_update(&csha512, data, len);
3590957b409SSimon J. Gerraty br_sha512_out(&csha512, out);
3600957b409SSimon J. Gerraty return 64;
3610957b409SSimon J. Gerraty default:
3620957b409SSimon J. Gerraty fprintf(stderr, "Uknown hash function: %d\n", id);
3630957b409SSimon J. Gerraty exit(EXIT_FAILURE);
3640957b409SSimon J. Gerraty return 0;
3650957b409SSimon J. Gerraty }
3660957b409SSimon J. Gerraty }
3670957b409SSimon J. Gerraty
3680957b409SSimon J. Gerraty /*
3690957b409SSimon J. Gerraty * Tests for a multihash. Returned value should be 258 multiplied by the
3700957b409SSimon J. Gerraty * number of hash functions implemented by the context.
3710957b409SSimon J. Gerraty */
3720957b409SSimon J. Gerraty static int
test_multihash_inner(br_multihash_context * mc)3730957b409SSimon J. Gerraty test_multihash_inner(br_multihash_context *mc)
3740957b409SSimon J. Gerraty {
3750957b409SSimon J. Gerraty /*
3760957b409SSimon J. Gerraty * Try hashing messages for all lengths from 0 to 257 bytes
3770957b409SSimon J. Gerraty * (inclusive). Each attempt is done twice, with data input
3780957b409SSimon J. Gerraty * either in one go, or byte by byte. In the byte by byte
3790957b409SSimon J. Gerraty * test, intermediate result are obtained and checked.
3800957b409SSimon J. Gerraty */
3810957b409SSimon J. Gerraty size_t len;
3820957b409SSimon J. Gerraty unsigned char buf[258];
3830957b409SSimon J. Gerraty int i;
3840957b409SSimon J. Gerraty int tcount;
3850957b409SSimon J. Gerraty
3860957b409SSimon J. Gerraty tcount = 0;
3870957b409SSimon J. Gerraty for (len = 0; len < sizeof buf; len ++) {
3880957b409SSimon J. Gerraty br_sha1_context sc;
3890957b409SSimon J. Gerraty unsigned char tmp[20];
3900957b409SSimon J. Gerraty
3910957b409SSimon J. Gerraty br_sha1_init(&sc);
3920957b409SSimon J. Gerraty br_sha1_update(&sc, buf, len);
3930957b409SSimon J. Gerraty br_sha1_out(&sc, tmp);
3940957b409SSimon J. Gerraty buf[len] = tmp[0];
3950957b409SSimon J. Gerraty }
3960957b409SSimon J. Gerraty for (len = 0; len <= 257; len ++) {
3970957b409SSimon J. Gerraty size_t u;
3980957b409SSimon J. Gerraty
3990957b409SSimon J. Gerraty br_multihash_init(mc);
4000957b409SSimon J. Gerraty br_multihash_update(mc, buf, len);
4010957b409SSimon J. Gerraty for (i = 1; i <= 6; i ++) {
4020957b409SSimon J. Gerraty unsigned char tmp[64], tmp2[64];
4030957b409SSimon J. Gerraty size_t olen, olen2;
4040957b409SSimon J. Gerraty
4050957b409SSimon J. Gerraty olen = br_multihash_out(mc, i, tmp);
4060957b409SSimon J. Gerraty if (olen == 0) {
4070957b409SSimon J. Gerraty continue;
4080957b409SSimon J. Gerraty }
4090957b409SSimon J. Gerraty olen2 = do_hash(i, buf, len, tmp2);
4100957b409SSimon J. Gerraty if (olen != olen2) {
4110957b409SSimon J. Gerraty fprintf(stderr,
4120957b409SSimon J. Gerraty "Bad hash output length: %u / %u\n",
4130957b409SSimon J. Gerraty (unsigned)olen, (unsigned)olen2);
4140957b409SSimon J. Gerraty exit(EXIT_FAILURE);
4150957b409SSimon J. Gerraty }
4160957b409SSimon J. Gerraty check_equals("Hash output", tmp, tmp2, olen);
4170957b409SSimon J. Gerraty tcount ++;
4180957b409SSimon J. Gerraty }
4190957b409SSimon J. Gerraty
4200957b409SSimon J. Gerraty br_multihash_init(mc);
4210957b409SSimon J. Gerraty for (u = 0; u < len; u ++) {
4220957b409SSimon J. Gerraty br_multihash_update(mc, buf + u, 1);
4230957b409SSimon J. Gerraty for (i = 1; i <= 6; i ++) {
4240957b409SSimon J. Gerraty unsigned char tmp[64], tmp2[64];
4250957b409SSimon J. Gerraty size_t olen, olen2;
4260957b409SSimon J. Gerraty
4270957b409SSimon J. Gerraty olen = br_multihash_out(mc, i, tmp);
4280957b409SSimon J. Gerraty if (olen == 0) {
4290957b409SSimon J. Gerraty continue;
4300957b409SSimon J. Gerraty }
4310957b409SSimon J. Gerraty olen2 = do_hash(i, buf, u + 1, tmp2);
4320957b409SSimon J. Gerraty if (olen != olen2) {
4330957b409SSimon J. Gerraty fprintf(stderr, "Bad hash output"
4340957b409SSimon J. Gerraty " length: %u / %u\n",
4350957b409SSimon J. Gerraty (unsigned)olen,
4360957b409SSimon J. Gerraty (unsigned)olen2);
4370957b409SSimon J. Gerraty exit(EXIT_FAILURE);
4380957b409SSimon J. Gerraty }
4390957b409SSimon J. Gerraty check_equals("Hash output", tmp, tmp2, olen);
4400957b409SSimon J. Gerraty }
4410957b409SSimon J. Gerraty }
4420957b409SSimon J. Gerraty }
4430957b409SSimon J. Gerraty return tcount;
4440957b409SSimon J. Gerraty }
4450957b409SSimon J. Gerraty
4460957b409SSimon J. Gerraty static void
test_multihash(void)4470957b409SSimon J. Gerraty test_multihash(void)
4480957b409SSimon J. Gerraty {
4490957b409SSimon J. Gerraty br_multihash_context mc;
4500957b409SSimon J. Gerraty
4510957b409SSimon J. Gerraty printf("Test MultiHash: ");
4520957b409SSimon J. Gerraty fflush(stdout);
4530957b409SSimon J. Gerraty
4540957b409SSimon J. Gerraty br_multihash_zero(&mc);
4550957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_md5_ID, &br_md5_vtable);
4560957b409SSimon J. Gerraty if (test_multihash_inner(&mc) != 258) {
4570957b409SSimon J. Gerraty fprintf(stderr, "Failed test count\n");
4580957b409SSimon J. Gerraty }
4590957b409SSimon J. Gerraty printf(".");
4600957b409SSimon J. Gerraty fflush(stdout);
4610957b409SSimon J. Gerraty
4620957b409SSimon J. Gerraty br_multihash_zero(&mc);
4630957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha1_ID, &br_sha1_vtable);
4640957b409SSimon J. Gerraty if (test_multihash_inner(&mc) != 258) {
4650957b409SSimon J. Gerraty fprintf(stderr, "Failed test count\n");
4660957b409SSimon J. Gerraty }
4670957b409SSimon J. Gerraty printf(".");
4680957b409SSimon J. Gerraty fflush(stdout);
4690957b409SSimon J. Gerraty
4700957b409SSimon J. Gerraty br_multihash_zero(&mc);
4710957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha224_ID, &br_sha224_vtable);
4720957b409SSimon J. Gerraty if (test_multihash_inner(&mc) != 258) {
4730957b409SSimon J. Gerraty fprintf(stderr, "Failed test count\n");
4740957b409SSimon J. Gerraty }
4750957b409SSimon J. Gerraty printf(".");
4760957b409SSimon J. Gerraty fflush(stdout);
4770957b409SSimon J. Gerraty
4780957b409SSimon J. Gerraty br_multihash_zero(&mc);
4790957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha256_ID, &br_sha256_vtable);
4800957b409SSimon J. Gerraty if (test_multihash_inner(&mc) != 258) {
4810957b409SSimon J. Gerraty fprintf(stderr, "Failed test count\n");
4820957b409SSimon J. Gerraty }
4830957b409SSimon J. Gerraty printf(".");
4840957b409SSimon J. Gerraty fflush(stdout);
4850957b409SSimon J. Gerraty
4860957b409SSimon J. Gerraty br_multihash_zero(&mc);
4870957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha384_ID, &br_sha384_vtable);
4880957b409SSimon J. Gerraty if (test_multihash_inner(&mc) != 258) {
4890957b409SSimon J. Gerraty fprintf(stderr, "Failed test count\n");
4900957b409SSimon J. Gerraty }
4910957b409SSimon J. Gerraty printf(".");
4920957b409SSimon J. Gerraty fflush(stdout);
4930957b409SSimon J. Gerraty
4940957b409SSimon J. Gerraty br_multihash_zero(&mc);
4950957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha512_ID, &br_sha512_vtable);
4960957b409SSimon J. Gerraty if (test_multihash_inner(&mc) != 258) {
4970957b409SSimon J. Gerraty fprintf(stderr, "Failed test count\n");
4980957b409SSimon J. Gerraty }
4990957b409SSimon J. Gerraty printf(".");
5000957b409SSimon J. Gerraty fflush(stdout);
5010957b409SSimon J. Gerraty
5020957b409SSimon J. Gerraty br_multihash_zero(&mc);
5030957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_md5_ID, &br_md5_vtable);
5040957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha1_ID, &br_sha1_vtable);
5050957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha224_ID, &br_sha224_vtable);
5060957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha256_ID, &br_sha256_vtable);
5070957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha384_ID, &br_sha384_vtable);
5080957b409SSimon J. Gerraty br_multihash_setimpl(&mc, br_sha512_ID, &br_sha512_vtable);
5090957b409SSimon J. Gerraty if (test_multihash_inner(&mc) != 258 * 6) {
5100957b409SSimon J. Gerraty fprintf(stderr, "Failed test count\n");
5110957b409SSimon J. Gerraty }
5120957b409SSimon J. Gerraty printf(".");
5130957b409SSimon J. Gerraty fflush(stdout);
5140957b409SSimon J. Gerraty
5150957b409SSimon J. Gerraty printf("done.\n");
5160957b409SSimon J. Gerraty fflush(stdout);
5170957b409SSimon J. Gerraty }
5180957b409SSimon J. Gerraty
5190957b409SSimon J. Gerraty static void
do_KAT_HMAC_bin_bin(const br_hash_class * digest_class,const void * key,size_t key_len,const void * data,size_t data_len,const char * href)5200957b409SSimon J. Gerraty do_KAT_HMAC_bin_bin(const br_hash_class *digest_class,
5210957b409SSimon J. Gerraty const void *key, size_t key_len,
5220957b409SSimon J. Gerraty const void *data, size_t data_len, const char *href)
5230957b409SSimon J. Gerraty {
5240957b409SSimon J. Gerraty br_hmac_key_context kc;
5250957b409SSimon J. Gerraty br_hmac_context ctx;
5260957b409SSimon J. Gerraty unsigned char tmp[64], ref[64];
5270957b409SSimon J. Gerraty size_t u, len;
5280957b409SSimon J. Gerraty
5290957b409SSimon J. Gerraty len = hextobin(ref, href);
5300957b409SSimon J. Gerraty br_hmac_key_init(&kc, digest_class, key, key_len);
5310957b409SSimon J. Gerraty br_hmac_init(&ctx, &kc, 0);
5320957b409SSimon J. Gerraty br_hmac_update(&ctx, data, data_len);
5330957b409SSimon J. Gerraty br_hmac_out(&ctx, tmp);
5340957b409SSimon J. Gerraty check_equals("KAT HMAC 1", tmp, ref, len);
5350957b409SSimon J. Gerraty
5360957b409SSimon J. Gerraty br_hmac_init(&ctx, &kc, 0);
5370957b409SSimon J. Gerraty for (u = 0; u < data_len; u ++) {
5380957b409SSimon J. Gerraty br_hmac_update(&ctx, (const unsigned char *)data + u, 1);
5390957b409SSimon J. Gerraty }
5400957b409SSimon J. Gerraty br_hmac_out(&ctx, tmp);
5410957b409SSimon J. Gerraty check_equals("KAT HMAC 2", tmp, ref, len);
5420957b409SSimon J. Gerraty
5430957b409SSimon J. Gerraty for (u = 0; u < data_len; u ++) {
5440957b409SSimon J. Gerraty br_hmac_init(&ctx, &kc, 0);
5450957b409SSimon J. Gerraty br_hmac_update(&ctx, data, u);
5460957b409SSimon J. Gerraty br_hmac_out(&ctx, tmp);
5470957b409SSimon J. Gerraty br_hmac_update(&ctx,
5480957b409SSimon J. Gerraty (const unsigned char *)data + u, data_len - u);
5490957b409SSimon J. Gerraty br_hmac_out(&ctx, tmp);
5500957b409SSimon J. Gerraty check_equals("KAT HMAC 3", tmp, ref, len);
5510957b409SSimon J. Gerraty }
5520957b409SSimon J. Gerraty }
5530957b409SSimon J. Gerraty
5540957b409SSimon J. Gerraty static void
do_KAT_HMAC_str_str(const br_hash_class * digest_class,const char * key,const char * data,const char * href)5550957b409SSimon J. Gerraty do_KAT_HMAC_str_str(const br_hash_class *digest_class, const char *key,
5560957b409SSimon J. Gerraty const char *data, const char *href)
5570957b409SSimon J. Gerraty {
5580957b409SSimon J. Gerraty do_KAT_HMAC_bin_bin(digest_class, key, strlen(key),
5590957b409SSimon J. Gerraty data, strlen(data), href);
5600957b409SSimon J. Gerraty }
5610957b409SSimon J. Gerraty
5620957b409SSimon J. Gerraty static void
do_KAT_HMAC_hex_hex(const br_hash_class * digest_class,const char * skey,const char * sdata,const char * href)5630957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(const br_hash_class *digest_class, const char *skey,
5640957b409SSimon J. Gerraty const char *sdata, const char *href)
5650957b409SSimon J. Gerraty {
5660957b409SSimon J. Gerraty unsigned char key[1024];
5670957b409SSimon J. Gerraty unsigned char data[1024];
5680957b409SSimon J. Gerraty
5690957b409SSimon J. Gerraty do_KAT_HMAC_bin_bin(digest_class, key, hextobin(key, skey),
5700957b409SSimon J. Gerraty data, hextobin(data, sdata), href);
5710957b409SSimon J. Gerraty }
5720957b409SSimon J. Gerraty
5730957b409SSimon J. Gerraty static void
do_KAT_HMAC_hex_str(const br_hash_class * digest_class,const char * skey,const char * data,const char * href)5740957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(const br_hash_class *digest_class,
5750957b409SSimon J. Gerraty const char *skey, const char *data, const char *href)
5760957b409SSimon J. Gerraty {
5770957b409SSimon J. Gerraty unsigned char key[1024];
5780957b409SSimon J. Gerraty
5790957b409SSimon J. Gerraty do_KAT_HMAC_bin_bin(digest_class, key, hextobin(key, skey),
5800957b409SSimon J. Gerraty data, strlen(data), href);
5810957b409SSimon J. Gerraty }
5820957b409SSimon J. Gerraty
5830957b409SSimon J. Gerraty static void
test_HMAC_CT(const br_hash_class * digest_class,const void * key,size_t key_len,const void * data)5840957b409SSimon J. Gerraty test_HMAC_CT(const br_hash_class *digest_class,
5850957b409SSimon J. Gerraty const void *key, size_t key_len, const void *data)
5860957b409SSimon J. Gerraty {
5870957b409SSimon J. Gerraty br_hmac_key_context kc;
5880957b409SSimon J. Gerraty br_hmac_context hc1, hc2;
5890957b409SSimon J. Gerraty unsigned char buf1[64], buf2[64];
5900957b409SSimon J. Gerraty size_t u, v;
5910957b409SSimon J. Gerraty
5920957b409SSimon J. Gerraty br_hmac_key_init(&kc, digest_class, key, key_len);
5930957b409SSimon J. Gerraty
5940957b409SSimon J. Gerraty for (u = 0; u < 2; u ++) {
5950957b409SSimon J. Gerraty for (v = 0; v < 130; v ++) {
5960957b409SSimon J. Gerraty size_t min_len, max_len;
5970957b409SSimon J. Gerraty size_t w;
5980957b409SSimon J. Gerraty
5990957b409SSimon J. Gerraty min_len = v;
6000957b409SSimon J. Gerraty max_len = v + 256;
6010957b409SSimon J. Gerraty for (w = min_len; w <= max_len; w ++) {
6020957b409SSimon J. Gerraty char tmp[30];
6030957b409SSimon J. Gerraty size_t hlen1, hlen2;
6040957b409SSimon J. Gerraty
6050957b409SSimon J. Gerraty br_hmac_init(&hc1, &kc, 0);
6060957b409SSimon J. Gerraty br_hmac_update(&hc1, data, u + w);
6070957b409SSimon J. Gerraty hlen1 = br_hmac_out(&hc1, buf1);
6080957b409SSimon J. Gerraty br_hmac_init(&hc2, &kc, 0);
6090957b409SSimon J. Gerraty br_hmac_update(&hc2, data, u);
6100957b409SSimon J. Gerraty hlen2 = br_hmac_outCT(&hc2,
6110957b409SSimon J. Gerraty (const unsigned char *)data + u, w,
6120957b409SSimon J. Gerraty min_len, max_len, buf2);
6130957b409SSimon J. Gerraty if (hlen1 != hlen2) {
6140957b409SSimon J. Gerraty fprintf(stderr, "HMAC length mismatch:"
6150957b409SSimon J. Gerraty " %u / %u\n", (unsigned)hlen1,
6160957b409SSimon J. Gerraty (unsigned)hlen2);
6170957b409SSimon J. Gerraty exit(EXIT_FAILURE);
6180957b409SSimon J. Gerraty }
6190957b409SSimon J. Gerraty sprintf(tmp, "HMAC CT %u,%u,%u",
6200957b409SSimon J. Gerraty (unsigned)u, (unsigned)v, (unsigned)w);
6210957b409SSimon J. Gerraty check_equals(tmp, buf1, buf2, hlen1);
6220957b409SSimon J. Gerraty }
6230957b409SSimon J. Gerraty }
6240957b409SSimon J. Gerraty printf(".");
6250957b409SSimon J. Gerraty fflush(stdout);
6260957b409SSimon J. Gerraty }
6270957b409SSimon J. Gerraty printf(" ");
6280957b409SSimon J. Gerraty fflush(stdout);
6290957b409SSimon J. Gerraty }
6300957b409SSimon J. Gerraty
6310957b409SSimon J. Gerraty static void
test_HMAC(void)6320957b409SSimon J. Gerraty test_HMAC(void)
6330957b409SSimon J. Gerraty {
6340957b409SSimon J. Gerraty unsigned char data[1000];
6350957b409SSimon J. Gerraty unsigned x;
6360957b409SSimon J. Gerraty size_t u;
6370957b409SSimon J. Gerraty const char key[] = "test HMAC key";
6380957b409SSimon J. Gerraty
6390957b409SSimon J. Gerraty printf("Test HMAC: ");
6400957b409SSimon J. Gerraty fflush(stdout);
6410957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(&br_md5_vtable,
6420957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
6430957b409SSimon J. Gerraty "Hi There",
6440957b409SSimon J. Gerraty "9294727a3638bb1c13f48ef8158bfc9d");
6450957b409SSimon J. Gerraty do_KAT_HMAC_str_str(&br_md5_vtable,
6460957b409SSimon J. Gerraty "Jefe",
6470957b409SSimon J. Gerraty "what do ya want for nothing?",
6480957b409SSimon J. Gerraty "750c783e6ab0b503eaa86e310a5db738");
6490957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_md5_vtable,
6500957b409SSimon J. Gerraty "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
6510957b409SSimon J. Gerraty "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
6520957b409SSimon J. Gerraty "56be34521d144c88dbb8c733f0e8b3f6");
6530957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_md5_vtable,
6540957b409SSimon J. Gerraty "0102030405060708090a0b0c0d0e0f10111213141516171819",
6550957b409SSimon J. Gerraty "CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD",
6560957b409SSimon J. Gerraty "697eaf0aca3a3aea3a75164746ffaa79");
6570957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(&br_md5_vtable,
6580957b409SSimon J. Gerraty "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
6590957b409SSimon J. Gerraty "Test With Truncation",
6600957b409SSimon J. Gerraty "56461ef2342edc00f9bab995690efd4c");
6610957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(&br_md5_vtable,
6620957b409SSimon J. Gerraty "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
6630957b409SSimon J. Gerraty "Test Using Larger Than Block-Size Key - Hash Key First",
6640957b409SSimon J. Gerraty "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd");
6650957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(&br_md5_vtable,
6660957b409SSimon J. Gerraty "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
6670957b409SSimon J. Gerraty "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
6680957b409SSimon J. Gerraty "6f630fad67cda0ee1fb1f562db3aa53e");
6690957b409SSimon J. Gerraty
6700957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(&br_sha1_vtable,
6710957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
6720957b409SSimon J. Gerraty "Hi There",
6730957b409SSimon J. Gerraty "b617318655057264e28bc0b6fb378c8ef146be00");
6740957b409SSimon J. Gerraty do_KAT_HMAC_str_str(&br_sha1_vtable,
6750957b409SSimon J. Gerraty "Jefe",
6760957b409SSimon J. Gerraty "what do ya want for nothing?",
6770957b409SSimon J. Gerraty "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79");
6780957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha1_vtable,
6790957b409SSimon J. Gerraty "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
6800957b409SSimon J. Gerraty "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD",
6810957b409SSimon J. Gerraty "125d7342b9ac11cd91a39af48aa17b4f63f175d3");
6820957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha1_vtable,
6830957b409SSimon J. Gerraty "0102030405060708090a0b0c0d0e0f10111213141516171819",
6840957b409SSimon J. Gerraty "CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD",
6850957b409SSimon J. Gerraty "4c9007f4026250c6bc8414f9bf50c86c2d7235da");
6860957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(&br_sha1_vtable,
6870957b409SSimon J. Gerraty "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
6880957b409SSimon J. Gerraty "Test With Truncation",
6890957b409SSimon J. Gerraty "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04");
6900957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(&br_sha1_vtable,
6910957b409SSimon J. Gerraty "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
6920957b409SSimon J. Gerraty "Test Using Larger Than Block-Size Key - Hash Key First",
6930957b409SSimon J. Gerraty "aa4ae5e15272d00e95705637ce8a3b55ed402112");
6940957b409SSimon J. Gerraty do_KAT_HMAC_hex_str(&br_sha1_vtable,
6950957b409SSimon J. Gerraty "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
6960957b409SSimon J. Gerraty "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
6970957b409SSimon J. Gerraty "e8e99d0f45237d786d6bbaa7965c7808bbff1a91");
6980957b409SSimon J. Gerraty
6990957b409SSimon J. Gerraty /* From RFC 4231 */
7000957b409SSimon J. Gerraty
7010957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha224_vtable,
7020957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
7030957b409SSimon J. Gerraty "4869205468657265",
7040957b409SSimon J. Gerraty "896fb1128abbdf196832107cd49df33f"
7050957b409SSimon J. Gerraty "47b4b1169912ba4f53684b22");
7060957b409SSimon J. Gerraty
7070957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha256_vtable,
7080957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
7090957b409SSimon J. Gerraty "4869205468657265",
7100957b409SSimon J. Gerraty "b0344c61d8db38535ca8afceaf0bf12b"
7110957b409SSimon J. Gerraty "881dc200c9833da726e9376c2e32cff7");
7120957b409SSimon J. Gerraty
7130957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha384_vtable,
7140957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
7150957b409SSimon J. Gerraty "4869205468657265",
7160957b409SSimon J. Gerraty "afd03944d84895626b0825f4ab46907f"
7170957b409SSimon J. Gerraty "15f9dadbe4101ec682aa034c7cebc59c"
7180957b409SSimon J. Gerraty "faea9ea9076ede7f4af152e8b2fa9cb6");
7190957b409SSimon J. Gerraty
7200957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha512_vtable,
7210957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
7220957b409SSimon J. Gerraty "4869205468657265",
7230957b409SSimon J. Gerraty "87aa7cdea5ef619d4ff0b4241a1d6cb0"
7240957b409SSimon J. Gerraty "2379f4e2ce4ec2787ad0b30545e17cde"
7250957b409SSimon J. Gerraty "daa833b7d6b8a702038b274eaea3f4e4"
7260957b409SSimon J. Gerraty "be9d914eeb61f1702e696c203a126854");
7270957b409SSimon J. Gerraty
7280957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha224_vtable,
7290957b409SSimon J. Gerraty "4a656665",
7300957b409SSimon J. Gerraty "7768617420646f2079612077616e7420"
7310957b409SSimon J. Gerraty "666f72206e6f7468696e673f",
7320957b409SSimon J. Gerraty "a30e01098bc6dbbf45690f3a7e9e6d0f"
7330957b409SSimon J. Gerraty "8bbea2a39e6148008fd05e44");
7340957b409SSimon J. Gerraty
7350957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha256_vtable,
7360957b409SSimon J. Gerraty "4a656665",
7370957b409SSimon J. Gerraty "7768617420646f2079612077616e7420"
7380957b409SSimon J. Gerraty "666f72206e6f7468696e673f",
7390957b409SSimon J. Gerraty "5bdcc146bf60754e6a042426089575c7"
7400957b409SSimon J. Gerraty "5a003f089d2739839dec58b964ec3843");
7410957b409SSimon J. Gerraty
7420957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha384_vtable,
7430957b409SSimon J. Gerraty "4a656665",
7440957b409SSimon J. Gerraty "7768617420646f2079612077616e7420"
7450957b409SSimon J. Gerraty "666f72206e6f7468696e673f",
7460957b409SSimon J. Gerraty "af45d2e376484031617f78d2b58a6b1b"
7470957b409SSimon J. Gerraty "9c7ef464f5a01b47e42ec3736322445e"
7480957b409SSimon J. Gerraty "8e2240ca5e69e2c78b3239ecfab21649");
7490957b409SSimon J. Gerraty
7500957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha512_vtable,
7510957b409SSimon J. Gerraty "4a656665",
7520957b409SSimon J. Gerraty "7768617420646f2079612077616e7420"
7530957b409SSimon J. Gerraty "666f72206e6f7468696e673f",
7540957b409SSimon J. Gerraty "164b7a7bfcf819e2e395fbe73b56e0a3"
7550957b409SSimon J. Gerraty "87bd64222e831fd610270cd7ea250554"
7560957b409SSimon J. Gerraty "9758bf75c05a994a6d034f65f8f0e6fd"
7570957b409SSimon J. Gerraty "caeab1a34d4a6b4b636e070a38bce737");
7580957b409SSimon J. Gerraty
7590957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha224_vtable,
7600957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7610957b409SSimon J. Gerraty "aaaaaaaa",
7620957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7630957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7640957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7650957b409SSimon J. Gerraty "dddd",
7660957b409SSimon J. Gerraty "7fb3cb3588c6c1f6ffa9694d7d6ad264"
7670957b409SSimon J. Gerraty "9365b0c1f65d69d1ec8333ea");
7680957b409SSimon J. Gerraty
7690957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha256_vtable,
7700957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7710957b409SSimon J. Gerraty "aaaaaaaa",
7720957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7730957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7740957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7750957b409SSimon J. Gerraty "dddd",
7760957b409SSimon J. Gerraty "773ea91e36800e46854db8ebd09181a7"
7770957b409SSimon J. Gerraty "2959098b3ef8c122d9635514ced565fe");
7780957b409SSimon J. Gerraty
7790957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha384_vtable,
7800957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7810957b409SSimon J. Gerraty "aaaaaaaa",
7820957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7830957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7840957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7850957b409SSimon J. Gerraty "dddd",
7860957b409SSimon J. Gerraty "88062608d3e6ad8a0aa2ace014c8a86f"
7870957b409SSimon J. Gerraty "0aa635d947ac9febe83ef4e55966144b"
7880957b409SSimon J. Gerraty "2a5ab39dc13814b94e3ab6e101a34f27");
7890957b409SSimon J. Gerraty
7900957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha512_vtable,
7910957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7920957b409SSimon J. Gerraty "aaaaaaaa",
7930957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7940957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7950957b409SSimon J. Gerraty "dddddddddddddddddddddddddddddddd"
7960957b409SSimon J. Gerraty "dddd",
7970957b409SSimon J. Gerraty "fa73b0089d56a284efb0f0756c890be9"
7980957b409SSimon J. Gerraty "b1b5dbdd8ee81a3655f83e33b2279d39"
7990957b409SSimon J. Gerraty "bf3e848279a722c806b485a47e67c807"
8000957b409SSimon J. Gerraty "b946a337bee8942674278859e13292fb");
8010957b409SSimon J. Gerraty
8020957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha224_vtable,
8030957b409SSimon J. Gerraty "0102030405060708090a0b0c0d0e0f10"
8040957b409SSimon J. Gerraty "111213141516171819",
8050957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8060957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8070957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8080957b409SSimon J. Gerraty "cdcd",
8090957b409SSimon J. Gerraty "6c11506874013cac6a2abc1bb382627c"
8100957b409SSimon J. Gerraty "ec6a90d86efc012de7afec5a");
8110957b409SSimon J. Gerraty
8120957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha256_vtable,
8130957b409SSimon J. Gerraty "0102030405060708090a0b0c0d0e0f10"
8140957b409SSimon J. Gerraty "111213141516171819",
8150957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8160957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8170957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8180957b409SSimon J. Gerraty "cdcd",
8190957b409SSimon J. Gerraty "82558a389a443c0ea4cc819899f2083a"
8200957b409SSimon J. Gerraty "85f0faa3e578f8077a2e3ff46729665b");
8210957b409SSimon J. Gerraty
8220957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha384_vtable,
8230957b409SSimon J. Gerraty "0102030405060708090a0b0c0d0e0f10"
8240957b409SSimon J. Gerraty "111213141516171819",
8250957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8260957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8270957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8280957b409SSimon J. Gerraty "cdcd",
8290957b409SSimon J. Gerraty "3e8a69b7783c25851933ab6290af6ca7"
8300957b409SSimon J. Gerraty "7a9981480850009cc5577c6e1f573b4e"
8310957b409SSimon J. Gerraty "6801dd23c4a7d679ccf8a386c674cffb");
8320957b409SSimon J. Gerraty
8330957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha512_vtable,
8340957b409SSimon J. Gerraty "0102030405060708090a0b0c0d0e0f10"
8350957b409SSimon J. Gerraty "111213141516171819",
8360957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8370957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8380957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
8390957b409SSimon J. Gerraty "cdcd",
8400957b409SSimon J. Gerraty "b0ba465637458c6990e5a8c5f61d4af7"
8410957b409SSimon J. Gerraty "e576d97ff94b872de76f8050361ee3db"
8420957b409SSimon J. Gerraty "a91ca5c11aa25eb4d679275cc5788063"
8430957b409SSimon J. Gerraty "a5f19741120c4f2de2adebeb10a298dd");
8440957b409SSimon J. Gerraty
8450957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha224_vtable,
8460957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8470957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8480957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8490957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8500957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8510957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8520957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8530957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8540957b409SSimon J. Gerraty "aaaaaa",
8550957b409SSimon J. Gerraty "54657374205573696e67204c61726765"
8560957b409SSimon J. Gerraty "72205468616e20426c6f636b2d53697a"
8570957b409SSimon J. Gerraty "65204b6579202d2048617368204b6579"
8580957b409SSimon J. Gerraty "204669727374",
8590957b409SSimon J. Gerraty "95e9a0db962095adaebe9b2d6f0dbce2"
8600957b409SSimon J. Gerraty "d499f112f2d2b7273fa6870e");
8610957b409SSimon J. Gerraty
8620957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha256_vtable,
8630957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8640957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8650957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8660957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8670957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8680957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8690957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8700957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8710957b409SSimon J. Gerraty "aaaaaa",
8720957b409SSimon J. Gerraty "54657374205573696e67204c61726765"
8730957b409SSimon J. Gerraty "72205468616e20426c6f636b2d53697a"
8740957b409SSimon J. Gerraty "65204b6579202d2048617368204b6579"
8750957b409SSimon J. Gerraty "204669727374",
8760957b409SSimon J. Gerraty "60e431591ee0b67f0d8a26aacbf5b77f"
8770957b409SSimon J. Gerraty "8e0bc6213728c5140546040f0ee37f54");
8780957b409SSimon J. Gerraty
8790957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha384_vtable,
8800957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8810957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8820957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8830957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8840957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8850957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8860957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8870957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8880957b409SSimon J. Gerraty "aaaaaa",
8890957b409SSimon J. Gerraty "54657374205573696e67204c61726765"
8900957b409SSimon J. Gerraty "72205468616e20426c6f636b2d53697a"
8910957b409SSimon J. Gerraty "65204b6579202d2048617368204b6579"
8920957b409SSimon J. Gerraty "204669727374",
8930957b409SSimon J. Gerraty "4ece084485813e9088d2c63a041bc5b4"
8940957b409SSimon J. Gerraty "4f9ef1012a2b588f3cd11f05033ac4c6"
8950957b409SSimon J. Gerraty "0c2ef6ab4030fe8296248df163f44952");
8960957b409SSimon J. Gerraty
8970957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha512_vtable,
8980957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8990957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9000957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9010957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9020957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9030957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9040957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9050957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9060957b409SSimon J. Gerraty "aaaaaa",
9070957b409SSimon J. Gerraty "54657374205573696e67204c61726765"
9080957b409SSimon J. Gerraty "72205468616e20426c6f636b2d53697a"
9090957b409SSimon J. Gerraty "65204b6579202d2048617368204b6579"
9100957b409SSimon J. Gerraty "204669727374",
9110957b409SSimon J. Gerraty "80b24263c7c1a3ebb71493c1dd7be8b4"
9120957b409SSimon J. Gerraty "9b46d1f41b4aeec1121b013783f8f352"
9130957b409SSimon J. Gerraty "6b56d037e05f2598bd0fd2215d6a1e52"
9140957b409SSimon J. Gerraty "95e64f73f63f0aec8b915a985d786598");
9150957b409SSimon J. Gerraty
9160957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha224_vtable,
9170957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9180957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9190957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9200957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9210957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9220957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9230957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9240957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9250957b409SSimon J. Gerraty "aaaaaa",
9260957b409SSimon J. Gerraty "54686973206973206120746573742075"
9270957b409SSimon J. Gerraty "73696e672061206c6172676572207468"
9280957b409SSimon J. Gerraty "616e20626c6f636b2d73697a65206b65"
9290957b409SSimon J. Gerraty "7920616e642061206c61726765722074"
9300957b409SSimon J. Gerraty "68616e20626c6f636b2d73697a652064"
9310957b409SSimon J. Gerraty "6174612e20546865206b6579206e6565"
9320957b409SSimon J. Gerraty "647320746f2062652068617368656420"
9330957b409SSimon J. Gerraty "6265666f7265206265696e6720757365"
9340957b409SSimon J. Gerraty "642062792074686520484d414320616c"
9350957b409SSimon J. Gerraty "676f726974686d2e",
9360957b409SSimon J. Gerraty "3a854166ac5d9f023f54d517d0b39dbd"
9370957b409SSimon J. Gerraty "946770db9c2b95c9f6f565d1");
9380957b409SSimon J. Gerraty
9390957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha256_vtable,
9400957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9410957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9420957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9430957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9440957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9450957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9460957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9470957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9480957b409SSimon J. Gerraty "aaaaaa",
9490957b409SSimon J. Gerraty "54686973206973206120746573742075"
9500957b409SSimon J. Gerraty "73696e672061206c6172676572207468"
9510957b409SSimon J. Gerraty "616e20626c6f636b2d73697a65206b65"
9520957b409SSimon J. Gerraty "7920616e642061206c61726765722074"
9530957b409SSimon J. Gerraty "68616e20626c6f636b2d73697a652064"
9540957b409SSimon J. Gerraty "6174612e20546865206b6579206e6565"
9550957b409SSimon J. Gerraty "647320746f2062652068617368656420"
9560957b409SSimon J. Gerraty "6265666f7265206265696e6720757365"
9570957b409SSimon J. Gerraty "642062792074686520484d414320616c"
9580957b409SSimon J. Gerraty "676f726974686d2e",
9590957b409SSimon J. Gerraty "9b09ffa71b942fcb27635fbcd5b0e944"
9600957b409SSimon J. Gerraty "bfdc63644f0713938a7f51535c3a35e2");
9610957b409SSimon J. Gerraty
9620957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha384_vtable,
9630957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9640957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9650957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9660957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9670957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9680957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9690957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9700957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9710957b409SSimon J. Gerraty "aaaaaa",
9720957b409SSimon J. Gerraty "54686973206973206120746573742075"
9730957b409SSimon J. Gerraty "73696e672061206c6172676572207468"
9740957b409SSimon J. Gerraty "616e20626c6f636b2d73697a65206b65"
9750957b409SSimon J. Gerraty "7920616e642061206c61726765722074"
9760957b409SSimon J. Gerraty "68616e20626c6f636b2d73697a652064"
9770957b409SSimon J. Gerraty "6174612e20546865206b6579206e6565"
9780957b409SSimon J. Gerraty "647320746f2062652068617368656420"
9790957b409SSimon J. Gerraty "6265666f7265206265696e6720757365"
9800957b409SSimon J. Gerraty "642062792074686520484d414320616c"
9810957b409SSimon J. Gerraty "676f726974686d2e",
9820957b409SSimon J. Gerraty "6617178e941f020d351e2f254e8fd32c"
9830957b409SSimon J. Gerraty "602420feb0b8fb9adccebb82461e99c5"
9840957b409SSimon J. Gerraty "a678cc31e799176d3860e6110c46523e");
9850957b409SSimon J. Gerraty
9860957b409SSimon J. Gerraty do_KAT_HMAC_hex_hex(&br_sha512_vtable,
9870957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9880957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9890957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9900957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9910957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9920957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9930957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9940957b409SSimon J. Gerraty "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9950957b409SSimon J. Gerraty "aaaaaa",
9960957b409SSimon J. Gerraty "54686973206973206120746573742075"
9970957b409SSimon J. Gerraty "73696e672061206c6172676572207468"
9980957b409SSimon J. Gerraty "616e20626c6f636b2d73697a65206b65"
9990957b409SSimon J. Gerraty "7920616e642061206c61726765722074"
10000957b409SSimon J. Gerraty "68616e20626c6f636b2d73697a652064"
10010957b409SSimon J. Gerraty "6174612e20546865206b6579206e6565"
10020957b409SSimon J. Gerraty "647320746f2062652068617368656420"
10030957b409SSimon J. Gerraty "6265666f7265206265696e6720757365"
10040957b409SSimon J. Gerraty "642062792074686520484d414320616c"
10050957b409SSimon J. Gerraty "676f726974686d2e",
10060957b409SSimon J. Gerraty "e37b6a775dc87dbaa4dfa9f96e5e3ffd"
10070957b409SSimon J. Gerraty "debd71f8867289865df5a32d20cdc944"
10080957b409SSimon J. Gerraty "b6022cac3c4982b10d5eeb55c3e4de15"
10090957b409SSimon J. Gerraty "134676fb6de0446065c97440fa8c6a58");
10100957b409SSimon J. Gerraty
10110957b409SSimon J. Gerraty for (x = 1, u = 0; u < sizeof data; u ++) {
10120957b409SSimon J. Gerraty data[u] = x;
10130957b409SSimon J. Gerraty x = (x * 45) % 257;
10140957b409SSimon J. Gerraty }
10150957b409SSimon J. Gerraty printf("(MD5) ");
10160957b409SSimon J. Gerraty test_HMAC_CT(&br_md5_vtable, key, sizeof key, data);
10170957b409SSimon J. Gerraty printf("(SHA-1) ");
10180957b409SSimon J. Gerraty test_HMAC_CT(&br_sha1_vtable, key, sizeof key, data);
10190957b409SSimon J. Gerraty printf("(SHA-224) ");
10200957b409SSimon J. Gerraty test_HMAC_CT(&br_sha224_vtable, key, sizeof key, data);
10210957b409SSimon J. Gerraty printf("(SHA-256) ");
10220957b409SSimon J. Gerraty test_HMAC_CT(&br_sha256_vtable, key, sizeof key, data);
10230957b409SSimon J. Gerraty printf("(SHA-384) ");
10240957b409SSimon J. Gerraty test_HMAC_CT(&br_sha384_vtable, key, sizeof key, data);
10250957b409SSimon J. Gerraty printf("(SHA-512) ");
10260957b409SSimon J. Gerraty test_HMAC_CT(&br_sha512_vtable, key, sizeof key, data);
10270957b409SSimon J. Gerraty
10280957b409SSimon J. Gerraty printf("done.\n");
10290957b409SSimon J. Gerraty fflush(stdout);
10300957b409SSimon J. Gerraty }
10310957b409SSimon J. Gerraty
10320957b409SSimon J. Gerraty static void
test_HKDF_inner(const br_hash_class * dig,const char * ikmhex,const char * salthex,const char * infohex,const char * okmhex)10330957b409SSimon J. Gerraty test_HKDF_inner(const br_hash_class *dig, const char *ikmhex,
10340957b409SSimon J. Gerraty const char *salthex, const char *infohex, const char *okmhex)
10350957b409SSimon J. Gerraty {
10360957b409SSimon J. Gerraty unsigned char ikm[100], saltbuf[100], info[100], okm[100], tmp[107];
10370957b409SSimon J. Gerraty const unsigned char *salt;
10380957b409SSimon J. Gerraty size_t ikm_len, salt_len, info_len, okm_len;
10390957b409SSimon J. Gerraty br_hkdf_context hc;
10400957b409SSimon J. Gerraty size_t u;
10410957b409SSimon J. Gerraty
10420957b409SSimon J. Gerraty ikm_len = hextobin(ikm, ikmhex);
10430957b409SSimon J. Gerraty if (salthex == NULL) {
10440957b409SSimon J. Gerraty salt = BR_HKDF_NO_SALT;
10450957b409SSimon J. Gerraty salt_len = 0;
10460957b409SSimon J. Gerraty } else {
10470957b409SSimon J. Gerraty salt = saltbuf;
10480957b409SSimon J. Gerraty salt_len = hextobin(saltbuf, salthex);
10490957b409SSimon J. Gerraty }
10500957b409SSimon J. Gerraty info_len = hextobin(info, infohex);
10510957b409SSimon J. Gerraty okm_len = hextobin(okm, okmhex);
10520957b409SSimon J. Gerraty
10530957b409SSimon J. Gerraty br_hkdf_init(&hc, dig, salt, salt_len);
10540957b409SSimon J. Gerraty br_hkdf_inject(&hc, ikm, ikm_len);
10550957b409SSimon J. Gerraty br_hkdf_flip(&hc);
10560957b409SSimon J. Gerraty br_hkdf_produce(&hc, info, info_len, tmp, okm_len);
10570957b409SSimon J. Gerraty check_equals("KAT HKDF 1", tmp, okm, okm_len);
10580957b409SSimon J. Gerraty
10590957b409SSimon J. Gerraty br_hkdf_init(&hc, dig, salt, salt_len);
10600957b409SSimon J. Gerraty for (u = 0; u < ikm_len; u ++) {
10610957b409SSimon J. Gerraty br_hkdf_inject(&hc, &ikm[u], 1);
10620957b409SSimon J. Gerraty }
10630957b409SSimon J. Gerraty br_hkdf_flip(&hc);
10640957b409SSimon J. Gerraty for (u = 0; u < okm_len; u ++) {
10650957b409SSimon J. Gerraty br_hkdf_produce(&hc, info, info_len, &tmp[u], 1);
10660957b409SSimon J. Gerraty }
10670957b409SSimon J. Gerraty check_equals("KAT HKDF 2", tmp, okm, okm_len);
10680957b409SSimon J. Gerraty
10690957b409SSimon J. Gerraty br_hkdf_init(&hc, dig, salt, salt_len);
10700957b409SSimon J. Gerraty br_hkdf_inject(&hc, ikm, ikm_len);
10710957b409SSimon J. Gerraty br_hkdf_flip(&hc);
10720957b409SSimon J. Gerraty for (u = 0; u < okm_len; u += 7) {
10730957b409SSimon J. Gerraty br_hkdf_produce(&hc, info, info_len, &tmp[u], 7);
10740957b409SSimon J. Gerraty }
10750957b409SSimon J. Gerraty check_equals("KAT HKDF 3", tmp, okm, okm_len);
10760957b409SSimon J. Gerraty
10770957b409SSimon J. Gerraty printf(".");
10780957b409SSimon J. Gerraty fflush(stdout);
10790957b409SSimon J. Gerraty }
10800957b409SSimon J. Gerraty
10810957b409SSimon J. Gerraty static void
test_HKDF(void)10820957b409SSimon J. Gerraty test_HKDF(void)
10830957b409SSimon J. Gerraty {
10840957b409SSimon J. Gerraty printf("Test HKDF: ");
10850957b409SSimon J. Gerraty fflush(stdout);
10860957b409SSimon J. Gerraty
10870957b409SSimon J. Gerraty test_HKDF_inner(&br_sha256_vtable,
10880957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
10890957b409SSimon J. Gerraty "000102030405060708090a0b0c",
10900957b409SSimon J. Gerraty "f0f1f2f3f4f5f6f7f8f9",
10910957b409SSimon J. Gerraty "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865");
10920957b409SSimon J. Gerraty
10930957b409SSimon J. Gerraty test_HKDF_inner(&br_sha256_vtable,
10940957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
10950957b409SSimon J. Gerraty "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
10960957b409SSimon J. Gerraty "b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
10970957b409SSimon J. Gerraty "b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87");
10980957b409SSimon J. Gerraty
10990957b409SSimon J. Gerraty test_HKDF_inner(&br_sha256_vtable,
11000957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
11010957b409SSimon J. Gerraty "",
11020957b409SSimon J. Gerraty "",
11030957b409SSimon J. Gerraty "8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8");
11040957b409SSimon J. Gerraty
11050957b409SSimon J. Gerraty test_HKDF_inner(&br_sha1_vtable,
11060957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b",
11070957b409SSimon J. Gerraty "000102030405060708090a0b0c",
11080957b409SSimon J. Gerraty "f0f1f2f3f4f5f6f7f8f9",
11090957b409SSimon J. Gerraty "085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896");
11100957b409SSimon J. Gerraty
11110957b409SSimon J. Gerraty test_HKDF_inner(&br_sha1_vtable,
11120957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
11130957b409SSimon J. Gerraty "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
11140957b409SSimon J. Gerraty "b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
11150957b409SSimon J. Gerraty "0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4");
11160957b409SSimon J. Gerraty
11170957b409SSimon J. Gerraty test_HKDF_inner(&br_sha1_vtable,
11180957b409SSimon J. Gerraty "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
11190957b409SSimon J. Gerraty "",
11200957b409SSimon J. Gerraty "",
11210957b409SSimon J. Gerraty "0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918");
11220957b409SSimon J. Gerraty
11230957b409SSimon J. Gerraty test_HKDF_inner(&br_sha1_vtable,
11240957b409SSimon J. Gerraty "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
11250957b409SSimon J. Gerraty NULL,
11260957b409SSimon J. Gerraty "",
11270957b409SSimon J. Gerraty "2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48");
11280957b409SSimon J. Gerraty
11290957b409SSimon J. Gerraty printf(" done.\n");
11300957b409SSimon J. Gerraty fflush(stdout);
11310957b409SSimon J. Gerraty }
11320957b409SSimon J. Gerraty
11330957b409SSimon J. Gerraty /*
11340957b409SSimon J. Gerraty * Known-answer test vectors for SHAKE128, from the NIST validation test
11350957b409SSimon J. Gerraty * suite. Each vector is a pair (input,output).
11360957b409SSimon J. Gerraty */
11370957b409SSimon J. Gerraty static const char *const KAT_SHAKE128[] = {
11380957b409SSimon J. Gerraty
11390957b409SSimon J. Gerraty "e4e932fc9907620ebebffd32b10fda7890a5bc20e5f41d5589882a18c2960e7aafd8730ee697469e5b0abb1d84de92ddba169802e31570374ef9939fde2b960e6b34ac7a65d36bacba4cd33bfa028cbbba486f32367548cb3a36dacf422924d0e0a7e3285ee158a2a42e4b765da3507b56e54998263b2c7b14e7078e35b74127d5d7220018e995e6e1572db5f3e8678357922f1cfd90a5afa6b420c600fd737b136c70e9dd14",
11400957b409SSimon J. Gerraty "459ce4fa824ee1910a678abc77c1f769",
11410957b409SSimon J. Gerraty
11420957b409SSimon J. Gerraty "18636f702f216b1b9302e59d82192f4e002f82d526c3f04cbd4f9b9f0bcd2535ed7a67d326da66bdf7fc821ef0fff1a905d56c81e4472856863908d104301133ad111e39552cd542ef78d9b35f20419b893f4a93aee848e9f86ae3fd53d27fea7fb1fc69631fa0f3a5ff51267785086ab4f682d42baf394b3b6992e9a0bb58a38ce0692df9bbaf183e18523ee1352c5fad817e0c04a3e1c476be7f5e92f482a6fb29cd4bbf09ea",
11430957b409SSimon J. Gerraty "b7b9db481898f888e5ee4ed629859844",
11440957b409SSimon J. Gerraty
11450957b409SSimon J. Gerraty "5d9ff9fe63c328ddbe0c865ac6ba605c52a14ee8e4870ba320ce849283532f2551959e74cf1a54c8b30ed75dd92e076637e4ad5213b3574e73d6640bd6245bc121378174dccdaa769e6e4f2dc650e1166c775d0a982021c0b160fe9438098e86b6cdc786f2a6d1ef68751551f7e99773daa28598d9961002c0b47ab511c8707df69f9b32796b723bf7685251d2c0d08567ad4e8540ddcc1b8a1a01f6c92aaaadcaf42301d9e53463",
11460957b409SSimon J. Gerraty "f50af2684408915871948779a14c147c",
11470957b409SSimon J. Gerraty
11480957b409SSimon J. Gerraty "38c0be76e7b60f262f1499e328e0519f864bbb9d134d00345d8942d0ab762c3936c0cd1896eca6b77b3c01089dd285e9f61708a62e5ea4bf57c50decda5c215fb18ac149d7ace09ffdfed91e7fbf068d96908e42cf1e7ee7bc001c7ee9e378a311e44311923de4681f24c92eb5f0fb13d07ef679ded3b733f402168dc050568dbf97fb79afe8db994874783e27ad8d040ba8e75343c6762c6793a42247eee5a6216b908817f5edbbdf",
11490957b409SSimon J. Gerraty "e4786ad8f2ea9c8e420a6f50b5feec9a",
11500957b409SSimon J. Gerraty
11510957b409SSimon J. Gerraty "ec586d52ad2ced1f96bd9458a5a1f64bc1b4cce1fa52517513c9ebe63d0d0eeb26ae5da73208137e08baa22651599a01bc65cbaa467baeceb8cd013d71d0b2406534fe2e6619da3aa380928f6effb09f42ba1fb7048e90d7898f1dc259b52c51b2d2970cd0c70afb6cf8acba83fd01cc589b0f31bcf2bf3b8df7879d7d2546c514706f6cf97b6a6b6d0a37d018ba553108f0e240f70f03a0ccee86f76589c64594f6cf74679bc330ad9f",
11520957b409SSimon J. Gerraty "191a3710c72d11da7a2410bc73ba9d9f",
11530957b409SSimon J. Gerraty
11540957b409SSimon J. Gerraty "c201dfe59e03574476e3c220c971c1685ea96ea137daed2ac10845c54d8e6e53c307acdf956f1bdef3868ab53e758c7cbeb4cd02972ba311f998e5f3983000345c8947aa59b78bb301b6ecbe9808ee0de99ed0b938fc19f677997398bd84bcd6f34d5b4ed123d04a093a8f42c1700fa2472f1ecc00957761a2d296bda3d2cbc0f21d8ed4e4fb122b71db1d49a0f516c3402f6046d93de6dae20df7683462557abfbf88437c8678dfa2613b",
11550957b409SSimon J. Gerraty "464121895e5c9d85190bcee0437453dd",
11560957b409SSimon J. Gerraty
11570957b409SSimon J. Gerraty "bd34acd613e0e0da6bebc45ba73fefa0bd8aa8ebba34040a07944f29eb63adea527101b8cd960e58d9ecddc0643b5e2d8db55170ace4678892e0a57612c50a4dc0647189f839b9a1229e22e0353dfa707acb7ab893f4ebe8bb910cd14f21b8fb8e77c4f19db027e0cd685d60212e0d920b34e96b774bd54f0a0f4ce2ac5f001b4411c19ac2e3a03b63b454eb30f4ddbac959673260d370e708c32d5030682ad56a99322972ba6eda6be9d027",
11580957b409SSimon J. Gerraty "8e167ceae101ea0b3b98175f66e46b0e",
11590957b409SSimon J. Gerraty
11600957b409SSimon J. Gerraty "166b4fec6967c2a25f80c0075379978124833b84894c3cb3a538f649dcee08b8e41707901f6273a128cce964ac1e9b977bb7fe28de8bc2542c6c07109889cea84d34ada6bde8c8f5358afc46b5ef5db3009fe3a2efd860ed0ad6b540595246c27849abf7eafea9e5af42607519f3c51ddbc353bc633afec56aff69a0c953584d8ede684b4faefeb8be7d7db97e32bc1c35abb73ce3ba8425726d89f98e93ed93b67b4c6993ffafb789c1bbda8d",
11610957b409SSimon J. Gerraty "eb2fa0e8e04e698ca511d6abf7de84fb",
11620957b409SSimon J. Gerraty
11630957b409SSimon J. Gerraty "62c625d31a400c5ff092d6fd638f1ea911ad912f2aabffea2377b1d2af4efeb6eb2519c5d8482d530f41acdab0fbe43f9c27d357e4df3caa8189fa7745ff95f811ed13e6497a1040852a1149890216d078ee6eb34461cfa6693ba631dbefacf83ce5ba3f531ddeadba16ae50d6eedce20cca0b4b3278e16644535e0859676c3fd5d6b7d7df7bbe2316cc2bfa7f055fffc2835225976d9a737b9ac905a7affc544288b1b7d6dad92901162f4c6d90",
11640957b409SSimon J. Gerraty "bb0acc4423c1d8cfc788e748ade8d5fd",
11650957b409SSimon J. Gerraty
11660957b409SSimon J. Gerraty "8af63bbe701b84ff9b0c9d2fd830e28b7d557af3fcf4874bb7b69f2116388090d70bff64a600427eeea22f7bee0324900fbce9b8752fe312d40f8a8485231da5d94694daadb3d6bf3e7f2cc83f67f52829cc9cf1d3fcc87d42b3d20ec2e27cb135aee068acbca68734ac7a5ff3e3bd1a738e7be63de39e56aaaa6104f6fd077c964ccc55cba41ca1783003883100e52f94096fdfdc6dcd63b3fd1db148fc24cda22640eb34f19ed4b113ad8a2144d3",
11670957b409SSimon J. Gerraty "4a824cae0f236eab147bd6ebf66eafc2",
11680957b409SSimon J. Gerraty
11690957b409SSimon J. Gerraty "a8c0f0e4afcda47e02afaaa2357c589e6b94168a6f6f142b019938186efa5b1b645bb4da032694b7376d54f4462e8c1ba5d6869d1003f3b9d98edc9f81c9dbd685058adb7a583c0b5c9debc224bb72c5982bfcdd67b4bdc57579e0467436c0a1b4c75a2d3cea034119455654f6ab7163ed9b61949d09da187d612b556fca724599a80c1970645023156f7df2e584f0bf4c2e9b08d98bb27a984fa7149c0b598adbb089e73f4f8d77f92248e419d0599f",
11700957b409SSimon J. Gerraty "4800f8f5e598a26ee05a0ea141f849d0",
11710957b409SSimon J. Gerraty
11720957b409SSimon J. Gerraty "a035c12af3fb705602540bd0f4a00395e1625edf2d44af4a145b463585aba46b34ee3203eb9132842000f54dcd234e347c28486ea18414af2d3445916049403adfa3ed3906fdb3b27f2aa4bb149df405c12fb0bf0e1dacb79c50bec3fde2295fc8dd5c97ed46dd28475a80e27017dc50d9feff9b1a1861ac86371791037e49221923e6e44874962d9f18f1898a98ee5dec1e9eca6d7c1ad4166fbac41b2587caf7fef3e7be90c80aafed5f7a0928127321",
11730957b409SSimon J. Gerraty "2d124d81a4a45ad9c0b91cca23cc2991",
11740957b409SSimon J. Gerraty
11750957b409SSimon J. Gerraty "d41739834414a0792470d53dee0f3f6c5a197314d3a14d75278440048294eab69df6eb7a33c9f807b5082bd93eb29d76c92837f6a2d6c5c21a154c9c7f509ee04b662b099c501a76e404996fe2997163d1abdd73df019c35e06d45b144f4dbb0462fa13767f12f4e1b2bc605c20ce1b9d96c0c94726af953e154d14cb9c8c8aff719f40c7cf45f15c1445ba6c65215024b316d60435905a686929874c6148e64c4eccd90c3a1d1553d18ff57d6b536c58ec3",
11760957b409SSimon J. Gerraty "551fc7eceeee151523be716538258e2e",
11770957b409SSimon J. Gerraty
11780957b409SSimon J. Gerraty "5bbb333460ffac345e4d2bc2dba303ef75b85c57233590fabd22d547bf9e1d7a4ad43a286b2a4618a0bb42559808fd813bea376ceacc07e608167ad1b9ec7d7ae919fd2991464cf63570c7dfb299b61836bd73a29007cf1faa45b1e5539a00514272c35d58bb877526530187afbcf55a6f1757209c50af4eab96c2ab160e6ea75dc8d6ef4bf2bf3e7a4b3a7619db84efede22a0f960e701b14f0f44c89b18f2640017c05ef51bcf93942b8d3775d2980b80435",
11790957b409SSimon J. Gerraty "2c98dce5b1ec5f1f23554a755fac7700",
11800957b409SSimon J. Gerraty
11810957b409SSimon J. Gerraty "8040a7296d7553886e5b25c7cf1f64a6a0a143185a83abf5c5813bef18008ec762e9bcc12ab7235552cf67274210b73942ac525f26364af431fc88cc34961169f6bf8872d864f360b9fbc27b18160d0578381db509e72e678402731157555bf9026b1325c1a34c136b863eab9a58ec720cedaa0049bfddb4863d03a6ca65f3dd4f9465c32b9db4d52f19e39f10ffdfe8c475032a2fe5e145ff524073d5ed617fa5e387325f7ab50fcf5cba40c2326bcf6a753019",
11820957b409SSimon J. Gerraty "c0bb8427ef0ca4e457d2887878d91310",
11830957b409SSimon J. Gerraty
11840957b409SSimon J. Gerraty "cbaceb762e6c2f5f96052d4a681b899b84de459d198b3624bd35b471bdc59655b1405e9a5448b09e93e60941e486ad01d943e164f5655b97be28f75413c0ab08c099bd3650e33316234e8c83c012ad146b331e88fb037667e6e814e69e5f100b20417113c946a1116cc71ed7a3c87119623564d0d26c70dd5cfc75ef03acaea6f8c0e3f96877e0d599d8270635aee25be6d21b0522a82f4149ec8037edaf6b21709c7aafd580daaad00a0fd91fcfe6211d90abef95",
11850957b409SSimon J. Gerraty "626bd9eb0982b6db884d38e8c234854e",
11860957b409SSimon J. Gerraty
11870957b409SSimon J. Gerraty "1bbee570394bc18d0f8713c7149cabb84e0567dd184510e922d97f5fb96b045f494808c02014f06074bd45b8a8ad12b4cb448ec16285fb27670fce99914f100ad6f504c32fa40ab39beec306667f76f9ab98b3ec18c036b8f1b60d4457a9fe53cbab23a0ee64d72d8a03d6d8d67a9f2ff6eb1d85c25d8746c8b4858794e094e12f54ab80e5ba1f774be5c456810755ffb52415b5e8c6b776f5f37b8bcf5c9b5d0ad7e58a9d0fa938e67ad5aaee8c5f11ef2be3a41362",
11880957b409SSimon J. Gerraty "a489ab3eb43f65ffbd4d4c34169ee762",
11890957b409SSimon J. Gerraty
11900957b409SSimon J. Gerraty "aeacffca0e87bfdb2e6e74bfb67c9c90a8b6fb918b9be164cafcab7d570d8cd693bd8ee47243d3cbdaf921ce4d6e9e09c8b6d762eb0507bd597d976f6243e1f5e0d839e75ea72e2780da0d5e9f72a7a9b397548f762c3837c6a7c5d74b2081705ba70ab91adb5758e6b94058f2b141d830ff7b007538fb3ad8233f9e5bcbf6adcdd20843ee08d6c7d53cc3a58f53f3fe0997539e2f51d92e56990daad76dc816fd013b6d225634db140e9d2bbe7f45830406e44fee9d59",
11910957b409SSimon J. Gerraty "4eaa27b085d08fc6a7473e672ea2ca1b",
11920957b409SSimon J. Gerraty
11930957b409SSimon J. Gerraty "a22314d2173ca4d53897924c4b395f0ae52c7fff4880525cee9055f866879af35f22759903b779898676a216feefd4ed75d484f83c00b58383b9279e2732cbc2cb5479b72abee5b4ab0bd0c937537b7a47f461ad419225c6045cca10c191225f0e4389f3355cd3a0d2de822c9d6f3cf984147de3fd3d8a6c9a02a617ddac87114f770b16cc96289321782108d94a00b153bd40651809cabe6c32237a2389e321b67769e89676cdd6c060162592ecadebdd7512fa3bfece04",
11940957b409SSimon J. Gerraty "eea88229becc3608df892998b80cf57b",
11950957b409SSimon J. Gerraty
11960957b409SSimon J. Gerraty "f99bba3e3b14c8de38c8edecd9c983aa641320a251130f45596a00d2cfeefe7933f1a2c105c78627d782fd07a60001c06a286d14ec706dcdd8a232a613e1ea684ee7ef54dc903ec1c09c2c060bb0549a659fd47ae9e8b9cb3680b7c1c2d11ebf720209c06879d8f51d9ee1afafe263807c01bb9def83db879a89f7eb85c681c6c6cc58cc52893d0b131186cc3b9e16bad7d48c46a74abb492d475beb04c9fdc573cc454242c8534bcc7c822356ea558f9fa3ae3bb844415916",
11970957b409SSimon J. Gerraty "5109746cb7a61482e6e28de02db1a4a5",
11980957b409SSimon J. Gerraty
11990957b409SSimon J. Gerraty "564da8460dc0c3d20b1fda3628349a399ba52446b5d3626fd0039ab282bc437b166f186b3c5e6c58ffb6bd95f8fe8b73c1b56a07ad37572eb6e148cfb7750760dcc03fac567ad7d3536d80922dda8ac4e118fc29c47ee3677183ea4e06242b6090864591c3ddaf4bef8c4cb52f8e3f35e4140034616faf21e831a9b8d68f5a841a0a52a2eb4f9ac9bb5b488766e251cdb0f29faeeed463640333ad948e7f3ad362948c68379740539f219d8f3ba069952efa0021d273a738aad0",
12000957b409SSimon J. Gerraty "f43552da8b2623a130196e70a770230d",
12010957b409SSimon J. Gerraty
12020957b409SSimon J. Gerraty "8a54e8bf30eeb2e098955f2eef10af3c0a32391656fdff82120e4785bb35a629c8635e7e98c9eadfa93ed6760ae1d40313000dd85339b528cadfe28258a09e9976643a462477e6d022eb7f6a6338a8fdbf261c28e8ed43869f9a032f28b4d881fb202720bc42cf3b6d650211e35d53b4766a0f0dfd60d121fa05519211bb7d69bf5fcb124870cda8f17406747097fcb0a1968e907adb888341ea75b6fcfbb4d92ae8ce27b04a07a016df3399f330cb77a67040b847a68f33de0f16",
12030957b409SSimon J. Gerraty "c51c6e34cef091a05dfcf30d45b21536",
12040957b409SSimon J. Gerraty
12050957b409SSimon J. Gerraty "2a64753a74d768b82c5638a0b24ef0da181bc7d6e2c4ffdb0ae50d9c48ecfa0d90880974db5f9ac32a004e25c8186cd7d0e88439f0f652256c03e47f663eff0d5cb7c089f2167ff5f28df82f910badc5f4b3860af28cbb6a1c7af3fafa6dae5398d8e0a14165def78be77ee6948f7a4d8a64167271ed0352203082368de1cd874bd3b2e351b28170fdf42871590d9d179ce27c99f481f287820fd95ba60124517e907e78a9662e09519e3ef868ebdcca311700a603b04fae4afe4090",
12060957b409SSimon J. Gerraty "2d2ee67938422ae12f8cfa8b2e744577",
12070957b409SSimon J. Gerraty
12080957b409SSimon J. Gerraty "a7d645b70f27f01617e76abc2ae514164f18d6fd4f3464e71a7fc05a67e101a79b3b52d4ecfa3ddac6ec2a116d5222e8e536d9d90fffec9c1442679b06db8aa7c53dcde92006211b3dd779f83b6289f015c4cd21ca16ce83bb3ea162540bb012ee82bddef4722341454f5f59da3cd098a96abbbdc9a19202d61c7697979afa50deb22a9bb067ccb4a6fce51c930a7f4767cfaa9454c9c1832f83ee2318b0f0c95d761c079c0ca2dc28871229aef11f64199ca290b2b5e26d8c1c12ec1f",
12090957b409SSimon J. Gerraty "ec989e0290fc737952de37dd1ebc01c6",
12100957b409SSimon J. Gerraty
12110957b409SSimon J. Gerraty "3436fe321f2a41478164b8b408a7a8f54ff2a79cb2020bf36118a2e3b3fca414bd42e55624cc4f402f909016209b10f0c55626194a098bb6519d0fa844a68ab3eaa116df39797b1e6c51eb30557df0c4f3d1a2e0471f1d8264fb3288c6c15dcde4daf795083aad2b5f2d31c84c542fb702ea83b7524ca9a1c1b9754ade5604abd375f23f3916cdad31aecaa7b028b7121a2a316713991759925f3fb8366c6795defa6ea77416c4ed095c1f9527026f1d621815b8310d4ff3fc76f798760b",
12120957b409SSimon J. Gerraty "bb5e48212442ad7ae83697092024c22b",
12130957b409SSimon J. Gerraty
12140957b409SSimon J. Gerraty "01bdb4f89f84b728a9d6b3a03f60709900571c1a2a0f912702cad73677ceeae202babde3d0197e3e23381cb9f6350792e05937703aa76f9a84b5c36705bb58f6b2ea6b1e51ff94a8de174cbc2ec5ae9ad2627a8b3ea45f162b727a7639f71a4cd9f6c6926a5d81d0a21c4c923037ed199f1aef517e2eea03bea9044c5baab84e3f85d625635bcb1c37ef232144b44c770f2b9dab416b96c906016acfb3fbba62ab40a4c08323fcf66437d953b164541cea3a8c81d186eed0cb23b3e98813a9",
12150957b409SSimon J. Gerraty "8bb7ffa4572616f3bc7c33bd70bbcd59",
12160957b409SSimon J. Gerraty
12170957b409SSimon J. Gerraty "9ae51ed483306c9a5a6db027f03cd4472cf3a71df5f1e11852306123d01ab81c259eeb88128275858efb8cff207ba5278dca3a21b358cbfdb5d223e958f3dca5ad9d2537f128c3dfb1fa564d3157de120f7b7d5524e67fc7abf897d9a5bd6b2c7c0a5348e6c95e920c919778ec7a86effb2ff91f0f44045c7dca46597e216e98d80efe25ba0d4f84e7e9d5e81689a5a6990d34e83e1a62a67371b7d2adc7ecd30ad1ad35359e9d9f8a299b057a2f441e313eb819770fa18cd41572adf856edc4",
12180957b409SSimon J. Gerraty "e7f66f49f70d506a9b5508cc50f65cf2",
12190957b409SSimon J. Gerraty
12200957b409SSimon J. Gerraty "899c81ea1162514ea7a2d3487d0efcc4648a3067f891131918d59cc19a266b4f3c955c00ddd95cddedf27b86220c432d6ca548e52cf2011da17fd667a2177a7f93e37b8892d51898f1485277e9e046a48cb8b999fcbcf550db53d40602421a3f76cd070a971e2d869beb80a53b54ac30ac0aab0cd1b696bbaf99bb25216ff199cd9a280f567c44b0d4252c98812e1ddab4e445c414aa8d650598b64d6768a7948093051e36b7051c823c7ed6213743a98d8eaf4b2b5e8157c699ea053cf4e53877",
12210957b409SSimon J. Gerraty "52173b139c76a744b7a4d2221d4178c4",
12220957b409SSimon J. Gerraty
12230957b409SSimon J. Gerraty "e50422869373abac1c26e738fb3ccb577b65975a7998ba096b04ef3aa148ada2cbe6beeabcf52d056d1766c245ab999d97445fdb6d59a0d6843eb4959752c89fe07b8411ddcfebef509482b8896bb43de7c875b29da52606b278b8704c62154b2da9bb237e68aa10cb85814250e4e4de73da200991e51241fd9a45f446de5a4bb959ad4727283510e9d2ac8a207ef0284163aa05d27f2d316e8ca1480f30604a8d74a0a661775398af644bb584a1a2c55c4959d0e7dd3f7c0c3614962fbeefeeafe0",
12240957b409SSimon J. Gerraty "f4c517a82c850c3c4c96d23a8f3106b8",
12250957b409SSimon J. Gerraty
12260957b409SSimon J. Gerraty "066febbe205ea342cde69fd4c72889442e14a5977d886252bdbc2ff5f8dd8fc5f1f870ce121ab929a6b6227b484648be9b3501443cfdecf8f58d4de834ed1800bb244c18985a8232583ac6fc789aa59d1c5e87ad03994085bbf6e1ba1157d4e4ccbb28a49b6529e54b3b34613d6cc9671855e2dcbba6838176c093737962eaf88c85ab780184d4cae78013b28103dca7f7e3b8d94a6ae0728db30a1c535783c4644a7e9eb4ffac6a95d30cf52ba805e220d0b2aa9a2e7de26a97efbd877ec6d1bad148",
12270957b409SSimon J. Gerraty "bac7162dc8328911fa639f26ba952ab0",
12280957b409SSimon J. Gerraty
12290957b409SSimon J. Gerraty "ccf92b17b9cf0d8577c1f3db9c19d3c86f16bab4058611f6aa97204783ebd07671eab55e375c4b16e03780675bb5738369aa7cf3b9156cd250f516392f5e0efa30cbb09132b66457756621f947093029e10233938c846513086023252d1bac9dd3442598f004e0b200f7dd79aa3a9122a0c6e77bc7fc8521988050f3c64b32c620fc1b5bba6f458e4791bdcfca731fd66e9da093b1a45264c8ffa48b3f1628dfe19c9ac1d71f1d5214ddc7e4f0da60ae122f67c394a55645628228d5e3a3174fdccbaab4",
12300957b409SSimon J. Gerraty "19a9eadf9c7c000fe340603f27bd830b",
12310957b409SSimon J. Gerraty
12320957b409SSimon J. Gerraty "a37dcfab50a317e6a7cc51524b5d611a53652b59fc7df0229af3dac4d527d54c1134a14b2ed325d9727d07d9c3d0797f1a34561034be6de98b551dc384132235eaedae7a9b97bb7581a2a0f2c4e8e32f3e294f9b30f646dd33ce58187188146e14f01dc3ffb581c3bc834726b66c4732a98c3f8256ed22077ba8b34c024d53fe798517abc2f61eca0c6722fc02254c9141a54d4e106aaa6d4b2957e6a12c88ed00f4c4bc4c223b92579859fc0edb9b53f0bba286c53786198c9b6c6eb5eb5b4490844b7d06",
12330957b409SSimon J. Gerraty "b9e1455d06233d14b8d3020441351a76",
12340957b409SSimon J. Gerraty
12350957b409SSimon J. Gerraty "0248b909e1f31ee855a03b6c81366757aa3732d2eca0b06a2b1015584c2d8205a4431fcdb02f6a03077ccf368ecb78b3eb78664b3c7ac157088b6cf9758adda4bc1d2cdedb9a69448a2833cf6f21865795bbd5551be859ed297aa82c288b898e331c07c3c8fcc4b2c4ec90bf8e003a499248a677f1b020357625f079cdf92fcbef89d904e11d23569e0f0e8c52303c93c867023a269bc036d8d36d69ca9c7664daacc92a8dc42c3600dbd4c02278333d216011252271def835ce4783883c0760dbcc00bc33bb",
12360957b409SSimon J. Gerraty "ea4606777e21f27d4ae860b3c25283b7",
12370957b409SSimon J. Gerraty
12380957b409SSimon J. Gerraty "ce283768aa91488c75c71ee80a4df9495377b6a9ae3351a5962aa8317f08818a0117cf6c391331866d3abc2beea2fa4a43cf32a08385ea2c03dbabe3319104a6c0a3d171061ebed5a23306a8618a81fb63d9dd4c79b42bfdd2a79e05d78290e653f4c6dfd75bf5625ddb85c82bad9444faba3e1558691c004bb50afe37822e320131361d7572e015e559c0f313b53e0d529dde64e74bc41eb52e77361a3ae5721483a795a80a87d684d63f92e347843eb1a8439fef032b3d5a396b154751bd8ed211a3ae37cbf0",
12390957b409SSimon J. Gerraty "dca4d5f9f9b7f8011f4c2f547ce42847",
12400957b409SSimon J. Gerraty
12410957b409SSimon J. Gerraty "19265f48c1ea240990847dc15d8198785d55ea6243ef7012ac903beabbdc2bd60032fb3a9f397d28aebb27d7deb7cf505eb1b36bfc4dbcfa8e1c044490b695b50e0974d3c5f0de748508d12ed9bfce10eaadde8fa128d3c30c12d0d403f60baf0b53d2fd7a38cc55dc1182b096c11d1ec9f171b879a73bd6ef1aa7825bc5162cbeba1d9f0739d1337c8142445ce645e4c32477cdcdf37e99fedb9236e24a3d94f0e45ea0b41a74762efe19d27555cdc89feef5b6e533237603fe98d8deae084f69799deac9043e86",
12420957b409SSimon J. Gerraty "688e532e15bde53b0b652291edfb7681",
12430957b409SSimon J. Gerraty
12440957b409SSimon J. Gerraty "1080391fa810c50c7437ec058459d3a8cd23c33071c187474151151c809871b6eaf4cf88f592f84557e1eef5c847d3490912072b25b1919af724c0b5ecb111150bd95460328a0b1ba29613c0bd6486110fe6dfab8cca5fde18f5b0bc4d2dc970781511d2e45fc7385c3da18eeb18b3a9e68593d82c75bbbcadab2e5a29745f6f3a924e039579f4418dbee186d9cc24b896d96bd990186bdcbd3082b70aee9bb95a36531ecc405ae13d011bd10fe69fe728c8aed73d1d38e5506bf4fa770347f7e0eb6749121cc0be75",
12450957b409SSimon J. Gerraty "cbf8ee5d477630dac9457a9a0659497d",
12460957b409SSimon J. Gerraty
12470957b409SSimon J. Gerraty "0a13ad2c7a239b4ba73ea6592ae84ea9",
12480957b409SSimon J. Gerraty "5feaf99c15f48851943ff9baa6e5055d8377f0dd347aa4dbece51ad3a6d9ce0c01aee9fe2260b80a4673a909b532adcdd1e421c32d6460535b5fe392a58d2634979a5a104d6c470aa3306c400b061db91c463b2848297bca2bc26d1864ba49d7ff949ebca50fbf79a5e63716dc82b600bd52ca7437ed774d169f6bf02e46487956fba2230f34cd2a0485484d",
12490957b409SSimon J. Gerraty
12500957b409SSimon J. Gerraty NULL
12510957b409SSimon J. Gerraty };
12520957b409SSimon J. Gerraty
12530957b409SSimon J. Gerraty /*
12540957b409SSimon J. Gerraty * Known-answer test vectors for SHAKE256, from the NIST validation test
12550957b409SSimon J. Gerraty * suite. Each vector is a pair (input,output).
12560957b409SSimon J. Gerraty */
12570957b409SSimon J. Gerraty static const char *const KAT_SHAKE256[] = {
12580957b409SSimon J. Gerraty "389fe2a4eecdab928818c1aa6f14fabd41b8ff1a246247b05b1b4672171ce1008f922683529f3ad8dca192f268b66679068063b7ed25a1b5129ad4a1fa22c673cc1105d1aad6d82f4138783a9fe07d77451897277ed27e6fefec2cb56eb2494d18a5e7559d7b6fdddf66db4cbc9926fe270901327e70c8241798b4761dd652d49ad434d8d4",
12590957b409SSimon J. Gerraty "50717d9da0d528c3da799a3307ec74fc086a7d45acfb157774ac28e01ecc74f7",
12600957b409SSimon J. Gerraty
12610957b409SSimon J. Gerraty "719effd45ed3a8394bf6c49b43f35879176a598601bd6f598867f966a38f512d21dc51b1488c162cbdc00301a41a09f2078a26937c652cfe02b8c4c92ddbb23583495ba825ae845eb2425c5b6856bda48c2cafae0c0c2e1764942d94be50da2b5d8b24a23b647a37f124d691d8cefbf76ef8fbc0fbdafb0a74a53aaf9f165075784ab485d4d4",
12620957b409SSimon J. Gerraty "6881babbb48e9eea72eeb3524db56e4efc323f3350b6be3cdb1f9c6826e359da",
12630957b409SSimon J. Gerraty
12640957b409SSimon J. Gerraty "362f1eb00b37a9613b1ae82b90452579d42f8b1f9ede95f86badc6cdf04c9b79af08be4bc94d7cac136979026b92a2d44d2b642ea1431b47d75fce61367919f171486a007cc271d19de0d1c4c6a11c7a2251fe3aee0bb8938a7dd043d0eb0758a4768c95cc9f6f1703075839487879b47c29c10b2c3e5326ac8f363c65aa4ef76f1b8bd363eb60",
12650957b409SSimon J. Gerraty "c6ce60c1852ea780ed845aac4ca6a30e09f5c0064c9675865178717cfeb1dc97",
12660957b409SSimon J. Gerraty
12670957b409SSimon J. Gerraty "d8f12b97f81d47aebbfb7314ff04172cf2be71c3778e238bcccdeecb691fbd542b00e5b7b1a0abb507f107f781fea700ea7e375fdea9e029754a0ea62216774bda3c59e8783d022360fe9625621c0d93e27f7bc03632942150716f019d048a752ccc0f93139c55df0f4aaa066a0550cf22e8c54e47d0475ba56b9842a392ffbc6bd98f1e4b64abd1",
12680957b409SSimon J. Gerraty "e2e1c432dd07c2ee89a78f31211c92eeb5306c4fa4db93c4e5cd43080d6079e4",
12690957b409SSimon J. Gerraty
12700957b409SSimon J. Gerraty "a10d05d7e51e75dc150f640ec4722837220b86df2a3580ca1c826ec22ea250977e8663634cc4f212663e6f22e3ffc2a81465e194b885a1356fcbcc0072e1738d80d285e21c70a1f4f5f3296ba6e298a69f3715ff63be4850f5be6cb68cdba5948e3b94dbbce82989aa75b97073e55139aac849a894a71c2294a2776ce6588fb59007b8d796f434da6e",
12710957b409SSimon J. Gerraty "02f17bf86dc7b7f9c3fb96e4b3a10ca574cd0f8dedda50f3dda8008ce9e8fec9",
12720957b409SSimon J. Gerraty
12730957b409SSimon J. Gerraty "152009657b680243c03af091d05cce6d1e0c3220a1f178ae1c521daba386694f5bab51cd819b9be1ae1c43a859571eb59d8cbd613c039462e5465ba0b28db544f57a10113406ccf772bc9fe5b02538e0b483225209c1eca447ab870e955befae6bf30dd89d92ddae9580ccf0dfac6415ec592a9a0f14c79acce9679f52d65fb8468012cbc225152d9ed2",
12740957b409SSimon J. Gerraty "b341f4114eee547eddeb2e7363b11d1e31d5e1eb5c18ea702b9d96b404938bad",
12750957b409SSimon J. Gerraty
12760957b409SSimon J. Gerraty "eaf4249b5347c2395104a96d39fbf5322c9af2f8ec6a8c45efdc06a2b246efb5502952ab53b52ed9ca8f25a29cd1789b1b5333eddc29a5fbc76c13456a3eae8c9208c1381d062ff60a061da5d26cec73fb7a6a43eace4953f92cd01bc97ed078da19da095842afd938f1f83f84d53703f397fec2bd635f94ada5a3eb78103ebf4de503e8ad7295cb7dd91e",
12770957b409SSimon J. Gerraty "d14c7422c0832687786f1722f69c81fbe25b5889886bf85c7c7271bf7575517b",
12780957b409SSimon J. Gerraty
12790957b409SSimon J. Gerraty "a03e55ee76150a6498634099ae418184228320bc838dbfe8276913761516ec9021226f4b597ba622a0823ca499618169c79eb44af2f182d1cc53caefd458a3ed7bbea0a5854653f2b3c20f659f70f23ae786238a8d0e59c29ef49d53125e50abf43b6f65c31f16bc174e43468717dddfcb63f5e21e8d4ba0e674140a97cffab1d5c165f1d9aef968154c60ad",
12800957b409SSimon J. Gerraty "fa889888d3b984c1577fe7c38ca86f0df859291502fe0b2f6e82c778babff377",
12810957b409SSimon J. Gerraty
12820957b409SSimon J. Gerraty "2fb4178a0af42b155a739e2910b004e0781c1bca697ca479bf8e71430aefc043883cc7a151779013d2ad07a47cd652b5bdfd604130a1c565115ac51ff3c0ae56b5886c1ab2f0572e385e4fc33c430b874b46aedec49f9b6f45c08be3633bdde99ee02d7e9325276b74cc9d0fb6bfd85e093f2c2a8d3dcfa24308ec18c229f2072b8b32545ee0a9d46e3f1a0f53",
12830957b409SSimon J. Gerraty "254a115343d0ebd865e5d3ff6c61c3f9b65fe96ea92865a5681b1f1f0d1b00e9",
12840957b409SSimon J. Gerraty
12850957b409SSimon J. Gerraty "dd344dd531f415a590a9c1838f242af8605bc0c29c1a71283ff5cd8af581683c94c48095e9e9e042b73804e0fd467ecb78699930696f3b6a9890108b99a0e4384e8a51bbadf99b53c358d8cef9fd545a97a13399861458f35a2e86309009c546136d086f058c0c7fbdf083750cb17250c5ebd8247c6f906c8db978a26123d30dec58ecdb7a0afd6face84efcbdca",
12860957b409SSimon J. Gerraty "2d56bef53fde76ef9849f97be2ed22d3c3d10f23b049eca2a8aba0d1fec33119",
12870957b409SSimon J. Gerraty
12880957b409SSimon J. Gerraty "353111e447fee6f0bd05d562f30626ab9fb06384a620c49034a5eb3c0bc6d1eb1b86015053e6041ab8ac1cd7b4633512b0a318bfe592e2da6eabb44aa2bead0ba238158c2ea5db56bd7342efccf9d7fe76b8a6af45e0ad594816915f65749054f1d1b7627e4355ecf4e3af72e4d0f5b51877751c6f110f57e86ce942fcef640c31d94e98ecc959238683cb28a3f178",
12890957b409SSimon J. Gerraty "11b27034db724b46882a3086815a835947d19322885e08595be271c511ef783d",
12900957b409SSimon J. Gerraty
12910957b409SSimon J. Gerraty "c4e5a5afa1c7d2edd5a21db8b4891ed53c926131f82c69d323b3f410114281fecbc9102bfa5f298e06d91fbd7e9b9661bbae43e7c013f3796557cf2db568de7c94a7cbf5a53ee9326ab4740cadbf1a0b1f59b92040156b977eb4c047a1f34a0c66a85f776a0d1ac34a5ca30b099cb0bbb2ba4c453edbd815b7f14fc69e8cce968bf453171374c428eef8342459db6359",
12920957b409SSimon J. Gerraty "f1ebe75725c26b82ffb59c5a577edaa2f24e49c9070cb9ca007e65938f33dae4",
12930957b409SSimon J. Gerraty
12940957b409SSimon J. Gerraty "3b79da982ac5f2a0646374472826361c9d2d2e481414db678e67e0967e5cf3cdd0c1f570293362207191ecd78fb063347350d8135a4f02614d1de12feb70a0046939c078d7d673fea589460265290334d217d6231274ae0d3891e6f50da725f710c983d9bb16ede20833caef34f9dec3c36a6f9fc4eaa71256ac3a136b6a494dcc5985ba5e5c9773a377c0c78387bc8a4d",
12950957b409SSimon J. Gerraty "1fc7c4802141e2db7a9199c747d885a72d8f068262863843c9f4cbb19db38994",
12960957b409SSimon J. Gerraty
12970957b409SSimon J. Gerraty "cf9552db2edd8947fd7fbbb2f7189a578343e742891ae6fb85fa0f64da8706e468f0cdc5607539db5726a2679aeddf3ac2ce711e886eff71dad203132e6ac283164e814414c7f686b011fd02c95f8c262920e9725c811a22c1339e0de16e5acd0036d620f2dda98e30c9324c2b778961e0c0b507ad5b205463a448199c9bb60b4f303420a1be3b3cfed5ab0d693cbe331036",
12980957b409SSimon J. Gerraty "b51adb0c2375c9d302ba61859040fa4bfa0091275eec1053fc13950aae706c25",
12990957b409SSimon J. Gerraty
13000957b409SSimon J. Gerraty "4ebc9225da5f168c07ef62f621d742cd7c71bbd063269f5e51d65ef164791fe90e070f8b0e96f9499ec21843ee52290fd219c3b5b719ebfedcefe4efbf6b4490d57e4df27d59796f37d35734110b96fd634f5f20bc3de9cd1c28479464be84270ae7f16211f0be8839e8c8d0734ab22097dd371859d9be527a4b2fe83bba0637170ba6e3b1a2ef1c0cca121ffa57a4ffd78af2",
13010957b409SSimon J. Gerraty "54a3fd90ae00dfc77644ca16b4964c3b32a4641c5305704ee25d9f8fdbfb5c7f",
13020957b409SSimon J. Gerraty
13030957b409SSimon J. Gerraty "a83f74dcbb48d679db402433020e33dacfa2c37f1e39b2d9dcdc70e81a2ab3d75f586c274376f90a39f49c0dad642cfa4f810afdae7157050847646d60cc6adcd27f7c6a24dab9049dd7c6111ab37c555ef2dd16aaa34d7e8de5ff41feaaad80a8bb8cec85fd7f2eaef28a8772828ab3a5fc24143a58fc0c15bf27ab1a4de28a8a1584f68f65b151154cd1b6dc5ac0dccba7c73d",
13040957b409SSimon J. Gerraty "5d084841c35b1cd9c43082746960ff5bb2d3de78f9bfdd80dc9ca4f5eae2a66d",
13050957b409SSimon J. Gerraty
13060957b409SSimon J. Gerraty "734f872c431ab145706b7517e496a3be98bca885fca0105a99b54980f47caa84b60cb3720bf29748483cf7abd0d1f1d9380459dfa968460c86e5d1a54f0b19dac6a78bf9509460e29dd466bb8bdf04e5483b782eb74d6448166f897add43d295e946942ad9a814fab95b4aaede6ae4c8108c8edaeff971f58f7cf96566c9dc9b6812586b70d5bc78e2f829ec8e179a6cd81d224b16",
13070957b409SSimon J. Gerraty "14ec5a3c2ad919aa0f0492f206710347e742e7a58d6fdfd4b2c93dc2183b7b6f",
13080957b409SSimon J. Gerraty
13090957b409SSimon J. Gerraty "10112498600da6e925d54d3e8cb0cdc90d0488b243d404b9fb879d1c8beb77bb6579b77aebdbf3e785abe61df17e69e8db219f29ae226f7ca9923719350abef876ec6b3920ebb5c28ccedb2a0b70d5d67a0c8a6116b74341922e60a867d24aa96cf1a89ca647d6c361c5922e7f91f9db114db322249c6a50dde28093c94c01166e11d66c26f73c322d1875f0f8e6bd41c86d803480d8",
13100957b409SSimon J. Gerraty "c9a88a3f221a857cc994a858f7cb4567979ada7834a265278e55de04c1fe496a",
13110957b409SSimon J. Gerraty
13120957b409SSimon J. Gerraty "6969a27ad5d0aae6479b2b044bb4b043642375ff503ccb538e17be2f1e41f6aa88b1db991ffefd6087cfb20875920192b671be8b7381f7e1b33d8ff5213429f110fe475cbc74b3ecd2211f9b33f308fcf536e0d0abc36bd5e7756adefddd7728093730ec339c97313179b9e40e3f8e2a2a5c21f5836bf0d632a7961239a6a7f77b44dc700cdd70d8abbfc90c8dde5bc45dcaca2380df4e",
13130957b409SSimon J. Gerraty "bcdec7a8776380df27a4613cb50b7221995d3f752fa55691798ac2dfa0b15599",
13140957b409SSimon J. Gerraty
13150957b409SSimon J. Gerraty "163cf8e89b260a81a3d6e4787587a304b35eab8b84faebcef14c626290a9e15f601d135cf503bc9ad5d23e7f213a6146787053f618c6ee90467e3a8df1e03387928acc375608339f7fa45788077fa82f87e11d3c58ce7cf3f8dad6aeaf3e508b722a2a62075df9fa6af4377c707ffe27aa5a11468c3b1c5fce073dae13eac2d1c9a635c5502b96115e69e741a262ee96a78336fcfc34573c",
13160957b409SSimon J. Gerraty "181d10fa5a58ca57077be52eda53910135087312ca7711084e4a5213c81cb4a2",
13170957b409SSimon J. Gerraty
13180957b409SSimon J. Gerraty "3a023141ab4db8b08c5cb6792ad97abdf0116d512ea8f4141a8b987f1527657d2fd98f7deca55cc6492a3d0bfad53e40f656a1ac3550c63eb8554f24cb11819a87c5ec009af84e304b69b50eb847e46162a4f8e1ec284b902002994e332461a84ab08ef23cad57959aff64a9ed9632c73ee5b818dc964bb2597cbf25d6c9cf508081be7a5b2e3f9e3fd69305202af11a92002a7b8b038d4c6b",
13190957b409SSimon J. Gerraty "b75b698857675f8aff2b482ac437925af3ea86198484cbc87b60e6dacb13e7e8",
13200957b409SSimon J. Gerraty
13210957b409SSimon J. Gerraty "2fd7ed70c6946b11c819775fd45bc0924c02e131ab6d4a3618f67e6d3b77801d4f0d87ea781bf9fa57929757dc70f5945c872eb4e480d547cc1f2fd68fc99f81da4361e7e2bc7b46fb0ef1e3674139ad6b50ee1da830c960a90fccb8b9dac020f701e22fac7eda3edb14eccd1ad47223a1e68a35a1860cc9d74dbfdb60b2cc40cfd072897d6afc2a202cf0dc9f338a3f25d068c4758987ca7d61",
13220957b409SSimon J. Gerraty "85c9275ec610ffbcd7f785c0ad24b7700b32ee352e6720f1ea2305bdb7f45277",
13230957b409SSimon J. Gerraty
13240957b409SSimon J. Gerraty "cecb838187223873bab25205a54dadb1ab5a633958cbef3aa04f930467c8f7a947ff12548d964ddc843fe699f72c9377f1c76948c7a2fb5f58b1c65a94b7cd3f3bfe80cbe74be2064d11eb1bc0e52b67f732b1d00f2e2b58d30c4ff13c7479943430958d9f283f199c9029320860bdaa450404773955c74e99c9f47367e642cfb9fd1843bd14ac3cfa246887d885916763a62ae54c011668304e7e",
13250957b409SSimon J. Gerraty "3a5dd05e009e7f985a2668885dd0ea30c5502a1b5c575db6a4c1149c2e6229c1",
13260957b409SSimon J. Gerraty
13270957b409SSimon J. Gerraty "283dfdb2e1dc081e3c2b377ba5bc6491cc4af08c40fbfa5e3fe2d45fcdc8b736032cb5fdaa88f0a008d60a86fa53dc7443836bae2475175f2d48163a52ee216241306d87f3f2dd5281b976043a6a135af2555ab39c71ee741ce9e6ac56d87ff48b510d9ae5a338fe50db643b8c8a710a80c8a5e4d278e667b4ce2dfb010f37b588987e7ca822676a1d44bd7419395e4e96e43489eb1167ff9efed170",
13280957b409SSimon J. Gerraty "5643c4252210fd45a2a67cd0a97d37e80d1b4a3c2fc86b0c3a3b4d3c1723b9ec",
13290957b409SSimon J. Gerraty
13300957b409SSimon J. Gerraty "f32d2e50e8d5df7ce59a9d60255a19f48bffe790e3b1e0ba6b4bc53d920b257bff8d8003d5faac66367d784706f690b2f1f3a0afafdcbc16866d00a41169734f418d31d7a1c3ca9ede99e5b986f1294710fa5d011d5fcd13fdbef02b755b49cfbf168bf3d39a00cbe5d82bde2fb4ad5cf0fd65b1b5a3db5ad724dff745486da2830ed480f3e61795542094dd88a5e3989ae501e5ff10ae921c89133309",
13310957b409SSimon J. Gerraty "1ead94e30440b647d4cb4d7b3ed6b87ac07e8d72b3e5f28352bf14a78232ff1d",
13320957b409SSimon J. Gerraty
13330957b409SSimon J. Gerraty "8bbc18eab6bcd9a3d6b90ec56d3be949e02a8866d69c7808e1ec787e600c7f72a41c001f513b6cbe079df94142dda2447f956e41a12df60392f0215d2d65331b5cdc06397d4796530b4bc45d7a975394627537b4e09e0f6c3a53f00fc1a9648cfc25b2a00288604a28ecf780dc100620d1f169295d9acb2b1f3c6afce4811aadcb1e8dbca8a8d18ba7a81a1132f1c2d014318e07dec7332889d4198c5e95",
13340957b409SSimon J. Gerraty "429f15c653f92734bfe4d1749e84da8c28861b70c5158bf59809ece810221774",
13350957b409SSimon J. Gerraty
13360957b409SSimon J. Gerraty "a3d0eecfeff88df1cdd1e86df7bd2ec3ba60bcedfc9c42ef7dc021b05dfc1808df19201a6c6694e4dbf69514ef08ad1d21c7b28ba034ee9397607cefaedef5e9d3784db53a21f703a22b50d5dbba3a8e8579074c1a8b9a782fc5c89cf61a047408563c476110fe77acd9df58c2ba1d3e6dde83da718b8dc6cd57cd5e3e988dd2051cb679ea1af16881690b44acf09e54615eeedaad1b11a4f97e53de8d40d8",
13370957b409SSimon J. Gerraty "afccfd3b18f6d292d2e125884b721b3e3099c4dac8aef05ab0fba26799043d02",
13380957b409SSimon J. Gerraty
13390957b409SSimon J. Gerraty "2ecb657808b29574b020545fb7f94071406047ef4de20c003cf08cbd91930187f55b079d7f99fded33cdae2bc8623021af990d4650c4a19197b4c38faf74a8b40d3803efb1907180a8e1150ed6167ff4f293d3ddd26a2790e9d22c0d0ed511d87e48a4952500bbd51943d230687df5941334e1dc5a3e66a43a320f5c351c059c517531b76352a1938ddb2db806ff5aa619667e6c71a7257693bcb4a7acb34ca8",
13400957b409SSimon J. Gerraty "c994acd17e08e8efd3ba83915245781e3727bac445672c44e6335e4f7deaf90b",
13410957b409SSimon J. Gerraty
13420957b409SSimon J. Gerraty "e649888592d192c5fb59f10560f5f5a7b0ac21739c35dd80f1fe6b5825731c572f7cc4549c476b84e049459aea7fe533fbfaad72b79a89e77d1addb6f44cbbf5e6a65a5552fec305bc92ced3c84b4d95074387c71184e875d413f65c2b2d874cb3d031d0da7d0311383d72f823e296937d8f97bad17a62f29ef1a091f39be8233c01330d5c4c9170fc501b5022ca29f605e6c59220055f2585bcc29e742046432c",
13430957b409SSimon J. Gerraty "88a9aa4b4ffac981d1ef0e8b233cb309695f89211cd4e94d50760909e3cb919c",
13440957b409SSimon J. Gerraty
13450957b409SSimon J. Gerraty "816b0bffd99b0f7821e6093ef152723a9cb45f7a082ef8d6bdf72cd33b5aa3c79102f43e2b74199decdd20057d0e227ae4c57945582e2e9653a9b16eeacecdbc5aaedac7e35c35cbd9adede7f83bbf36f8b0453d61416a85a17821885b3757d203fa2560a85c4b4c10dddaac0ae230b700fd2929cc6f94e9ccebe4e9399d284eb46b3ed2227b4366baf54d1b5c0a5d4225358fd240c0940bff8b62592a092a7b978b",
13460957b409SSimon J. Gerraty "c593f3d663c48426ce892f22584d49a3335cce3456194b7b5ee4814fab477fcb",
13470957b409SSimon J. Gerraty
13480957b409SSimon J. Gerraty "a10918880cf31a8551af80bcb0d1a6ed71ca42c71e533967ef0fb71c866b7e6ddcca7e5d7cdfa6edef59fbe377c6e7ca00b1d33a530ef8598dd971a2cff995e5386a858f109b012c4615802a1d5e7fe0221d19cf617ed827d8d8cb8d2c8ed81b9b3354a832f1d14a402b371a0a611737c0543b0eb06b82d8ba56eb6304f1ef16ef6b143049a7bf50c4e2493aa69756d8c39f627fa89d9d741a99f9afbfeb81de1a5bec",
13490957b409SSimon J. Gerraty "d557aed03eb7c4c4c8091efdee992c9ad7f8d2e79e9296b40a08acae37868d48",
13500957b409SSimon J. Gerraty
13510957b409SSimon J. Gerraty "de7ba70e45c879ad6c90ada6fda071c2b692840f7893eeca9b69ef8285b4357b7b735151b6cb6cddba04365ce3d520ce41e1cb9da681c07ffcc4619ddcb420f55ddbeefd2a06f689d8498cee7643606865a3f8b96aeb5d1301751438f4b34fe02dba655bc80280776d6795a4dd749a56cae1f3abec5a2d4e5183ee9bf5382c0492199eb3b946707022673bc641f0346119a3a4bb555698f895f6d90e06cc1e2835ff814d",
13520957b409SSimon J. Gerraty "06cfdd9cd7ce04abcdbf3121a9ba379505dbbb52f148c9d28ad9b50facf573ab",
13530957b409SSimon J. Gerraty
13540957b409SSimon J. Gerraty "6e9a5752ff8ae7c385b088e651ef2543daae1624562052f787c9e0f5d83e8f01a82ce7d3e69b5f55de74d14d52412a3dcd356687346cbcd59e7315b8650bc3907e2a70ab054354b11cc7ac3ff6ec67d22fad22e75f125660eeb1d02a2a75621d969ed92385092e9de8b20102657742c9a91f328afe9a8a60208af9914c03d4719b8f0a838e7656e2ea3cb8dfc66a25ece2927eb93a8dbf9cdb077936f63e82543306ea1347",
13550957b409SSimon J. Gerraty "cb1e8082bb94629f162f20d815bcf3b212007bc049951a29ddb18a1f556bf3d1",
13560957b409SSimon J. Gerraty
13570957b409SSimon J. Gerraty "b05007119789d382fa750d2087dde79b37a5459c24522b649ac976b07059cbdf99fcce56f6da94246e0f5ae241ae77dd99068f7863240acb5c99c4906f7d06403eb3b679ff6fcaa389f602d3aea5d7efcc35af149f3d523459f8a104f5498615c8fc2740594f5f4872b16ebb77c9ef19f7ba0b3881a6ede7b97175d2aac731a65e608975ac82395b52c805624423a7a3431e0daeb066c12ca389a9c338fef03a296644dea211",
13580957b409SSimon J. Gerraty "9021fefc1a020cd0c579e3dd67a66dacfabedde9cd36ddfc7d5c5c7c47be2721",
13590957b409SSimon J. Gerraty
13600957b409SSimon J. Gerraty "a19909e14ddf9b3c470df6bb604604ad767c38c83b2b747937472b791173c3a10a733dffcae417295f2a71d183ab709a1d3be02a0bd61d811f95338967db44eeb2cf2a2f4f105ef618a418a5b031b831086f653328ddf43c2cb30b698c188638a196199a65cb374a7b61335c6f40a6193e01100a19a6c2536689fb4308935128e0ae5268937d6ccd8e4a0a21484000fbc7da29d8669b4e6dd5004a3c61b36c6676011dc0628ec3",
13610957b409SSimon J. Gerraty "7dcbf4dd9c27fd8340f51c553898502cec53d3bc83198352fc58465625c076a2",
13620957b409SSimon J. Gerraty
13630957b409SSimon J. Gerraty "b0dffe4a5f64f612359397e4e070a8fa01296c1d8cee25177104d76a7c154e4279cb62a99d9d7afa21e84f983041f3df030a115b4b437638cfa3d0fa56e7b66fc76be9e18ff7da8f43db6c5f863efacd2eb39c27a20da6fc867572d29bb96017e0e71a5afe1b1dbbe29575a0ac0ec7aac84c95e85af5be4ae0a14458133252230d687e7cb1b04b65483df2c5685a62601aff85053ba2c509234fcff585fb967c96169bb0725f6d75",
13640957b409SSimon J. Gerraty "8e7023d18902a9184a0191f1c7a2b79030e833800baeeb33e2d0673500245dfa",
13650957b409SSimon J. Gerraty
13660957b409SSimon J. Gerraty "dda3625c78f733c7df0b5f4987cd30d7207afa40ca07f3b686c0458aea2f62371a3f98a2f3a1e5a0896f0cb9d40fe82ca65b0132e0fe5d87e621992750483855e3763ae2bf98f0acd9201065acf105962c7b88e3fc277490e0f5d6447563440d209271a544a4fef4b86892d578392c1d9a23b8da8448e1d85d82276ac14a3166b9d96472ea8cb47e0c8dba929eb007cad89bb99fe22a4c674312b21f9cc4a56996943cd1191abc54bf",
13670957b409SSimon J. Gerraty "ad83957a387225aad811b0737f582dbe7eb616187a8ba8e09b00db5d0bee4a7b",
13680957b409SSimon J. Gerraty
13690957b409SSimon J. Gerraty "5cd623be5b6bf6d1bcb414c826d0f4ce60793791b6d82dae9f9e9b699e50bba266e2850541882d80b2c9edfa59d504421818ff45740f37853e5b9bc67214af0a5f5fd5c00843cc39cbb8765b4001de99643c7923f738ac5922868f865dd3f1cb90759c597843d9e34daa3754a2fd89bd8c0d2e9106fa95149448ff11273587cb414a603759315f6881c6b94b46700d94d8b2a5f86bfdf99ddcc974cf98e47bf4ba09acc273b463afaf35",
13700957b409SSimon J. Gerraty "f754a71e3439760aec2d763751e160d05d3de0809dd4fd6aeef588da8b86a517",
13710957b409SSimon J. Gerraty
13720957b409SSimon J. Gerraty "42c0a452e83840ae858c094c044961d5f2195ddb34a21cd1f5ab575be3803ac99b9872dd617688d515cd6da562e756853947c9ab7e8ef85a019b4f1baff6494b0a6f87d5d602234115fe42ee3667e89b8a98112cf72cfdabf01fcb8ea4314938768b0bc2aea5bafa6e67aface78fc021cc525ae60746d1ceac7ff33a2bf8e398c935252a5127f5090650dd69dd28861ee9becf6017a21ccb1b03f0a9aa15bf74eab5fd9727507b75c701f3",
13730957b409SSimon J. Gerraty "d5980482d666dde4f2c3a99b45e523fd6410be999a96ba8c5df397c950605e70",
13740957b409SSimon J. Gerraty
13750957b409SSimon J. Gerraty "fece673103322483b85340e991e478c2c15e2d795a98adb5b697b4cf17a733898aaa4ffd11b1add300c9edb7a818740a33286fd8cf82140b0f7f2bde8d5bce94d58b6d697e5015c99a8df1c051d611b2c8c96a4c48a11eba9c08fe1aba2d4d31a617c75d9439e2cb4d4654ead346d52048ea26bb0c1c522a26db346de54639cac6f668c299919f43e09c1f1f78914abd7b32ac0f641c39c3749fd5be55cd1ac6fed1557ed683d1981c395946",
13760957b409SSimon J. Gerraty "17f4b2f60cb364da5e8a62db58e07eb1c44b888c433adc1e62461879cd271463",
13770957b409SSimon J. Gerraty
13780957b409SSimon J. Gerraty "a542b2bdf8e04ec2a004cccd2f89e7bfd17ace1ad285c91360ac20e9913e3976a806000494c28b61b9d7ff36f342ad94d8d281d03e949d91fe8f4127f7b2ee1e550bcb13133a47c7be2400727cece45a4e1f95a3922e1269cc22950ca58bb7cb34b9da957d2fc81b3755982ad36dd238b9c8d33dd53a72c452cbe341a5afdca5ce79f730da8b5886add18f06feafbf57a33700430fa003c919f3f56dff08a5d3aab1e88c33353d30a700adad07",
13790957b409SSimon J. Gerraty "50cf700b5b6c802e20da4c1f9b75bd0a6632678212bd0e2418201f3a10389994",
13800957b409SSimon J. Gerraty
13810957b409SSimon J. Gerraty "8fa67f49db80f22bc267a70e5636dfbc8a21c83d9691fe4b9c3051068b3fc9e94430e7fdfb712e4ce086e299ff5a104e65d7ceb685b4c46cda8eeb14cd3b9548d85baed5ec2f412810af3d034cd67a75c541f70829f8663c4d8cea3415621fb0954e5b3b756333a69a0a41b402522517f087ca9b4a06eba23f4fd5d02c5c6e07c132769660b50dadc5c07515ec751a1d2fd2cfd8b0855b85f602344fdbd28a37a52e874e73ccd627dbf9628cd1e8",
13820957b409SSimon J. Gerraty "3379265620eb781d6b59e331cc525e60e8c063e19f96cfabb2fda9aa83cdeba5",
13830957b409SSimon J. Gerraty
13840957b409SSimon J. Gerraty "23ae9cd31da25c0187c0247be19e089872742d772f73d0efde5889c97b40d12ddbbec35b8f2b1f9c0b3d947708db3f2726306f4dd6ffabe37736f671bfc551835db0825adc6314e2cb479fe41b92497dc8638dcfbc0e3bf6f0b4c03dd418a892f1ad6138ccf442bc0e04cb2ae36a2f80a0340f63a849891190fc719781e0de44dedde95d2783b1121e9fa3b1280cf81af5cc7e7363579c1da03390e68fc5fc806e67a132b5bb6acd413eace2b120ac",
13850957b409SSimon J. Gerraty "a17a00ac106c0af50c4f449d3cdcc2cdbb9848d2d85a36ff434099162e25606c",
13860957b409SSimon J. Gerraty
13870957b409SSimon J. Gerraty "3bfa57a5f9f60203059defd501977628908ee42116e4674dc0a52a32c5bac02aeb60c6714cd9c47c5a61558c21648884ccee85f76b637486f3709a698641c54bf5f5eb5b844f0ea0edae628ca73fb2d567710080e8a96c3fe83857fc738ac7b6639f0d8c28bfa617c56a60fd1b8fbdc36afe9ce3151e161fa5e3a71411fb8e123d48762bc093558aea7f950706bb72f8dc7ca3497a2b3ccf345ad3d9eafde10889d76c61d432e3a165d34ad0ee2d9619",
13880957b409SSimon J. Gerraty "1a2cfebf3483c33a5eba84121737d892cf8bd6c3ba324fd4ae4c2db42872e54f",
13890957b409SSimon J. Gerraty
13900957b409SSimon J. Gerraty "e9b9525afd5634cf8d16df4ae7e12e8ae206c6ed6e7d4dd96f6fd75accf7a10cc22b023c7f569e4aec88dd51ca519c0a00c922ee33d3559b98a32d79067e6a9d50c182eed125de864841455be751991ea635c163ddbde6031223e2be0fd9f5253885bab81c4b5a4b4a4a00ae66698d8c7c538c9493c068d786f7dc710f90ac6c257f93e1884e7c609aaaf5927021e01d292a6bc87e6643e09b2505da2d2cf639bdb6f3b33cb8ab8fdf690b512d02fa9956",
13910957b409SSimon J. Gerraty "3ff47b4bf4f908aace95b0468a54b7e6644fe07df69ae327c0ff2e45325b97b9",
13920957b409SSimon J. Gerraty
13930957b409SSimon J. Gerraty "13ec10c6b27a6ce6fdd5e2314e8626a28a69f313ec62f29b044cde1aff32e61228c252b9affe6a4ca93593a55932bc10aeb3f85b0c1d6c2c506d6c970e72e1f01c3aeede55cad3b1971111f60e1fcf48b5937c691952b691617f6a058ba73decf83b2b5e2b446ebfce52a24bf5b526f1a7f0c5659b6b96713f68208cfe38c2adc3af5361b9d5051c56de8fcc975d8bb48db41c7818cfd574f312d652f08f38dc857dac0e88e55e70379f20a37b7dc4396ec6",
13940957b409SSimon J. Gerraty "9703a69f279ef15b843b355f86b3f7098a46eafcad625920d93e0e3fb136fc5f",
13950957b409SSimon J. Gerraty
13960957b409SSimon J. Gerraty "3d8263a177af8c5beabc76a4388e0816ab1bf1f5856e985791f15688feebe4ac6d480fa64999b339575be66d8e7c7435281b8c4ef990b86a00ac128e3c41b6b9c0e573c60af4c69391d408639d7de6815b38122731a6389d4f0534a587af82175ee3f5c963c8acb1bfaf434e0e9946436df9eb46d4bb0038a7842295873c300f6ecaff76fb1e4fdb0a75fef588d87cc486e67f738bd4f8832fb24526e5f0a8e91920f8967bfd96599aada321b4437049cc8836",
13970957b409SSimon J. Gerraty "e82d636a61c7657029699374a2da3dfabfae366e7708c7e4ba2dacd8b786a36f",
13980957b409SSimon J. Gerraty
13990957b409SSimon J. Gerraty "01f793fa05548645f644a64ee1b5ff7fd38eaa233f874cd59f3ddf385e86b5e9f601b9b256f2f901864d61988d11c98593d7335543ab4d85731a3e39078c9e3012d5c6f83f064b5e7089c529a46dd5081efe66c8c49932cac5be88b57e674d689f98423389388446fb1f5969ee7029eebd29cbe489f8038edc5148148cbdca77e375b3cafc2fada07038a5c133c3cf21b881eb125c71c6b801fa03bdf9371b472792a3276094ce5417fb32973a0dcf87572d4db8",
14000957b409SSimon J. Gerraty "98bf0fd777137c94300ab5b1bff7b3f487a03a788e6bb96c715ba6f10ba1922b",
14010957b409SSimon J. Gerraty
14020957b409SSimon J. Gerraty "71a986d2f662bf36dcbadbba0657f4e2797b569610e2d82271ee6d813f01f6db922a5a4ca405d9e7cddc9dfbb1129294b8c27845bea337250c2f721887045e50288ad513acd6a6be8dce300a308e2f8e600bd585fbf61dd2ebe45c4158ab18101c0f1eae789ecfc205d8bb6fed9371d65a9e94dd2fa5322ff75452851abfcc2357025ea56e24fbfb1d4266b34ee900768fc3dfd6c2761f4716c97d6a36092192c0abbc81f832d372be535b5dbd578576e6c2dbf61d",
14030957b409SSimon J. Gerraty "27255d504a38296857b8d382dc8ad4f1ca03ef3a8d1983e54bc01ef97b04e581",
14040957b409SSimon J. Gerraty
14050957b409SSimon J. Gerraty "69ee06f5f53f74c76674751f8fa80efb42f43e71132ae0fc5ec6d2148c21570191e8baf0b9cd3547a57c103690d10d8ed84804d7b9b5cb9d5b35580a0f642abad5d0e5ca23ae3c32e1cc1355b8c7e5d78c7e64af47c6607dd960ea1d7d28b97c3d8ecdaab84a5131234cc6a68ef25e7d687ea62146c76845e02fd0745cd4cdf0d00bbab9020a3eec72e4714e9abb4029743012573d1fac9c798a513937d22ebd962df61f8854ca0ad67c5b7864885282b77df076b436",
14060957b409SSimon J. Gerraty "600b41954a9398ee66ea0e603c8c80d936fbc8be98c74f44ae13b0aa4b50b8d5",
14070957b409SSimon J. Gerraty
14080957b409SSimon J. Gerraty "2a74e9800ce49aac07af3df2e451f245d4ffa5304c318574135eb7f39a064bcc8bf66fc8a4c8e2f5c6a9ac90495f0d28938ab301e9292fb78461aa23e87ad482712b1ed42f172983f4977e45aaba7f43ea8a9e7bcb91cc63f89c34cf06bf2a1404995e6e53d9569fb8011bd9af6b32de0289cd669b7043c19698bebd9bdd33ca6bca985cb81751913a70eb14ff790c41030eaa8a00cf7c1987dcaeb650ddd9eccf46326707d902a1a36c56be43ecf7b414a29caea3b55f",
14090957b409SSimon J. Gerraty "4e549f206099a8b3183fa3b86af220b1b6554ac3d8d52c54d093e68f60597256",
14100957b409SSimon J. Gerraty
14110957b409SSimon J. Gerraty "5b2e2f2fd3ecc733a6198d34e5d143c176b60c3cc3dac6deafdf99fbce5cd088d583e8da4f01e7b09226f074f24613be345f691a46fb610b2d5855503ec761659152744db3a1a78f9b1fce7fdf584dbe28a52e04e40c701d3a62a13243b2af4a77e3fb106594afd7a84b52db16cf99ca3ad2808305d39a1dc043a52b45e7623e6f7da4accfa2a690a0f3a112fd739ee9522d891e111a8812a6448bc2ac2c234a616997a8579335c36d5fe6acfe0b052358fd715d70a7e104",
14120957b409SSimon J. Gerraty "24a3de94be98126ce95cfd3140754230b6880c71cfe4ec215c3f451bdc8bb690",
14130957b409SSimon J. Gerraty
14140957b409SSimon J. Gerraty "013944b7958b6b3686b14bdb042f2f5b42768edc20fdd6a90894692b15f6e5157b9da9de23da95749524102f1bb150032343d6fbe64537e247162243fea59f95f53e95aff2a38f82775fbf06e7574475e9a2a8b8119aad1ebe3349543e8cef9239c410124c0fe2c6f409604aae4a92185c3a0efbeb26bfc63394e5451ed45d740dd823ef774615aad3caf9e2b9b1c25344b40facba11f5406fe1fefee6a571a33a22d42ebc6fb094de4c94b650b55c9068b7b3b3c783d7f53a",
14150957b409SSimon J. Gerraty "009661924d01ad811d4c598580eb954362b8554c5e9cd13686acbe41ac8c3940",
14160957b409SSimon J. Gerraty
14170957b409SSimon J. Gerraty "72c2880163482bbe822cf72ff0e02be7081d271b366fd94c0cf37926925f76a9de44b086e590e7cc915773c314d336187ba9d03b866d1106b769b49fa99a4a9fa3fc74746d085504627a4792c757cde65b2fcaa82f9ff00eb81b7ab723ea1ed6e8723d92a2b65ead1e1dda64b275d897d0377c2ada0d5cab38913435a958da94d62f74a92da4e810ecc994017c344074014a50892fbe3e265f5448e2e2eb662295ba7f81b5dadc76f504dd31ce9debc517efad8cd5ba7fc754eb",
14180957b409SSimon J. Gerraty "77cf32d62a3d0622cd90f7c858ce1ae3bda60f9edc9cf50f7ecc9d7253d8d18d",
14190957b409SSimon J. Gerraty
14200957b409SSimon J. Gerraty "c6dad2ff2cba3ed8873955178068b5704cbccf1e8c62eed472d275f726a7670a68ae2d6a763d943b30c616a27aab5a34e254feaf838093e828d8e905b5ca8decc39491fc8b9f8bfa050fe04e5198436f5593789ca8515ecdaeaf2ce905eafb3920b5851d32892cfd4e3d3e83ccd67707eea0c74bc47e56694c7ec609deb0b8d7c739913535a37e2c5377b5a9b40efee6f5a472269eae83a54a6d3dcf08c4ccb000473dac5a9489705be6cf28d1e7e1f2b2c60293008aee6aefa61b",
14210957b409SSimon J. Gerraty "8708b77ac39005607b179857c037f64860540e80ed7c7a4240e09ae62c88f87e",
14220957b409SSimon J. Gerraty
14230957b409SSimon J. Gerraty "02553a2117e654ac28d948a6f67a83daf2089a95ff6631ff78131baa755cc36c4ad0ca6a51f5f176ea393a9bbf2b4af54deb12c6a0dfaec75da88dbc0655d34b7ad6fb0ebbb3c1e7f4fe3f94bb865683934d4fe7b53cc20b1016b7e68eab0cf1994e1735de888ba8500ea0b970f16e2acc159a1ec6e435739743e15194c53603af1f640640dd19600653a53368d55c92012b3b935c3fcfa6fc195325a00d192cc5332baa6b1831b81cb3952a2b9be6643a777a70feb5584d477f5489",
14240957b409SSimon J. Gerraty "376b551c1e8f908d7e1979efa436ab69013d2e85c34430dc826179b4f94480ae",
14250957b409SSimon J. Gerraty
14260957b409SSimon J. Gerraty "9945c4f0e067b943986b6841b8fd21109e91d2f2549c711a11039abf03d37a6e4b34eba44a98e09c1b38046660c19e39424ab80ab38a805df648ee5c6212a72663322269c1de093325afe205d955ee2acf885146e5417432672ba807d5540c79e729b067cfa1faafbeb84947a91fd98a4d32e7cf712a15406b940feae5026f10e100dec5fb497cbaee3b83545a892701c530c0cddfac2a300a6b6c2a19829992589ff4accd3e57f9be20d65374f99f393e6a2467b82e7da94c9807f2fa",
14270957b409SSimon J. Gerraty "a4ab2e8f96b69097d84596b628e7bb76f460c001043ce5fa6e379fd29d1eabba",
14280957b409SSimon J. Gerraty
14290957b409SSimon J. Gerraty "a4d7897eaf5c49979b361c39a67f47e26c2f75e5ffe0645539d4de245138eb8cadaa45aef7fa0c7a732dbbce90c85be2bd4bf6e37dfb4fdebee4d0e0671fc45c3051c6ccb674799bcfda7a431a6e93b3db3e32f30636190a9a2e5620302876e0d4d2f6201353fac4554341df6efb591c6f100f5dc21a2aa176ba592bd7db69e14237bbf2371df6bbb072f9ecb1f714e621c97768d82eea6bf98ebf4a82c005262188ff894a5dd549866f88b00ee82bd99872515d71fac230ccb472c55a60",
14300957b409SSimon J. Gerraty "9510ff5231813a865918badd0011f05915364165492ef17b85929a63e4951589",
14310957b409SSimon J. Gerraty
14320957b409SSimon J. Gerraty "22813ee9edc5c2a90d8b3f07b48d9534e60f08312dc296d68fe78719bdb7478d8d037129aa182c4b8ae5bafca1604e76d5251ee43160ba68ddee9c624ebf00f0ba7ff6b1cf75b5cfa4ab323cf04ff13b7a591b23d06ed25f3c04c1baf4c8f7da913cf509c2a5053c4224ce4d0723268cbdf2277672b285c493731ea81799d353fa8497baed70c59a4c99b7b950a39470863a69667ff67c9ec981ddb41ffb3d63dd9d034bb79d9df1a95214083199e4efbd770a7a5f005ef5c877236674b6dd",
14330957b409SSimon J. Gerraty "44f8a8b05fc643566f1f53a93a122f7902d2cab68bb02267c0479339371a7304",
14340957b409SSimon J. Gerraty
14350957b409SSimon J. Gerraty "eebfa2629596f61a926c4cd472ecb03eb2ecaf7f7650b12f7d2b8aa755284b7ccb295e46a62dd2a69577f38765ed1ea377bed34972470c5e3538cda310f2fd353334745a66f7557afb969e6c0132fdf4bb55e68951d5e25bc4fc2a9427e574de0d290d263ebc28a0ae11760caf85f63765fa0fc47ac2dc2c14c0c70404c9597f415050339443f2209430a2eed5acb1765df5768457d6a1db0ccbcc7a0e66531eb6f16608d1555c00973b4a9add70d5b88b8e44504fd9da709367627fad840bc5",
14360957b409SSimon J. Gerraty "9949d3ac3c05b4a08b85fa371811fd3f0b50c71950fef50acbb59c450ab1c587",
14370957b409SSimon J. Gerraty
14380957b409SSimon J. Gerraty "ddf38f51b732aea3fdf1fe4c756d17961262163d737f407fad17e9724a19959a92425cbb099193ec38fca8edb0614eba4dbfda60b8a6ed102fec547289a22c3b74464a02023ada50647545f6f57959a37a85a4b5a70b2050e66416ad55c33cb50d6820cfaa16caf608c69d0e4a9d7f78211c3ae44b97216659e8f6cdb6640b30e50ea8c90a0bad06ac5678deb9b50962caec6494a930377b11debd77b46de2d382a2a8992902c9aad88d9e0d49a93f88fe5dec6dcbbfacb794b0335558c609c66e",
14390957b409SSimon J. Gerraty "954473b4965a57c4cbb20e199b8730487eb621f5fd694a1eb1667940da0d6728",
14400957b409SSimon J. Gerraty
14410957b409SSimon J. Gerraty "184e1b9ccec71f837dca25838db073d51cacc26246fda091a468135d12e67faab69ac9d93e05bd9a687dad01c8db5bddc6751a45e64c2f734c867dd67f1e62626ddadc2baf7df0320f3e4c7e477a2b6f0ca679504b87372bb3a522e173fd8f7945f69ab9ab967ff378f6482293f3a936f82728abff188060e1ae48a778ebd09846d64cacb9b83487ad8bea1433b09ed791e06f7f8a65d2bbdf8a384f1550eb677962392b624bd593b6e77a7daf17d1fddfb995f472d8f5e4b41f3a02d394a98de583",
14420957b409SSimon J. Gerraty "0a7506e1b6cc43acdb4f2ec456e069e6e4b7608deb70dbe7ccb88578658be9da",
14430957b409SSimon J. Gerraty
14440957b409SSimon J. Gerraty "c436d19f05550b6979bdc69bfd27ea4cd80c1a60f00a8b093e89178c7f9e8d492c304cf6ad59102bca0e0b23620338c15fc9ecd1e939ae91da16486f72ee1e154d41bfa391e6ba3b6ca9b3c3be39b5e61242ca5cd3d6c96cbd1170af91fdb2160db3522e1bc3b1a349d6e50479920ac5d9bedd8a16a787a3cdc2b6d24392f25555cc2f20b2ba9e6b47ddc96cfbd6df669d874ce21a758d3cf4704362ef7786d90ed67b01bd91299950058885accddbcf44e340ed4807864218653ee7ff7215aa1e1761",
14450957b409SSimon J. Gerraty "206be726fc681367387ff0a15303533058070f9655438ad8142cf39a0523b2ce",
14460957b409SSimon J. Gerraty
14470957b409SSimon J. Gerraty "daf7c7526cdb85127df59220fbcb67dc5069ef58dc069a18a2e4ad164178dc0927cb1ae70120b0a975d78c4e1491dc228a95dc401873ec5645e7e6a8d0ffae58e8800be49f87b5f09d6caf4611ebd61bee86bb945325ae884a001b88b6be1a1c87de41503057bc6f5b7ba00fdb217d4de203335a746506371bf8f4bcddfd45df6bad65339bd9efaf18ce0ab1587bf842cfd6ec9c637b1cea1f96184e2b045a28fcb51e96c85574373d2b9335724170821ec58f6108af1929bea430458a1a7f80a2be1580",
14480957b409SSimon J. Gerraty "742389244ad26d7a16d1f2b01e9c83e987a283bbf3aa2907a556746fe8c98c38",
14490957b409SSimon J. Gerraty
14500957b409SSimon J. Gerraty "597dadb776945e01c564f17eed4b5c1bbb34eebb13bce37d2d93363efe24b660f3785cc9e557dc2e4ab17a91a83d1f085060acc148508e43897993f66a20fbe65d46d3c4d9cf7e2e97e3952f0195f10ae8c20533753c719f6228d53d69a5e3c5fdafb9b039426d8716c2e961e09af9a8eb24a21b82c9b6192069a51ce3fc96843d7ab696edf9d0c42d151f2e2d95606ac14c2a80563c82392b02ab9abe6e3bab8471747ddc3cd06a46a6de9fd0ce4dd8d202466bdbe00088ebbb8ebfe341fbc2395a986df0",
14510957b409SSimon J. Gerraty "892985bdf2379f8ae138aac016894ee23408955d627cfa699fa5fa1439340a91",
14520957b409SSimon J. Gerraty
14530957b409SSimon J. Gerraty "0efc14917a94f5320eb734c2b9e45f659d06c9f5c454deff0e76b30f6ee9e22e56a494a870fcdf138fc5538ce5bacf44761f993ccca4ae4ced8d576a8a10fd2979fe3e8066a641cdc5f746190ae4819e1d0d2886089bcbf6f36be44b5370afa45e523ba0c25bc169969436f1912b1c7b7a189d5edf00da050a5a813b31d09da5ede8b390ede30aeeece64a9ae05749e4758a2149b99d868219a056c18cf972370e07cdd95006c264ae33ab9e6130afdff6a9dbd1fe38747408868c65ccb4d45fa9f9b102528c",
14540957b409SSimon J. Gerraty "73088e0551c89477bcb675245c5c6347b4230390285832c7d723bf668c8061fb",
14550957b409SSimon J. Gerraty
14560957b409SSimon J. Gerraty "9ac34ec974d28b18b7bcf6982eac60ebc670b0674e2acd697b49bfeb2fb81159fa5579a1e2a5bb8a5fc6ca46aaa5304a3771b15d804f2bef054fc1ad919e3852befea1c0bb74394f4d408d651412e247107bd32e64a23c9e593857f3a5ae253deea5104d8aa6ce108913881cf55d3c89587860027f8cc81b7eeec9e5f44e9fc190320c71d4a3427519250394d4ed07b9174f9e005b7696117c575fad05e76d86ae8cde5423d25d25076046f4392a0a7e56e8d6517fc66f265c5d617060e258354f9dce1dfe9de6",
14570957b409SSimon J. Gerraty "17cba68f47a0615b3513d28a44feda6ad36b6e6eb1ead7232f4e2a4e1a64bf50",
14580957b409SSimon J. Gerraty
14590957b409SSimon J. Gerraty "d00df64c4bb9e2fd16fb6f9ca746d6cf162015ec7326e41a5d51e9b3d0792fed3f17d5bae34f03ec522e229d53304dcef105024ece941edeba410892846b2c7a1039ab82aa9750979a7bc70bf96d093bc3461b6f2d38f801380eccc286b562996cfce06d4a98b245176bc4ae4006f45eb36cc71636185acdfe429c0a7d5fbb927be7dc43685a0f40f185824ed102f57eeafe6d0d943e2d883564e233126f1eac648207ccafe651ce4f5169b35369f3e48f84771aedb2577b04fd0506ecef72305055cacfc4435e38",
14600957b409SSimon J. Gerraty "67302648e0082254d8d342b4eb8070ef9a44e0fc55c3d9a3f20613e4824aff21",
14610957b409SSimon J. Gerraty
14620957b409SSimon J. Gerraty "fff5deb2bc7f43bd2db44ceff874e9c3b7c1a2f54cc6889f74186ca2a03d5047006b1b26e0919147379c81887df3403ebe43571fed8279607a2eb81a26d6f8f217dca3f927799ed182017c127069f2eb6f068b0d85979dc4d4867c676f6bedf36cd2def33b3e54a3366ea45478dee612f391a785bd0ede15aba921512103199228d434dbc1e899047a6861183e5b04fb716c11503dee2399261d10a0e5a76317736b0d7b6480573e76791b246ae734ee12203336ac3f539a6e6cb01c625eb3c9741dd199ca0d759753",
14630957b409SSimon J. Gerraty "bf64c9ab7042245fb2d8054edd699086dbe27a1ce904174d28bc0831ed9acf97",
14640957b409SSimon J. Gerraty
14650957b409SSimon J. Gerraty "8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4",
14660957b409SSimon J. Gerraty "2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e6111346235e1dc38325666c",
14670957b409SSimon J. Gerraty
14680957b409SSimon J. Gerraty NULL
14690957b409SSimon J. Gerraty };
14700957b409SSimon J. Gerraty
14710957b409SSimon J. Gerraty static void
test_SHAKE_KAT(int security_level,const char * const * kat)14720957b409SSimon J. Gerraty test_SHAKE_KAT(int security_level, const char *const *kat)
14730957b409SSimon J. Gerraty {
14740957b409SSimon J. Gerraty size_t u;
14750957b409SSimon J. Gerraty
14760957b409SSimon J. Gerraty for (u = 0; kat[u] != NULL; u += 2) {
14770957b409SSimon J. Gerraty unsigned char msg[250], out[250], ref[250];
14780957b409SSimon J. Gerraty size_t msg_len, out_len, v;
14790957b409SSimon J. Gerraty br_shake_context sc;
14800957b409SSimon J. Gerraty
14810957b409SSimon J. Gerraty msg_len = hextobin(msg, kat[u]);
14820957b409SSimon J. Gerraty out_len = hextobin(ref, kat[u + 1]);
14830957b409SSimon J. Gerraty br_shake_init(&sc, security_level);
14840957b409SSimon J. Gerraty br_shake_inject(&sc, msg, msg_len);
14850957b409SSimon J. Gerraty br_shake_flip(&sc);
14860957b409SSimon J. Gerraty br_shake_produce(&sc, out, out_len);
14870957b409SSimon J. Gerraty check_equals("KAT 1", out, ref, out_len);
14880957b409SSimon J. Gerraty
14890957b409SSimon J. Gerraty br_shake_init(&sc, security_level);
14900957b409SSimon J. Gerraty for (v = 0; v < msg_len; v ++) {
14910957b409SSimon J. Gerraty br_shake_inject(&sc, msg + v, 1);
14920957b409SSimon J. Gerraty }
14930957b409SSimon J. Gerraty br_shake_flip(&sc);
14940957b409SSimon J. Gerraty br_shake_produce(&sc, out, out_len);
14950957b409SSimon J. Gerraty check_equals("KAT 2", out, ref, out_len);
14960957b409SSimon J. Gerraty
14970957b409SSimon J. Gerraty br_shake_init(&sc, security_level);
14980957b409SSimon J. Gerraty br_shake_inject(&sc, msg, msg_len);
14990957b409SSimon J. Gerraty br_shake_flip(&sc);
15000957b409SSimon J. Gerraty for (v = 0; v < out_len; v ++) {
15010957b409SSimon J. Gerraty unsigned char x;
15020957b409SSimon J. Gerraty
15030957b409SSimon J. Gerraty br_shake_produce(&sc, &x, 1);
15040957b409SSimon J. Gerraty if (x != ref[v]) {
15050957b409SSimon J. Gerraty fprintf(stderr, "KAT 3 (byte %u)\n",
15060957b409SSimon J. Gerraty (unsigned)v);
15070957b409SSimon J. Gerraty exit(EXIT_FAILURE);
15080957b409SSimon J. Gerraty }
15090957b409SSimon J. Gerraty }
15100957b409SSimon J. Gerraty
15110957b409SSimon J. Gerraty printf(".");
15120957b409SSimon J. Gerraty fflush(stdout);
15130957b409SSimon J. Gerraty }
15140957b409SSimon J. Gerraty }
15150957b409SSimon J. Gerraty
15160957b409SSimon J. Gerraty static void
test_SHAKE_MonteCarlo(int security_level,size_t minoutlen,size_t maxoutlen,const char * smsg,const char * sref)15170957b409SSimon J. Gerraty test_SHAKE_MonteCarlo(int security_level,
15180957b409SSimon J. Gerraty size_t minoutlen, size_t maxoutlen, const char *smsg, const char *sref)
15190957b409SSimon J. Gerraty {
15200957b409SSimon J. Gerraty unsigned char out[250], ref[250];
15210957b409SSimon J. Gerraty size_t len, rlen, outlen, range;
15220957b409SSimon J. Gerraty int i, j;
15230957b409SSimon J. Gerraty
15240957b409SSimon J. Gerraty hextobin(out, smsg);
15250957b409SSimon J. Gerraty outlen = maxoutlen;
15260957b409SSimon J. Gerraty range = maxoutlen - minoutlen + 1;
15270957b409SSimon J. Gerraty for (j = 0; j < 100; j ++) {
15280957b409SSimon J. Gerraty for (i = 1; i < 1001; i ++) {
15290957b409SSimon J. Gerraty br_shake_context sc;
15300957b409SSimon J. Gerraty
15310957b409SSimon J. Gerraty len = outlen;
15320957b409SSimon J. Gerraty br_shake_init(&sc, security_level);
15330957b409SSimon J. Gerraty br_shake_inject(&sc, out, 16);
15340957b409SSimon J. Gerraty br_shake_flip(&sc);
15350957b409SSimon J. Gerraty br_shake_produce(&sc, out, len);
15360957b409SSimon J. Gerraty if (len < 16) {
15370957b409SSimon J. Gerraty memset(out + len, 0, 16 - len);
15380957b409SSimon J. Gerraty }
15390957b409SSimon J. Gerraty outlen = minoutlen
15400957b409SSimon J. Gerraty + (br_dec16be(out + len - 2) % range);
15410957b409SSimon J. Gerraty }
15420957b409SSimon J. Gerraty printf(".");
15430957b409SSimon J. Gerraty fflush(stdout);
15440957b409SSimon J. Gerraty }
15450957b409SSimon J. Gerraty rlen = hextobin(ref, sref);
15460957b409SSimon J. Gerraty if (rlen != len) {
15470957b409SSimon J. Gerraty fprintf(stderr, "MC: bad length (%u vs %u)\n",
15480957b409SSimon J. Gerraty (unsigned)len, (unsigned)rlen);
15490957b409SSimon J. Gerraty exit(EXIT_FAILURE);
15500957b409SSimon J. Gerraty }
15510957b409SSimon J. Gerraty check_equals("KAT MC", out, ref, len);
15520957b409SSimon J. Gerraty }
15530957b409SSimon J. Gerraty
15540957b409SSimon J. Gerraty static void
test_SHAKE(void)15550957b409SSimon J. Gerraty test_SHAKE(void)
15560957b409SSimon J. Gerraty {
15570957b409SSimon J. Gerraty printf("Test SHAKE: ");
15580957b409SSimon J. Gerraty fflush(stdout);
15590957b409SSimon J. Gerraty
15600957b409SSimon J. Gerraty test_SHAKE_KAT(128, KAT_SHAKE128);
15610957b409SSimon J. Gerraty
15620957b409SSimon J. Gerraty printf(" ");
15630957b409SSimon J. Gerraty fflush(stdout);
15640957b409SSimon J. Gerraty
15650957b409SSimon J. Gerraty test_SHAKE_MonteCarlo(128, 16, 140,
15660957b409SSimon J. Gerraty "c8b310cb97efa3855434998fa81c7674",
15670957b409SSimon J. Gerraty "4aa371f0099b04a909f9b1680e8b52a21c6510ea2640137d501ffa114bf84717b1f725d64bae4ae5d87a");
15680957b409SSimon J. Gerraty
15690957b409SSimon J. Gerraty printf(" ");
15700957b409SSimon J. Gerraty fflush(stdout);
15710957b409SSimon J. Gerraty
15720957b409SSimon J. Gerraty test_SHAKE_KAT(256, KAT_SHAKE256);
15730957b409SSimon J. Gerraty
15740957b409SSimon J. Gerraty printf(" ");
15750957b409SSimon J. Gerraty fflush(stdout);
15760957b409SSimon J. Gerraty
15770957b409SSimon J. Gerraty test_SHAKE_MonteCarlo(256, 2, 250,
15780957b409SSimon J. Gerraty "48a0321b3653e4e86446d00f6a036efd",
15790957b409SSimon J. Gerraty "d4c8c26ded38cca426d8d1c8f8aedb5c543541333839deca8713cfd8684480fe923f57c3a5c89cb61427c220c7");
15800957b409SSimon J. Gerraty
15810957b409SSimon J. Gerraty printf(" done.\n");
15820957b409SSimon J. Gerraty fflush(stdout);
15830957b409SSimon J. Gerraty }
15840957b409SSimon J. Gerraty
15850957b409SSimon J. Gerraty static void
test_HMAC_DRBG(void)15860957b409SSimon J. Gerraty test_HMAC_DRBG(void)
15870957b409SSimon J. Gerraty {
15880957b409SSimon J. Gerraty br_hmac_drbg_context ctx;
15890957b409SSimon J. Gerraty unsigned char seed[42], tmp[30];
15900957b409SSimon J. Gerraty unsigned char ref1[30], ref2[30], ref3[30];
15910957b409SSimon J. Gerraty size_t seed_len;
15920957b409SSimon J. Gerraty
15930957b409SSimon J. Gerraty printf("Test HMAC_DRBG: ");
15940957b409SSimon J. Gerraty fflush(stdout);
15950957b409SSimon J. Gerraty
15960957b409SSimon J. Gerraty seed_len = hextobin(seed,
15970957b409SSimon J. Gerraty "009A4D6792295A7F730FC3F2B49CBC0F62E862272F"
15980957b409SSimon J. Gerraty "01795EDF0D54DB760F156D0DAC04C0322B3A204224");
15990957b409SSimon J. Gerraty hextobin(ref1,
16000957b409SSimon J. Gerraty "9305A46DE7FF8EB107194DEBD3FD48AA"
16010957b409SSimon J. Gerraty "20D5E7656CBE0EA69D2A8D4E7C67");
16020957b409SSimon J. Gerraty hextobin(ref2,
16030957b409SSimon J. Gerraty "C70C78608A3B5BE9289BE90EF6E81A9E"
16040957b409SSimon J. Gerraty "2C1516D5751D2F75F50033E45F73");
16050957b409SSimon J. Gerraty hextobin(ref3,
16060957b409SSimon J. Gerraty "475E80E992140567FCC3A50DAB90FE84"
16070957b409SSimon J. Gerraty "BCD7BB03638E9C4656A06F37F650");
16080957b409SSimon J. Gerraty br_hmac_drbg_init(&ctx, &br_sha256_vtable, seed, seed_len);
16090957b409SSimon J. Gerraty br_hmac_drbg_generate(&ctx, tmp, sizeof tmp);
16100957b409SSimon J. Gerraty check_equals("KAT HMAC_DRBG 1", tmp, ref1, sizeof tmp);
16110957b409SSimon J. Gerraty br_hmac_drbg_generate(&ctx, tmp, sizeof tmp);
16120957b409SSimon J. Gerraty check_equals("KAT HMAC_DRBG 2", tmp, ref2, sizeof tmp);
16130957b409SSimon J. Gerraty br_hmac_drbg_generate(&ctx, tmp, sizeof tmp);
16140957b409SSimon J. Gerraty check_equals("KAT HMAC_DRBG 3", tmp, ref3, sizeof tmp);
16150957b409SSimon J. Gerraty
16160957b409SSimon J. Gerraty memset(&ctx, 0, sizeof ctx);
16170957b409SSimon J. Gerraty br_hmac_drbg_vtable.init(&ctx.vtable,
16180957b409SSimon J. Gerraty &br_sha256_vtable, seed, seed_len);
16190957b409SSimon J. Gerraty ctx.vtable->generate(&ctx.vtable, tmp, sizeof tmp);
16200957b409SSimon J. Gerraty check_equals("KAT HMAC_DRBG 4", tmp, ref1, sizeof tmp);
16210957b409SSimon J. Gerraty ctx.vtable->generate(&ctx.vtable, tmp, sizeof tmp);
16220957b409SSimon J. Gerraty check_equals("KAT HMAC_DRBG 5", tmp, ref2, sizeof tmp);
16230957b409SSimon J. Gerraty ctx.vtable->generate(&ctx.vtable, tmp, sizeof tmp);
16240957b409SSimon J. Gerraty check_equals("KAT HMAC_DRBG 6", tmp, ref3, sizeof tmp);
16250957b409SSimon J. Gerraty
16260957b409SSimon J. Gerraty printf("done.\n");
16270957b409SSimon J. Gerraty fflush(stdout);
16280957b409SSimon J. Gerraty }
16290957b409SSimon J. Gerraty
16300957b409SSimon J. Gerraty static void
test_AESCTR_DRBG(void)16310957b409SSimon J. Gerraty test_AESCTR_DRBG(void)
16320957b409SSimon J. Gerraty {
16330957b409SSimon J. Gerraty br_aesctr_drbg_context ctx;
16340957b409SSimon J. Gerraty const br_block_ctr_class *ictr;
16350957b409SSimon J. Gerraty unsigned char tmp1[64], tmp2[64];
16360957b409SSimon J. Gerraty
16370957b409SSimon J. Gerraty printf("Test AESCTR_DRBG: ");
16380957b409SSimon J. Gerraty fflush(stdout);
16390957b409SSimon J. Gerraty
16400957b409SSimon J. Gerraty ictr = br_aes_x86ni_ctr_get_vtable();
16410957b409SSimon J. Gerraty if (ictr == NULL) {
16420957b409SSimon J. Gerraty ictr = br_aes_pwr8_ctr_get_vtable();
16430957b409SSimon J. Gerraty if (ictr == NULL) {
16440957b409SSimon J. Gerraty #if BR_64
16450957b409SSimon J. Gerraty ictr = &br_aes_ct64_ctr_vtable;
16460957b409SSimon J. Gerraty #else
16470957b409SSimon J. Gerraty ictr = &br_aes_ct_ctr_vtable;
16480957b409SSimon J. Gerraty #endif
16490957b409SSimon J. Gerraty }
16500957b409SSimon J. Gerraty }
16510957b409SSimon J. Gerraty br_aesctr_drbg_init(&ctx, ictr, NULL, 0);
16520957b409SSimon J. Gerraty ctx.vtable->generate(&ctx.vtable, tmp1, sizeof tmp1);
16530957b409SSimon J. Gerraty ctx.vtable->update(&ctx.vtable, "new seed", 8);
16540957b409SSimon J. Gerraty ctx.vtable->generate(&ctx.vtable, tmp2, sizeof tmp2);
16550957b409SSimon J. Gerraty
16560957b409SSimon J. Gerraty if (memcmp(tmp1, tmp2, sizeof tmp1) == 0) {
16570957b409SSimon J. Gerraty fprintf(stderr, "AESCTR_DRBG failure\n");
16580957b409SSimon J. Gerraty exit(EXIT_FAILURE);
16590957b409SSimon J. Gerraty }
16600957b409SSimon J. Gerraty
16610957b409SSimon J. Gerraty printf("done.\n");
16620957b409SSimon J. Gerraty fflush(stdout);
16630957b409SSimon J. Gerraty }
16640957b409SSimon J. Gerraty
16650957b409SSimon J. Gerraty static void
do_KAT_PRF(br_tls_prf_impl prf,const char * ssecret,const char * label,const char * sseed,const char * sref)16660957b409SSimon J. Gerraty do_KAT_PRF(br_tls_prf_impl prf,
16670957b409SSimon J. Gerraty const char *ssecret, const char *label, const char *sseed,
16680957b409SSimon J. Gerraty const char *sref)
16690957b409SSimon J. Gerraty {
16700957b409SSimon J. Gerraty unsigned char secret[100], seed[100], ref[500], out[500];
16710957b409SSimon J. Gerraty size_t secret_len, seed_len, ref_len;
16720957b409SSimon J. Gerraty br_tls_prf_seed_chunk chunks[2];
16730957b409SSimon J. Gerraty
16740957b409SSimon J. Gerraty secret_len = hextobin(secret, ssecret);
16750957b409SSimon J. Gerraty seed_len = hextobin(seed, sseed);
16760957b409SSimon J. Gerraty ref_len = hextobin(ref, sref);
16770957b409SSimon J. Gerraty
16780957b409SSimon J. Gerraty chunks[0].data = seed;
16790957b409SSimon J. Gerraty chunks[0].len = seed_len;
16800957b409SSimon J. Gerraty prf(out, ref_len, secret, secret_len, label, 1, chunks);
16810957b409SSimon J. Gerraty check_equals("TLS PRF KAT 1", out, ref, ref_len);
16820957b409SSimon J. Gerraty
16830957b409SSimon J. Gerraty chunks[0].data = seed;
16840957b409SSimon J. Gerraty chunks[0].len = seed_len;
16850957b409SSimon J. Gerraty chunks[1].data = NULL;
16860957b409SSimon J. Gerraty chunks[1].len = 0;
16870957b409SSimon J. Gerraty prf(out, ref_len, secret, secret_len, label, 2, chunks);
16880957b409SSimon J. Gerraty check_equals("TLS PRF KAT 2", out, ref, ref_len);
16890957b409SSimon J. Gerraty
16900957b409SSimon J. Gerraty chunks[0].data = NULL;
16910957b409SSimon J. Gerraty chunks[0].len = 0;
16920957b409SSimon J. Gerraty chunks[1].data = seed;
16930957b409SSimon J. Gerraty chunks[1].len = seed_len;
16940957b409SSimon J. Gerraty prf(out, ref_len, secret, secret_len, label, 2, chunks);
16950957b409SSimon J. Gerraty check_equals("TLS PRF KAT 3", out, ref, ref_len);
16960957b409SSimon J. Gerraty
16970957b409SSimon J. Gerraty chunks[0].data = seed;
16980957b409SSimon J. Gerraty chunks[0].len = seed_len >> 1;
16990957b409SSimon J. Gerraty chunks[1].data = seed + chunks[0].len;
17000957b409SSimon J. Gerraty chunks[1].len = seed_len - chunks[0].len;
17010957b409SSimon J. Gerraty prf(out, ref_len, secret, secret_len, label, 2, chunks);
17020957b409SSimon J. Gerraty check_equals("TLS PRF KAT 4", out, ref, ref_len);
17030957b409SSimon J. Gerraty }
17040957b409SSimon J. Gerraty
17050957b409SSimon J. Gerraty static void
test_PRF(void)17060957b409SSimon J. Gerraty test_PRF(void)
17070957b409SSimon J. Gerraty {
17080957b409SSimon J. Gerraty printf("Test TLS PRF: ");
17090957b409SSimon J. Gerraty fflush(stdout);
17100957b409SSimon J. Gerraty
17110957b409SSimon J. Gerraty /*
17120957b409SSimon J. Gerraty * Test vector taken from an email that was on:
17130957b409SSimon J. Gerraty * http://www.imc.org/ietf-tls/mail-archive/msg01589.html
17140957b409SSimon J. Gerraty * but no longer exists there; a version archived in 2008
17150957b409SSimon J. Gerraty * can be found on http://www.archive.org/
17160957b409SSimon J. Gerraty */
17170957b409SSimon J. Gerraty do_KAT_PRF(&br_tls10_prf,
17180957b409SSimon J. Gerraty "abababababababababababababababababababababababababababababababababababababababababababababababab",
17190957b409SSimon J. Gerraty "PRF Testvector",
17200957b409SSimon J. Gerraty "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
17210957b409SSimon J. Gerraty "d3d4d1e349b5d515044666d51de32bab258cb521b6b053463e354832fd976754443bcf9a296519bc289abcbc1187e4ebd31e602353776c408aafb74cbc85eff69255f9788faa184cbb957a9819d84a5d7eb006eb459d3ae8de9810454b8b2d8f1afbc655a8c9a013");
17220957b409SSimon J. Gerraty
17230957b409SSimon J. Gerraty /*
17240957b409SSimon J. Gerraty * Test vectors are taken from:
17250957b409SSimon J. Gerraty * https://www.ietf.org/mail-archive/web/tls/current/msg03416.html
17260957b409SSimon J. Gerraty */
17270957b409SSimon J. Gerraty do_KAT_PRF(&br_tls12_sha256_prf,
17280957b409SSimon J. Gerraty "9bbe436ba940f017b17652849a71db35",
17290957b409SSimon J. Gerraty "test label",
17300957b409SSimon J. Gerraty "a0ba9f936cda311827a6f796ffd5198c",
17310957b409SSimon J. Gerraty "e3f229ba727be17b8d122620557cd453c2aab21d07c3d495329b52d4e61edb5a6b301791e90d35c9c9a46b4e14baf9af0fa022f7077def17abfd3797c0564bab4fbc91666e9def9b97fce34f796789baa48082d122ee42c5a72e5a5110fff70187347b66");
17320957b409SSimon J. Gerraty do_KAT_PRF(&br_tls12_sha384_prf,
17330957b409SSimon J. Gerraty "b80b733d6ceefcdc71566ea48e5567df",
17340957b409SSimon J. Gerraty "test label",
17350957b409SSimon J. Gerraty "cd665cf6a8447dd6ff8b27555edb7465",
17360957b409SSimon J. Gerraty "7b0c18e9ced410ed1804f2cfa34a336a1c14dffb4900bb5fd7942107e81c83cde9ca0faa60be9fe34f82b1233c9146a0e534cb400fed2700884f9dc236f80edd8bfa961144c9e8d792eca722a7b32fc3d416d473ebc2c5fd4abfdad05d9184259b5bf8cd4d90fa0d31e2dec479e4f1a26066f2eea9a69236a3e52655c9e9aee691c8f3a26854308d5eaa3be85e0990703d73e56f");
17370957b409SSimon J. Gerraty
17380957b409SSimon J. Gerraty printf("done.\n");
17390957b409SSimon J. Gerraty fflush(stdout);
17400957b409SSimon J. Gerraty }
17410957b409SSimon J. Gerraty
17420957b409SSimon J. Gerraty /*
17430957b409SSimon J. Gerraty * AES known-answer tests. Order: key, plaintext, ciphertext.
17440957b409SSimon J. Gerraty */
17450957b409SSimon J. Gerraty static const char *const KAT_AES[] = {
17460957b409SSimon J. Gerraty /*
17470957b409SSimon J. Gerraty * From FIPS-197.
17480957b409SSimon J. Gerraty */
17490957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f",
17500957b409SSimon J. Gerraty "00112233445566778899aabbccddeeff",
17510957b409SSimon J. Gerraty "69c4e0d86a7b0430d8cdb78070b4c55a",
17520957b409SSimon J. Gerraty
17530957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f1011121314151617",
17540957b409SSimon J. Gerraty "00112233445566778899aabbccddeeff",
17550957b409SSimon J. Gerraty "dda97ca4864cdfe06eaf70a0ec0d7191",
17560957b409SSimon J. Gerraty
17570957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
17580957b409SSimon J. Gerraty "00112233445566778899aabbccddeeff",
17590957b409SSimon J. Gerraty "8ea2b7ca516745bfeafc49904b496089",
17600957b409SSimon J. Gerraty
17610957b409SSimon J. Gerraty /*
17620957b409SSimon J. Gerraty * From NIST validation suite (ECBVarTxt128.rsp).
17630957b409SSimon J. Gerraty */
17640957b409SSimon J. Gerraty "00000000000000000000000000000000",
17650957b409SSimon J. Gerraty "80000000000000000000000000000000",
17660957b409SSimon J. Gerraty "3ad78e726c1ec02b7ebfe92b23d9ec34",
17670957b409SSimon J. Gerraty
17680957b409SSimon J. Gerraty "00000000000000000000000000000000",
17690957b409SSimon J. Gerraty "c0000000000000000000000000000000",
17700957b409SSimon J. Gerraty "aae5939c8efdf2f04e60b9fe7117b2c2",
17710957b409SSimon J. Gerraty
17720957b409SSimon J. Gerraty "00000000000000000000000000000000",
17730957b409SSimon J. Gerraty "e0000000000000000000000000000000",
17740957b409SSimon J. Gerraty "f031d4d74f5dcbf39daaf8ca3af6e527",
17750957b409SSimon J. Gerraty
17760957b409SSimon J. Gerraty "00000000000000000000000000000000",
17770957b409SSimon J. Gerraty "f0000000000000000000000000000000",
17780957b409SSimon J. Gerraty "96d9fd5cc4f07441727df0f33e401a36",
17790957b409SSimon J. Gerraty
17800957b409SSimon J. Gerraty "00000000000000000000000000000000",
17810957b409SSimon J. Gerraty "f8000000000000000000000000000000",
17820957b409SSimon J. Gerraty "30ccdb044646d7e1f3ccea3dca08b8c0",
17830957b409SSimon J. Gerraty
17840957b409SSimon J. Gerraty "00000000000000000000000000000000",
17850957b409SSimon J. Gerraty "fc000000000000000000000000000000",
17860957b409SSimon J. Gerraty "16ae4ce5042a67ee8e177b7c587ecc82",
17870957b409SSimon J. Gerraty
17880957b409SSimon J. Gerraty "00000000000000000000000000000000",
17890957b409SSimon J. Gerraty "fe000000000000000000000000000000",
17900957b409SSimon J. Gerraty "b6da0bb11a23855d9c5cb1b4c6412e0a",
17910957b409SSimon J. Gerraty
17920957b409SSimon J. Gerraty "00000000000000000000000000000000",
17930957b409SSimon J. Gerraty "ff000000000000000000000000000000",
17940957b409SSimon J. Gerraty "db4f1aa530967d6732ce4715eb0ee24b",
17950957b409SSimon J. Gerraty
17960957b409SSimon J. Gerraty "00000000000000000000000000000000",
17970957b409SSimon J. Gerraty "ff800000000000000000000000000000",
17980957b409SSimon J. Gerraty "a81738252621dd180a34f3455b4baa2f",
17990957b409SSimon J. Gerraty
18000957b409SSimon J. Gerraty "00000000000000000000000000000000",
18010957b409SSimon J. Gerraty "ffc00000000000000000000000000000",
18020957b409SSimon J. Gerraty "77e2b508db7fd89234caf7939ee5621a",
18030957b409SSimon J. Gerraty
18040957b409SSimon J. Gerraty "00000000000000000000000000000000",
18050957b409SSimon J. Gerraty "ffe00000000000000000000000000000",
18060957b409SSimon J. Gerraty "b8499c251f8442ee13f0933b688fcd19",
18070957b409SSimon J. Gerraty
18080957b409SSimon J. Gerraty "00000000000000000000000000000000",
18090957b409SSimon J. Gerraty "fff00000000000000000000000000000",
18100957b409SSimon J. Gerraty "965135f8a81f25c9d630b17502f68e53",
18110957b409SSimon J. Gerraty
18120957b409SSimon J. Gerraty "00000000000000000000000000000000",
18130957b409SSimon J. Gerraty "fff80000000000000000000000000000",
18140957b409SSimon J. Gerraty "8b87145a01ad1c6cede995ea3670454f",
18150957b409SSimon J. Gerraty
18160957b409SSimon J. Gerraty "00000000000000000000000000000000",
18170957b409SSimon J. Gerraty "fffc0000000000000000000000000000",
18180957b409SSimon J. Gerraty "8eae3b10a0c8ca6d1d3b0fa61e56b0b2",
18190957b409SSimon J. Gerraty
18200957b409SSimon J. Gerraty "00000000000000000000000000000000",
18210957b409SSimon J. Gerraty "fffe0000000000000000000000000000",
18220957b409SSimon J. Gerraty "64b4d629810fda6bafdf08f3b0d8d2c5",
18230957b409SSimon J. Gerraty
18240957b409SSimon J. Gerraty "00000000000000000000000000000000",
18250957b409SSimon J. Gerraty "ffff0000000000000000000000000000",
18260957b409SSimon J. Gerraty "d7e5dbd3324595f8fdc7d7c571da6c2a",
18270957b409SSimon J. Gerraty
18280957b409SSimon J. Gerraty "00000000000000000000000000000000",
18290957b409SSimon J. Gerraty "ffff8000000000000000000000000000",
18300957b409SSimon J. Gerraty "f3f72375264e167fca9de2c1527d9606",
18310957b409SSimon J. Gerraty
18320957b409SSimon J. Gerraty "00000000000000000000000000000000",
18330957b409SSimon J. Gerraty "ffffc000000000000000000000000000",
18340957b409SSimon J. Gerraty "8ee79dd4f401ff9b7ea945d86666c13b",
18350957b409SSimon J. Gerraty
18360957b409SSimon J. Gerraty "00000000000000000000000000000000",
18370957b409SSimon J. Gerraty "ffffe000000000000000000000000000",
18380957b409SSimon J. Gerraty "dd35cea2799940b40db3f819cb94c08b",
18390957b409SSimon J. Gerraty
18400957b409SSimon J. Gerraty "00000000000000000000000000000000",
18410957b409SSimon J. Gerraty "fffff000000000000000000000000000",
18420957b409SSimon J. Gerraty "6941cb6b3e08c2b7afa581ebdd607b87",
18430957b409SSimon J. Gerraty
18440957b409SSimon J. Gerraty "00000000000000000000000000000000",
18450957b409SSimon J. Gerraty "fffff800000000000000000000000000",
18460957b409SSimon J. Gerraty "2c20f439f6bb097b29b8bd6d99aad799",
18470957b409SSimon J. Gerraty
18480957b409SSimon J. Gerraty "00000000000000000000000000000000",
18490957b409SSimon J. Gerraty "fffffc00000000000000000000000000",
18500957b409SSimon J. Gerraty "625d01f058e565f77ae86378bd2c49b3",
18510957b409SSimon J. Gerraty
18520957b409SSimon J. Gerraty "00000000000000000000000000000000",
18530957b409SSimon J. Gerraty "fffffe00000000000000000000000000",
18540957b409SSimon J. Gerraty "c0b5fd98190ef45fbb4301438d095950",
18550957b409SSimon J. Gerraty
18560957b409SSimon J. Gerraty "00000000000000000000000000000000",
18570957b409SSimon J. Gerraty "ffffff00000000000000000000000000",
18580957b409SSimon J. Gerraty "13001ff5d99806efd25da34f56be854b",
18590957b409SSimon J. Gerraty
18600957b409SSimon J. Gerraty "00000000000000000000000000000000",
18610957b409SSimon J. Gerraty "ffffff80000000000000000000000000",
18620957b409SSimon J. Gerraty "3b594c60f5c8277a5113677f94208d82",
18630957b409SSimon J. Gerraty
18640957b409SSimon J. Gerraty "00000000000000000000000000000000",
18650957b409SSimon J. Gerraty "ffffffc0000000000000000000000000",
18660957b409SSimon J. Gerraty "e9c0fc1818e4aa46bd2e39d638f89e05",
18670957b409SSimon J. Gerraty
18680957b409SSimon J. Gerraty "00000000000000000000000000000000",
18690957b409SSimon J. Gerraty "ffffffe0000000000000000000000000",
18700957b409SSimon J. Gerraty "f8023ee9c3fdc45a019b4e985c7e1a54",
18710957b409SSimon J. Gerraty
18720957b409SSimon J. Gerraty "00000000000000000000000000000000",
18730957b409SSimon J. Gerraty "fffffff0000000000000000000000000",
18740957b409SSimon J. Gerraty "35f40182ab4662f3023baec1ee796b57",
18750957b409SSimon J. Gerraty
18760957b409SSimon J. Gerraty "00000000000000000000000000000000",
18770957b409SSimon J. Gerraty "fffffff8000000000000000000000000",
18780957b409SSimon J. Gerraty "3aebbad7303649b4194a6945c6cc3694",
18790957b409SSimon J. Gerraty
18800957b409SSimon J. Gerraty "00000000000000000000000000000000",
18810957b409SSimon J. Gerraty "fffffffc000000000000000000000000",
18820957b409SSimon J. Gerraty "a2124bea53ec2834279bed7f7eb0f938",
18830957b409SSimon J. Gerraty
18840957b409SSimon J. Gerraty "00000000000000000000000000000000",
18850957b409SSimon J. Gerraty "fffffffe000000000000000000000000",
18860957b409SSimon J. Gerraty "b9fb4399fa4facc7309e14ec98360b0a",
18870957b409SSimon J. Gerraty
18880957b409SSimon J. Gerraty "00000000000000000000000000000000",
18890957b409SSimon J. Gerraty "ffffffff000000000000000000000000",
18900957b409SSimon J. Gerraty "c26277437420c5d634f715aea81a9132",
18910957b409SSimon J. Gerraty
18920957b409SSimon J. Gerraty "00000000000000000000000000000000",
18930957b409SSimon J. Gerraty "ffffffff800000000000000000000000",
18940957b409SSimon J. Gerraty "171a0e1b2dd424f0e089af2c4c10f32f",
18950957b409SSimon J. Gerraty
18960957b409SSimon J. Gerraty "00000000000000000000000000000000",
18970957b409SSimon J. Gerraty "ffffffffc00000000000000000000000",
18980957b409SSimon J. Gerraty "7cadbe402d1b208fe735edce00aee7ce",
18990957b409SSimon J. Gerraty
19000957b409SSimon J. Gerraty "00000000000000000000000000000000",
19010957b409SSimon J. Gerraty "ffffffffe00000000000000000000000",
19020957b409SSimon J. Gerraty "43b02ff929a1485af6f5c6d6558baa0f",
19030957b409SSimon J. Gerraty
19040957b409SSimon J. Gerraty "00000000000000000000000000000000",
19050957b409SSimon J. Gerraty "fffffffff00000000000000000000000",
19060957b409SSimon J. Gerraty "092faacc9bf43508bf8fa8613ca75dea",
19070957b409SSimon J. Gerraty
19080957b409SSimon J. Gerraty "00000000000000000000000000000000",
19090957b409SSimon J. Gerraty "fffffffff80000000000000000000000",
19100957b409SSimon J. Gerraty "cb2bf8280f3f9742c7ed513fe802629c",
19110957b409SSimon J. Gerraty
19120957b409SSimon J. Gerraty "00000000000000000000000000000000",
19130957b409SSimon J. Gerraty "fffffffffc0000000000000000000000",
19140957b409SSimon J. Gerraty "215a41ee442fa992a6e323986ded3f68",
19150957b409SSimon J. Gerraty
19160957b409SSimon J. Gerraty "00000000000000000000000000000000",
19170957b409SSimon J. Gerraty "fffffffffe0000000000000000000000",
19180957b409SSimon J. Gerraty "f21e99cf4f0f77cea836e11a2fe75fb1",
19190957b409SSimon J. Gerraty
19200957b409SSimon J. Gerraty "00000000000000000000000000000000",
19210957b409SSimon J. Gerraty "ffffffffff0000000000000000000000",
19220957b409SSimon J. Gerraty "95e3a0ca9079e646331df8b4e70d2cd6",
19230957b409SSimon J. Gerraty
19240957b409SSimon J. Gerraty "00000000000000000000000000000000",
19250957b409SSimon J. Gerraty "ffffffffff8000000000000000000000",
19260957b409SSimon J. Gerraty "4afe7f120ce7613f74fc12a01a828073",
19270957b409SSimon J. Gerraty
19280957b409SSimon J. Gerraty "00000000000000000000000000000000",
19290957b409SSimon J. Gerraty "ffffffffffc000000000000000000000",
19300957b409SSimon J. Gerraty "827f000e75e2c8b9d479beed913fe678",
19310957b409SSimon J. Gerraty
19320957b409SSimon J. Gerraty "00000000000000000000000000000000",
19330957b409SSimon J. Gerraty "ffffffffffe000000000000000000000",
19340957b409SSimon J. Gerraty "35830c8e7aaefe2d30310ef381cbf691",
19350957b409SSimon J. Gerraty
19360957b409SSimon J. Gerraty "00000000000000000000000000000000",
19370957b409SSimon J. Gerraty "fffffffffff000000000000000000000",
19380957b409SSimon J. Gerraty "191aa0f2c8570144f38657ea4085ebe5",
19390957b409SSimon J. Gerraty
19400957b409SSimon J. Gerraty "00000000000000000000000000000000",
19410957b409SSimon J. Gerraty "fffffffffff800000000000000000000",
19420957b409SSimon J. Gerraty "85062c2c909f15d9269b6c18ce99c4f0",
19430957b409SSimon J. Gerraty
19440957b409SSimon J. Gerraty "00000000000000000000000000000000",
19450957b409SSimon J. Gerraty "fffffffffffc00000000000000000000",
19460957b409SSimon J. Gerraty "678034dc9e41b5a560ed239eeab1bc78",
19470957b409SSimon J. Gerraty
19480957b409SSimon J. Gerraty "00000000000000000000000000000000",
19490957b409SSimon J. Gerraty "fffffffffffe00000000000000000000",
19500957b409SSimon J. Gerraty "c2f93a4ce5ab6d5d56f1b93cf19911c1",
19510957b409SSimon J. Gerraty
19520957b409SSimon J. Gerraty "00000000000000000000000000000000",
19530957b409SSimon J. Gerraty "ffffffffffff00000000000000000000",
19540957b409SSimon J. Gerraty "1c3112bcb0c1dcc749d799743691bf82",
19550957b409SSimon J. Gerraty
19560957b409SSimon J. Gerraty "00000000000000000000000000000000",
19570957b409SSimon J. Gerraty "ffffffffffff80000000000000000000",
19580957b409SSimon J. Gerraty "00c55bd75c7f9c881989d3ec1911c0d4",
19590957b409SSimon J. Gerraty
19600957b409SSimon J. Gerraty "00000000000000000000000000000000",
19610957b409SSimon J. Gerraty "ffffffffffffc0000000000000000000",
19620957b409SSimon J. Gerraty "ea2e6b5ef182b7dff3629abd6a12045f",
19630957b409SSimon J. Gerraty
19640957b409SSimon J. Gerraty "00000000000000000000000000000000",
19650957b409SSimon J. Gerraty "ffffffffffffe0000000000000000000",
19660957b409SSimon J. Gerraty "22322327e01780b17397f24087f8cc6f",
19670957b409SSimon J. Gerraty
19680957b409SSimon J. Gerraty "00000000000000000000000000000000",
19690957b409SSimon J. Gerraty "fffffffffffff0000000000000000000",
19700957b409SSimon J. Gerraty "c9cacb5cd11692c373b2411768149ee7",
19710957b409SSimon J. Gerraty
19720957b409SSimon J. Gerraty "00000000000000000000000000000000",
19730957b409SSimon J. Gerraty "fffffffffffff8000000000000000000",
19740957b409SSimon J. Gerraty "a18e3dbbca577860dab6b80da3139256",
19750957b409SSimon J. Gerraty
19760957b409SSimon J. Gerraty "00000000000000000000000000000000",
19770957b409SSimon J. Gerraty "fffffffffffffc000000000000000000",
19780957b409SSimon J. Gerraty "79b61c37bf328ecca8d743265a3d425c",
19790957b409SSimon J. Gerraty
19800957b409SSimon J. Gerraty "00000000000000000000000000000000",
19810957b409SSimon J. Gerraty "fffffffffffffe000000000000000000",
19820957b409SSimon J. Gerraty "d2d99c6bcc1f06fda8e27e8ae3f1ccc7",
19830957b409SSimon J. Gerraty
19840957b409SSimon J. Gerraty "00000000000000000000000000000000",
19850957b409SSimon J. Gerraty "ffffffffffffff000000000000000000",
19860957b409SSimon J. Gerraty "1bfd4b91c701fd6b61b7f997829d663b",
19870957b409SSimon J. Gerraty
19880957b409SSimon J. Gerraty "00000000000000000000000000000000",
19890957b409SSimon J. Gerraty "ffffffffffffff800000000000000000",
19900957b409SSimon J. Gerraty "11005d52f25f16bdc9545a876a63490a",
19910957b409SSimon J. Gerraty
19920957b409SSimon J. Gerraty "00000000000000000000000000000000",
19930957b409SSimon J. Gerraty "ffffffffffffffc00000000000000000",
19940957b409SSimon J. Gerraty "3a4d354f02bb5a5e47d39666867f246a",
19950957b409SSimon J. Gerraty
19960957b409SSimon J. Gerraty "00000000000000000000000000000000",
19970957b409SSimon J. Gerraty "ffffffffffffffe00000000000000000",
19980957b409SSimon J. Gerraty "d451b8d6e1e1a0ebb155fbbf6e7b7dc3",
19990957b409SSimon J. Gerraty
20000957b409SSimon J. Gerraty "00000000000000000000000000000000",
20010957b409SSimon J. Gerraty "fffffffffffffff00000000000000000",
20020957b409SSimon J. Gerraty "6898d4f42fa7ba6a10ac05e87b9f2080",
20030957b409SSimon J. Gerraty
20040957b409SSimon J. Gerraty "00000000000000000000000000000000",
20050957b409SSimon J. Gerraty "fffffffffffffff80000000000000000",
20060957b409SSimon J. Gerraty "b611295e739ca7d9b50f8e4c0e754a3f",
20070957b409SSimon J. Gerraty
20080957b409SSimon J. Gerraty "00000000000000000000000000000000",
20090957b409SSimon J. Gerraty "fffffffffffffffc0000000000000000",
20100957b409SSimon J. Gerraty "7d33fc7d8abe3ca1936759f8f5deaf20",
20110957b409SSimon J. Gerraty
20120957b409SSimon J. Gerraty "00000000000000000000000000000000",
20130957b409SSimon J. Gerraty "fffffffffffffffe0000000000000000",
20140957b409SSimon J. Gerraty "3b5e0f566dc96c298f0c12637539b25c",
20150957b409SSimon J. Gerraty
20160957b409SSimon J. Gerraty "00000000000000000000000000000000",
20170957b409SSimon J. Gerraty "ffffffffffffffff0000000000000000",
20180957b409SSimon J. Gerraty "f807c3e7985fe0f5a50e2cdb25c5109e",
20190957b409SSimon J. Gerraty
20200957b409SSimon J. Gerraty "00000000000000000000000000000000",
20210957b409SSimon J. Gerraty "ffffffffffffffff8000000000000000",
20220957b409SSimon J. Gerraty "41f992a856fb278b389a62f5d274d7e9",
20230957b409SSimon J. Gerraty
20240957b409SSimon J. Gerraty "00000000000000000000000000000000",
20250957b409SSimon J. Gerraty "ffffffffffffffffc000000000000000",
20260957b409SSimon J. Gerraty "10d3ed7a6fe15ab4d91acbc7d0767ab1",
20270957b409SSimon J. Gerraty
20280957b409SSimon J. Gerraty "00000000000000000000000000000000",
20290957b409SSimon J. Gerraty "ffffffffffffffffe000000000000000",
20300957b409SSimon J. Gerraty "21feecd45b2e675973ac33bf0c5424fc",
20310957b409SSimon J. Gerraty
20320957b409SSimon J. Gerraty "00000000000000000000000000000000",
20330957b409SSimon J. Gerraty "fffffffffffffffff000000000000000",
20340957b409SSimon J. Gerraty "1480cb3955ba62d09eea668f7c708817",
20350957b409SSimon J. Gerraty
20360957b409SSimon J. Gerraty "00000000000000000000000000000000",
20370957b409SSimon J. Gerraty "fffffffffffffffff800000000000000",
20380957b409SSimon J. Gerraty "66404033d6b72b609354d5496e7eb511",
20390957b409SSimon J. Gerraty
20400957b409SSimon J. Gerraty "00000000000000000000000000000000",
20410957b409SSimon J. Gerraty "fffffffffffffffffc00000000000000",
20420957b409SSimon J. Gerraty "1c317a220a7d700da2b1e075b00266e1",
20430957b409SSimon J. Gerraty
20440957b409SSimon J. Gerraty "00000000000000000000000000000000",
20450957b409SSimon J. Gerraty "fffffffffffffffffe00000000000000",
20460957b409SSimon J. Gerraty "ab3b89542233f1271bf8fd0c0f403545",
20470957b409SSimon J. Gerraty
20480957b409SSimon J. Gerraty "00000000000000000000000000000000",
20490957b409SSimon J. Gerraty "ffffffffffffffffff00000000000000",
20500957b409SSimon J. Gerraty "d93eae966fac46dca927d6b114fa3f9e",
20510957b409SSimon J. Gerraty
20520957b409SSimon J. Gerraty "00000000000000000000000000000000",
20530957b409SSimon J. Gerraty "ffffffffffffffffff80000000000000",
20540957b409SSimon J. Gerraty "1bdec521316503d9d5ee65df3ea94ddf",
20550957b409SSimon J. Gerraty
20560957b409SSimon J. Gerraty "00000000000000000000000000000000",
20570957b409SSimon J. Gerraty "ffffffffffffffffffc0000000000000",
20580957b409SSimon J. Gerraty "eef456431dea8b4acf83bdae3717f75f",
20590957b409SSimon J. Gerraty
20600957b409SSimon J. Gerraty "00000000000000000000000000000000",
20610957b409SSimon J. Gerraty "ffffffffffffffffffe0000000000000",
20620957b409SSimon J. Gerraty "06f2519a2fafaa596bfef5cfa15c21b9",
20630957b409SSimon J. Gerraty
20640957b409SSimon J. Gerraty "00000000000000000000000000000000",
20650957b409SSimon J. Gerraty "fffffffffffffffffff0000000000000",
20660957b409SSimon J. Gerraty "251a7eac7e2fe809e4aa8d0d7012531a",
20670957b409SSimon J. Gerraty
20680957b409SSimon J. Gerraty "00000000000000000000000000000000",
20690957b409SSimon J. Gerraty "fffffffffffffffffff8000000000000",
20700957b409SSimon J. Gerraty "3bffc16e4c49b268a20f8d96a60b4058",
20710957b409SSimon J. Gerraty
20720957b409SSimon J. Gerraty "00000000000000000000000000000000",
20730957b409SSimon J. Gerraty "fffffffffffffffffffc000000000000",
20740957b409SSimon J. Gerraty "e886f9281999c5bb3b3e8862e2f7c988",
20750957b409SSimon J. Gerraty
20760957b409SSimon J. Gerraty "00000000000000000000000000000000",
20770957b409SSimon J. Gerraty "fffffffffffffffffffe000000000000",
20780957b409SSimon J. Gerraty "563bf90d61beef39f48dd625fcef1361",
20790957b409SSimon J. Gerraty
20800957b409SSimon J. Gerraty "00000000000000000000000000000000",
20810957b409SSimon J. Gerraty "ffffffffffffffffffff000000000000",
20820957b409SSimon J. Gerraty "4d37c850644563c69fd0acd9a049325b",
20830957b409SSimon J. Gerraty
20840957b409SSimon J. Gerraty "00000000000000000000000000000000",
20850957b409SSimon J. Gerraty "ffffffffffffffffffff800000000000",
20860957b409SSimon J. Gerraty "b87c921b91829ef3b13ca541ee1130a6",
20870957b409SSimon J. Gerraty
20880957b409SSimon J. Gerraty "00000000000000000000000000000000",
20890957b409SSimon J. Gerraty "ffffffffffffffffffffc00000000000",
20900957b409SSimon J. Gerraty "2e65eb6b6ea383e109accce8326b0393",
20910957b409SSimon J. Gerraty
20920957b409SSimon J. Gerraty "00000000000000000000000000000000",
20930957b409SSimon J. Gerraty "ffffffffffffffffffffe00000000000",
20940957b409SSimon J. Gerraty "9ca547f7439edc3e255c0f4d49aa8990",
20950957b409SSimon J. Gerraty
20960957b409SSimon J. Gerraty "00000000000000000000000000000000",
20970957b409SSimon J. Gerraty "fffffffffffffffffffff00000000000",
20980957b409SSimon J. Gerraty "a5e652614c9300f37816b1f9fd0c87f9",
20990957b409SSimon J. Gerraty
21000957b409SSimon J. Gerraty "00000000000000000000000000000000",
21010957b409SSimon J. Gerraty "fffffffffffffffffffff80000000000",
21020957b409SSimon J. Gerraty "14954f0b4697776f44494fe458d814ed",
21030957b409SSimon J. Gerraty
21040957b409SSimon J. Gerraty "00000000000000000000000000000000",
21050957b409SSimon J. Gerraty "fffffffffffffffffffffc0000000000",
21060957b409SSimon J. Gerraty "7c8d9ab6c2761723fe42f8bb506cbcf7",
21070957b409SSimon J. Gerraty
21080957b409SSimon J. Gerraty "00000000000000000000000000000000",
21090957b409SSimon J. Gerraty "fffffffffffffffffffffe0000000000",
21100957b409SSimon J. Gerraty "db7e1932679fdd99742aab04aa0d5a80",
21110957b409SSimon J. Gerraty
21120957b409SSimon J. Gerraty "00000000000000000000000000000000",
21130957b409SSimon J. Gerraty "ffffffffffffffffffffff0000000000",
21140957b409SSimon J. Gerraty "4c6a1c83e568cd10f27c2d73ded19c28",
21150957b409SSimon J. Gerraty
21160957b409SSimon J. Gerraty "00000000000000000000000000000000",
21170957b409SSimon J. Gerraty "ffffffffffffffffffffff8000000000",
21180957b409SSimon J. Gerraty "90ecbe6177e674c98de412413f7ac915",
21190957b409SSimon J. Gerraty
21200957b409SSimon J. Gerraty "00000000000000000000000000000000",
21210957b409SSimon J. Gerraty "ffffffffffffffffffffffc000000000",
21220957b409SSimon J. Gerraty "90684a2ac55fe1ec2b8ebd5622520b73",
21230957b409SSimon J. Gerraty
21240957b409SSimon J. Gerraty "00000000000000000000000000000000",
21250957b409SSimon J. Gerraty "ffffffffffffffffffffffe000000000",
21260957b409SSimon J. Gerraty "7472f9a7988607ca79707795991035e6",
21270957b409SSimon J. Gerraty
21280957b409SSimon J. Gerraty "00000000000000000000000000000000",
21290957b409SSimon J. Gerraty "fffffffffffffffffffffff000000000",
21300957b409SSimon J. Gerraty "56aff089878bf3352f8df172a3ae47d8",
21310957b409SSimon J. Gerraty
21320957b409SSimon J. Gerraty "00000000000000000000000000000000",
21330957b409SSimon J. Gerraty "fffffffffffffffffffffff800000000",
21340957b409SSimon J. Gerraty "65c0526cbe40161b8019a2a3171abd23",
21350957b409SSimon J. Gerraty
21360957b409SSimon J. Gerraty "00000000000000000000000000000000",
21370957b409SSimon J. Gerraty "fffffffffffffffffffffffc00000000",
21380957b409SSimon J. Gerraty "377be0be33b4e3e310b4aabda173f84f",
21390957b409SSimon J. Gerraty
21400957b409SSimon J. Gerraty "00000000000000000000000000000000",
21410957b409SSimon J. Gerraty "fffffffffffffffffffffffe00000000",
21420957b409SSimon J. Gerraty "9402e9aa6f69de6504da8d20c4fcaa2f",
21430957b409SSimon J. Gerraty
21440957b409SSimon J. Gerraty "00000000000000000000000000000000",
21450957b409SSimon J. Gerraty "ffffffffffffffffffffffff00000000",
21460957b409SSimon J. Gerraty "123c1f4af313ad8c2ce648b2e71fb6e1",
21470957b409SSimon J. Gerraty
21480957b409SSimon J. Gerraty "00000000000000000000000000000000",
21490957b409SSimon J. Gerraty "ffffffffffffffffffffffff80000000",
21500957b409SSimon J. Gerraty "1ffc626d30203dcdb0019fb80f726cf4",
21510957b409SSimon J. Gerraty
21520957b409SSimon J. Gerraty "00000000000000000000000000000000",
21530957b409SSimon J. Gerraty "ffffffffffffffffffffffffc0000000",
21540957b409SSimon J. Gerraty "76da1fbe3a50728c50fd2e621b5ad885",
21550957b409SSimon J. Gerraty
21560957b409SSimon J. Gerraty "00000000000000000000000000000000",
21570957b409SSimon J. Gerraty "ffffffffffffffffffffffffe0000000",
21580957b409SSimon J. Gerraty "082eb8be35f442fb52668e16a591d1d6",
21590957b409SSimon J. Gerraty
21600957b409SSimon J. Gerraty "00000000000000000000000000000000",
21610957b409SSimon J. Gerraty "fffffffffffffffffffffffff0000000",
21620957b409SSimon J. Gerraty "e656f9ecf5fe27ec3e4a73d00c282fb3",
21630957b409SSimon J. Gerraty
21640957b409SSimon J. Gerraty "00000000000000000000000000000000",
21650957b409SSimon J. Gerraty "fffffffffffffffffffffffff8000000",
21660957b409SSimon J. Gerraty "2ca8209d63274cd9a29bb74bcd77683a",
21670957b409SSimon J. Gerraty
21680957b409SSimon J. Gerraty "00000000000000000000000000000000",
21690957b409SSimon J. Gerraty "fffffffffffffffffffffffffc000000",
21700957b409SSimon J. Gerraty "79bf5dce14bb7dd73a8e3611de7ce026",
21710957b409SSimon J. Gerraty
21720957b409SSimon J. Gerraty "00000000000000000000000000000000",
21730957b409SSimon J. Gerraty "fffffffffffffffffffffffffe000000",
21740957b409SSimon J. Gerraty "3c849939a5d29399f344c4a0eca8a576",
21750957b409SSimon J. Gerraty
21760957b409SSimon J. Gerraty "00000000000000000000000000000000",
21770957b409SSimon J. Gerraty "ffffffffffffffffffffffffff000000",
21780957b409SSimon J. Gerraty "ed3c0a94d59bece98835da7aa4f07ca2",
21790957b409SSimon J. Gerraty
21800957b409SSimon J. Gerraty "00000000000000000000000000000000",
21810957b409SSimon J. Gerraty "ffffffffffffffffffffffffff800000",
21820957b409SSimon J. Gerraty "63919ed4ce10196438b6ad09d99cd795",
21830957b409SSimon J. Gerraty
21840957b409SSimon J. Gerraty "00000000000000000000000000000000",
21850957b409SSimon J. Gerraty "ffffffffffffffffffffffffffc00000",
21860957b409SSimon J. Gerraty "7678f3a833f19fea95f3c6029e2bc610",
21870957b409SSimon J. Gerraty
21880957b409SSimon J. Gerraty "00000000000000000000000000000000",
21890957b409SSimon J. Gerraty "ffffffffffffffffffffffffffe00000",
21900957b409SSimon J. Gerraty "3aa426831067d36b92be7c5f81c13c56",
21910957b409SSimon J. Gerraty
21920957b409SSimon J. Gerraty "00000000000000000000000000000000",
21930957b409SSimon J. Gerraty "fffffffffffffffffffffffffff00000",
21940957b409SSimon J. Gerraty "9272e2d2cdd11050998c845077a30ea0",
21950957b409SSimon J. Gerraty
21960957b409SSimon J. Gerraty "00000000000000000000000000000000",
21970957b409SSimon J. Gerraty "fffffffffffffffffffffffffff80000",
21980957b409SSimon J. Gerraty "088c4b53f5ec0ff814c19adae7f6246c",
21990957b409SSimon J. Gerraty
22000957b409SSimon J. Gerraty "00000000000000000000000000000000",
22010957b409SSimon J. Gerraty "fffffffffffffffffffffffffffc0000",
22020957b409SSimon J. Gerraty "4010a5e401fdf0a0354ddbcc0d012b17",
22030957b409SSimon J. Gerraty
22040957b409SSimon J. Gerraty "00000000000000000000000000000000",
22050957b409SSimon J. Gerraty "fffffffffffffffffffffffffffe0000",
22060957b409SSimon J. Gerraty "a87a385736c0a6189bd6589bd8445a93",
22070957b409SSimon J. Gerraty
22080957b409SSimon J. Gerraty "00000000000000000000000000000000",
22090957b409SSimon J. Gerraty "ffffffffffffffffffffffffffff0000",
22100957b409SSimon J. Gerraty "545f2b83d9616dccf60fa9830e9cd287",
22110957b409SSimon J. Gerraty
22120957b409SSimon J. Gerraty "00000000000000000000000000000000",
22130957b409SSimon J. Gerraty "ffffffffffffffffffffffffffff8000",
22140957b409SSimon J. Gerraty "4b706f7f92406352394037a6d4f4688d",
22150957b409SSimon J. Gerraty
22160957b409SSimon J. Gerraty "00000000000000000000000000000000",
22170957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffc000",
22180957b409SSimon J. Gerraty "b7972b3941c44b90afa7b264bfba7387",
22190957b409SSimon J. Gerraty
22200957b409SSimon J. Gerraty "00000000000000000000000000000000",
22210957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffe000",
22220957b409SSimon J. Gerraty "6f45732cf10881546f0fd23896d2bb60",
22230957b409SSimon J. Gerraty
22240957b409SSimon J. Gerraty "00000000000000000000000000000000",
22250957b409SSimon J. Gerraty "fffffffffffffffffffffffffffff000",
22260957b409SSimon J. Gerraty "2e3579ca15af27f64b3c955a5bfc30ba",
22270957b409SSimon J. Gerraty
22280957b409SSimon J. Gerraty "00000000000000000000000000000000",
22290957b409SSimon J. Gerraty "fffffffffffffffffffffffffffff800",
22300957b409SSimon J. Gerraty "34a2c5a91ae2aec99b7d1b5fa6780447",
22310957b409SSimon J. Gerraty
22320957b409SSimon J. Gerraty "00000000000000000000000000000000",
22330957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffc00",
22340957b409SSimon J. Gerraty "a4d6616bd04f87335b0e53351227a9ee",
22350957b409SSimon J. Gerraty
22360957b409SSimon J. Gerraty "00000000000000000000000000000000",
22370957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffe00",
22380957b409SSimon J. Gerraty "7f692b03945867d16179a8cefc83ea3f",
22390957b409SSimon J. Gerraty
22400957b409SSimon J. Gerraty "00000000000000000000000000000000",
22410957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffff00",
22420957b409SSimon J. Gerraty "3bd141ee84a0e6414a26e7a4f281f8a2",
22430957b409SSimon J. Gerraty
22440957b409SSimon J. Gerraty "00000000000000000000000000000000",
22450957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffff80",
22460957b409SSimon J. Gerraty "d1788f572d98b2b16ec5d5f3922b99bc",
22470957b409SSimon J. Gerraty
22480957b409SSimon J. Gerraty "00000000000000000000000000000000",
22490957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffc0",
22500957b409SSimon J. Gerraty "0833ff6f61d98a57b288e8c3586b85a6",
22510957b409SSimon J. Gerraty
22520957b409SSimon J. Gerraty "00000000000000000000000000000000",
22530957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffe0",
22540957b409SSimon J. Gerraty "8568261797de176bf0b43becc6285afb",
22550957b409SSimon J. Gerraty
22560957b409SSimon J. Gerraty "00000000000000000000000000000000",
22570957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffff0",
22580957b409SSimon J. Gerraty "f9b0fda0c4a898f5b9e6f661c4ce4d07",
22590957b409SSimon J. Gerraty
22600957b409SSimon J. Gerraty "00000000000000000000000000000000",
22610957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffff8",
22620957b409SSimon J. Gerraty "8ade895913685c67c5269f8aae42983e",
22630957b409SSimon J. Gerraty
22640957b409SSimon J. Gerraty "00000000000000000000000000000000",
22650957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffffc",
22660957b409SSimon J. Gerraty "39bde67d5c8ed8a8b1c37eb8fa9f5ac0",
22670957b409SSimon J. Gerraty
22680957b409SSimon J. Gerraty "00000000000000000000000000000000",
22690957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffffe",
22700957b409SSimon J. Gerraty "5c005e72c1418c44f569f2ea33ba54f3",
22710957b409SSimon J. Gerraty
22720957b409SSimon J. Gerraty "00000000000000000000000000000000",
22730957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffff",
22740957b409SSimon J. Gerraty "3f5b8cc9ea855a0afa7347d23e8d664e",
22750957b409SSimon J. Gerraty
22760957b409SSimon J. Gerraty /*
22770957b409SSimon J. Gerraty * From NIST validation suite (ECBVarTxt192.rsp).
22780957b409SSimon J. Gerraty */
22790957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
22800957b409SSimon J. Gerraty "80000000000000000000000000000000",
22810957b409SSimon J. Gerraty "6cd02513e8d4dc986b4afe087a60bd0c",
22820957b409SSimon J. Gerraty
22830957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
22840957b409SSimon J. Gerraty "c0000000000000000000000000000000",
22850957b409SSimon J. Gerraty "2ce1f8b7e30627c1c4519eada44bc436",
22860957b409SSimon J. Gerraty
22870957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
22880957b409SSimon J. Gerraty "e0000000000000000000000000000000",
22890957b409SSimon J. Gerraty "9946b5f87af446f5796c1fee63a2da24",
22900957b409SSimon J. Gerraty
22910957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
22920957b409SSimon J. Gerraty "f0000000000000000000000000000000",
22930957b409SSimon J. Gerraty "2a560364ce529efc21788779568d5555",
22940957b409SSimon J. Gerraty
22950957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
22960957b409SSimon J. Gerraty "f8000000000000000000000000000000",
22970957b409SSimon J. Gerraty "35c1471837af446153bce55d5ba72a0a",
22980957b409SSimon J. Gerraty
22990957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23000957b409SSimon J. Gerraty "fc000000000000000000000000000000",
23010957b409SSimon J. Gerraty "ce60bc52386234f158f84341e534cd9e",
23020957b409SSimon J. Gerraty
23030957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23040957b409SSimon J. Gerraty "fe000000000000000000000000000000",
23050957b409SSimon J. Gerraty "8c7c27ff32bcf8dc2dc57c90c2903961",
23060957b409SSimon J. Gerraty
23070957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23080957b409SSimon J. Gerraty "ff000000000000000000000000000000",
23090957b409SSimon J. Gerraty "32bb6a7ec84499e166f936003d55a5bb",
23100957b409SSimon J. Gerraty
23110957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23120957b409SSimon J. Gerraty "ff800000000000000000000000000000",
23130957b409SSimon J. Gerraty "a5c772e5c62631ef660ee1d5877f6d1b",
23140957b409SSimon J. Gerraty
23150957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23160957b409SSimon J. Gerraty "ffc00000000000000000000000000000",
23170957b409SSimon J. Gerraty "030d7e5b64f380a7e4ea5387b5cd7f49",
23180957b409SSimon J. Gerraty
23190957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23200957b409SSimon J. Gerraty "ffe00000000000000000000000000000",
23210957b409SSimon J. Gerraty "0dc9a2610037009b698f11bb7e86c83e",
23220957b409SSimon J. Gerraty
23230957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23240957b409SSimon J. Gerraty "fff00000000000000000000000000000",
23250957b409SSimon J. Gerraty "0046612c766d1840c226364f1fa7ed72",
23260957b409SSimon J. Gerraty
23270957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23280957b409SSimon J. Gerraty "fff80000000000000000000000000000",
23290957b409SSimon J. Gerraty "4880c7e08f27befe78590743c05e698b",
23300957b409SSimon J. Gerraty
23310957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23320957b409SSimon J. Gerraty "fffc0000000000000000000000000000",
23330957b409SSimon J. Gerraty "2520ce829a26577f0f4822c4ecc87401",
23340957b409SSimon J. Gerraty
23350957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23360957b409SSimon J. Gerraty "fffe0000000000000000000000000000",
23370957b409SSimon J. Gerraty "8765e8acc169758319cb46dc7bcf3dca",
23380957b409SSimon J. Gerraty
23390957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23400957b409SSimon J. Gerraty "ffff0000000000000000000000000000",
23410957b409SSimon J. Gerraty "e98f4ba4f073df4baa116d011dc24a28",
23420957b409SSimon J. Gerraty
23430957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23440957b409SSimon J. Gerraty "ffff8000000000000000000000000000",
23450957b409SSimon J. Gerraty "f378f68c5dbf59e211b3a659a7317d94",
23460957b409SSimon J. Gerraty
23470957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23480957b409SSimon J. Gerraty "ffffc000000000000000000000000000",
23490957b409SSimon J. Gerraty "283d3b069d8eb9fb432d74b96ca762b4",
23500957b409SSimon J. Gerraty
23510957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23520957b409SSimon J. Gerraty "ffffe000000000000000000000000000",
23530957b409SSimon J. Gerraty "a7e1842e8a87861c221a500883245c51",
23540957b409SSimon J. Gerraty
23550957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23560957b409SSimon J. Gerraty "fffff000000000000000000000000000",
23570957b409SSimon J. Gerraty "77aa270471881be070fb52c7067ce732",
23580957b409SSimon J. Gerraty
23590957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23600957b409SSimon J. Gerraty "fffff800000000000000000000000000",
23610957b409SSimon J. Gerraty "01b0f476d484f43f1aeb6efa9361a8ac",
23620957b409SSimon J. Gerraty
23630957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23640957b409SSimon J. Gerraty "fffffc00000000000000000000000000",
23650957b409SSimon J. Gerraty "1c3a94f1c052c55c2d8359aff2163b4f",
23660957b409SSimon J. Gerraty
23670957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23680957b409SSimon J. Gerraty "fffffe00000000000000000000000000",
23690957b409SSimon J. Gerraty "e8a067b604d5373d8b0f2e05a03b341b",
23700957b409SSimon J. Gerraty
23710957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23720957b409SSimon J. Gerraty "ffffff00000000000000000000000000",
23730957b409SSimon J. Gerraty "a7876ec87f5a09bfea42c77da30fd50e",
23740957b409SSimon J. Gerraty
23750957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23760957b409SSimon J. Gerraty "ffffff80000000000000000000000000",
23770957b409SSimon J. Gerraty "0cf3e9d3a42be5b854ca65b13f35f48d",
23780957b409SSimon J. Gerraty
23790957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23800957b409SSimon J. Gerraty "ffffffc0000000000000000000000000",
23810957b409SSimon J. Gerraty "6c62f6bbcab7c3e821c9290f08892dda",
23820957b409SSimon J. Gerraty
23830957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23840957b409SSimon J. Gerraty "ffffffe0000000000000000000000000",
23850957b409SSimon J. Gerraty "7f5e05bd2068738196fee79ace7e3aec",
23860957b409SSimon J. Gerraty
23870957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23880957b409SSimon J. Gerraty "fffffff0000000000000000000000000",
23890957b409SSimon J. Gerraty "440e0d733255cda92fb46e842fe58054",
23900957b409SSimon J. Gerraty
23910957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23920957b409SSimon J. Gerraty "fffffff8000000000000000000000000",
23930957b409SSimon J. Gerraty "aa5d5b1c4ea1b7a22e5583ac2e9ed8a7",
23940957b409SSimon J. Gerraty
23950957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
23960957b409SSimon J. Gerraty "fffffffc000000000000000000000000",
23970957b409SSimon J. Gerraty "77e537e89e8491e8662aae3bc809421d",
23980957b409SSimon J. Gerraty
23990957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24000957b409SSimon J. Gerraty "fffffffe000000000000000000000000",
24010957b409SSimon J. Gerraty "997dd3e9f1598bfa73f75973f7e93b76",
24020957b409SSimon J. Gerraty
24030957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24040957b409SSimon J. Gerraty "ffffffff000000000000000000000000",
24050957b409SSimon J. Gerraty "1b38d4f7452afefcb7fc721244e4b72e",
24060957b409SSimon J. Gerraty
24070957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24080957b409SSimon J. Gerraty "ffffffff800000000000000000000000",
24090957b409SSimon J. Gerraty "0be2b18252e774dda30cdda02c6906e3",
24100957b409SSimon J. Gerraty
24110957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24120957b409SSimon J. Gerraty "ffffffffc00000000000000000000000",
24130957b409SSimon J. Gerraty "d2695e59c20361d82652d7d58b6f11b2",
24140957b409SSimon J. Gerraty
24150957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24160957b409SSimon J. Gerraty "ffffffffe00000000000000000000000",
24170957b409SSimon J. Gerraty "902d88d13eae52089abd6143cfe394e9",
24180957b409SSimon J. Gerraty
24190957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24200957b409SSimon J. Gerraty "fffffffff00000000000000000000000",
24210957b409SSimon J. Gerraty "d49bceb3b823fedd602c305345734bd2",
24220957b409SSimon J. Gerraty
24230957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24240957b409SSimon J. Gerraty "fffffffff80000000000000000000000",
24250957b409SSimon J. Gerraty "707b1dbb0ffa40ef7d95def421233fae",
24260957b409SSimon J. Gerraty
24270957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24280957b409SSimon J. Gerraty "fffffffffc0000000000000000000000",
24290957b409SSimon J. Gerraty "7ca0c1d93356d9eb8aa952084d75f913",
24300957b409SSimon J. Gerraty
24310957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24320957b409SSimon J. Gerraty "fffffffffe0000000000000000000000",
24330957b409SSimon J. Gerraty "f2cbf9cb186e270dd7bdb0c28febc57d",
24340957b409SSimon J. Gerraty
24350957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24360957b409SSimon J. Gerraty "ffffffffff0000000000000000000000",
24370957b409SSimon J. Gerraty "c94337c37c4e790ab45780bd9c3674a0",
24380957b409SSimon J. Gerraty
24390957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24400957b409SSimon J. Gerraty "ffffffffff8000000000000000000000",
24410957b409SSimon J. Gerraty "8e3558c135252fb9c9f367ed609467a1",
24420957b409SSimon J. Gerraty
24430957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24440957b409SSimon J. Gerraty "ffffffffffc000000000000000000000",
24450957b409SSimon J. Gerraty "1b72eeaee4899b443914e5b3a57fba92",
24460957b409SSimon J. Gerraty
24470957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24480957b409SSimon J. Gerraty "ffffffffffe000000000000000000000",
24490957b409SSimon J. Gerraty "011865f91bc56868d051e52c9efd59b7",
24500957b409SSimon J. Gerraty
24510957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24520957b409SSimon J. Gerraty "fffffffffff000000000000000000000",
24530957b409SSimon J. Gerraty "e4771318ad7a63dd680f6e583b7747ea",
24540957b409SSimon J. Gerraty
24550957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24560957b409SSimon J. Gerraty "fffffffffff800000000000000000000",
24570957b409SSimon J. Gerraty "61e3d194088dc8d97e9e6db37457eac5",
24580957b409SSimon J. Gerraty
24590957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24600957b409SSimon J. Gerraty "fffffffffffc00000000000000000000",
24610957b409SSimon J. Gerraty "36ff1ec9ccfbc349e5d356d063693ad6",
24620957b409SSimon J. Gerraty
24630957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24640957b409SSimon J. Gerraty "fffffffffffe00000000000000000000",
24650957b409SSimon J. Gerraty "3cc9e9a9be8cc3f6fb2ea24088e9bb19",
24660957b409SSimon J. Gerraty
24670957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24680957b409SSimon J. Gerraty "ffffffffffff00000000000000000000",
24690957b409SSimon J. Gerraty "1ee5ab003dc8722e74905d9a8fe3d350",
24700957b409SSimon J. Gerraty
24710957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24720957b409SSimon J. Gerraty "ffffffffffff80000000000000000000",
24730957b409SSimon J. Gerraty "245339319584b0a412412869d6c2eada",
24740957b409SSimon J. Gerraty
24750957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24760957b409SSimon J. Gerraty "ffffffffffffc0000000000000000000",
24770957b409SSimon J. Gerraty "7bd496918115d14ed5380852716c8814",
24780957b409SSimon J. Gerraty
24790957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24800957b409SSimon J. Gerraty "ffffffffffffe0000000000000000000",
24810957b409SSimon J. Gerraty "273ab2f2b4a366a57d582a339313c8b1",
24820957b409SSimon J. Gerraty
24830957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24840957b409SSimon J. Gerraty "fffffffffffff0000000000000000000",
24850957b409SSimon J. Gerraty "113365a9ffbe3b0ca61e98507554168b",
24860957b409SSimon J. Gerraty
24870957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24880957b409SSimon J. Gerraty "fffffffffffff8000000000000000000",
24890957b409SSimon J. Gerraty "afa99c997ac478a0dea4119c9e45f8b1",
24900957b409SSimon J. Gerraty
24910957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24920957b409SSimon J. Gerraty "fffffffffffffc000000000000000000",
24930957b409SSimon J. Gerraty "9216309a7842430b83ffb98638011512",
24940957b409SSimon J. Gerraty
24950957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
24960957b409SSimon J. Gerraty "fffffffffffffe000000000000000000",
24970957b409SSimon J. Gerraty "62abc792288258492a7cb45145f4b759",
24980957b409SSimon J. Gerraty
24990957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25000957b409SSimon J. Gerraty "ffffffffffffff000000000000000000",
25010957b409SSimon J. Gerraty "534923c169d504d7519c15d30e756c50",
25020957b409SSimon J. Gerraty
25030957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25040957b409SSimon J. Gerraty "ffffffffffffff800000000000000000",
25050957b409SSimon J. Gerraty "fa75e05bcdc7e00c273fa33f6ee441d2",
25060957b409SSimon J. Gerraty
25070957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25080957b409SSimon J. Gerraty "ffffffffffffffc00000000000000000",
25090957b409SSimon J. Gerraty "7d350fa6057080f1086a56b17ec240db",
25100957b409SSimon J. Gerraty
25110957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25120957b409SSimon J. Gerraty "ffffffffffffffe00000000000000000",
25130957b409SSimon J. Gerraty "f34e4a6324ea4a5c39a661c8fe5ada8f",
25140957b409SSimon J. Gerraty
25150957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25160957b409SSimon J. Gerraty "fffffffffffffff00000000000000000",
25170957b409SSimon J. Gerraty "0882a16f44088d42447a29ac090ec17e",
25180957b409SSimon J. Gerraty
25190957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25200957b409SSimon J. Gerraty "fffffffffffffff80000000000000000",
25210957b409SSimon J. Gerraty "3a3c15bfc11a9537c130687004e136ee",
25220957b409SSimon J. Gerraty
25230957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25240957b409SSimon J. Gerraty "fffffffffffffffc0000000000000000",
25250957b409SSimon J. Gerraty "22c0a7678dc6d8cf5c8a6d5a9960767c",
25260957b409SSimon J. Gerraty
25270957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25280957b409SSimon J. Gerraty "fffffffffffffffe0000000000000000",
25290957b409SSimon J. Gerraty "b46b09809d68b9a456432a79bdc2e38c",
25300957b409SSimon J. Gerraty
25310957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25320957b409SSimon J. Gerraty "ffffffffffffffff0000000000000000",
25330957b409SSimon J. Gerraty "93baaffb35fbe739c17c6ac22eecf18f",
25340957b409SSimon J. Gerraty
25350957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25360957b409SSimon J. Gerraty "ffffffffffffffff8000000000000000",
25370957b409SSimon J. Gerraty "c8aa80a7850675bc007c46df06b49868",
25380957b409SSimon J. Gerraty
25390957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25400957b409SSimon J. Gerraty "ffffffffffffffffc000000000000000",
25410957b409SSimon J. Gerraty "12c6f3877af421a918a84b775858021d",
25420957b409SSimon J. Gerraty
25430957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25440957b409SSimon J. Gerraty "ffffffffffffffffe000000000000000",
25450957b409SSimon J. Gerraty "33f123282c5d633924f7d5ba3f3cab11",
25460957b409SSimon J. Gerraty
25470957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25480957b409SSimon J. Gerraty "fffffffffffffffff000000000000000",
25490957b409SSimon J. Gerraty "a8f161002733e93ca4527d22c1a0c5bb",
25500957b409SSimon J. Gerraty
25510957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25520957b409SSimon J. Gerraty "fffffffffffffffff800000000000000",
25530957b409SSimon J. Gerraty "b72f70ebf3e3fda23f508eec76b42c02",
25540957b409SSimon J. Gerraty
25550957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25560957b409SSimon J. Gerraty "fffffffffffffffffc00000000000000",
25570957b409SSimon J. Gerraty "6a9d965e6274143f25afdcfc88ffd77c",
25580957b409SSimon J. Gerraty
25590957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25600957b409SSimon J. Gerraty "fffffffffffffffffe00000000000000",
25610957b409SSimon J. Gerraty "a0c74fd0b9361764ce91c5200b095357",
25620957b409SSimon J. Gerraty
25630957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25640957b409SSimon J. Gerraty "ffffffffffffffffff00000000000000",
25650957b409SSimon J. Gerraty "091d1fdc2bd2c346cd5046a8c6209146",
25660957b409SSimon J. Gerraty
25670957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25680957b409SSimon J. Gerraty "ffffffffffffffffff80000000000000",
25690957b409SSimon J. Gerraty "e2a37580116cfb71856254496ab0aca8",
25700957b409SSimon J. Gerraty
25710957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25720957b409SSimon J. Gerraty "ffffffffffffffffffc0000000000000",
25730957b409SSimon J. Gerraty "e0b3a00785917c7efc9adba322813571",
25740957b409SSimon J. Gerraty
25750957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25760957b409SSimon J. Gerraty "ffffffffffffffffffe0000000000000",
25770957b409SSimon J. Gerraty "733d41f4727b5ef0df4af4cf3cffa0cb",
25780957b409SSimon J. Gerraty
25790957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25800957b409SSimon J. Gerraty "fffffffffffffffffff0000000000000",
25810957b409SSimon J. Gerraty "a99ebb030260826f981ad3e64490aa4f",
25820957b409SSimon J. Gerraty
25830957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25840957b409SSimon J. Gerraty "fffffffffffffffffff8000000000000",
25850957b409SSimon J. Gerraty "73f34c7d3eae5e80082c1647524308ee",
25860957b409SSimon J. Gerraty
25870957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25880957b409SSimon J. Gerraty "fffffffffffffffffffc000000000000",
25890957b409SSimon J. Gerraty "40ebd5ad082345b7a2097ccd3464da02",
25900957b409SSimon J. Gerraty
25910957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25920957b409SSimon J. Gerraty "fffffffffffffffffffe000000000000",
25930957b409SSimon J. Gerraty "7cc4ae9a424b2cec90c97153c2457ec5",
25940957b409SSimon J. Gerraty
25950957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
25960957b409SSimon J. Gerraty "ffffffffffffffffffff000000000000",
25970957b409SSimon J. Gerraty "54d632d03aba0bd0f91877ebdd4d09cb",
25980957b409SSimon J. Gerraty
25990957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26000957b409SSimon J. Gerraty "ffffffffffffffffffff800000000000",
26010957b409SSimon J. Gerraty "d3427be7e4d27cd54f5fe37b03cf0897",
26020957b409SSimon J. Gerraty
26030957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26040957b409SSimon J. Gerraty "ffffffffffffffffffffc00000000000",
26050957b409SSimon J. Gerraty "b2099795e88cc158fd75ea133d7e7fbe",
26060957b409SSimon J. Gerraty
26070957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26080957b409SSimon J. Gerraty "ffffffffffffffffffffe00000000000",
26090957b409SSimon J. Gerraty "a6cae46fb6fadfe7a2c302a34242817b",
26100957b409SSimon J. Gerraty
26110957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26120957b409SSimon J. Gerraty "fffffffffffffffffffff00000000000",
26130957b409SSimon J. Gerraty "026a7024d6a902e0b3ffccbaa910cc3f",
26140957b409SSimon J. Gerraty
26150957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26160957b409SSimon J. Gerraty "fffffffffffffffffffff80000000000",
26170957b409SSimon J. Gerraty "156f07767a85a4312321f63968338a01",
26180957b409SSimon J. Gerraty
26190957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26200957b409SSimon J. Gerraty "fffffffffffffffffffffc0000000000",
26210957b409SSimon J. Gerraty "15eec9ebf42b9ca76897d2cd6c5a12e2",
26220957b409SSimon J. Gerraty
26230957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26240957b409SSimon J. Gerraty "fffffffffffffffffffffe0000000000",
26250957b409SSimon J. Gerraty "db0d3a6fdcc13f915e2b302ceeb70fd8",
26260957b409SSimon J. Gerraty
26270957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26280957b409SSimon J. Gerraty "ffffffffffffffffffffff0000000000",
26290957b409SSimon J. Gerraty "71dbf37e87a2e34d15b20e8f10e48924",
26300957b409SSimon J. Gerraty
26310957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26320957b409SSimon J. Gerraty "ffffffffffffffffffffff8000000000",
26330957b409SSimon J. Gerraty "c745c451e96ff3c045e4367c833e3b54",
26340957b409SSimon J. Gerraty
26350957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26360957b409SSimon J. Gerraty "ffffffffffffffffffffffc000000000",
26370957b409SSimon J. Gerraty "340da09c2dd11c3b679d08ccd27dd595",
26380957b409SSimon J. Gerraty
26390957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26400957b409SSimon J. Gerraty "ffffffffffffffffffffffe000000000",
26410957b409SSimon J. Gerraty "8279f7c0c2a03ee660c6d392db025d18",
26420957b409SSimon J. Gerraty
26430957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26440957b409SSimon J. Gerraty "fffffffffffffffffffffff000000000",
26450957b409SSimon J. Gerraty "a4b2c7d8eba531ff47c5041a55fbd1ec",
26460957b409SSimon J. Gerraty
26470957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26480957b409SSimon J. Gerraty "fffffffffffffffffffffff800000000",
26490957b409SSimon J. Gerraty "74569a2ca5a7bd5131ce8dc7cbfbf72f",
26500957b409SSimon J. Gerraty
26510957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26520957b409SSimon J. Gerraty "fffffffffffffffffffffffc00000000",
26530957b409SSimon J. Gerraty "3713da0c0219b63454035613b5a403dd",
26540957b409SSimon J. Gerraty
26550957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26560957b409SSimon J. Gerraty "fffffffffffffffffffffffe00000000",
26570957b409SSimon J. Gerraty "8827551ddcc9df23fa72a3de4e9f0b07",
26580957b409SSimon J. Gerraty
26590957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26600957b409SSimon J. Gerraty "ffffffffffffffffffffffff00000000",
26610957b409SSimon J. Gerraty "2e3febfd625bfcd0a2c06eb460da1732",
26620957b409SSimon J. Gerraty
26630957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26640957b409SSimon J. Gerraty "ffffffffffffffffffffffff80000000",
26650957b409SSimon J. Gerraty "ee82e6ba488156f76496311da6941deb",
26660957b409SSimon J. Gerraty
26670957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26680957b409SSimon J. Gerraty "ffffffffffffffffffffffffc0000000",
26690957b409SSimon J. Gerraty "4770446f01d1f391256e85a1b30d89d3",
26700957b409SSimon J. Gerraty
26710957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26720957b409SSimon J. Gerraty "ffffffffffffffffffffffffe0000000",
26730957b409SSimon J. Gerraty "af04b68f104f21ef2afb4767cf74143c",
26740957b409SSimon J. Gerraty
26750957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26760957b409SSimon J. Gerraty "fffffffffffffffffffffffff0000000",
26770957b409SSimon J. Gerraty "cf3579a9ba38c8e43653173e14f3a4c6",
26780957b409SSimon J. Gerraty
26790957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26800957b409SSimon J. Gerraty "fffffffffffffffffffffffff8000000",
26810957b409SSimon J. Gerraty "b3bba904f4953e09b54800af2f62e7d4",
26820957b409SSimon J. Gerraty
26830957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26840957b409SSimon J. Gerraty "fffffffffffffffffffffffffc000000",
26850957b409SSimon J. Gerraty "fc4249656e14b29eb9c44829b4c59a46",
26860957b409SSimon J. Gerraty
26870957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26880957b409SSimon J. Gerraty "fffffffffffffffffffffffffe000000",
26890957b409SSimon J. Gerraty "9b31568febe81cfc2e65af1c86d1a308",
26900957b409SSimon J. Gerraty
26910957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26920957b409SSimon J. Gerraty "ffffffffffffffffffffffffff000000",
26930957b409SSimon J. Gerraty "9ca09c25f273a766db98a480ce8dfedc",
26940957b409SSimon J. Gerraty
26950957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
26960957b409SSimon J. Gerraty "ffffffffffffffffffffffffff800000",
26970957b409SSimon J. Gerraty "b909925786f34c3c92d971883c9fbedf",
26980957b409SSimon J. Gerraty
26990957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27000957b409SSimon J. Gerraty "ffffffffffffffffffffffffffc00000",
27010957b409SSimon J. Gerraty "82647f1332fe570a9d4d92b2ee771d3b",
27020957b409SSimon J. Gerraty
27030957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27040957b409SSimon J. Gerraty "ffffffffffffffffffffffffffe00000",
27050957b409SSimon J. Gerraty "3604a7e80832b3a99954bca6f5b9f501",
27060957b409SSimon J. Gerraty
27070957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27080957b409SSimon J. Gerraty "fffffffffffffffffffffffffff00000",
27090957b409SSimon J. Gerraty "884607b128c5de3ab39a529a1ef51bef",
27100957b409SSimon J. Gerraty
27110957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27120957b409SSimon J. Gerraty "fffffffffffffffffffffffffff80000",
27130957b409SSimon J. Gerraty "670cfa093d1dbdb2317041404102435e",
27140957b409SSimon J. Gerraty
27150957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27160957b409SSimon J. Gerraty "fffffffffffffffffffffffffffc0000",
27170957b409SSimon J. Gerraty "7a867195f3ce8769cbd336502fbb5130",
27180957b409SSimon J. Gerraty
27190957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27200957b409SSimon J. Gerraty "fffffffffffffffffffffffffffe0000",
27210957b409SSimon J. Gerraty "52efcf64c72b2f7ca5b3c836b1078c15",
27220957b409SSimon J. Gerraty
27230957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27240957b409SSimon J. Gerraty "ffffffffffffffffffffffffffff0000",
27250957b409SSimon J. Gerraty "4019250f6eefb2ac5ccbcae044e75c7e",
27260957b409SSimon J. Gerraty
27270957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27280957b409SSimon J. Gerraty "ffffffffffffffffffffffffffff8000",
27290957b409SSimon J. Gerraty "022c4f6f5a017d292785627667ddef24",
27300957b409SSimon J. Gerraty
27310957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27320957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffc000",
27330957b409SSimon J. Gerraty "e9c21078a2eb7e03250f71000fa9e3ed",
27340957b409SSimon J. Gerraty
27350957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27360957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffe000",
27370957b409SSimon J. Gerraty "a13eaeeb9cd391da4e2b09490b3e7fad",
27380957b409SSimon J. Gerraty
27390957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27400957b409SSimon J. Gerraty "fffffffffffffffffffffffffffff000",
27410957b409SSimon J. Gerraty "c958a171dca1d4ed53e1af1d380803a9",
27420957b409SSimon J. Gerraty
27430957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27440957b409SSimon J. Gerraty "fffffffffffffffffffffffffffff800",
27450957b409SSimon J. Gerraty "21442e07a110667f2583eaeeee44dc8c",
27460957b409SSimon J. Gerraty
27470957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27480957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffc00",
27490957b409SSimon J. Gerraty "59bbb353cf1dd867a6e33737af655e99",
27500957b409SSimon J. Gerraty
27510957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27520957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffe00",
27530957b409SSimon J. Gerraty "43cd3b25375d0ce41087ff9fe2829639",
27540957b409SSimon J. Gerraty
27550957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27560957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffff00",
27570957b409SSimon J. Gerraty "6b98b17e80d1118e3516bd768b285a84",
27580957b409SSimon J. Gerraty
27590957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27600957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffff80",
27610957b409SSimon J. Gerraty "ae47ed3676ca0c08deea02d95b81db58",
27620957b409SSimon J. Gerraty
27630957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27640957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffc0",
27650957b409SSimon J. Gerraty "34ec40dc20413795ed53628ea748720b",
27660957b409SSimon J. Gerraty
27670957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27680957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffe0",
27690957b409SSimon J. Gerraty "4dc68163f8e9835473253542c8a65d46",
27700957b409SSimon J. Gerraty
27710957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27720957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffff0",
27730957b409SSimon J. Gerraty "2aabb999f43693175af65c6c612c46fb",
27740957b409SSimon J. Gerraty
27750957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27760957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffff8",
27770957b409SSimon J. Gerraty "e01f94499dac3547515c5b1d756f0f58",
27780957b409SSimon J. Gerraty
27790957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27800957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffffc",
27810957b409SSimon J. Gerraty "9d12435a46480ce00ea349f71799df9a",
27820957b409SSimon J. Gerraty
27830957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27840957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffffe",
27850957b409SSimon J. Gerraty "cef41d16d266bdfe46938ad7884cc0cf",
27860957b409SSimon J. Gerraty
27870957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
27880957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffff",
27890957b409SSimon J. Gerraty "b13db4da1f718bc6904797c82bcf2d32",
27900957b409SSimon J. Gerraty
27910957b409SSimon J. Gerraty /*
27920957b409SSimon J. Gerraty * From NIST validation suite (ECBVarTxt256.rsp).
27930957b409SSimon J. Gerraty */
27940957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
27950957b409SSimon J. Gerraty "80000000000000000000000000000000",
27960957b409SSimon J. Gerraty "ddc6bf790c15760d8d9aeb6f9a75fd4e",
27970957b409SSimon J. Gerraty
27980957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
27990957b409SSimon J. Gerraty "c0000000000000000000000000000000",
28000957b409SSimon J. Gerraty "0a6bdc6d4c1e6280301fd8e97ddbe601",
28010957b409SSimon J. Gerraty
28020957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28030957b409SSimon J. Gerraty "e0000000000000000000000000000000",
28040957b409SSimon J. Gerraty "9b80eefb7ebe2d2b16247aa0efc72f5d",
28050957b409SSimon J. Gerraty
28060957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28070957b409SSimon J. Gerraty "f0000000000000000000000000000000",
28080957b409SSimon J. Gerraty "7f2c5ece07a98d8bee13c51177395ff7",
28090957b409SSimon J. Gerraty
28100957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28110957b409SSimon J. Gerraty "f8000000000000000000000000000000",
28120957b409SSimon J. Gerraty "7818d800dcf6f4be1e0e94f403d1e4c2",
28130957b409SSimon J. Gerraty
28140957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28150957b409SSimon J. Gerraty "fc000000000000000000000000000000",
28160957b409SSimon J. Gerraty "e74cd1c92f0919c35a0324123d6177d3",
28170957b409SSimon J. Gerraty
28180957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28190957b409SSimon J. Gerraty "fe000000000000000000000000000000",
28200957b409SSimon J. Gerraty "8092a4dcf2da7e77e93bdd371dfed82e",
28210957b409SSimon J. Gerraty
28220957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28230957b409SSimon J. Gerraty "ff000000000000000000000000000000",
28240957b409SSimon J. Gerraty "49af6b372135acef10132e548f217b17",
28250957b409SSimon J. Gerraty
28260957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28270957b409SSimon J. Gerraty "ff800000000000000000000000000000",
28280957b409SSimon J. Gerraty "8bcd40f94ebb63b9f7909676e667f1e7",
28290957b409SSimon J. Gerraty
28300957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28310957b409SSimon J. Gerraty "ffc00000000000000000000000000000",
28320957b409SSimon J. Gerraty "fe1cffb83f45dcfb38b29be438dbd3ab",
28330957b409SSimon J. Gerraty
28340957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28350957b409SSimon J. Gerraty "ffe00000000000000000000000000000",
28360957b409SSimon J. Gerraty "0dc58a8d886623705aec15cb1e70dc0e",
28370957b409SSimon J. Gerraty
28380957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28390957b409SSimon J. Gerraty "fff00000000000000000000000000000",
28400957b409SSimon J. Gerraty "c218faa16056bd0774c3e8d79c35a5e4",
28410957b409SSimon J. Gerraty
28420957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28430957b409SSimon J. Gerraty "fff80000000000000000000000000000",
28440957b409SSimon J. Gerraty "047bba83f7aa841731504e012208fc9e",
28450957b409SSimon J. Gerraty
28460957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28470957b409SSimon J. Gerraty "fffc0000000000000000000000000000",
28480957b409SSimon J. Gerraty "dc8f0e4915fd81ba70a331310882f6da",
28490957b409SSimon J. Gerraty
28500957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28510957b409SSimon J. Gerraty "fffe0000000000000000000000000000",
28520957b409SSimon J. Gerraty "1569859ea6b7206c30bf4fd0cbfac33c",
28530957b409SSimon J. Gerraty
28540957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28550957b409SSimon J. Gerraty "ffff0000000000000000000000000000",
28560957b409SSimon J. Gerraty "300ade92f88f48fa2df730ec16ef44cd",
28570957b409SSimon J. Gerraty
28580957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28590957b409SSimon J. Gerraty "ffff8000000000000000000000000000",
28600957b409SSimon J. Gerraty "1fe6cc3c05965dc08eb0590c95ac71d0",
28610957b409SSimon J. Gerraty
28620957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28630957b409SSimon J. Gerraty "ffffc000000000000000000000000000",
28640957b409SSimon J. Gerraty "59e858eaaa97fec38111275b6cf5abc0",
28650957b409SSimon J. Gerraty
28660957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28670957b409SSimon J. Gerraty "ffffe000000000000000000000000000",
28680957b409SSimon J. Gerraty "2239455e7afe3b0616100288cc5a723b",
28690957b409SSimon J. Gerraty
28700957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28710957b409SSimon J. Gerraty "fffff000000000000000000000000000",
28720957b409SSimon J. Gerraty "3ee500c5c8d63479717163e55c5c4522",
28730957b409SSimon J. Gerraty
28740957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28750957b409SSimon J. Gerraty "fffff800000000000000000000000000",
28760957b409SSimon J. Gerraty "d5e38bf15f16d90e3e214041d774daa8",
28770957b409SSimon J. Gerraty
28780957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28790957b409SSimon J. Gerraty "fffffc00000000000000000000000000",
28800957b409SSimon J. Gerraty "b1f4066e6f4f187dfe5f2ad1b17819d0",
28810957b409SSimon J. Gerraty
28820957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28830957b409SSimon J. Gerraty "fffffe00000000000000000000000000",
28840957b409SSimon J. Gerraty "6ef4cc4de49b11065d7af2909854794a",
28850957b409SSimon J. Gerraty
28860957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28870957b409SSimon J. Gerraty "ffffff00000000000000000000000000",
28880957b409SSimon J. Gerraty "ac86bc606b6640c309e782f232bf367f",
28890957b409SSimon J. Gerraty
28900957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28910957b409SSimon J. Gerraty "ffffff80000000000000000000000000",
28920957b409SSimon J. Gerraty "36aff0ef7bf3280772cf4cac80a0d2b2",
28930957b409SSimon J. Gerraty
28940957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28950957b409SSimon J. Gerraty "ffffffc0000000000000000000000000",
28960957b409SSimon J. Gerraty "1f8eedea0f62a1406d58cfc3ecea72cf",
28970957b409SSimon J. Gerraty
28980957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
28990957b409SSimon J. Gerraty "ffffffe0000000000000000000000000",
29000957b409SSimon J. Gerraty "abf4154a3375a1d3e6b1d454438f95a6",
29010957b409SSimon J. Gerraty
29020957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29030957b409SSimon J. Gerraty "fffffff0000000000000000000000000",
29040957b409SSimon J. Gerraty "96f96e9d607f6615fc192061ee648b07",
29050957b409SSimon J. Gerraty
29060957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29070957b409SSimon J. Gerraty "fffffff8000000000000000000000000",
29080957b409SSimon J. Gerraty "cf37cdaaa0d2d536c71857634c792064",
29090957b409SSimon J. Gerraty
29100957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29110957b409SSimon J. Gerraty "fffffffc000000000000000000000000",
29120957b409SSimon J. Gerraty "fbd6640c80245c2b805373f130703127",
29130957b409SSimon J. Gerraty
29140957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29150957b409SSimon J. Gerraty "fffffffe000000000000000000000000",
29160957b409SSimon J. Gerraty "8d6a8afe55a6e481badae0d146f436db",
29170957b409SSimon J. Gerraty
29180957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29190957b409SSimon J. Gerraty "ffffffff000000000000000000000000",
29200957b409SSimon J. Gerraty "6a4981f2915e3e68af6c22385dd06756",
29210957b409SSimon J. Gerraty
29220957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29230957b409SSimon J. Gerraty "ffffffff800000000000000000000000",
29240957b409SSimon J. Gerraty "42a1136e5f8d8d21d3101998642d573b",
29250957b409SSimon J. Gerraty
29260957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29270957b409SSimon J. Gerraty "ffffffffc00000000000000000000000",
29280957b409SSimon J. Gerraty "9b471596dc69ae1586cee6158b0b0181",
29290957b409SSimon J. Gerraty
29300957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29310957b409SSimon J. Gerraty "ffffffffe00000000000000000000000",
29320957b409SSimon J. Gerraty "753665c4af1eff33aa8b628bf8741cfd",
29330957b409SSimon J. Gerraty
29340957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29350957b409SSimon J. Gerraty "fffffffff00000000000000000000000",
29360957b409SSimon J. Gerraty "9a682acf40be01f5b2a4193c9a82404d",
29370957b409SSimon J. Gerraty
29380957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29390957b409SSimon J. Gerraty "fffffffff80000000000000000000000",
29400957b409SSimon J. Gerraty "54fafe26e4287f17d1935f87eb9ade01",
29410957b409SSimon J. Gerraty
29420957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29430957b409SSimon J. Gerraty "fffffffffc0000000000000000000000",
29440957b409SSimon J. Gerraty "49d541b2e74cfe73e6a8e8225f7bd449",
29450957b409SSimon J. Gerraty
29460957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29470957b409SSimon J. Gerraty "fffffffffe0000000000000000000000",
29480957b409SSimon J. Gerraty "11a45530f624ff6f76a1b3826626ff7b",
29490957b409SSimon J. Gerraty
29500957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29510957b409SSimon J. Gerraty "ffffffffff0000000000000000000000",
29520957b409SSimon J. Gerraty "f96b0c4a8bc6c86130289f60b43b8fba",
29530957b409SSimon J. Gerraty
29540957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29550957b409SSimon J. Gerraty "ffffffffff8000000000000000000000",
29560957b409SSimon J. Gerraty "48c7d0e80834ebdc35b6735f76b46c8b",
29570957b409SSimon J. Gerraty
29580957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29590957b409SSimon J. Gerraty "ffffffffffc000000000000000000000",
29600957b409SSimon J. Gerraty "2463531ab54d66955e73edc4cb8eaa45",
29610957b409SSimon J. Gerraty
29620957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29630957b409SSimon J. Gerraty "ffffffffffe000000000000000000000",
29640957b409SSimon J. Gerraty "ac9bd8e2530469134b9d5b065d4f565b",
29650957b409SSimon J. Gerraty
29660957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29670957b409SSimon J. Gerraty "fffffffffff000000000000000000000",
29680957b409SSimon J. Gerraty "3f5f9106d0e52f973d4890e6f37e8a00",
29690957b409SSimon J. Gerraty
29700957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29710957b409SSimon J. Gerraty "fffffffffff800000000000000000000",
29720957b409SSimon J. Gerraty "20ebc86f1304d272e2e207e59db639f0",
29730957b409SSimon J. Gerraty
29740957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29750957b409SSimon J. Gerraty "fffffffffffc00000000000000000000",
29760957b409SSimon J. Gerraty "e67ae6426bf9526c972cff072b52252c",
29770957b409SSimon J. Gerraty
29780957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29790957b409SSimon J. Gerraty "fffffffffffe00000000000000000000",
29800957b409SSimon J. Gerraty "1a518dddaf9efa0d002cc58d107edfc8",
29810957b409SSimon J. Gerraty
29820957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29830957b409SSimon J. Gerraty "ffffffffffff00000000000000000000",
29840957b409SSimon J. Gerraty "ead731af4d3a2fe3b34bed047942a49f",
29850957b409SSimon J. Gerraty
29860957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29870957b409SSimon J. Gerraty "ffffffffffff80000000000000000000",
29880957b409SSimon J. Gerraty "b1d4efe40242f83e93b6c8d7efb5eae9",
29890957b409SSimon J. Gerraty
29900957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29910957b409SSimon J. Gerraty "ffffffffffffc0000000000000000000",
29920957b409SSimon J. Gerraty "cd2b1fec11fd906c5c7630099443610a",
29930957b409SSimon J. Gerraty
29940957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29950957b409SSimon J. Gerraty "ffffffffffffe0000000000000000000",
29960957b409SSimon J. Gerraty "a1853fe47fe29289d153161d06387d21",
29970957b409SSimon J. Gerraty
29980957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
29990957b409SSimon J. Gerraty "fffffffffffff0000000000000000000",
30000957b409SSimon J. Gerraty "4632154179a555c17ea604d0889fab14",
30010957b409SSimon J. Gerraty
30020957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30030957b409SSimon J. Gerraty "fffffffffffff8000000000000000000",
30040957b409SSimon J. Gerraty "dd27cac6401a022e8f38f9f93e774417",
30050957b409SSimon J. Gerraty
30060957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30070957b409SSimon J. Gerraty "fffffffffffffc000000000000000000",
30080957b409SSimon J. Gerraty "c090313eb98674f35f3123385fb95d4d",
30090957b409SSimon J. Gerraty
30100957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30110957b409SSimon J. Gerraty "fffffffffffffe000000000000000000",
30120957b409SSimon J. Gerraty "cc3526262b92f02edce548f716b9f45c",
30130957b409SSimon J. Gerraty
30140957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30150957b409SSimon J. Gerraty "ffffffffffffff000000000000000000",
30160957b409SSimon J. Gerraty "c0838d1a2b16a7c7f0dfcc433c399c33",
30170957b409SSimon J. Gerraty
30180957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30190957b409SSimon J. Gerraty "ffffffffffffff800000000000000000",
30200957b409SSimon J. Gerraty "0d9ac756eb297695eed4d382eb126d26",
30210957b409SSimon J. Gerraty
30220957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30230957b409SSimon J. Gerraty "ffffffffffffffc00000000000000000",
30240957b409SSimon J. Gerraty "56ede9dda3f6f141bff1757fa689c3e1",
30250957b409SSimon J. Gerraty
30260957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30270957b409SSimon J. Gerraty "ffffffffffffffe00000000000000000",
30280957b409SSimon J. Gerraty "768f520efe0f23e61d3ec8ad9ce91774",
30290957b409SSimon J. Gerraty
30300957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30310957b409SSimon J. Gerraty "fffffffffffffff00000000000000000",
30320957b409SSimon J. Gerraty "b1144ddfa75755213390e7c596660490",
30330957b409SSimon J. Gerraty
30340957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30350957b409SSimon J. Gerraty "fffffffffffffff80000000000000000",
30360957b409SSimon J. Gerraty "1d7c0c4040b355b9d107a99325e3b050",
30370957b409SSimon J. Gerraty
30380957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30390957b409SSimon J. Gerraty "fffffffffffffffc0000000000000000",
30400957b409SSimon J. Gerraty "d8e2bb1ae8ee3dcf5bf7d6c38da82a1a",
30410957b409SSimon J. Gerraty
30420957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30430957b409SSimon J. Gerraty "fffffffffffffffe0000000000000000",
30440957b409SSimon J. Gerraty "faf82d178af25a9886a47e7f789b98d7",
30450957b409SSimon J. Gerraty
30460957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30470957b409SSimon J. Gerraty "ffffffffffffffff0000000000000000",
30480957b409SSimon J. Gerraty "9b58dbfd77fe5aca9cfc190cd1b82d19",
30490957b409SSimon J. Gerraty
30500957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30510957b409SSimon J. Gerraty "ffffffffffffffff8000000000000000",
30520957b409SSimon J. Gerraty "77f392089042e478ac16c0c86a0b5db5",
30530957b409SSimon J. Gerraty
30540957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30550957b409SSimon J. Gerraty "ffffffffffffffffc000000000000000",
30560957b409SSimon J. Gerraty "19f08e3420ee69b477ca1420281c4782",
30570957b409SSimon J. Gerraty
30580957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30590957b409SSimon J. Gerraty "ffffffffffffffffe000000000000000",
30600957b409SSimon J. Gerraty "a1b19beee4e117139f74b3c53fdcb875",
30610957b409SSimon J. Gerraty
30620957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30630957b409SSimon J. Gerraty "fffffffffffffffff000000000000000",
30640957b409SSimon J. Gerraty "a37a5869b218a9f3a0868d19aea0ad6a",
30650957b409SSimon J. Gerraty
30660957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30670957b409SSimon J. Gerraty "fffffffffffffffff800000000000000",
30680957b409SSimon J. Gerraty "bc3594e865bcd0261b13202731f33580",
30690957b409SSimon J. Gerraty
30700957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30710957b409SSimon J. Gerraty "fffffffffffffffffc00000000000000",
30720957b409SSimon J. Gerraty "811441ce1d309eee7185e8c752c07557",
30730957b409SSimon J. Gerraty
30740957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30750957b409SSimon J. Gerraty "fffffffffffffffffe00000000000000",
30760957b409SSimon J. Gerraty "959971ce4134190563518e700b9874d1",
30770957b409SSimon J. Gerraty
30780957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30790957b409SSimon J. Gerraty "ffffffffffffffffff00000000000000",
30800957b409SSimon J. Gerraty "76b5614a042707c98e2132e2e805fe63",
30810957b409SSimon J. Gerraty
30820957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30830957b409SSimon J. Gerraty "ffffffffffffffffff80000000000000",
30840957b409SSimon J. Gerraty "7d9fa6a57530d0f036fec31c230b0cc6",
30850957b409SSimon J. Gerraty
30860957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30870957b409SSimon J. Gerraty "ffffffffffffffffffc0000000000000",
30880957b409SSimon J. Gerraty "964153a83bf6989a4ba80daa91c3e081",
30890957b409SSimon J. Gerraty
30900957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30910957b409SSimon J. Gerraty "ffffffffffffffffffe0000000000000",
30920957b409SSimon J. Gerraty "a013014d4ce8054cf2591d06f6f2f176",
30930957b409SSimon J. Gerraty
30940957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30950957b409SSimon J. Gerraty "fffffffffffffffffff0000000000000",
30960957b409SSimon J. Gerraty "d1c5f6399bf382502e385eee1474a869",
30970957b409SSimon J. Gerraty
30980957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
30990957b409SSimon J. Gerraty "fffffffffffffffffff8000000000000",
31000957b409SSimon J. Gerraty "0007e20b8298ec354f0f5fe7470f36bd",
31010957b409SSimon J. Gerraty
31020957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31030957b409SSimon J. Gerraty "fffffffffffffffffffc000000000000",
31040957b409SSimon J. Gerraty "b95ba05b332da61ef63a2b31fcad9879",
31050957b409SSimon J. Gerraty
31060957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31070957b409SSimon J. Gerraty "fffffffffffffffffffe000000000000",
31080957b409SSimon J. Gerraty "4620a49bd967491561669ab25dce45f4",
31090957b409SSimon J. Gerraty
31100957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31110957b409SSimon J. Gerraty "ffffffffffffffffffff000000000000",
31120957b409SSimon J. Gerraty "12e71214ae8e04f0bb63d7425c6f14d5",
31130957b409SSimon J. Gerraty
31140957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31150957b409SSimon J. Gerraty "ffffffffffffffffffff800000000000",
31160957b409SSimon J. Gerraty "4cc42fc1407b008fe350907c092e80ac",
31170957b409SSimon J. Gerraty
31180957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31190957b409SSimon J. Gerraty "ffffffffffffffffffffc00000000000",
31200957b409SSimon J. Gerraty "08b244ce7cbc8ee97fbba808cb146fda",
31210957b409SSimon J. Gerraty
31220957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31230957b409SSimon J. Gerraty "ffffffffffffffffffffe00000000000",
31240957b409SSimon J. Gerraty "39b333e8694f21546ad1edd9d87ed95b",
31250957b409SSimon J. Gerraty
31260957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31270957b409SSimon J. Gerraty "fffffffffffffffffffff00000000000",
31280957b409SSimon J. Gerraty "3b271f8ab2e6e4a20ba8090f43ba78f3",
31290957b409SSimon J. Gerraty
31300957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31310957b409SSimon J. Gerraty "fffffffffffffffffffff80000000000",
31320957b409SSimon J. Gerraty "9ad983f3bf651cd0393f0a73cccdea50",
31330957b409SSimon J. Gerraty
31340957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31350957b409SSimon J. Gerraty "fffffffffffffffffffffc0000000000",
31360957b409SSimon J. Gerraty "8f476cbff75c1f725ce18e4bbcd19b32",
31370957b409SSimon J. Gerraty
31380957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31390957b409SSimon J. Gerraty "fffffffffffffffffffffe0000000000",
31400957b409SSimon J. Gerraty "905b6267f1d6ab5320835a133f096f2a",
31410957b409SSimon J. Gerraty
31420957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31430957b409SSimon J. Gerraty "ffffffffffffffffffffff0000000000",
31440957b409SSimon J. Gerraty "145b60d6d0193c23f4221848a892d61a",
31450957b409SSimon J. Gerraty
31460957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31470957b409SSimon J. Gerraty "ffffffffffffffffffffff8000000000",
31480957b409SSimon J. Gerraty "55cfb3fb6d75cad0445bbc8dafa25b0f",
31490957b409SSimon J. Gerraty
31500957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31510957b409SSimon J. Gerraty "ffffffffffffffffffffffc000000000",
31520957b409SSimon J. Gerraty "7b8e7098e357ef71237d46d8b075b0f5",
31530957b409SSimon J. Gerraty
31540957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31550957b409SSimon J. Gerraty "ffffffffffffffffffffffe000000000",
31560957b409SSimon J. Gerraty "2bf27229901eb40f2df9d8398d1505ae",
31570957b409SSimon J. Gerraty
31580957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31590957b409SSimon J. Gerraty "fffffffffffffffffffffff000000000",
31600957b409SSimon J. Gerraty "83a63402a77f9ad5c1e931a931ecd706",
31610957b409SSimon J. Gerraty
31620957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31630957b409SSimon J. Gerraty "fffffffffffffffffffffff800000000",
31640957b409SSimon J. Gerraty "6f8ba6521152d31f2bada1843e26b973",
31650957b409SSimon J. Gerraty
31660957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31670957b409SSimon J. Gerraty "fffffffffffffffffffffffc00000000",
31680957b409SSimon J. Gerraty "e5c3b8e30fd2d8e6239b17b44bd23bbd",
31690957b409SSimon J. Gerraty
31700957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31710957b409SSimon J. Gerraty "fffffffffffffffffffffffe00000000",
31720957b409SSimon J. Gerraty "1ac1f7102c59933e8b2ddc3f14e94baa",
31730957b409SSimon J. Gerraty
31740957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31750957b409SSimon J. Gerraty "ffffffffffffffffffffffff00000000",
31760957b409SSimon J. Gerraty "21d9ba49f276b45f11af8fc71a088e3d",
31770957b409SSimon J. Gerraty
31780957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31790957b409SSimon J. Gerraty "ffffffffffffffffffffffff80000000",
31800957b409SSimon J. Gerraty "649f1cddc3792b4638635a392bc9bade",
31810957b409SSimon J. Gerraty
31820957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31830957b409SSimon J. Gerraty "ffffffffffffffffffffffffc0000000",
31840957b409SSimon J. Gerraty "e2775e4b59c1bc2e31a2078c11b5a08c",
31850957b409SSimon J. Gerraty
31860957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31870957b409SSimon J. Gerraty "ffffffffffffffffffffffffe0000000",
31880957b409SSimon J. Gerraty "2be1fae5048a25582a679ca10905eb80",
31890957b409SSimon J. Gerraty
31900957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31910957b409SSimon J. Gerraty "fffffffffffffffffffffffff0000000",
31920957b409SSimon J. Gerraty "da86f292c6f41ea34fb2068df75ecc29",
31930957b409SSimon J. Gerraty
31940957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31950957b409SSimon J. Gerraty "fffffffffffffffffffffffff8000000",
31960957b409SSimon J. Gerraty "220df19f85d69b1b562fa69a3c5beca5",
31970957b409SSimon J. Gerraty
31980957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
31990957b409SSimon J. Gerraty "fffffffffffffffffffffffffc000000",
32000957b409SSimon J. Gerraty "1f11d5d0355e0b556ccdb6c7f5083b4d",
32010957b409SSimon J. Gerraty
32020957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32030957b409SSimon J. Gerraty "fffffffffffffffffffffffffe000000",
32040957b409SSimon J. Gerraty "62526b78be79cb384633c91f83b4151b",
32050957b409SSimon J. Gerraty
32060957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32070957b409SSimon J. Gerraty "ffffffffffffffffffffffffff000000",
32080957b409SSimon J. Gerraty "90ddbcb950843592dd47bbef00fdc876",
32090957b409SSimon J. Gerraty
32100957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32110957b409SSimon J. Gerraty "ffffffffffffffffffffffffff800000",
32120957b409SSimon J. Gerraty "2fd0e41c5b8402277354a7391d2618e2",
32130957b409SSimon J. Gerraty
32140957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32150957b409SSimon J. Gerraty "ffffffffffffffffffffffffffc00000",
32160957b409SSimon J. Gerraty "3cdf13e72dee4c581bafec70b85f9660",
32170957b409SSimon J. Gerraty
32180957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32190957b409SSimon J. Gerraty "ffffffffffffffffffffffffffe00000",
32200957b409SSimon J. Gerraty "afa2ffc137577092e2b654fa199d2c43",
32210957b409SSimon J. Gerraty
32220957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32230957b409SSimon J. Gerraty "fffffffffffffffffffffffffff00000",
32240957b409SSimon J. Gerraty "8d683ee63e60d208e343ce48dbc44cac",
32250957b409SSimon J. Gerraty
32260957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32270957b409SSimon J. Gerraty "fffffffffffffffffffffffffff80000",
32280957b409SSimon J. Gerraty "705a4ef8ba2133729c20185c3d3a4763",
32290957b409SSimon J. Gerraty
32300957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32310957b409SSimon J. Gerraty "fffffffffffffffffffffffffffc0000",
32320957b409SSimon J. Gerraty "0861a861c3db4e94194211b77ed761b9",
32330957b409SSimon J. Gerraty
32340957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32350957b409SSimon J. Gerraty "fffffffffffffffffffffffffffe0000",
32360957b409SSimon J. Gerraty "4b00c27e8b26da7eab9d3a88dec8b031",
32370957b409SSimon J. Gerraty
32380957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32390957b409SSimon J. Gerraty "ffffffffffffffffffffffffffff0000",
32400957b409SSimon J. Gerraty "5f397bf03084820cc8810d52e5b666e9",
32410957b409SSimon J. Gerraty
32420957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32430957b409SSimon J. Gerraty "ffffffffffffffffffffffffffff8000",
32440957b409SSimon J. Gerraty "63fafabb72c07bfbd3ddc9b1203104b8",
32450957b409SSimon J. Gerraty
32460957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32470957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffc000",
32480957b409SSimon J. Gerraty "683e2140585b18452dd4ffbb93c95df9",
32490957b409SSimon J. Gerraty
32500957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32510957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffe000",
32520957b409SSimon J. Gerraty "286894e48e537f8763b56707d7d155c8",
32530957b409SSimon J. Gerraty
32540957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32550957b409SSimon J. Gerraty "fffffffffffffffffffffffffffff000",
32560957b409SSimon J. Gerraty "a423deabc173dcf7e2c4c53e77d37cd1",
32570957b409SSimon J. Gerraty
32580957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32590957b409SSimon J. Gerraty "fffffffffffffffffffffffffffff800",
32600957b409SSimon J. Gerraty "eb8168313e1cfdfdb5e986d5429cf172",
32610957b409SSimon J. Gerraty
32620957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32630957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffc00",
32640957b409SSimon J. Gerraty "27127daafc9accd2fb334ec3eba52323",
32650957b409SSimon J. Gerraty
32660957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32670957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffe00",
32680957b409SSimon J. Gerraty "ee0715b96f72e3f7a22a5064fc592f4c",
32690957b409SSimon J. Gerraty
32700957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32710957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffff00",
32720957b409SSimon J. Gerraty "29ee526770f2a11dcfa989d1ce88830f",
32730957b409SSimon J. Gerraty
32740957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32750957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffff80",
32760957b409SSimon J. Gerraty "0493370e054b09871130fe49af730a5a",
32770957b409SSimon J. Gerraty
32780957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32790957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffc0",
32800957b409SSimon J. Gerraty "9b7b940f6c509f9e44a4ee140448ee46",
32810957b409SSimon J. Gerraty
32820957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32830957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffe0",
32840957b409SSimon J. Gerraty "2915be4a1ecfdcbe3e023811a12bb6c7",
32850957b409SSimon J. Gerraty
32860957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32870957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffff0",
32880957b409SSimon J. Gerraty "7240e524bc51d8c4d440b1be55d1062c",
32890957b409SSimon J. Gerraty
32900957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32910957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffff8",
32920957b409SSimon J. Gerraty "da63039d38cb4612b2dc36ba26684b93",
32930957b409SSimon J. Gerraty
32940957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32950957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffffc",
32960957b409SSimon J. Gerraty "0f59cb5a4b522e2ac56c1a64f558ad9a",
32970957b409SSimon J. Gerraty
32980957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
32990957b409SSimon J. Gerraty "fffffffffffffffffffffffffffffffe",
33000957b409SSimon J. Gerraty "7bfe9d876c6d63c1d035da8fe21c409d",
33010957b409SSimon J. Gerraty
33020957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
33030957b409SSimon J. Gerraty "ffffffffffffffffffffffffffffffff",
33040957b409SSimon J. Gerraty "acdace8078a32b1a182bfa4987ca1347",
33050957b409SSimon J. Gerraty
33060957b409SSimon J. Gerraty /*
33070957b409SSimon J. Gerraty * Table end marker.
33080957b409SSimon J. Gerraty */
33090957b409SSimon J. Gerraty NULL
33100957b409SSimon J. Gerraty };
33110957b409SSimon J. Gerraty
33120957b409SSimon J. Gerraty /*
33130957b409SSimon J. Gerraty * AES known-answer tests for CBC. Order: key, IV, plaintext, ciphertext.
33140957b409SSimon J. Gerraty */
33150957b409SSimon J. Gerraty static const char *const KAT_AES_CBC[] = {
33160957b409SSimon J. Gerraty /*
33170957b409SSimon J. Gerraty * From NIST validation suite "Multiblock Message Test"
33180957b409SSimon J. Gerraty * (cbcmmt128.rsp).
33190957b409SSimon J. Gerraty */
33200957b409SSimon J. Gerraty "1f8e4973953f3fb0bd6b16662e9a3c17",
33210957b409SSimon J. Gerraty "2fe2b333ceda8f98f4a99b40d2cd34a8",
33220957b409SSimon J. Gerraty "45cf12964fc824ab76616ae2f4bf0822",
33230957b409SSimon J. Gerraty "0f61c4d44c5147c03c195ad7e2cc12b2",
33240957b409SSimon J. Gerraty
33250957b409SSimon J. Gerraty "0700d603a1c514e46b6191ba430a3a0c",
33260957b409SSimon J. Gerraty "aad1583cd91365e3bb2f0c3430d065bb",
33270957b409SSimon J. Gerraty "068b25c7bfb1f8bdd4cfc908f69dffc5ddc726a197f0e5f720f730393279be91",
33280957b409SSimon J. Gerraty "c4dc61d9725967a3020104a9738f23868527ce839aab1752fd8bdb95a82c4d00",
33290957b409SSimon J. Gerraty
33300957b409SSimon J. Gerraty "3348aa51e9a45c2dbe33ccc47f96e8de",
33310957b409SSimon J. Gerraty "19153c673160df2b1d38c28060e59b96",
33320957b409SSimon J. Gerraty "9b7cee827a26575afdbb7c7a329f887238052e3601a7917456ba61251c214763d5e1847a6ad5d54127a399ab07ee3599",
33330957b409SSimon J. Gerraty "d5aed6c9622ec451a15db12819952b6752501cf05cdbf8cda34a457726ded97818e1f127a28d72db5652749f0c6afee5",
33340957b409SSimon J. Gerraty
33350957b409SSimon J. Gerraty "b7f3c9576e12dd0db63e8f8fac2b9a39",
33360957b409SSimon J. Gerraty "c80f095d8bb1a060699f7c19974a1aa0",
33370957b409SSimon J. Gerraty "9ac19954ce1319b354d3220460f71c1e373f1cd336240881160cfde46ebfed2e791e8d5a1a136ebd1dc469dec00c4187722b841cdabcb22c1be8a14657da200e",
33380957b409SSimon J. Gerraty "19b9609772c63f338608bf6eb52ca10be65097f89c1e0905c42401fd47791ae2c5440b2d473116ca78bd9ff2fb6015cfd316524eae7dcb95ae738ebeae84a467",
33390957b409SSimon J. Gerraty
33400957b409SSimon J. Gerraty "b6f9afbfe5a1562bba1368fc72ac9d9c",
33410957b409SSimon J. Gerraty "3f9d5ebe250ee7ce384b0d00ee849322",
33420957b409SSimon J. Gerraty "db397ec22718dbffb9c9d13de0efcd4611bf792be4fce0dc5f25d4f577ed8cdbd4eb9208d593dda3d4653954ab64f05676caa3ce9bfa795b08b67ceebc923fdc89a8c431188e9e482d8553982cf304d1",
33430957b409SSimon J. Gerraty "10ea27b19e16b93af169c4a88e06e35c99d8b420980b058e34b4b8f132b13766f72728202b089f428fecdb41c79f8aa0d0ef68f5786481cca29e2126f69bc14160f1ae2187878ba5c49cf3961e1b7ee9",
33440957b409SSimon J. Gerraty
33450957b409SSimon J. Gerraty "bbe7b7ba07124ff1ae7c3416fe8b465e",
33460957b409SSimon J. Gerraty "7f65b5ee3630bed6b84202d97fb97a1e",
33470957b409SSimon J. Gerraty "2aad0c2c4306568bad7447460fd3dac054346d26feddbc9abd9110914011b4794be2a9a00a519a51a5b5124014f4ed2735480db21b434e99a911bb0b60fe0253763725b628d5739a5117b7ee3aefafc5b4c1bf446467e7bf5f78f31ff7caf187",
33480957b409SSimon J. Gerraty "3b8611bfc4973c5cd8e982b073b33184cd26110159172e44988eb5ff5661a1e16fad67258fcbfee55469267a12dc374893b4e3533d36f5634c3095583596f135aa8cd1138dc898bc5651ee35a92ebf89ab6aeb5366653bc60a70e0074fc11efe",
33490957b409SSimon J. Gerraty
33500957b409SSimon J. Gerraty "89a553730433f7e6d67d16d373bd5360",
33510957b409SSimon J. Gerraty "f724558db3433a523f4e51a5bea70497",
33520957b409SSimon J. Gerraty "807bc4ea684eedcfdcca30180680b0f1ae2814f35f36d053c5aea6595a386c1442770f4d7297d8b91825ee7237241da8925dd594ccf676aecd46ca2068e8d37a3a0ec8a7d5185a201e663b5ff36ae197110188a23503763b8218826d23ced74b31e9f6e2d7fbfa6cb43420c7807a8625",
33530957b409SSimon J. Gerraty "406af1429a478c3d07e555c5287a60500d37fc39b68e5bbb9bafd6ddb223828561d6171a308d5b1a4551e8a5e7d572918d25c968d3871848d2f16635caa9847f38590b1df58ab5efb985f2c66cfaf86f61b3f9c0afad6c963c49cee9b8bc81a2ddb06c967f325515a4849eec37ce721a",
33540957b409SSimon J. Gerraty
33550957b409SSimon J. Gerraty "c491ca31f91708458e29a925ec558d78",
33560957b409SSimon J. Gerraty "9ef934946e5cd0ae97bd58532cb49381",
33570957b409SSimon J. Gerraty "cb6a787e0dec56f9a165957f81af336ca6b40785d9e94093c6190e5152649f882e874d79ac5e167bd2a74ce5ae088d2ee854f6539e0a94796b1e1bd4c9fcdbc79acbef4d01eeb89776d18af71ae2a4fc47dd66df6c4dbe1d1850e466549a47b636bcc7c2b3a62495b56bb67b6d455f1eebd9bfefecbca6c7f335cfce9b45cb9d",
33580957b409SSimon J. Gerraty "7b2931f5855f717145e00f152a9f4794359b1ffcb3e55f594e33098b51c23a6c74a06c1d94fded7fd2ae42c7db7acaef5844cb33aeddc6852585ed0020a6699d2cb53809cefd169148ce42292afab063443978306c582c18b9ce0da3d084ce4d3c482cfd8fcf1a85084e89fb88b40a084d5e972466d07666126fb761f84078f2",
33590957b409SSimon J. Gerraty
33600957b409SSimon J. Gerraty "f6e87d71b0104d6eb06a68dc6a71f498",
33610957b409SSimon J. Gerraty "1c245f26195b76ebebc2edcac412a2f8",
33620957b409SSimon J. Gerraty "f82bef3c73a6f7f80db285726d691db6bf55eec25a859d3ba0e0445f26b9bb3b16a3161ed1866e4dd8f2e5f8ecb4e46d74a7a78c20cdfc7bcc9e479ba7a0caba9438238ad0c01651d5d98de37f03ddce6e6b4bd4ab03cf9e8ed818aedfa1cf963b932067b97d776dce1087196e7e913f7448e38244509f0caf36bd8217e15336d35c149fd4e41707893fdb84014f8729",
33630957b409SSimon J. Gerraty "b09512f3eff9ed0d85890983a73dadbb7c3678d52581be64a8a8fc586f490f2521297a478a0598040ebd0f5509fafb0969f9d9e600eaef33b1b93eed99687b167f89a5065aac439ce46f3b8d22d30865e64e45ef8cd30b6984353a844a11c8cd60dba0e8866b3ee30d24b3fa8a643b328353e06010fa8273c8fd54ef0a2b6930e5520aae5cd5902f9b86a33592ca4365",
33640957b409SSimon J. Gerraty
33650957b409SSimon J. Gerraty "2c14413751c31e2730570ba3361c786b",
33660957b409SSimon J. Gerraty "1dbbeb2f19abb448af849796244a19d7",
33670957b409SSimon J. Gerraty "40d930f9a05334d9816fe204999c3f82a03f6a0457a8c475c94553d1d116693adc618049f0a769a2eed6a6cb14c0143ec5cccdbc8dec4ce560cfd206225709326d4de7948e54d603d01b12d7fed752fb23f1aa4494fbb00130e9ded4e77e37c079042d828040c325b1a5efd15fc842e44014ca4374bf38f3c3fc3ee327733b0c8aee1abcd055772f18dc04603f7b2c1ea69ff662361f2be0a171bbdcea1e5d3f",
33680957b409SSimon J. Gerraty "6be8a12800455a320538853e0cba31bd2d80ea0c85164a4c5c261ae485417d93effe2ebc0d0a0b51d6ea18633d210cf63c0c4ddbc27607f2e81ed9113191ef86d56f3b99be6c415a4150299fb846ce7160b40b63baf1179d19275a2e83698376d28b92548c68e06e6d994e2c1501ed297014e702cdefee2f656447706009614d801de1caaf73f8b7fa56cf1ba94b631933bbe577624380850f117435a0355b2b",
33690957b409SSimon J. Gerraty
33700957b409SSimon J. Gerraty /*
33710957b409SSimon J. Gerraty * From NIST validation suite "Multiblock Message Test"
33720957b409SSimon J. Gerraty * (cbcmmt192.rsp).
33730957b409SSimon J. Gerraty */
33740957b409SSimon J. Gerraty "ba75f4d1d9d7cf7f551445d56cc1a8ab2a078e15e049dc2c",
33750957b409SSimon J. Gerraty "531ce78176401666aa30db94ec4a30eb",
33760957b409SSimon J. Gerraty "c51fc276774dad94bcdc1d2891ec8668",
33770957b409SSimon J. Gerraty "70dd95a14ee975e239df36ff4aee1d5d",
33780957b409SSimon J. Gerraty
33790957b409SSimon J. Gerraty "eab3b19c581aa873e1981c83ab8d83bbf8025111fb2e6b21",
33800957b409SSimon J. Gerraty "f3d6667e8d4d791e60f7505ba383eb05",
33810957b409SSimon J. Gerraty "9d4e4cccd1682321856df069e3f1c6fa391a083a9fb02d59db74c14081b3acc4",
33820957b409SSimon J. Gerraty "51d44779f90d40a80048276c035cb49ca2a47bcb9b9cf7270b9144793787d53f",
33830957b409SSimon J. Gerraty
33840957b409SSimon J. Gerraty "16c93bb398f1fc0cf6d68fc7a5673cdf431fa147852b4a2d",
33850957b409SSimon J. Gerraty "eaaeca2e07ddedf562f94df63f0a650f",
33860957b409SSimon J. Gerraty "c5ce958613bf741718c17444484ebaf1050ddcacb59b9590178cbe69d7ad7919608cb03af13bbe04f3506b718a301ea0",
33870957b409SSimon J. Gerraty "ed6a50e0c6921d52d6647f75d67b4fd56ace1fedb8b5a6a997b4d131640547d22c5d884a75e6752b5846b5b33a5181f4",
33880957b409SSimon J. Gerraty
33890957b409SSimon J. Gerraty "067bb17b4df785697eaccf961f98e212cb75e6797ce935cb",
33900957b409SSimon J. Gerraty "8b59c9209c529ca8391c9fc0ce033c38",
33910957b409SSimon J. Gerraty "db3785a889b4bd387754da222f0e4c2d2bfe0d79e05bc910fba941beea30f1239eacf0068f4619ec01c368e986fca6b7c58e490579d29611bd10087986eff54f",
33920957b409SSimon J. Gerraty "d5f5589760bf9c762228fde236de1fa2dd2dad448db3fa9be0c4196efd46a35c84dd1ac77d9db58c95918cb317a6430a08d2fb6a8e8b0f1c9b72c7a344dc349f",
33930957b409SSimon J. Gerraty
33940957b409SSimon J. Gerraty "0fd39de83e0be77a79c8a4a612e3dd9c8aae2ce35e7a2bf8",
33950957b409SSimon J. Gerraty "7e1d629b84f93b079be51f9a5f5cb23c",
33960957b409SSimon J. Gerraty "38fbda37e28fa86d9d83a4345e419dea95d28c7818ff25925db6ac3aedaf0a86154e20a4dfcc5b1b4192895393e5eb5846c88bdbd41ecf7af3104f410eaee470f5d9017ed460475f626953035a13db1f",
33970957b409SSimon J. Gerraty "edadae2f9a45ff3473e02d904c94d94a30a4d92da4deb6bcb4b0774472694571842039f21c496ef93fd658842c735f8a81fcd0aa578442ab893b18f606aed1bab11f81452dd45e9b56adf2eccf4ea095",
33980957b409SSimon J. Gerraty
33990957b409SSimon J. Gerraty "e3fecc75f0075a09b383dfd389a3d33cc9b854b3b254c0f4",
34000957b409SSimon J. Gerraty "36eab883afef936cc38f63284619cd19",
34010957b409SSimon J. Gerraty "931b2f5f3a5820d53a6beaaa6431083a3488f4eb03b0f5b57ef838e1579623103bd6e6800377538b2e51ef708f3c4956432e8a8ee6a34e190642b26ad8bdae6c2af9a6c7996f3b6004d2671e41f1c9f40ee03d1c4a52b0a0654a331f15f34dce",
34020957b409SSimon J. Gerraty "75395974bd32b3665654a6c8e396b88ae34b123575872a7ab687d8e76b46df911a8a590cd01d2f5c330be3a6626e9dd3aa5e10ed14e8ff829811b6fed50f3f533ca4385a1cbca78f5c4744e50f2f8359165c2485d1324e76c3eae76a0ccac629",
34030957b409SSimon J. Gerraty
34040957b409SSimon J. Gerraty "f9c27565eb07947c8cb51b79248430f7b1066c3d2fdc3d13",
34050957b409SSimon J. Gerraty "2bd67cc89ab7948d644a49672843cbd9",
34060957b409SSimon J. Gerraty "6abcc270173cf114d44847e911a050db57ba7a2e2c161c6f37ccb6aaa4677bddcaf50cad0b5f8758fcf7c0ebc650ceb5cd52cafb8f8dd3edcece55d9f1f08b9fa8f54365cf56e28b9596a7e1dd1d3418e4444a7724add4cf79d527b183ec88de4be4eeff29c80a97e54f85351cb189ee",
34070957b409SSimon J. Gerraty "ca282924a61187feb40520979106e5cc861957f23828dcb7285e0eaac8a0ca2a6b60503d63d6039f4693dba32fa1f73ae2e709ca94911f28a5edd1f30eaddd54680c43acc9c74cd90d8bb648b4e544275f47e514daa20697f66c738eb30337f017fca1a26da4d1a0cc0a0e98e2463070",
34080957b409SSimon J. Gerraty
34090957b409SSimon J. Gerraty "fb09cf9e00dbf883689d079c920077c0073c31890b55bab5",
34100957b409SSimon J. Gerraty "e3c89bd097c3abddf64f4881db6dbfe2",
34110957b409SSimon J. Gerraty "c1a37683fb289467dd1b2c89efba16bbd2ee24cf18d19d44596ded2682c79a2f711c7a32bf6a24badd32a4ee637c73b7a41da6258635650f91fb9ffa45bdfc3cb122136241b3deced8996aa51ea8d3e81c9d70e006a44bc0571ed48623a0d622a93fa9da290baaedf5d9e876c94620945ff8ecc83f27379ed55cf490c5790f27",
34120957b409SSimon J. Gerraty "8158e21420f25b59d6ae943fa1cbf21f02e979f419dab0126a721b7eef55bee9ad97f5ccff7d239057bbc19a8c378142f7672f1d5e7e17d7bebcb0070e8355cace6660171a53b61816ae824a6ef69ce470b6ffd3b5bb4b438874d91d27854d3b6f25860d3868958de3307d62b1339bdddb8a318c0ce0f33c17caf0e9f6040820",
34130957b409SSimon J. Gerraty
34140957b409SSimon J. Gerraty "bca6fa3c67fd294e958f66fe8bd64f45f428f5bc8e9733a7",
34150957b409SSimon J. Gerraty "92a47f2833f1450d1da41717bdc6e83c",
34160957b409SSimon J. Gerraty "5becbc31d8bead6d36ae014a5863d14a431e6b55d29ea6baaa417271716db3a33b2e506b452086dfe690834ac2de30bc41254ec5401ec47d064237c7792fdcd7914d8af20eb114756642d519021a8c75a92f6bc53d326ae9a5b7e1b10a9756574692934d9939fc399e0c203f7edf8e7e6482eadd31a0400770e897b48c6bca2b404593045080e93377358c42a0f4dede",
34170957b409SSimon J. Gerraty "926db248cc1ba20f0c57631a7c8aef094f791937b905949e3460240e8bfa6fa483115a1b310b6e4369caebc5262888377b1ddaa5800ea496a2bdff0f9a1031e7129c9a20e35621e7f0b8baca0d87030f2ae7ca8593c8599677a06fd4b26009ead08fecac24caa9cf2cad3b470c8227415a7b1e0f2eab3fad96d70a209c8bb26c627677e2531b9435ca6e3c444d195b5f",
34180957b409SSimon J. Gerraty
34190957b409SSimon J. Gerraty "162ad50ee64a0702aa551f571dedc16b2c1b6a1e4d4b5eee",
34200957b409SSimon J. Gerraty "24408038161a2ccae07b029bb66355c1",
34210957b409SSimon J. Gerraty "be8abf00901363987a82cc77d0ec91697ba3857f9e4f84bd79406c138d02698f003276d0449120bef4578d78fecabe8e070e11710b3f0a2744bd52434ec70015884c181ebdfd51c604a71c52e4c0e110bc408cd462b248a80b8a8ac06bb952ac1d7faed144807f1a731b7febcaf7835762defe92eccfc7a9944e1c702cffe6bc86733ed321423121085ac02df8962bcbc1937092eebf0e90a8b20e3dd8c244ae",
34220957b409SSimon J. Gerraty "c82cf2c476dea8cb6a6e607a40d2f0391be82ea9ec84a537a6820f9afb997b76397d005424faa6a74dc4e8c7aa4a8900690f894b6d1dca80675393d2243adac762f159301e357e98b724762310cd5a7bafe1c2a030dba46fd93a9fdb89cc132ca9c17dc72031ec6822ee5a9d99dbca66c784c01b0885cbb62e29d97801927ec415a5d215158d325f9ee689437ad1b7684ad33c0d92739451ac87f39ff8c31b84",
34230957b409SSimon J. Gerraty
34240957b409SSimon J. Gerraty /*
34250957b409SSimon J. Gerraty * From NIST validation suite "Multiblock Message Test"
34260957b409SSimon J. Gerraty * (cbcmmt256.rsp).
34270957b409SSimon J. Gerraty */
34280957b409SSimon J. Gerraty "6ed76d2d97c69fd1339589523931f2a6cff554b15f738f21ec72dd97a7330907",
34290957b409SSimon J. Gerraty "851e8764776e6796aab722dbb644ace8",
34300957b409SSimon J. Gerraty "6282b8c05c5c1530b97d4816ca434762",
34310957b409SSimon J. Gerraty "6acc04142e100a65f51b97adf5172c41",
34320957b409SSimon J. Gerraty
34330957b409SSimon J. Gerraty "dce26c6b4cfb286510da4eecd2cffe6cdf430f33db9b5f77b460679bd49d13ae",
34340957b409SSimon J. Gerraty "fdeaa134c8d7379d457175fd1a57d3fc",
34350957b409SSimon J. Gerraty "50e9eee1ac528009e8cbcd356975881f957254b13f91d7c6662d10312052eb00",
34360957b409SSimon J. Gerraty "2fa0df722a9fd3b64cb18fb2b3db55ff2267422757289413f8f657507412a64c",
34370957b409SSimon J. Gerraty
34380957b409SSimon J. Gerraty "fe8901fecd3ccd2ec5fdc7c7a0b50519c245b42d611a5ef9e90268d59f3edf33",
34390957b409SSimon J. Gerraty "bd416cb3b9892228d8f1df575692e4d0",
34400957b409SSimon J. Gerraty "8d3aa196ec3d7c9b5bb122e7fe77fb1295a6da75abe5d3a510194d3a8a4157d5c89d40619716619859da3ec9b247ced9",
34410957b409SSimon J. Gerraty "608e82c7ab04007adb22e389a44797fed7de090c8c03ca8a2c5acd9e84df37fbc58ce8edb293e98f02b640d6d1d72464",
34420957b409SSimon J. Gerraty
34430957b409SSimon J. Gerraty "0493ff637108af6a5b8e90ac1fdf035a3d4bafd1afb573be7ade9e8682e663e5",
34440957b409SSimon J. Gerraty "c0cd2bebccbb6c49920bd5482ac756e8",
34450957b409SSimon J. Gerraty "8b37f9148df4bb25956be6310c73c8dc58ea9714ff49b643107b34c9bff096a94fedd6823526abc27a8e0b16616eee254ab4567dd68e8ccd4c38ac563b13639c",
34460957b409SSimon J. Gerraty "05d5c77729421b08b737e41119fa4438d1f570cc772a4d6c3df7ffeda0384ef84288ce37fc4c4c7d1125a499b051364c389fd639bdda647daa3bdadab2eb5594",
34470957b409SSimon J. Gerraty
34480957b409SSimon J. Gerraty "9adc8fbd506e032af7fa20cf5343719de6d1288c158c63d6878aaf64ce26ca85",
34490957b409SSimon J. Gerraty "11958dc6ab81e1c7f01631e9944e620f",
34500957b409SSimon J. Gerraty "c7917f84f747cd8c4b4fedc2219bdbc5f4d07588389d8248854cf2c2f89667a2d7bcf53e73d32684535f42318e24cd45793950b3825e5d5c5c8fcd3e5dda4ce9246d18337ef3052d8b21c5561c8b660e",
34510957b409SSimon J. Gerraty "9c99e68236bb2e929db1089c7750f1b356d39ab9d0c40c3e2f05108ae9d0c30b04832ccdbdc08ebfa426b7f5efde986ed05784ce368193bb3699bc691065ac62e258b9aa4cc557e2b45b49ce05511e65",
34520957b409SSimon J. Gerraty
34530957b409SSimon J. Gerraty "73b8faf00b3302ac99855cf6f9e9e48518690a5906a4869d4dcf48d282faae2a",
34540957b409SSimon J. Gerraty "b3cb97a80a539912b8c21f450d3b9395",
34550957b409SSimon J. Gerraty "3adea6e06e42c4f041021491f2775ef6378cb08824165edc4f6448e232175b60d0345b9f9c78df6596ec9d22b7b9e76e8f3c76b32d5d67273f1d83fe7a6fc3dd3c49139170fa5701b3beac61b490f0a9e13f844640c4500f9ad3087adfb0ae10",
34560957b409SSimon J. Gerraty "ac3d6dbafe2e0f740632fd9e820bf6044cd5b1551cbb9cc03c0b25c39ccb7f33b83aacfca40a3265f2bbff879153448acacb88fcfb3bb7b10fe463a68c0109f028382e3e557b1adf02ed648ab6bb895df0205d26ebbfa9a5fd8cebd8e4bee3dc",
34570957b409SSimon J. Gerraty
34580957b409SSimon J. Gerraty "9ddf3745896504ff360a51a3eb49c01b79fccebc71c3abcb94a949408b05b2c9",
34590957b409SSimon J. Gerraty "e79026639d4aa230b5ccffb0b29d79bc",
34600957b409SSimon J. Gerraty "cf52e5c3954c51b94c9e38acb8c9a7c76aebdaa9943eae0a1ce155a2efdb4d46985d935511471452d9ee64d2461cb2991d59fc0060697f9a671672163230f367fed1422316e52d29eceacb8768f56d9b80f6d278093c9a8acd3cfd7edd8ebd5c293859f64d2f8486ae1bd593c65bc014",
34610957b409SSimon J. Gerraty "34df561bd2cfebbcb7af3b4b8d21ca5258312e7e2e4e538e35ad2490b6112f0d7f148f6aa8d522a7f3c61d785bd667db0e1dc4606c318ea4f26af4fe7d11d4dcff0456511b4aed1a0d91ba4a1fd6cd9029187bc5881a5a07fe02049d39368e83139b12825bae2c7be81e6f12c61bb5c5",
34620957b409SSimon J. Gerraty
34630957b409SSimon J. Gerraty "458b67bf212d20f3a57fce392065582dcefbf381aa22949f8338ab9052260e1d",
34640957b409SSimon J. Gerraty "4c12effc5963d40459602675153e9649",
34650957b409SSimon J. Gerraty "256fd73ce35ae3ea9c25dd2a9454493e96d8633fe633b56176dce8785ce5dbbb84dbf2c8a2eeb1e96b51899605e4f13bbc11b93bf6f39b3469be14858b5b720d4a522d36feed7a329c9b1e852c9280c47db8039c17c4921571a07d1864128330e09c308ddea1694e95c84500f1a61e614197e86a30ecc28df64ccb3ccf5437aa",
34660957b409SSimon J. Gerraty "90b7b9630a2378f53f501ab7beff039155008071bc8438e789932cfd3eb1299195465e6633849463fdb44375278e2fdb1310821e6492cf80ff15cb772509fb426f3aeee27bd4938882fd2ae6b5bd9d91fa4a43b17bb439ebbe59c042310163a82a5fe5388796eee35a181a1271f00be29b852d8fa759bad01ff4678f010594cd",
34670957b409SSimon J. Gerraty
34680957b409SSimon J. Gerraty "d2412db0845d84e5732b8bbd642957473b81fb99ca8bff70e7920d16c1dbec89",
34690957b409SSimon J. Gerraty "51c619fcf0b23f0c7925f400a6cacb6d",
34700957b409SSimon J. Gerraty "026006c4a71a180c9929824d9d095b8faaa86fc4fa25ecac61d85ff6de92dfa8702688c02a282c1b8af4449707f22d75e91991015db22374c95f8f195d5bb0afeb03040ff8965e0e1339dba5653e174f8aa5a1b39fe3ac839ce307a4e44b4f8f1b0063f738ec18acdbff2ebfe07383e734558723e741f0a1836dafdf9de82210a9248bc113b3c1bc8b4e252ca01bd803",
34710957b409SSimon J. Gerraty "0254b23463bcabec5a395eb74c8fb0eb137a07bc6f5e9f61ec0b057de305714f8fa294221c91a159c315939b81e300ee902192ec5f15254428d8772f79324ec43298ca21c00b370273ee5e5ed90e43efa1e05a5d171209fe34f9f29237dba2a6726650fd3b1321747d1208863c6c3c6b3e2d879ab5f25782f08ba8f2abbe63e0bedb4a227e81afb36bb6645508356d34",
34720957b409SSimon J. Gerraty
34730957b409SSimon J. Gerraty "48be597e632c16772324c8d3fa1d9c5a9ecd010f14ec5d110d3bfec376c5532b",
34740957b409SSimon J. Gerraty "d6d581b8cf04ebd3b6eaa1b53f047ee1",
34750957b409SSimon J. Gerraty "0c63d413d3864570e70bb6618bf8a4b9585586688c32bba0a5ecc1362fada74ada32c52acfd1aa7444ba567b4e7daaecf7cc1cb29182af164ae5232b002868695635599807a9a7f07a1f137e97b1e1c9dabc89b6a5e4afa9db5855edaa575056a8f4f8242216242bb0c256310d9d329826ac353d715fa39f80cec144d6424558f9f70b98c920096e0f2c855d594885a00625880e9dfb734163cecef72cf030b8",
34760957b409SSimon J. Gerraty "fc5873e50de8faf4c6b84ba707b0854e9db9ab2e9f7d707fbba338c6843a18fc6facebaf663d26296fb329b4d26f18494c79e09e779647f9bafa87489630d79f4301610c2300c19dbf3148b7cac8c4f4944102754f332e92b6f7c5e75bc6179eb877a078d4719009021744c14f13fd2a55a2b9c44d18000685a845a4f632c7c56a77306efa66a24d05d088dcd7c13fe24fc447275965db9e4d37fbc9304448cd",
34770957b409SSimon J. Gerraty
34780957b409SSimon J. Gerraty /*
34790957b409SSimon J. Gerraty * End-of-table marker.
34800957b409SSimon J. Gerraty */
34810957b409SSimon J. Gerraty NULL
34820957b409SSimon J. Gerraty };
34830957b409SSimon J. Gerraty
34840957b409SSimon J. Gerraty /*
34850957b409SSimon J. Gerraty * AES known-answer tests for CTR. Order: key, IV, plaintext, ciphertext.
34860957b409SSimon J. Gerraty */
34870957b409SSimon J. Gerraty static const char *const KAT_AES_CTR[] = {
34880957b409SSimon J. Gerraty /*
34890957b409SSimon J. Gerraty * From RFC 3686.
34900957b409SSimon J. Gerraty */
34910957b409SSimon J. Gerraty "ae6852f8121067cc4bf7a5765577f39e",
34920957b409SSimon J. Gerraty "000000300000000000000000",
34930957b409SSimon J. Gerraty "53696e676c6520626c6f636b206d7367",
34940957b409SSimon J. Gerraty "e4095d4fb7a7b3792d6175a3261311b8",
34950957b409SSimon J. Gerraty
34960957b409SSimon J. Gerraty "7e24067817fae0d743d6ce1f32539163",
34970957b409SSimon J. Gerraty "006cb6dbc0543b59da48d90b",
34980957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
34990957b409SSimon J. Gerraty "5104a106168a72d9790d41ee8edad388eb2e1efc46da57c8fce630df9141be28",
35000957b409SSimon J. Gerraty
35010957b409SSimon J. Gerraty "7691be035e5020a8ac6e618529f9a0dc",
35020957b409SSimon J. Gerraty "00e0017b27777f3f4a1786f0",
35030957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
35040957b409SSimon J. Gerraty "c1cf48a89f2ffdd9cf4652e9efdb72d74540a42bde6d7836d59a5ceaaef3105325b2072f",
35050957b409SSimon J. Gerraty
35060957b409SSimon J. Gerraty "16af5b145fc9f579c175f93e3bfb0eed863d06ccfdb78515",
35070957b409SSimon J. Gerraty "0000004836733c147d6d93cb",
35080957b409SSimon J. Gerraty "53696e676c6520626c6f636b206d7367",
35090957b409SSimon J. Gerraty "4b55384fe259c9c84e7935a003cbe928",
35100957b409SSimon J. Gerraty
35110957b409SSimon J. Gerraty "7c5cb2401b3dc33c19e7340819e0f69c678c3db8e6f6a91a",
35120957b409SSimon J. Gerraty "0096b03b020c6eadc2cb500d",
35130957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
35140957b409SSimon J. Gerraty "453243fc609b23327edfaafa7131cd9f8490701c5ad4a79cfc1fe0ff42f4fb00",
35150957b409SSimon J. Gerraty
35160957b409SSimon J. Gerraty "02bf391ee8ecb159b959617b0965279bf59b60a786d3e0fe",
35170957b409SSimon J. Gerraty "0007bdfd5cbd60278dcc0912",
35180957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
35190957b409SSimon J. Gerraty "96893fc55e5c722f540b7dd1ddf7e758d288bc95c69165884536c811662f2188abee0935",
35200957b409SSimon J. Gerraty
35210957b409SSimon J. Gerraty "776beff2851db06f4c8a0542c8696f6c6a81af1eec96b4d37fc1d689e6c1c104",
35220957b409SSimon J. Gerraty "00000060db5672c97aa8f0b2",
35230957b409SSimon J. Gerraty "53696e676c6520626c6f636b206d7367",
35240957b409SSimon J. Gerraty "145ad01dbf824ec7560863dc71e3e0c0",
35250957b409SSimon J. Gerraty
35260957b409SSimon J. Gerraty "f6d66d6bd52d59bb0796365879eff886c66dd51a5b6a99744b50590c87a23884",
35270957b409SSimon J. Gerraty "00faac24c1585ef15a43d875",
35280957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
35290957b409SSimon J. Gerraty "f05e231b3894612c49ee000b804eb2a9b8306b508f839d6a5530831d9344af1c",
35300957b409SSimon J. Gerraty
35310957b409SSimon J. Gerraty "ff7a617ce69148e4f1726e2f43581de2aa62d9f805532edff1eed687fb54153d",
35320957b409SSimon J. Gerraty "001cc5b751a51d70a1c11148",
35330957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
35340957b409SSimon J. Gerraty "eb6c52821d0bbbf7ce7594462aca4faab407df866569fd07f48cc0b583d6071f1ec0e6b8",
35350957b409SSimon J. Gerraty
35360957b409SSimon J. Gerraty /*
35370957b409SSimon J. Gerraty * End-of-table marker.
35380957b409SSimon J. Gerraty */
35390957b409SSimon J. Gerraty NULL
35400957b409SSimon J. Gerraty };
35410957b409SSimon J. Gerraty
35420957b409SSimon J. Gerraty static void
monte_carlo_AES_encrypt(const br_block_cbcenc_class * ve,char * skey,char * splain,char * scipher)35430957b409SSimon J. Gerraty monte_carlo_AES_encrypt(const br_block_cbcenc_class *ve,
35440957b409SSimon J. Gerraty char *skey, char *splain, char *scipher)
35450957b409SSimon J. Gerraty {
35460957b409SSimon J. Gerraty unsigned char key[32];
35470957b409SSimon J. Gerraty unsigned char buf[16];
35480957b409SSimon J. Gerraty unsigned char pbuf[16];
35490957b409SSimon J. Gerraty unsigned char cipher[16];
35500957b409SSimon J. Gerraty size_t key_len;
35510957b409SSimon J. Gerraty int i, j, k;
35520957b409SSimon J. Gerraty br_aes_gen_cbcenc_keys v_ec;
35530957b409SSimon J. Gerraty const br_block_cbcenc_class **ec;
35540957b409SSimon J. Gerraty
35550957b409SSimon J. Gerraty ec = &v_ec.vtable;
35560957b409SSimon J. Gerraty key_len = hextobin(key, skey);
35570957b409SSimon J. Gerraty hextobin(buf, splain);
35580957b409SSimon J. Gerraty hextobin(cipher, scipher);
35590957b409SSimon J. Gerraty for (i = 0; i < 100; i ++) {
35600957b409SSimon J. Gerraty ve->init(ec, key, key_len);
35610957b409SSimon J. Gerraty for (j = 0; j < 1000; j ++) {
35620957b409SSimon J. Gerraty unsigned char iv[16];
35630957b409SSimon J. Gerraty
35640957b409SSimon J. Gerraty memcpy(pbuf, buf, sizeof buf);
35650957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
35660957b409SSimon J. Gerraty ve->run(ec, iv, buf, sizeof buf);
35670957b409SSimon J. Gerraty }
35680957b409SSimon J. Gerraty switch (key_len) {
35690957b409SSimon J. Gerraty case 16:
35700957b409SSimon J. Gerraty for (k = 0; k < 16; k ++) {
35710957b409SSimon J. Gerraty key[k] ^= buf[k];
35720957b409SSimon J. Gerraty }
35730957b409SSimon J. Gerraty break;
35740957b409SSimon J. Gerraty case 24:
35750957b409SSimon J. Gerraty for (k = 0; k < 8; k ++) {
35760957b409SSimon J. Gerraty key[k] ^= pbuf[8 + k];
35770957b409SSimon J. Gerraty }
35780957b409SSimon J. Gerraty for (k = 0; k < 16; k ++) {
35790957b409SSimon J. Gerraty key[8 + k] ^= buf[k];
35800957b409SSimon J. Gerraty }
35810957b409SSimon J. Gerraty break;
35820957b409SSimon J. Gerraty default:
35830957b409SSimon J. Gerraty for (k = 0; k < 16; k ++) {
35840957b409SSimon J. Gerraty key[k] ^= pbuf[k];
35850957b409SSimon J. Gerraty key[16 + k] ^= buf[k];
35860957b409SSimon J. Gerraty }
35870957b409SSimon J. Gerraty break;
35880957b409SSimon J. Gerraty }
35890957b409SSimon J. Gerraty printf(".");
35900957b409SSimon J. Gerraty fflush(stdout);
35910957b409SSimon J. Gerraty }
35920957b409SSimon J. Gerraty printf(" ");
35930957b409SSimon J. Gerraty fflush(stdout);
35940957b409SSimon J. Gerraty check_equals("MC AES encrypt", buf, cipher, sizeof buf);
35950957b409SSimon J. Gerraty }
35960957b409SSimon J. Gerraty
35970957b409SSimon J. Gerraty static void
monte_carlo_AES_decrypt(const br_block_cbcdec_class * vd,char * skey,char * scipher,char * splain)35980957b409SSimon J. Gerraty monte_carlo_AES_decrypt(const br_block_cbcdec_class *vd,
35990957b409SSimon J. Gerraty char *skey, char *scipher, char *splain)
36000957b409SSimon J. Gerraty {
36010957b409SSimon J. Gerraty unsigned char key[32];
36020957b409SSimon J. Gerraty unsigned char buf[16];
36030957b409SSimon J. Gerraty unsigned char pbuf[16];
36040957b409SSimon J. Gerraty unsigned char plain[16];
36050957b409SSimon J. Gerraty size_t key_len;
36060957b409SSimon J. Gerraty int i, j, k;
36070957b409SSimon J. Gerraty br_aes_gen_cbcdec_keys v_dc;
36080957b409SSimon J. Gerraty const br_block_cbcdec_class **dc;
36090957b409SSimon J. Gerraty
36100957b409SSimon J. Gerraty dc = &v_dc.vtable;
36110957b409SSimon J. Gerraty key_len = hextobin(key, skey);
36120957b409SSimon J. Gerraty hextobin(buf, scipher);
36130957b409SSimon J. Gerraty hextobin(plain, splain);
36140957b409SSimon J. Gerraty for (i = 0; i < 100; i ++) {
36150957b409SSimon J. Gerraty vd->init(dc, key, key_len);
36160957b409SSimon J. Gerraty for (j = 0; j < 1000; j ++) {
36170957b409SSimon J. Gerraty unsigned char iv[16];
36180957b409SSimon J. Gerraty
36190957b409SSimon J. Gerraty memcpy(pbuf, buf, sizeof buf);
36200957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
36210957b409SSimon J. Gerraty vd->run(dc, iv, buf, sizeof buf);
36220957b409SSimon J. Gerraty }
36230957b409SSimon J. Gerraty switch (key_len) {
36240957b409SSimon J. Gerraty case 16:
36250957b409SSimon J. Gerraty for (k = 0; k < 16; k ++) {
36260957b409SSimon J. Gerraty key[k] ^= buf[k];
36270957b409SSimon J. Gerraty }
36280957b409SSimon J. Gerraty break;
36290957b409SSimon J. Gerraty case 24:
36300957b409SSimon J. Gerraty for (k = 0; k < 8; k ++) {
36310957b409SSimon J. Gerraty key[k] ^= pbuf[8 + k];
36320957b409SSimon J. Gerraty }
36330957b409SSimon J. Gerraty for (k = 0; k < 16; k ++) {
36340957b409SSimon J. Gerraty key[8 + k] ^= buf[k];
36350957b409SSimon J. Gerraty }
36360957b409SSimon J. Gerraty break;
36370957b409SSimon J. Gerraty default:
36380957b409SSimon J. Gerraty for (k = 0; k < 16; k ++) {
36390957b409SSimon J. Gerraty key[k] ^= pbuf[k];
36400957b409SSimon J. Gerraty key[16 + k] ^= buf[k];
36410957b409SSimon J. Gerraty }
36420957b409SSimon J. Gerraty break;
36430957b409SSimon J. Gerraty }
36440957b409SSimon J. Gerraty printf(".");
36450957b409SSimon J. Gerraty fflush(stdout);
36460957b409SSimon J. Gerraty }
36470957b409SSimon J. Gerraty printf(" ");
36480957b409SSimon J. Gerraty fflush(stdout);
36490957b409SSimon J. Gerraty check_equals("MC AES decrypt", buf, plain, sizeof buf);
36500957b409SSimon J. Gerraty }
36510957b409SSimon J. Gerraty
36520957b409SSimon J. Gerraty static void
test_AES_generic(char * name,const br_block_cbcenc_class * ve,const br_block_cbcdec_class * vd,const br_block_ctr_class * vc,int with_MC,int with_CBC)36530957b409SSimon J. Gerraty test_AES_generic(char *name,
36540957b409SSimon J. Gerraty const br_block_cbcenc_class *ve,
36550957b409SSimon J. Gerraty const br_block_cbcdec_class *vd,
36560957b409SSimon J. Gerraty const br_block_ctr_class *vc,
36570957b409SSimon J. Gerraty int with_MC, int with_CBC)
36580957b409SSimon J. Gerraty {
36590957b409SSimon J. Gerraty size_t u;
36600957b409SSimon J. Gerraty
36610957b409SSimon J. Gerraty printf("Test %s: ", name);
36620957b409SSimon J. Gerraty fflush(stdout);
36630957b409SSimon J. Gerraty
36640957b409SSimon J. Gerraty if (ve->block_size != 16 || vd->block_size != 16
36650957b409SSimon J. Gerraty || ve->log_block_size != 4 || vd->log_block_size != 4)
36660957b409SSimon J. Gerraty {
36670957b409SSimon J. Gerraty fprintf(stderr, "%s failed: wrong block size\n", name);
36680957b409SSimon J. Gerraty exit(EXIT_FAILURE);
36690957b409SSimon J. Gerraty }
36700957b409SSimon J. Gerraty
36710957b409SSimon J. Gerraty for (u = 0; KAT_AES[u]; u += 3) {
36720957b409SSimon J. Gerraty unsigned char key[32];
36730957b409SSimon J. Gerraty unsigned char plain[16];
36740957b409SSimon J. Gerraty unsigned char cipher[16];
36750957b409SSimon J. Gerraty unsigned char buf[16];
36760957b409SSimon J. Gerraty unsigned char iv[16];
36770957b409SSimon J. Gerraty size_t key_len;
36780957b409SSimon J. Gerraty br_aes_gen_cbcenc_keys v_ec;
36790957b409SSimon J. Gerraty br_aes_gen_cbcdec_keys v_dc;
36800957b409SSimon J. Gerraty const br_block_cbcenc_class **ec;
36810957b409SSimon J. Gerraty const br_block_cbcdec_class **dc;
36820957b409SSimon J. Gerraty
36830957b409SSimon J. Gerraty ec = &v_ec.vtable;
36840957b409SSimon J. Gerraty dc = &v_dc.vtable;
36850957b409SSimon J. Gerraty key_len = hextobin(key, KAT_AES[u]);
36860957b409SSimon J. Gerraty hextobin(plain, KAT_AES[u + 1]);
36870957b409SSimon J. Gerraty hextobin(cipher, KAT_AES[u + 2]);
36880957b409SSimon J. Gerraty ve->init(ec, key, key_len);
36890957b409SSimon J. Gerraty memcpy(buf, plain, sizeof plain);
36900957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
36910957b409SSimon J. Gerraty ve->run(ec, iv, buf, sizeof buf);
36920957b409SSimon J. Gerraty check_equals("KAT AES encrypt", buf, cipher, sizeof cipher);
36930957b409SSimon J. Gerraty vd->init(dc, key, key_len);
36940957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
36950957b409SSimon J. Gerraty vd->run(dc, iv, buf, sizeof buf);
36960957b409SSimon J. Gerraty check_equals("KAT AES decrypt", buf, plain, sizeof plain);
36970957b409SSimon J. Gerraty }
36980957b409SSimon J. Gerraty
36990957b409SSimon J. Gerraty if (with_CBC) {
37000957b409SSimon J. Gerraty for (u = 0; KAT_AES_CBC[u]; u += 4) {
37010957b409SSimon J. Gerraty unsigned char key[32];
37020957b409SSimon J. Gerraty unsigned char ivref[16];
37030957b409SSimon J. Gerraty unsigned char plain[200];
37040957b409SSimon J. Gerraty unsigned char cipher[200];
37050957b409SSimon J. Gerraty unsigned char buf[200];
37060957b409SSimon J. Gerraty unsigned char iv[16];
37070957b409SSimon J. Gerraty size_t key_len, data_len, v;
37080957b409SSimon J. Gerraty br_aes_gen_cbcenc_keys v_ec;
37090957b409SSimon J. Gerraty br_aes_gen_cbcdec_keys v_dc;
37100957b409SSimon J. Gerraty const br_block_cbcenc_class **ec;
37110957b409SSimon J. Gerraty const br_block_cbcdec_class **dc;
37120957b409SSimon J. Gerraty
37130957b409SSimon J. Gerraty ec = &v_ec.vtable;
37140957b409SSimon J. Gerraty dc = &v_dc.vtable;
37150957b409SSimon J. Gerraty key_len = hextobin(key, KAT_AES_CBC[u]);
37160957b409SSimon J. Gerraty hextobin(ivref, KAT_AES_CBC[u + 1]);
37170957b409SSimon J. Gerraty data_len = hextobin(plain, KAT_AES_CBC[u + 2]);
37180957b409SSimon J. Gerraty hextobin(cipher, KAT_AES_CBC[u + 3]);
37190957b409SSimon J. Gerraty ve->init(ec, key, key_len);
37200957b409SSimon J. Gerraty
37210957b409SSimon J. Gerraty memcpy(buf, plain, data_len);
37220957b409SSimon J. Gerraty memcpy(iv, ivref, 16);
37230957b409SSimon J. Gerraty ve->run(ec, iv, buf, data_len);
37240957b409SSimon J. Gerraty check_equals("KAT CBC AES encrypt",
37250957b409SSimon J. Gerraty buf, cipher, data_len);
37260957b409SSimon J. Gerraty vd->init(dc, key, key_len);
37270957b409SSimon J. Gerraty memcpy(iv, ivref, 16);
37280957b409SSimon J. Gerraty vd->run(dc, iv, buf, data_len);
37290957b409SSimon J. Gerraty check_equals("KAT CBC AES decrypt",
37300957b409SSimon J. Gerraty buf, plain, data_len);
37310957b409SSimon J. Gerraty
37320957b409SSimon J. Gerraty memcpy(buf, plain, data_len);
37330957b409SSimon J. Gerraty memcpy(iv, ivref, 16);
37340957b409SSimon J. Gerraty for (v = 0; v < data_len; v += 16) {
37350957b409SSimon J. Gerraty ve->run(ec, iv, buf + v, 16);
37360957b409SSimon J. Gerraty }
37370957b409SSimon J. Gerraty check_equals("KAT CBC AES encrypt (2)",
37380957b409SSimon J. Gerraty buf, cipher, data_len);
37390957b409SSimon J. Gerraty memcpy(iv, ivref, 16);
37400957b409SSimon J. Gerraty for (v = 0; v < data_len; v += 16) {
37410957b409SSimon J. Gerraty vd->run(dc, iv, buf + v, 16);
37420957b409SSimon J. Gerraty }
37430957b409SSimon J. Gerraty check_equals("KAT CBC AES decrypt (2)",
37440957b409SSimon J. Gerraty buf, plain, data_len);
37450957b409SSimon J. Gerraty }
37460957b409SSimon J. Gerraty
37470957b409SSimon J. Gerraty /*
37480957b409SSimon J. Gerraty * We want to check proper IV management for CBC:
37490957b409SSimon J. Gerraty * encryption and decryption must properly copy the _last_
37500957b409SSimon J. Gerraty * encrypted block as new IV, for all sizes.
37510957b409SSimon J. Gerraty */
37520957b409SSimon J. Gerraty for (u = 1; u <= 35; u ++) {
37530957b409SSimon J. Gerraty br_hmac_drbg_context rng;
37540957b409SSimon J. Gerraty unsigned char x;
37550957b409SSimon J. Gerraty size_t key_len, data_len;
37560957b409SSimon J. Gerraty size_t v;
37570957b409SSimon J. Gerraty
37580957b409SSimon J. Gerraty br_hmac_drbg_init(&rng, &br_sha256_vtable,
37590957b409SSimon J. Gerraty "seed for AES/CBC", 16);
37600957b409SSimon J. Gerraty x = u;
37610957b409SSimon J. Gerraty br_hmac_drbg_update(&rng, &x, 1);
37620957b409SSimon J. Gerraty data_len = u << 4;
37630957b409SSimon J. Gerraty for (key_len = 16; key_len <= 32; key_len += 16) {
37640957b409SSimon J. Gerraty unsigned char key[32];
37650957b409SSimon J. Gerraty unsigned char iv[16], iv1[16], iv2[16];
37660957b409SSimon J. Gerraty unsigned char plain[35 * 16];
37670957b409SSimon J. Gerraty unsigned char tmp1[sizeof plain];
37680957b409SSimon J. Gerraty unsigned char tmp2[sizeof plain];
37690957b409SSimon J. Gerraty br_aes_gen_cbcenc_keys v_ec;
37700957b409SSimon J. Gerraty br_aes_gen_cbcdec_keys v_dc;
37710957b409SSimon J. Gerraty const br_block_cbcenc_class **ec;
37720957b409SSimon J. Gerraty const br_block_cbcdec_class **dc;
37730957b409SSimon J. Gerraty
37740957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, key, key_len);
37750957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, iv, sizeof iv);
37760957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, plain, data_len);
37770957b409SSimon J. Gerraty
37780957b409SSimon J. Gerraty ec = &v_ec.vtable;
37790957b409SSimon J. Gerraty ve->init(ec, key, key_len);
37800957b409SSimon J. Gerraty memcpy(iv1, iv, sizeof iv);
37810957b409SSimon J. Gerraty memcpy(tmp1, plain, data_len);
37820957b409SSimon J. Gerraty ve->run(ec, iv1, tmp1, data_len);
37830957b409SSimon J. Gerraty check_equals("IV CBC AES (1)",
37840957b409SSimon J. Gerraty tmp1 + data_len - 16, iv1, 16);
37850957b409SSimon J. Gerraty memcpy(iv2, iv, sizeof iv);
37860957b409SSimon J. Gerraty memcpy(tmp2, plain, data_len);
37870957b409SSimon J. Gerraty for (v = 0; v < data_len; v += 16) {
37880957b409SSimon J. Gerraty ve->run(ec, iv2, tmp2 + v, 16);
37890957b409SSimon J. Gerraty }
37900957b409SSimon J. Gerraty check_equals("IV CBC AES (2)",
37910957b409SSimon J. Gerraty tmp2 + data_len - 16, iv2, 16);
37920957b409SSimon J. Gerraty check_equals("IV CBC AES (3)",
37930957b409SSimon J. Gerraty tmp1, tmp2, data_len);
37940957b409SSimon J. Gerraty
37950957b409SSimon J. Gerraty dc = &v_dc.vtable;
37960957b409SSimon J. Gerraty vd->init(dc, key, key_len);
37970957b409SSimon J. Gerraty memcpy(iv1, iv, sizeof iv);
37980957b409SSimon J. Gerraty vd->run(dc, iv1, tmp1, data_len);
37990957b409SSimon J. Gerraty check_equals("IV CBC AES (4)", iv1, iv2, 16);
38000957b409SSimon J. Gerraty check_equals("IV CBC AES (5)",
38010957b409SSimon J. Gerraty tmp1, plain, data_len);
38020957b409SSimon J. Gerraty memcpy(iv2, iv, sizeof iv);
38030957b409SSimon J. Gerraty for (v = 0; v < data_len; v += 16) {
38040957b409SSimon J. Gerraty vd->run(dc, iv2, tmp2 + v, 16);
38050957b409SSimon J. Gerraty }
38060957b409SSimon J. Gerraty check_equals("IV CBC AES (6)", iv1, iv2, 16);
38070957b409SSimon J. Gerraty check_equals("IV CBC AES (7)",
38080957b409SSimon J. Gerraty tmp2, plain, data_len);
38090957b409SSimon J. Gerraty }
38100957b409SSimon J. Gerraty }
38110957b409SSimon J. Gerraty }
38120957b409SSimon J. Gerraty
38130957b409SSimon J. Gerraty if (vc != NULL) {
38140957b409SSimon J. Gerraty if (vc->block_size != 16 || vc->log_block_size != 4) {
38150957b409SSimon J. Gerraty fprintf(stderr, "%s failed: wrong block size\n", name);
38160957b409SSimon J. Gerraty exit(EXIT_FAILURE);
38170957b409SSimon J. Gerraty }
38180957b409SSimon J. Gerraty for (u = 0; KAT_AES_CTR[u]; u += 4) {
38190957b409SSimon J. Gerraty unsigned char key[32];
38200957b409SSimon J. Gerraty unsigned char iv[12];
38210957b409SSimon J. Gerraty unsigned char plain[200];
38220957b409SSimon J. Gerraty unsigned char cipher[200];
38230957b409SSimon J. Gerraty unsigned char buf[200];
38240957b409SSimon J. Gerraty size_t key_len, data_len, v;
38250957b409SSimon J. Gerraty uint32_t c;
38260957b409SSimon J. Gerraty br_aes_gen_ctr_keys v_xc;
38270957b409SSimon J. Gerraty const br_block_ctr_class **xc;
38280957b409SSimon J. Gerraty
38290957b409SSimon J. Gerraty xc = &v_xc.vtable;
38300957b409SSimon J. Gerraty key_len = hextobin(key, KAT_AES_CTR[u]);
38310957b409SSimon J. Gerraty hextobin(iv, KAT_AES_CTR[u + 1]);
38320957b409SSimon J. Gerraty data_len = hextobin(plain, KAT_AES_CTR[u + 2]);
38330957b409SSimon J. Gerraty hextobin(cipher, KAT_AES_CTR[u + 3]);
38340957b409SSimon J. Gerraty vc->init(xc, key, key_len);
38350957b409SSimon J. Gerraty memcpy(buf, plain, data_len);
38360957b409SSimon J. Gerraty vc->run(xc, iv, 1, buf, data_len);
38370957b409SSimon J. Gerraty check_equals("KAT CTR AES (1)", buf, cipher, data_len);
38380957b409SSimon J. Gerraty vc->run(xc, iv, 1, buf, data_len);
38390957b409SSimon J. Gerraty check_equals("KAT CTR AES (2)", buf, plain, data_len);
38400957b409SSimon J. Gerraty
38410957b409SSimon J. Gerraty memcpy(buf, plain, data_len);
38420957b409SSimon J. Gerraty c = 1;
38430957b409SSimon J. Gerraty for (v = 0; v < data_len; v += 32) {
38440957b409SSimon J. Gerraty size_t clen;
38450957b409SSimon J. Gerraty
38460957b409SSimon J. Gerraty clen = data_len - v;
38470957b409SSimon J. Gerraty if (clen > 32) {
38480957b409SSimon J. Gerraty clen = 32;
38490957b409SSimon J. Gerraty }
38500957b409SSimon J. Gerraty c = vc->run(xc, iv, c, buf + v, clen);
38510957b409SSimon J. Gerraty }
38520957b409SSimon J. Gerraty check_equals("KAT CTR AES (3)", buf, cipher, data_len);
38530957b409SSimon J. Gerraty
38540957b409SSimon J. Gerraty memcpy(buf, plain, data_len);
38550957b409SSimon J. Gerraty c = 1;
38560957b409SSimon J. Gerraty for (v = 0; v < data_len; v += 16) {
38570957b409SSimon J. Gerraty size_t clen;
38580957b409SSimon J. Gerraty
38590957b409SSimon J. Gerraty clen = data_len - v;
38600957b409SSimon J. Gerraty if (clen > 16) {
38610957b409SSimon J. Gerraty clen = 16;
38620957b409SSimon J. Gerraty }
38630957b409SSimon J. Gerraty c = vc->run(xc, iv, c, buf + v, clen);
38640957b409SSimon J. Gerraty }
38650957b409SSimon J. Gerraty check_equals("KAT CTR AES (4)", buf, cipher, data_len);
38660957b409SSimon J. Gerraty }
38670957b409SSimon J. Gerraty }
38680957b409SSimon J. Gerraty
38690957b409SSimon J. Gerraty if (with_MC) {
38700957b409SSimon J. Gerraty monte_carlo_AES_encrypt(
38710957b409SSimon J. Gerraty ve,
38720957b409SSimon J. Gerraty "139a35422f1d61de3c91787fe0507afd",
38730957b409SSimon J. Gerraty "b9145a768b7dc489a096b546f43b231f",
38740957b409SSimon J. Gerraty "fb2649694783b551eacd9d5db6126d47");
38750957b409SSimon J. Gerraty monte_carlo_AES_decrypt(
38760957b409SSimon J. Gerraty vd,
38770957b409SSimon J. Gerraty "0c60e7bf20ada9baa9e1ddf0d1540726",
38780957b409SSimon J. Gerraty "b08a29b11a500ea3aca42c36675b9785",
38790957b409SSimon J. Gerraty "d1d2bfdc58ffcad2341b095bce55221e");
38800957b409SSimon J. Gerraty
38810957b409SSimon J. Gerraty monte_carlo_AES_encrypt(
38820957b409SSimon J. Gerraty ve,
38830957b409SSimon J. Gerraty "b9a63e09e1dfc42e93a90d9bad739e5967aef672eedd5da9",
38840957b409SSimon J. Gerraty "85a1f7a58167b389cddc8a9ff175ee26",
38850957b409SSimon J. Gerraty "5d1196da8f184975e240949a25104554");
38860957b409SSimon J. Gerraty monte_carlo_AES_decrypt(
38870957b409SSimon J. Gerraty vd,
38880957b409SSimon J. Gerraty "4b97585701c03fbebdfa8555024f589f1482c58a00fdd9fd",
38890957b409SSimon J. Gerraty "d0bd0e02ded155e4516be83f42d347a4",
38900957b409SSimon J. Gerraty "b63ef1b79507a62eba3dafcec54a6328");
38910957b409SSimon J. Gerraty
38920957b409SSimon J. Gerraty monte_carlo_AES_encrypt(
38930957b409SSimon J. Gerraty ve,
38940957b409SSimon J. Gerraty "f9e8389f5b80712e3886cc1fa2d28a3b8c9cd88a2d4a54c6aa86ce0fef944be0",
38950957b409SSimon J. Gerraty "b379777f9050e2a818f2940cbbd9aba4",
38960957b409SSimon J. Gerraty "c5d2cb3d5b7ff0e23e308967ee074825");
38970957b409SSimon J. Gerraty monte_carlo_AES_decrypt(
38980957b409SSimon J. Gerraty vd,
38990957b409SSimon J. Gerraty "2b09ba39b834062b9e93f48373b8dd018dedf1e5ba1b8af831ebbacbc92a2643",
39000957b409SSimon J. Gerraty "89649bd0115f30bd878567610223a59d",
39010957b409SSimon J. Gerraty "e3d3868f578caf34e36445bf14cefc68");
39020957b409SSimon J. Gerraty }
39030957b409SSimon J. Gerraty
39040957b409SSimon J. Gerraty printf("done.\n");
39050957b409SSimon J. Gerraty fflush(stdout);
39060957b409SSimon J. Gerraty }
39070957b409SSimon J. Gerraty
39080957b409SSimon J. Gerraty static void
test_AES_big(void)39090957b409SSimon J. Gerraty test_AES_big(void)
39100957b409SSimon J. Gerraty {
39110957b409SSimon J. Gerraty test_AES_generic("AES_big",
39120957b409SSimon J. Gerraty &br_aes_big_cbcenc_vtable,
39130957b409SSimon J. Gerraty &br_aes_big_cbcdec_vtable,
39140957b409SSimon J. Gerraty &br_aes_big_ctr_vtable,
39150957b409SSimon J. Gerraty 1, 1);
39160957b409SSimon J. Gerraty }
39170957b409SSimon J. Gerraty
39180957b409SSimon J. Gerraty static void
test_AES_small(void)39190957b409SSimon J. Gerraty test_AES_small(void)
39200957b409SSimon J. Gerraty {
39210957b409SSimon J. Gerraty test_AES_generic("AES_small",
39220957b409SSimon J. Gerraty &br_aes_small_cbcenc_vtable,
39230957b409SSimon J. Gerraty &br_aes_small_cbcdec_vtable,
39240957b409SSimon J. Gerraty &br_aes_small_ctr_vtable,
39250957b409SSimon J. Gerraty 1, 1);
39260957b409SSimon J. Gerraty }
39270957b409SSimon J. Gerraty
39280957b409SSimon J. Gerraty static void
test_AES_ct(void)39290957b409SSimon J. Gerraty test_AES_ct(void)
39300957b409SSimon J. Gerraty {
39310957b409SSimon J. Gerraty test_AES_generic("AES_ct",
39320957b409SSimon J. Gerraty &br_aes_ct_cbcenc_vtable,
39330957b409SSimon J. Gerraty &br_aes_ct_cbcdec_vtable,
39340957b409SSimon J. Gerraty &br_aes_ct_ctr_vtable,
39350957b409SSimon J. Gerraty 1, 1);
39360957b409SSimon J. Gerraty }
39370957b409SSimon J. Gerraty
39380957b409SSimon J. Gerraty static void
test_AES_ct64(void)39390957b409SSimon J. Gerraty test_AES_ct64(void)
39400957b409SSimon J. Gerraty {
39410957b409SSimon J. Gerraty test_AES_generic("AES_ct64",
39420957b409SSimon J. Gerraty &br_aes_ct64_cbcenc_vtable,
39430957b409SSimon J. Gerraty &br_aes_ct64_cbcdec_vtable,
39440957b409SSimon J. Gerraty &br_aes_ct64_ctr_vtable,
39450957b409SSimon J. Gerraty 1, 1);
39460957b409SSimon J. Gerraty }
39470957b409SSimon J. Gerraty
39480957b409SSimon J. Gerraty static void
test_AES_x86ni(void)39490957b409SSimon J. Gerraty test_AES_x86ni(void)
39500957b409SSimon J. Gerraty {
39510957b409SSimon J. Gerraty const br_block_cbcenc_class *x_cbcenc;
39520957b409SSimon J. Gerraty const br_block_cbcdec_class *x_cbcdec;
39530957b409SSimon J. Gerraty const br_block_ctr_class *x_ctr;
39540957b409SSimon J. Gerraty int hcbcenc, hcbcdec, hctr;
39550957b409SSimon J. Gerraty
39560957b409SSimon J. Gerraty x_cbcenc = br_aes_x86ni_cbcenc_get_vtable();
39570957b409SSimon J. Gerraty x_cbcdec = br_aes_x86ni_cbcdec_get_vtable();
39580957b409SSimon J. Gerraty x_ctr = br_aes_x86ni_ctr_get_vtable();
39590957b409SSimon J. Gerraty hcbcenc = (x_cbcenc != NULL);
39600957b409SSimon J. Gerraty hcbcdec = (x_cbcdec != NULL);
39610957b409SSimon J. Gerraty hctr = (x_ctr != NULL);
39620957b409SSimon J. Gerraty if (hcbcenc != hctr || hcbcdec != hctr) {
39630957b409SSimon J. Gerraty fprintf(stderr, "AES_x86ni availability mismatch (%d/%d/%d)\n",
39640957b409SSimon J. Gerraty hcbcenc, hcbcdec, hctr);
39650957b409SSimon J. Gerraty exit(EXIT_FAILURE);
39660957b409SSimon J. Gerraty }
39670957b409SSimon J. Gerraty if (hctr) {
39680957b409SSimon J. Gerraty test_AES_generic("AES_x86ni",
39690957b409SSimon J. Gerraty x_cbcenc, x_cbcdec, x_ctr, 1, 1);
39700957b409SSimon J. Gerraty } else {
39710957b409SSimon J. Gerraty printf("Test AES_x86ni: UNAVAILABLE\n");
39720957b409SSimon J. Gerraty }
39730957b409SSimon J. Gerraty }
39740957b409SSimon J. Gerraty
39750957b409SSimon J. Gerraty static void
test_AES_pwr8(void)39760957b409SSimon J. Gerraty test_AES_pwr8(void)
39770957b409SSimon J. Gerraty {
39780957b409SSimon J. Gerraty const br_block_cbcenc_class *x_cbcenc;
39790957b409SSimon J. Gerraty const br_block_cbcdec_class *x_cbcdec;
39800957b409SSimon J. Gerraty const br_block_ctr_class *x_ctr;
39810957b409SSimon J. Gerraty int hcbcenc, hcbcdec, hctr;
39820957b409SSimon J. Gerraty
39830957b409SSimon J. Gerraty x_cbcenc = br_aes_pwr8_cbcenc_get_vtable();
39840957b409SSimon J. Gerraty x_cbcdec = br_aes_pwr8_cbcdec_get_vtable();
39850957b409SSimon J. Gerraty x_ctr = br_aes_pwr8_ctr_get_vtable();
39860957b409SSimon J. Gerraty hcbcenc = (x_cbcenc != NULL);
39870957b409SSimon J. Gerraty hcbcdec = (x_cbcdec != NULL);
39880957b409SSimon J. Gerraty hctr = (x_ctr != NULL);
39890957b409SSimon J. Gerraty if (hcbcenc != hctr || hcbcdec != hctr) {
39900957b409SSimon J. Gerraty fprintf(stderr, "AES_pwr8 availability mismatch (%d/%d/%d)\n",
39910957b409SSimon J. Gerraty hcbcenc, hcbcdec, hctr);
39920957b409SSimon J. Gerraty exit(EXIT_FAILURE);
39930957b409SSimon J. Gerraty }
39940957b409SSimon J. Gerraty if (hctr) {
39950957b409SSimon J. Gerraty test_AES_generic("AES_pwr8",
39960957b409SSimon J. Gerraty x_cbcenc, x_cbcdec, x_ctr, 1, 1);
39970957b409SSimon J. Gerraty } else {
39980957b409SSimon J. Gerraty printf("Test AES_pwr8: UNAVAILABLE\n");
39990957b409SSimon J. Gerraty }
40000957b409SSimon J. Gerraty }
40010957b409SSimon J. Gerraty
40020957b409SSimon J. Gerraty /*
40030957b409SSimon J. Gerraty * Custom CTR + CBC-MAC AES implementation. Can also do CTR-only, and
40040957b409SSimon J. Gerraty * CBC-MAC-only. The 'aes_big' implementation (CTR) is used. This is
40050957b409SSimon J. Gerraty * meant for comparisons.
40060957b409SSimon J. Gerraty *
40070957b409SSimon J. Gerraty * If 'ctr' is NULL then no encryption/decryption is done; otherwise,
40080957b409SSimon J. Gerraty * CTR encryption/decryption is performed (full-block counter) and the
40090957b409SSimon J. Gerraty * 'ctr' array is updated with the new counter value.
40100957b409SSimon J. Gerraty *
40110957b409SSimon J. Gerraty * If 'cbcmac' is NULL then no CBC-MAC is done; otherwise, CBC-MAC is
40120957b409SSimon J. Gerraty * applied on the encrypted data, with 'cbcmac' as IV and destination
40130957b409SSimon J. Gerraty * buffer for the output. If 'ctr' is not NULL and 'encrypt' is non-zero,
40140957b409SSimon J. Gerraty * then CBC-MAC is computed over the result of CTR processing; otherwise,
40150957b409SSimon J. Gerraty * CBC-MAC is computed over the input data itself.
40160957b409SSimon J. Gerraty */
40170957b409SSimon J. Gerraty static void
do_aes_ctrcbc(const void * key,size_t key_len,int encrypt,void * ctr,void * cbcmac,unsigned char * data,size_t len)40180957b409SSimon J. Gerraty do_aes_ctrcbc(const void *key, size_t key_len, int encrypt,
40190957b409SSimon J. Gerraty void *ctr, void *cbcmac, unsigned char *data, size_t len)
40200957b409SSimon J. Gerraty {
40210957b409SSimon J. Gerraty br_aes_big_ctr_keys bc;
40220957b409SSimon J. Gerraty int i;
40230957b409SSimon J. Gerraty
40240957b409SSimon J. Gerraty br_aes_big_ctr_init(&bc, key, key_len);
40250957b409SSimon J. Gerraty for (i = 0; i < 2; i ++) {
40260957b409SSimon J. Gerraty /*
40270957b409SSimon J. Gerraty * CBC-MAC is computed on the encrypted data, so in
40280957b409SSimon J. Gerraty * first pass if decrypting, second pass if encrypting.
40290957b409SSimon J. Gerraty */
40300957b409SSimon J. Gerraty if (cbcmac != NULL
40310957b409SSimon J. Gerraty && ((encrypt && i == 1) || (!encrypt && i == 0)))
40320957b409SSimon J. Gerraty {
40330957b409SSimon J. Gerraty unsigned char zz[16];
40340957b409SSimon J. Gerraty size_t u;
40350957b409SSimon J. Gerraty
40360957b409SSimon J. Gerraty memcpy(zz, cbcmac, sizeof zz);
40370957b409SSimon J. Gerraty for (u = 0; u < len; u += 16) {
40380957b409SSimon J. Gerraty unsigned char tmp[16];
40390957b409SSimon J. Gerraty size_t v;
40400957b409SSimon J. Gerraty
40410957b409SSimon J. Gerraty for (v = 0; v < 16; v ++) {
40420957b409SSimon J. Gerraty tmp[v] = zz[v] ^ data[u + v];
40430957b409SSimon J. Gerraty }
40440957b409SSimon J. Gerraty memset(zz, 0, sizeof zz);
40450957b409SSimon J. Gerraty br_aes_big_ctr_run(&bc,
40460957b409SSimon J. Gerraty tmp, br_dec32be(tmp + 12), zz, 16);
40470957b409SSimon J. Gerraty }
40480957b409SSimon J. Gerraty memcpy(cbcmac, zz, sizeof zz);
40490957b409SSimon J. Gerraty }
40500957b409SSimon J. Gerraty
40510957b409SSimon J. Gerraty /*
40520957b409SSimon J. Gerraty * CTR encryption/decryption is done only in the first pass.
40530957b409SSimon J. Gerraty * We process data block per block, because the CTR-only
40540957b409SSimon J. Gerraty * class uses a 32-bit counter, while the CTR+CBC-MAC
40550957b409SSimon J. Gerraty * class uses a 128-bit counter.
40560957b409SSimon J. Gerraty */
40570957b409SSimon J. Gerraty if (ctr != NULL && i == 0) {
40580957b409SSimon J. Gerraty unsigned char zz[16];
40590957b409SSimon J. Gerraty size_t u;
40600957b409SSimon J. Gerraty
40610957b409SSimon J. Gerraty memcpy(zz, ctr, sizeof zz);
40620957b409SSimon J. Gerraty for (u = 0; u < len; u += 16) {
40630957b409SSimon J. Gerraty int i;
40640957b409SSimon J. Gerraty
40650957b409SSimon J. Gerraty br_aes_big_ctr_run(&bc,
40660957b409SSimon J. Gerraty zz, br_dec32be(zz + 12), data + u, 16);
40670957b409SSimon J. Gerraty for (i = 15; i >= 0; i --) {
40680957b409SSimon J. Gerraty zz[i] = (zz[i] + 1) & 0xFF;
40690957b409SSimon J. Gerraty if (zz[i] != 0) {
40700957b409SSimon J. Gerraty break;
40710957b409SSimon J. Gerraty }
40720957b409SSimon J. Gerraty }
40730957b409SSimon J. Gerraty }
40740957b409SSimon J. Gerraty memcpy(ctr, zz, sizeof zz);
40750957b409SSimon J. Gerraty }
40760957b409SSimon J. Gerraty }
40770957b409SSimon J. Gerraty }
40780957b409SSimon J. Gerraty
40790957b409SSimon J. Gerraty static void
test_AES_CTRCBC_inner(const char * name,const br_block_ctrcbc_class * vt)40800957b409SSimon J. Gerraty test_AES_CTRCBC_inner(const char *name, const br_block_ctrcbc_class *vt)
40810957b409SSimon J. Gerraty {
40820957b409SSimon J. Gerraty br_hmac_drbg_context rng;
40830957b409SSimon J. Gerraty size_t key_len;
40840957b409SSimon J. Gerraty
40850957b409SSimon J. Gerraty printf("Test AES CTR/CBC-MAC %s: ", name);
40860957b409SSimon J. Gerraty fflush(stdout);
40870957b409SSimon J. Gerraty
40880957b409SSimon J. Gerraty br_hmac_drbg_init(&rng, &br_sha256_vtable, name, strlen(name));
40890957b409SSimon J. Gerraty for (key_len = 16; key_len <= 32; key_len += 8) {
40900957b409SSimon J. Gerraty br_aes_gen_ctrcbc_keys bc;
40910957b409SSimon J. Gerraty unsigned char key[32];
40920957b409SSimon J. Gerraty size_t data_len;
40930957b409SSimon J. Gerraty
40940957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, key, key_len);
40950957b409SSimon J. Gerraty vt->init(&bc.vtable, key, key_len);
40960957b409SSimon J. Gerraty for (data_len = 0; data_len <= 512; data_len += 16) {
40970957b409SSimon J. Gerraty unsigned char plain[512];
40980957b409SSimon J. Gerraty unsigned char data1[sizeof plain];
40990957b409SSimon J. Gerraty unsigned char data2[sizeof plain];
41000957b409SSimon J. Gerraty unsigned char ctr[16], cbcmac[16];
41010957b409SSimon J. Gerraty unsigned char ctr1[16], cbcmac1[16];
41020957b409SSimon J. Gerraty unsigned char ctr2[16], cbcmac2[16];
41030957b409SSimon J. Gerraty int i;
41040957b409SSimon J. Gerraty
41050957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, plain, data_len);
41060957b409SSimon J. Gerraty
41070957b409SSimon J. Gerraty for (i = 0; i <= 16; i ++) {
41080957b409SSimon J. Gerraty if (i == 0) {
41090957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, ctr, 16);
41100957b409SSimon J. Gerraty } else {
41110957b409SSimon J. Gerraty memset(ctr, 0, i - 1);
41120957b409SSimon J. Gerraty memset(ctr + i - 1, 0xFF, 17 - i);
41130957b409SSimon J. Gerraty }
41140957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, cbcmac, 16);
41150957b409SSimon J. Gerraty
41160957b409SSimon J. Gerraty memcpy(data1, plain, data_len);
41170957b409SSimon J. Gerraty memcpy(ctr1, ctr, 16);
41180957b409SSimon J. Gerraty vt->ctr(&bc.vtable, ctr1, data1, data_len);
41190957b409SSimon J. Gerraty memcpy(data2, plain, data_len);
41200957b409SSimon J. Gerraty memcpy(ctr2, ctr, 16);
41210957b409SSimon J. Gerraty do_aes_ctrcbc(key, key_len, 1,
41220957b409SSimon J. Gerraty ctr2, NULL, data2, data_len);
41230957b409SSimon J. Gerraty check_equals("CTR-only data",
41240957b409SSimon J. Gerraty data1, data2, data_len);
41250957b409SSimon J. Gerraty check_equals("CTR-only counter",
41260957b409SSimon J. Gerraty ctr1, ctr2, 16);
41270957b409SSimon J. Gerraty
41280957b409SSimon J. Gerraty memcpy(data1, plain, data_len);
41290957b409SSimon J. Gerraty memcpy(cbcmac1, cbcmac, 16);
41300957b409SSimon J. Gerraty vt->mac(&bc.vtable, cbcmac1, data1, data_len);
41310957b409SSimon J. Gerraty memcpy(data2, plain, data_len);
41320957b409SSimon J. Gerraty memcpy(cbcmac2, cbcmac, 16);
41330957b409SSimon J. Gerraty do_aes_ctrcbc(key, key_len, 1,
41340957b409SSimon J. Gerraty NULL, cbcmac2, data2, data_len);
41350957b409SSimon J. Gerraty check_equals("CBC-MAC-only",
41360957b409SSimon J. Gerraty cbcmac1, cbcmac2, 16);
41370957b409SSimon J. Gerraty
41380957b409SSimon J. Gerraty memcpy(data1, plain, data_len);
41390957b409SSimon J. Gerraty memcpy(ctr1, ctr, 16);
41400957b409SSimon J. Gerraty memcpy(cbcmac1, cbcmac, 16);
41410957b409SSimon J. Gerraty vt->encrypt(&bc.vtable,
41420957b409SSimon J. Gerraty ctr1, cbcmac1, data1, data_len);
41430957b409SSimon J. Gerraty memcpy(data2, plain, data_len);
41440957b409SSimon J. Gerraty memcpy(ctr2, ctr, 16);
41450957b409SSimon J. Gerraty memcpy(cbcmac2, cbcmac, 16);
41460957b409SSimon J. Gerraty do_aes_ctrcbc(key, key_len, 1,
41470957b409SSimon J. Gerraty ctr2, cbcmac2, data2, data_len);
41480957b409SSimon J. Gerraty check_equals("encrypt: combined data",
41490957b409SSimon J. Gerraty data1, data2, data_len);
41500957b409SSimon J. Gerraty check_equals("encrypt: combined counter",
41510957b409SSimon J. Gerraty ctr1, ctr2, 16);
41520957b409SSimon J. Gerraty check_equals("encrypt: combined CBC-MAC",
41530957b409SSimon J. Gerraty cbcmac1, cbcmac2, 16);
41540957b409SSimon J. Gerraty
41550957b409SSimon J. Gerraty memcpy(ctr1, ctr, 16);
41560957b409SSimon J. Gerraty memcpy(cbcmac1, cbcmac, 16);
41570957b409SSimon J. Gerraty vt->decrypt(&bc.vtable,
41580957b409SSimon J. Gerraty ctr1, cbcmac1, data1, data_len);
41590957b409SSimon J. Gerraty memcpy(ctr2, ctr, 16);
41600957b409SSimon J. Gerraty memcpy(cbcmac2, cbcmac, 16);
41610957b409SSimon J. Gerraty do_aes_ctrcbc(key, key_len, 0,
41620957b409SSimon J. Gerraty ctr2, cbcmac2, data2, data_len);
41630957b409SSimon J. Gerraty check_equals("decrypt: combined data",
41640957b409SSimon J. Gerraty data1, data2, data_len);
41650957b409SSimon J. Gerraty check_equals("decrypt: combined counter",
41660957b409SSimon J. Gerraty ctr1, ctr2, 16);
41670957b409SSimon J. Gerraty check_equals("decrypt: combined CBC-MAC",
41680957b409SSimon J. Gerraty cbcmac1, cbcmac2, 16);
41690957b409SSimon J. Gerraty }
41700957b409SSimon J. Gerraty
41710957b409SSimon J. Gerraty printf(".");
41720957b409SSimon J. Gerraty fflush(stdout);
41730957b409SSimon J. Gerraty }
41740957b409SSimon J. Gerraty
41750957b409SSimon J. Gerraty printf(" ");
41760957b409SSimon J. Gerraty fflush(stdout);
41770957b409SSimon J. Gerraty }
41780957b409SSimon J. Gerraty
41790957b409SSimon J. Gerraty printf("done.\n");
41800957b409SSimon J. Gerraty fflush(stdout);
41810957b409SSimon J. Gerraty }
41820957b409SSimon J. Gerraty
41830957b409SSimon J. Gerraty static void
test_AES_CTRCBC_big(void)41840957b409SSimon J. Gerraty test_AES_CTRCBC_big(void)
41850957b409SSimon J. Gerraty {
41860957b409SSimon J. Gerraty test_AES_CTRCBC_inner("big", &br_aes_big_ctrcbc_vtable);
41870957b409SSimon J. Gerraty }
41880957b409SSimon J. Gerraty
41890957b409SSimon J. Gerraty static void
test_AES_CTRCBC_small(void)41900957b409SSimon J. Gerraty test_AES_CTRCBC_small(void)
41910957b409SSimon J. Gerraty {
41920957b409SSimon J. Gerraty test_AES_CTRCBC_inner("small", &br_aes_small_ctrcbc_vtable);
41930957b409SSimon J. Gerraty }
41940957b409SSimon J. Gerraty
41950957b409SSimon J. Gerraty static void
test_AES_CTRCBC_ct(void)41960957b409SSimon J. Gerraty test_AES_CTRCBC_ct(void)
41970957b409SSimon J. Gerraty {
41980957b409SSimon J. Gerraty test_AES_CTRCBC_inner("ct", &br_aes_ct_ctrcbc_vtable);
41990957b409SSimon J. Gerraty }
42000957b409SSimon J. Gerraty
42010957b409SSimon J. Gerraty static void
test_AES_CTRCBC_ct64(void)42020957b409SSimon J. Gerraty test_AES_CTRCBC_ct64(void)
42030957b409SSimon J. Gerraty {
42040957b409SSimon J. Gerraty test_AES_CTRCBC_inner("ct64", &br_aes_ct64_ctrcbc_vtable);
42050957b409SSimon J. Gerraty }
42060957b409SSimon J. Gerraty
42070957b409SSimon J. Gerraty static void
test_AES_CTRCBC_x86ni(void)42080957b409SSimon J. Gerraty test_AES_CTRCBC_x86ni(void)
42090957b409SSimon J. Gerraty {
42100957b409SSimon J. Gerraty const br_block_ctrcbc_class *vt;
42110957b409SSimon J. Gerraty
42120957b409SSimon J. Gerraty vt = br_aes_x86ni_ctrcbc_get_vtable();
42130957b409SSimon J. Gerraty if (vt != NULL) {
42140957b409SSimon J. Gerraty test_AES_CTRCBC_inner("x86ni", vt);
42150957b409SSimon J. Gerraty } else {
42160957b409SSimon J. Gerraty printf("Test AES CTR/CBC-MAC x86ni: UNAVAILABLE\n");
42170957b409SSimon J. Gerraty }
42180957b409SSimon J. Gerraty }
42190957b409SSimon J. Gerraty
42200957b409SSimon J. Gerraty static void
test_AES_CTRCBC_pwr8(void)42210957b409SSimon J. Gerraty test_AES_CTRCBC_pwr8(void)
42220957b409SSimon J. Gerraty {
42230957b409SSimon J. Gerraty const br_block_ctrcbc_class *vt;
42240957b409SSimon J. Gerraty
42250957b409SSimon J. Gerraty vt = br_aes_pwr8_ctrcbc_get_vtable();
42260957b409SSimon J. Gerraty if (vt != NULL) {
42270957b409SSimon J. Gerraty test_AES_CTRCBC_inner("pwr8", vt);
42280957b409SSimon J. Gerraty } else {
42290957b409SSimon J. Gerraty printf("Test AES CTR/CBC-MAC pwr8: UNAVAILABLE\n");
42300957b409SSimon J. Gerraty }
42310957b409SSimon J. Gerraty }
42320957b409SSimon J. Gerraty
42330957b409SSimon J. Gerraty /*
42340957b409SSimon J. Gerraty * DES known-answer tests. Order: plaintext, key, ciphertext.
42350957b409SSimon J. Gerraty * (mostly from NIST SP 800-20).
42360957b409SSimon J. Gerraty */
42370957b409SSimon J. Gerraty static const char *const KAT_DES[] = {
42380957b409SSimon J. Gerraty "10316E028C8F3B4A", "0000000000000000", "82DCBAFBDEAB6602",
42390957b409SSimon J. Gerraty "8000000000000000", "0000000000000000", "95A8D72813DAA94D",
42400957b409SSimon J. Gerraty "4000000000000000", "0000000000000000", "0EEC1487DD8C26D5",
42410957b409SSimon J. Gerraty "2000000000000000", "0000000000000000", "7AD16FFB79C45926",
42420957b409SSimon J. Gerraty "1000000000000000", "0000000000000000", "D3746294CA6A6CF3",
42430957b409SSimon J. Gerraty "0800000000000000", "0000000000000000", "809F5F873C1FD761",
42440957b409SSimon J. Gerraty "0400000000000000", "0000000000000000", "C02FAFFEC989D1FC",
42450957b409SSimon J. Gerraty "0200000000000000", "0000000000000000", "4615AA1D33E72F10",
42460957b409SSimon J. Gerraty "0100000000000000", "0000000000000000", "8CA64DE9C1B123A7",
42470957b409SSimon J. Gerraty "0080000000000000", "0000000000000000", "2055123350C00858",
42480957b409SSimon J. Gerraty "0040000000000000", "0000000000000000", "DF3B99D6577397C8",
42490957b409SSimon J. Gerraty "0020000000000000", "0000000000000000", "31FE17369B5288C9",
42500957b409SSimon J. Gerraty "0010000000000000", "0000000000000000", "DFDD3CC64DAE1642",
42510957b409SSimon J. Gerraty "0008000000000000", "0000000000000000", "178C83CE2B399D94",
42520957b409SSimon J. Gerraty "0004000000000000", "0000000000000000", "50F636324A9B7F80",
42530957b409SSimon J. Gerraty "0002000000000000", "0000000000000000", "A8468EE3BC18F06D",
42540957b409SSimon J. Gerraty "0001000000000000", "0000000000000000", "8CA64DE9C1B123A7",
42550957b409SSimon J. Gerraty "0000800000000000", "0000000000000000", "A2DC9E92FD3CDE92",
42560957b409SSimon J. Gerraty "0000400000000000", "0000000000000000", "CAC09F797D031287",
42570957b409SSimon J. Gerraty "0000200000000000", "0000000000000000", "90BA680B22AEB525",
42580957b409SSimon J. Gerraty "0000100000000000", "0000000000000000", "CE7A24F350E280B6",
42590957b409SSimon J. Gerraty "0000080000000000", "0000000000000000", "882BFF0AA01A0B87",
42600957b409SSimon J. Gerraty "0000040000000000", "0000000000000000", "25610288924511C2",
42610957b409SSimon J. Gerraty "0000020000000000", "0000000000000000", "C71516C29C75D170",
42620957b409SSimon J. Gerraty "0000010000000000", "0000000000000000", "8CA64DE9C1B123A7",
42630957b409SSimon J. Gerraty "0000008000000000", "0000000000000000", "5199C29A52C9F059",
42640957b409SSimon J. Gerraty "0000004000000000", "0000000000000000", "C22F0A294A71F29F",
42650957b409SSimon J. Gerraty "0000002000000000", "0000000000000000", "EE371483714C02EA",
42660957b409SSimon J. Gerraty "0000001000000000", "0000000000000000", "A81FBD448F9E522F",
42670957b409SSimon J. Gerraty "0000000800000000", "0000000000000000", "4F644C92E192DFED",
42680957b409SSimon J. Gerraty "0000000400000000", "0000000000000000", "1AFA9A66A6DF92AE",
42690957b409SSimon J. Gerraty "0000000200000000", "0000000000000000", "B3C1CC715CB879D8",
42700957b409SSimon J. Gerraty "0000000100000000", "0000000000000000", "8CA64DE9C1B123A7",
42710957b409SSimon J. Gerraty "0000000080000000", "0000000000000000", "19D032E64AB0BD8B",
42720957b409SSimon J. Gerraty "0000000040000000", "0000000000000000", "3CFAA7A7DC8720DC",
42730957b409SSimon J. Gerraty "0000000020000000", "0000000000000000", "B7265F7F447AC6F3",
42740957b409SSimon J. Gerraty "0000000010000000", "0000000000000000", "9DB73B3C0D163F54",
42750957b409SSimon J. Gerraty "0000000008000000", "0000000000000000", "8181B65BABF4A975",
42760957b409SSimon J. Gerraty "0000000004000000", "0000000000000000", "93C9B64042EAA240",
42770957b409SSimon J. Gerraty "0000000002000000", "0000000000000000", "5570530829705592",
42780957b409SSimon J. Gerraty "0000000001000000", "0000000000000000", "8CA64DE9C1B123A7",
42790957b409SSimon J. Gerraty "0000000000800000", "0000000000000000", "8638809E878787A0",
42800957b409SSimon J. Gerraty "0000000000400000", "0000000000000000", "41B9A79AF79AC208",
42810957b409SSimon J. Gerraty "0000000000200000", "0000000000000000", "7A9BE42F2009A892",
42820957b409SSimon J. Gerraty "0000000000100000", "0000000000000000", "29038D56BA6D2745",
42830957b409SSimon J. Gerraty "0000000000080000", "0000000000000000", "5495C6ABF1E5DF51",
42840957b409SSimon J. Gerraty "0000000000040000", "0000000000000000", "AE13DBD561488933",
42850957b409SSimon J. Gerraty "0000000000020000", "0000000000000000", "024D1FFA8904E389",
42860957b409SSimon J. Gerraty "0000000000010000", "0000000000000000", "8CA64DE9C1B123A7",
42870957b409SSimon J. Gerraty "0000000000008000", "0000000000000000", "D1399712F99BF02E",
42880957b409SSimon J. Gerraty "0000000000004000", "0000000000000000", "14C1D7C1CFFEC79E",
42890957b409SSimon J. Gerraty "0000000000002000", "0000000000000000", "1DE5279DAE3BED6F",
42900957b409SSimon J. Gerraty "0000000000001000", "0000000000000000", "E941A33F85501303",
42910957b409SSimon J. Gerraty "0000000000000800", "0000000000000000", "DA99DBBC9A03F379",
42920957b409SSimon J. Gerraty "0000000000000400", "0000000000000000", "B7FC92F91D8E92E9",
42930957b409SSimon J. Gerraty "0000000000000200", "0000000000000000", "AE8E5CAA3CA04E85",
42940957b409SSimon J. Gerraty "0000000000000100", "0000000000000000", "8CA64DE9C1B123A7",
42950957b409SSimon J. Gerraty "0000000000000080", "0000000000000000", "9CC62DF43B6EED74",
42960957b409SSimon J. Gerraty "0000000000000040", "0000000000000000", "D863DBB5C59A91A0",
42970957b409SSimon J. Gerraty "0000000000000020", "0000000000000000", "A1AB2190545B91D7",
42980957b409SSimon J. Gerraty "0000000000000010", "0000000000000000", "0875041E64C570F7",
42990957b409SSimon J. Gerraty "0000000000000008", "0000000000000000", "5A594528BEBEF1CC",
43000957b409SSimon J. Gerraty "0000000000000004", "0000000000000000", "FCDB3291DE21F0C0",
43010957b409SSimon J. Gerraty "0000000000000002", "0000000000000000", "869EFD7F9F265A09",
43020957b409SSimon J. Gerraty "0000000000000001", "0000000000000000", "8CA64DE9C1B123A7",
43030957b409SSimon J. Gerraty "0000000000000000", "8000000000000000", "95F8A5E5DD31D900",
43040957b409SSimon J. Gerraty "0000000000000000", "4000000000000000", "DD7F121CA5015619",
43050957b409SSimon J. Gerraty "0000000000000000", "2000000000000000", "2E8653104F3834EA",
43060957b409SSimon J. Gerraty "0000000000000000", "1000000000000000", "4BD388FF6CD81D4F",
43070957b409SSimon J. Gerraty "0000000000000000", "0800000000000000", "20B9E767B2FB1456",
43080957b409SSimon J. Gerraty "0000000000000000", "0400000000000000", "55579380D77138EF",
43090957b409SSimon J. Gerraty "0000000000000000", "0200000000000000", "6CC5DEFAAF04512F",
43100957b409SSimon J. Gerraty "0000000000000000", "0100000000000000", "0D9F279BA5D87260",
43110957b409SSimon J. Gerraty "0000000000000000", "0080000000000000", "D9031B0271BD5A0A",
43120957b409SSimon J. Gerraty "0000000000000000", "0040000000000000", "424250B37C3DD951",
43130957b409SSimon J. Gerraty "0000000000000000", "0020000000000000", "B8061B7ECD9A21E5",
43140957b409SSimon J. Gerraty "0000000000000000", "0010000000000000", "F15D0F286B65BD28",
43150957b409SSimon J. Gerraty "0000000000000000", "0008000000000000", "ADD0CC8D6E5DEBA1",
43160957b409SSimon J. Gerraty "0000000000000000", "0004000000000000", "E6D5F82752AD63D1",
43170957b409SSimon J. Gerraty "0000000000000000", "0002000000000000", "ECBFE3BD3F591A5E",
43180957b409SSimon J. Gerraty "0000000000000000", "0001000000000000", "F356834379D165CD",
43190957b409SSimon J. Gerraty "0000000000000000", "0000800000000000", "2B9F982F20037FA9",
43200957b409SSimon J. Gerraty "0000000000000000", "0000400000000000", "889DE068A16F0BE6",
43210957b409SSimon J. Gerraty "0000000000000000", "0000200000000000", "E19E275D846A1298",
43220957b409SSimon J. Gerraty "0000000000000000", "0000100000000000", "329A8ED523D71AEC",
43230957b409SSimon J. Gerraty "0000000000000000", "0000080000000000", "E7FCE22557D23C97",
43240957b409SSimon J. Gerraty "0000000000000000", "0000040000000000", "12A9F5817FF2D65D",
43250957b409SSimon J. Gerraty "0000000000000000", "0000020000000000", "A484C3AD38DC9C19",
43260957b409SSimon J. Gerraty "0000000000000000", "0000010000000000", "FBE00A8A1EF8AD72",
43270957b409SSimon J. Gerraty "0000000000000000", "0000008000000000", "750D079407521363",
43280957b409SSimon J. Gerraty "0000000000000000", "0000004000000000", "64FEED9C724C2FAF",
43290957b409SSimon J. Gerraty "0000000000000000", "0000002000000000", "F02B263B328E2B60",
43300957b409SSimon J. Gerraty "0000000000000000", "0000001000000000", "9D64555A9A10B852",
43310957b409SSimon J. Gerraty "0000000000000000", "0000000800000000", "D106FF0BED5255D7",
43320957b409SSimon J. Gerraty "0000000000000000", "0000000400000000", "E1652C6B138C64A5",
43330957b409SSimon J. Gerraty "0000000000000000", "0000000200000000", "E428581186EC8F46",
43340957b409SSimon J. Gerraty "0000000000000000", "0000000100000000", "AEB5F5EDE22D1A36",
43350957b409SSimon J. Gerraty "0000000000000000", "0000000080000000", "E943D7568AEC0C5C",
43360957b409SSimon J. Gerraty "0000000000000000", "0000000040000000", "DF98C8276F54B04B",
43370957b409SSimon J. Gerraty "0000000000000000", "0000000020000000", "B160E4680F6C696F",
43380957b409SSimon J. Gerraty "0000000000000000", "0000000010000000", "FA0752B07D9C4AB8",
43390957b409SSimon J. Gerraty "0000000000000000", "0000000008000000", "CA3A2B036DBC8502",
43400957b409SSimon J. Gerraty "0000000000000000", "0000000004000000", "5E0905517BB59BCF",
43410957b409SSimon J. Gerraty "0000000000000000", "0000000002000000", "814EEB3B91D90726",
43420957b409SSimon J. Gerraty "0000000000000000", "0000000001000000", "4D49DB1532919C9F",
43430957b409SSimon J. Gerraty "0000000000000000", "0000000000800000", "25EB5FC3F8CF0621",
43440957b409SSimon J. Gerraty "0000000000000000", "0000000000400000", "AB6A20C0620D1C6F",
43450957b409SSimon J. Gerraty "0000000000000000", "0000000000200000", "79E90DBC98F92CCA",
43460957b409SSimon J. Gerraty "0000000000000000", "0000000000100000", "866ECEDD8072BB0E",
43470957b409SSimon J. Gerraty "0000000000000000", "0000000000080000", "8B54536F2F3E64A8",
43480957b409SSimon J. Gerraty "0000000000000000", "0000000000040000", "EA51D3975595B86B",
43490957b409SSimon J. Gerraty "0000000000000000", "0000000000020000", "CAFFC6AC4542DE31",
43500957b409SSimon J. Gerraty "0000000000000000", "0000000000010000", "8DD45A2DDF90796C",
43510957b409SSimon J. Gerraty "0000000000000000", "0000000000008000", "1029D55E880EC2D0",
43520957b409SSimon J. Gerraty "0000000000000000", "0000000000004000", "5D86CB23639DBEA9",
43530957b409SSimon J. Gerraty "0000000000000000", "0000000000002000", "1D1CA853AE7C0C5F",
43540957b409SSimon J. Gerraty "0000000000000000", "0000000000001000", "CE332329248F3228",
43550957b409SSimon J. Gerraty "0000000000000000", "0000000000000800", "8405D1ABE24FB942",
43560957b409SSimon J. Gerraty "0000000000000000", "0000000000000400", "E643D78090CA4207",
43570957b409SSimon J. Gerraty "0000000000000000", "0000000000000200", "48221B9937748A23",
43580957b409SSimon J. Gerraty "0000000000000000", "0000000000000100", "DD7C0BBD61FAFD54",
43590957b409SSimon J. Gerraty "0000000000000000", "0000000000000080", "2FBC291A570DB5C4",
43600957b409SSimon J. Gerraty "0000000000000000", "0000000000000040", "E07C30D7E4E26E12",
43610957b409SSimon J. Gerraty "0000000000000000", "0000000000000020", "0953E2258E8E90A1",
43620957b409SSimon J. Gerraty "0000000000000000", "0000000000000010", "5B711BC4CEEBF2EE",
43630957b409SSimon J. Gerraty "0000000000000000", "0000000000000008", "CC083F1E6D9E85F6",
43640957b409SSimon J. Gerraty "0000000000000000", "0000000000000004", "D2FD8867D50D2DFE",
43650957b409SSimon J. Gerraty "0000000000000000", "0000000000000002", "06E7EA22CE92708F",
43660957b409SSimon J. Gerraty "0000000000000000", "0000000000000001", "166B40B44ABA4BD6",
43670957b409SSimon J. Gerraty "0000000000000000", "0000000000000000", "8CA64DE9C1B123A7",
43680957b409SSimon J. Gerraty "0101010101010101", "0101010101010101", "994D4DC157B96C52",
43690957b409SSimon J. Gerraty "0202020202020202", "0202020202020202", "E127C2B61D98E6E2",
43700957b409SSimon J. Gerraty "0303030303030303", "0303030303030303", "984C91D78A269CE3",
43710957b409SSimon J. Gerraty "0404040404040404", "0404040404040404", "1F4570BB77550683",
43720957b409SSimon J. Gerraty "0505050505050505", "0505050505050505", "3990ABF98D672B16",
43730957b409SSimon J. Gerraty "0606060606060606", "0606060606060606", "3F5150BBA081D585",
43740957b409SSimon J. Gerraty "0707070707070707", "0707070707070707", "C65242248C9CF6F2",
43750957b409SSimon J. Gerraty "0808080808080808", "0808080808080808", "10772D40FAD24257",
43760957b409SSimon J. Gerraty "0909090909090909", "0909090909090909", "F0139440647A6E7B",
43770957b409SSimon J. Gerraty "0A0A0A0A0A0A0A0A", "0A0A0A0A0A0A0A0A", "0A288603044D740C",
43780957b409SSimon J. Gerraty "0B0B0B0B0B0B0B0B", "0B0B0B0B0B0B0B0B", "6359916942F7438F",
43790957b409SSimon J. Gerraty "0C0C0C0C0C0C0C0C", "0C0C0C0C0C0C0C0C", "934316AE443CF08B",
43800957b409SSimon J. Gerraty "0D0D0D0D0D0D0D0D", "0D0D0D0D0D0D0D0D", "E3F56D7F1130A2B7",
43810957b409SSimon J. Gerraty "0E0E0E0E0E0E0E0E", "0E0E0E0E0E0E0E0E", "A2E4705087C6B6B4",
43820957b409SSimon J. Gerraty "0F0F0F0F0F0F0F0F", "0F0F0F0F0F0F0F0F", "D5D76E09A447E8C3",
43830957b409SSimon J. Gerraty "1010101010101010", "1010101010101010", "DD7515F2BFC17F85",
43840957b409SSimon J. Gerraty "1111111111111111", "1111111111111111", "F40379AB9E0EC533",
43850957b409SSimon J. Gerraty "1212121212121212", "1212121212121212", "96CD27784D1563E5",
43860957b409SSimon J. Gerraty "1313131313131313", "1313131313131313", "2911CF5E94D33FE1",
43870957b409SSimon J. Gerraty "1414141414141414", "1414141414141414", "377B7F7CA3E5BBB3",
43880957b409SSimon J. Gerraty "1515151515151515", "1515151515151515", "701AA63832905A92",
43890957b409SSimon J. Gerraty "1616161616161616", "1616161616161616", "2006E716C4252D6D",
43900957b409SSimon J. Gerraty "1717171717171717", "1717171717171717", "452C1197422469F8",
43910957b409SSimon J. Gerraty "1818181818181818", "1818181818181818", "C33FD1EB49CB64DA",
43920957b409SSimon J. Gerraty "1919191919191919", "1919191919191919", "7572278F364EB50D",
43930957b409SSimon J. Gerraty "1A1A1A1A1A1A1A1A", "1A1A1A1A1A1A1A1A", "69E51488403EF4C3",
43940957b409SSimon J. Gerraty "1B1B1B1B1B1B1B1B", "1B1B1B1B1B1B1B1B", "FF847E0ADF192825",
43950957b409SSimon J. Gerraty "1C1C1C1C1C1C1C1C", "1C1C1C1C1C1C1C1C", "521B7FB3B41BB791",
43960957b409SSimon J. Gerraty "1D1D1D1D1D1D1D1D", "1D1D1D1D1D1D1D1D", "26059A6A0F3F6B35",
43970957b409SSimon J. Gerraty "1E1E1E1E1E1E1E1E", "1E1E1E1E1E1E1E1E", "F24A8D2231C77538",
43980957b409SSimon J. Gerraty "1F1F1F1F1F1F1F1F", "1F1F1F1F1F1F1F1F", "4FD96EC0D3304EF6",
43990957b409SSimon J. Gerraty "2020202020202020", "2020202020202020", "18A9D580A900B699",
44000957b409SSimon J. Gerraty "2121212121212121", "2121212121212121", "88586E1D755B9B5A",
44010957b409SSimon J. Gerraty "2222222222222222", "2222222222222222", "0F8ADFFB11DC2784",
44020957b409SSimon J. Gerraty "2323232323232323", "2323232323232323", "2F30446C8312404A",
44030957b409SSimon J. Gerraty "2424242424242424", "2424242424242424", "0BA03D9E6C196511",
44040957b409SSimon J. Gerraty "2525252525252525", "2525252525252525", "3E55E997611E4B7D",
44050957b409SSimon J. Gerraty "2626262626262626", "2626262626262626", "B2522FB5F158F0DF",
44060957b409SSimon J. Gerraty "2727272727272727", "2727272727272727", "2109425935406AB8",
44070957b409SSimon J. Gerraty "2828282828282828", "2828282828282828", "11A16028F310FF16",
44080957b409SSimon J. Gerraty "2929292929292929", "2929292929292929", "73F0C45F379FE67F",
44090957b409SSimon J. Gerraty "2A2A2A2A2A2A2A2A", "2A2A2A2A2A2A2A2A", "DCAD4338F7523816",
44100957b409SSimon J. Gerraty "2B2B2B2B2B2B2B2B", "2B2B2B2B2B2B2B2B", "B81634C1CEAB298C",
44110957b409SSimon J. Gerraty "2C2C2C2C2C2C2C2C", "2C2C2C2C2C2C2C2C", "DD2CCB29B6C4C349",
44120957b409SSimon J. Gerraty "2D2D2D2D2D2D2D2D", "2D2D2D2D2D2D2D2D", "7D07A77A2ABD50A7",
44130957b409SSimon J. Gerraty "2E2E2E2E2E2E2E2E", "2E2E2E2E2E2E2E2E", "30C1B0C1FD91D371",
44140957b409SSimon J. Gerraty "2F2F2F2F2F2F2F2F", "2F2F2F2F2F2F2F2F", "C4427B31AC61973B",
44150957b409SSimon J. Gerraty "3030303030303030", "3030303030303030", "F47BB46273B15EB5",
44160957b409SSimon J. Gerraty "3131313131313131", "3131313131313131", "655EA628CF62585F",
44170957b409SSimon J. Gerraty "3232323232323232", "3232323232323232", "AC978C247863388F",
44180957b409SSimon J. Gerraty "3333333333333333", "3333333333333333", "0432ED386F2DE328",
44190957b409SSimon J. Gerraty "3434343434343434", "3434343434343434", "D254014CB986B3C2",
44200957b409SSimon J. Gerraty "3535353535353535", "3535353535353535", "B256E34BEDB49801",
44210957b409SSimon J. Gerraty "3636363636363636", "3636363636363636", "37F8759EB77E7BFC",
44220957b409SSimon J. Gerraty "3737373737373737", "3737373737373737", "5013CA4F62C9CEA0",
44230957b409SSimon J. Gerraty "3838383838383838", "3838383838383838", "8940F7B3EACA5939",
44240957b409SSimon J. Gerraty "3939393939393939", "3939393939393939", "E22B19A55086774B",
44250957b409SSimon J. Gerraty "3A3A3A3A3A3A3A3A", "3A3A3A3A3A3A3A3A", "B04A2AAC925ABB0B",
44260957b409SSimon J. Gerraty "3B3B3B3B3B3B3B3B", "3B3B3B3B3B3B3B3B", "8D250D58361597FC",
44270957b409SSimon J. Gerraty "3C3C3C3C3C3C3C3C", "3C3C3C3C3C3C3C3C", "51F0114FB6A6CD37",
44280957b409SSimon J. Gerraty "3D3D3D3D3D3D3D3D", "3D3D3D3D3D3D3D3D", "9D0BB4DB830ECB73",
44290957b409SSimon J. Gerraty "3E3E3E3E3E3E3E3E", "3E3E3E3E3E3E3E3E", "E96089D6368F3E1A",
44300957b409SSimon J. Gerraty "3F3F3F3F3F3F3F3F", "3F3F3F3F3F3F3F3F", "5C4CA877A4E1E92D",
44310957b409SSimon J. Gerraty "4040404040404040", "4040404040404040", "6D55DDBC8DEA95FF",
44320957b409SSimon J. Gerraty "4141414141414141", "4141414141414141", "19DF84AC95551003",
44330957b409SSimon J. Gerraty "4242424242424242", "4242424242424242", "724E7332696D08A7",
44340957b409SSimon J. Gerraty "4343434343434343", "4343434343434343", "B91810B8CDC58FE2",
44350957b409SSimon J. Gerraty "4444444444444444", "4444444444444444", "06E23526EDCCD0C4",
44360957b409SSimon J. Gerraty "4545454545454545", "4545454545454545", "EF52491D5468D441",
44370957b409SSimon J. Gerraty "4646464646464646", "4646464646464646", "48019C59E39B90C5",
44380957b409SSimon J. Gerraty "4747474747474747", "4747474747474747", "0544083FB902D8C0",
44390957b409SSimon J. Gerraty "4848484848484848", "4848484848484848", "63B15CADA668CE12",
44400957b409SSimon J. Gerraty "4949494949494949", "4949494949494949", "EACC0C1264171071",
44410957b409SSimon J. Gerraty "4A4A4A4A4A4A4A4A", "4A4A4A4A4A4A4A4A", "9D2B8C0AC605F274",
44420957b409SSimon J. Gerraty "4B4B4B4B4B4B4B4B", "4B4B4B4B4B4B4B4B", "C90F2F4C98A8FB2A",
44430957b409SSimon J. Gerraty "4C4C4C4C4C4C4C4C", "4C4C4C4C4C4C4C4C", "03481B4828FD1D04",
44440957b409SSimon J. Gerraty "4D4D4D4D4D4D4D4D", "4D4D4D4D4D4D4D4D", "C78FC45A1DCEA2E2",
44450957b409SSimon J. Gerraty "4E4E4E4E4E4E4E4E", "4E4E4E4E4E4E4E4E", "DB96D88C3460D801",
44460957b409SSimon J. Gerraty "4F4F4F4F4F4F4F4F", "4F4F4F4F4F4F4F4F", "6C69E720F5105518",
44470957b409SSimon J. Gerraty "5050505050505050", "5050505050505050", "0D262E418BC893F3",
44480957b409SSimon J. Gerraty "5151515151515151", "5151515151515151", "6AD84FD7848A0A5C",
44490957b409SSimon J. Gerraty "5252525252525252", "5252525252525252", "C365CB35B34B6114",
44500957b409SSimon J. Gerraty "5353535353535353", "5353535353535353", "1155392E877F42A9",
44510957b409SSimon J. Gerraty "5454545454545454", "5454545454545454", "531BE5F9405DA715",
44520957b409SSimon J. Gerraty "5555555555555555", "5555555555555555", "3BCDD41E6165A5E8",
44530957b409SSimon J. Gerraty "5656565656565656", "5656565656565656", "2B1FF5610A19270C",
44540957b409SSimon J. Gerraty "5757575757575757", "5757575757575757", "D90772CF3F047CFD",
44550957b409SSimon J. Gerraty "5858585858585858", "5858585858585858", "1BEA27FFB72457B7",
44560957b409SSimon J. Gerraty "5959595959595959", "5959595959595959", "85C3E0C429F34C27",
44570957b409SSimon J. Gerraty "5A5A5A5A5A5A5A5A", "5A5A5A5A5A5A5A5A", "F9038021E37C7618",
44580957b409SSimon J. Gerraty "5B5B5B5B5B5B5B5B", "5B5B5B5B5B5B5B5B", "35BC6FF838DBA32F",
44590957b409SSimon J. Gerraty "5C5C5C5C5C5C5C5C", "5C5C5C5C5C5C5C5C", "4927ACC8CE45ECE7",
44600957b409SSimon J. Gerraty "5D5D5D5D5D5D5D5D", "5D5D5D5D5D5D5D5D", "E812EE6E3572985C",
44610957b409SSimon J. Gerraty "5E5E5E5E5E5E5E5E", "5E5E5E5E5E5E5E5E", "9BB93A89627BF65F",
44620957b409SSimon J. Gerraty "5F5F5F5F5F5F5F5F", "5F5F5F5F5F5F5F5F", "EF12476884CB74CA",
44630957b409SSimon J. Gerraty "6060606060606060", "6060606060606060", "1BF17E00C09E7CBF",
44640957b409SSimon J. Gerraty "6161616161616161", "6161616161616161", "29932350C098DB5D",
44650957b409SSimon J. Gerraty "6262626262626262", "6262626262626262", "B476E6499842AC54",
44660957b409SSimon J. Gerraty "6363636363636363", "6363636363636363", "5C662C29C1E96056",
44670957b409SSimon J. Gerraty "6464646464646464", "6464646464646464", "3AF1703D76442789",
44680957b409SSimon J. Gerraty "6565656565656565", "6565656565656565", "86405D9B425A8C8C",
44690957b409SSimon J. Gerraty "6666666666666666", "6666666666666666", "EBBF4810619C2C55",
44700957b409SSimon J. Gerraty "6767676767676767", "6767676767676767", "F8D1CD7367B21B5D",
44710957b409SSimon J. Gerraty "6868686868686868", "6868686868686868", "9EE703142BF8D7E2",
44720957b409SSimon J. Gerraty "6969696969696969", "6969696969696969", "5FDFFFC3AAAB0CB3",
44730957b409SSimon J. Gerraty "6A6A6A6A6A6A6A6A", "6A6A6A6A6A6A6A6A", "26C940AB13574231",
44740957b409SSimon J. Gerraty "6B6B6B6B6B6B6B6B", "6B6B6B6B6B6B6B6B", "1E2DC77E36A84693",
44750957b409SSimon J. Gerraty "6C6C6C6C6C6C6C6C", "6C6C6C6C6C6C6C6C", "0F4FF4D9BC7E2244",
44760957b409SSimon J. Gerraty "6D6D6D6D6D6D6D6D", "6D6D6D6D6D6D6D6D", "A4C9A0D04D3280CD",
44770957b409SSimon J. Gerraty "6E6E6E6E6E6E6E6E", "6E6E6E6E6E6E6E6E", "9FAF2C96FE84919D",
44780957b409SSimon J. Gerraty "6F6F6F6F6F6F6F6F", "6F6F6F6F6F6F6F6F", "115DBC965E6096C8",
44790957b409SSimon J. Gerraty "7070707070707070", "7070707070707070", "AF531E9520994017",
44800957b409SSimon J. Gerraty "7171717171717171", "7171717171717171", "B971ADE70E5C89EE",
44810957b409SSimon J. Gerraty "7272727272727272", "7272727272727272", "415D81C86AF9C376",
44820957b409SSimon J. Gerraty "7373737373737373", "7373737373737373", "8DFB864FDB3C6811",
44830957b409SSimon J. Gerraty "7474747474747474", "7474747474747474", "10B1C170E3398F91",
44840957b409SSimon J. Gerraty "7575757575757575", "7575757575757575", "CFEF7A1C0218DB1E",
44850957b409SSimon J. Gerraty "7676767676767676", "7676767676767676", "DBAC30A2A40B1B9C",
44860957b409SSimon J. Gerraty "7777777777777777", "7777777777777777", "89D3BF37052162E9",
44870957b409SSimon J. Gerraty "7878787878787878", "7878787878787878", "80D9230BDAEB67DC",
44880957b409SSimon J. Gerraty "7979797979797979", "7979797979797979", "3440911019AD68D7",
44890957b409SSimon J. Gerraty "7A7A7A7A7A7A7A7A", "7A7A7A7A7A7A7A7A", "9626FE57596E199E",
44900957b409SSimon J. Gerraty "7B7B7B7B7B7B7B7B", "7B7B7B7B7B7B7B7B", "DEA0B796624BB5BA",
44910957b409SSimon J. Gerraty "7C7C7C7C7C7C7C7C", "7C7C7C7C7C7C7C7C", "E9E40542BDDB3E9D",
44920957b409SSimon J. Gerraty "7D7D7D7D7D7D7D7D", "7D7D7D7D7D7D7D7D", "8AD99914B354B911",
44930957b409SSimon J. Gerraty "7E7E7E7E7E7E7E7E", "7E7E7E7E7E7E7E7E", "6F85B98DD12CB13B",
44940957b409SSimon J. Gerraty "7F7F7F7F7F7F7F7F", "7F7F7F7F7F7F7F7F", "10130DA3C3A23924",
44950957b409SSimon J. Gerraty "8080808080808080", "8080808080808080", "EFECF25C3C5DC6DB",
44960957b409SSimon J. Gerraty "8181818181818181", "8181818181818181", "907A46722ED34EC4",
44970957b409SSimon J. Gerraty "8282828282828282", "8282828282828282", "752666EB4CAB46EE",
44980957b409SSimon J. Gerraty "8383838383838383", "8383838383838383", "161BFABD4224C162",
44990957b409SSimon J. Gerraty "8484848484848484", "8484848484848484", "215F48699DB44A45",
45000957b409SSimon J. Gerraty "8585858585858585", "8585858585858585", "69D901A8A691E661",
45010957b409SSimon J. Gerraty "8686868686868686", "8686868686868686", "CBBF6EEFE6529728",
45020957b409SSimon J. Gerraty "8787878787878787", "8787878787878787", "7F26DCF425149823",
45030957b409SSimon J. Gerraty "8888888888888888", "8888888888888888", "762C40C8FADE9D16",
45040957b409SSimon J. Gerraty "8989898989898989", "8989898989898989", "2453CF5D5BF4E463",
45050957b409SSimon J. Gerraty "8A8A8A8A8A8A8A8A", "8A8A8A8A8A8A8A8A", "301085E3FDE724E1",
45060957b409SSimon J. Gerraty "8B8B8B8B8B8B8B8B", "8B8B8B8B8B8B8B8B", "EF4E3E8F1CC6706E",
45070957b409SSimon J. Gerraty "8C8C8C8C8C8C8C8C", "8C8C8C8C8C8C8C8C", "720479B024C397EE",
45080957b409SSimon J. Gerraty "8D8D8D8D8D8D8D8D", "8D8D8D8D8D8D8D8D", "BEA27E3795063C89",
45090957b409SSimon J. Gerraty "8E8E8E8E8E8E8E8E", "8E8E8E8E8E8E8E8E", "468E5218F1A37611",
45100957b409SSimon J. Gerraty "8F8F8F8F8F8F8F8F", "8F8F8F8F8F8F8F8F", "50ACE16ADF66BFE8",
45110957b409SSimon J. Gerraty "9090909090909090", "9090909090909090", "EEA24369A19F6937",
45120957b409SSimon J. Gerraty "9191919191919191", "9191919191919191", "6050D369017B6E62",
45130957b409SSimon J. Gerraty "9292929292929292", "9292929292929292", "5B365F2FB2CD7F32",
45140957b409SSimon J. Gerraty "9393939393939393", "9393939393939393", "F0B00B264381DDBB",
45150957b409SSimon J. Gerraty "9494949494949494", "9494949494949494", "E1D23881C957B96C",
45160957b409SSimon J. Gerraty "9595959595959595", "9595959595959595", "D936BF54ECA8BDCE",
45170957b409SSimon J. Gerraty "9696969696969696", "9696969696969696", "A020003C5554F34C",
45180957b409SSimon J. Gerraty "9797979797979797", "9797979797979797", "6118FCEBD407281D",
45190957b409SSimon J. Gerraty "9898989898989898", "9898989898989898", "072E328C984DE4A2",
45200957b409SSimon J. Gerraty "9999999999999999", "9999999999999999", "1440B7EF9E63D3AA",
45210957b409SSimon J. Gerraty "9A9A9A9A9A9A9A9A", "9A9A9A9A9A9A9A9A", "79BFA264BDA57373",
45220957b409SSimon J. Gerraty "9B9B9B9B9B9B9B9B", "9B9B9B9B9B9B9B9B", "C50E8FC289BBD876",
45230957b409SSimon J. Gerraty "9C9C9C9C9C9C9C9C", "9C9C9C9C9C9C9C9C", "A399D3D63E169FA9",
45240957b409SSimon J. Gerraty "9D9D9D9D9D9D9D9D", "9D9D9D9D9D9D9D9D", "4B8919B667BD53AB",
45250957b409SSimon J. Gerraty "9E9E9E9E9E9E9E9E", "9E9E9E9E9E9E9E9E", "D66CDCAF3F6724A2",
45260957b409SSimon J. Gerraty "9F9F9F9F9F9F9F9F", "9F9F9F9F9F9F9F9F", "E40E81FF3F618340",
45270957b409SSimon J. Gerraty "A0A0A0A0A0A0A0A0", "A0A0A0A0A0A0A0A0", "10EDB8977B348B35",
45280957b409SSimon J. Gerraty "A1A1A1A1A1A1A1A1", "A1A1A1A1A1A1A1A1", "6446C5769D8409A0",
45290957b409SSimon J. Gerraty "A2A2A2A2A2A2A2A2", "A2A2A2A2A2A2A2A2", "17ED1191CA8D67A3",
45300957b409SSimon J. Gerraty "A3A3A3A3A3A3A3A3", "A3A3A3A3A3A3A3A3", "B6D8533731BA1318",
45310957b409SSimon J. Gerraty "A4A4A4A4A4A4A4A4", "A4A4A4A4A4A4A4A4", "CA439007C7245CD0",
45320957b409SSimon J. Gerraty "A5A5A5A5A5A5A5A5", "A5A5A5A5A5A5A5A5", "06FC7FDE1C8389E7",
45330957b409SSimon J. Gerraty "A6A6A6A6A6A6A6A6", "A6A6A6A6A6A6A6A6", "7A3C1F3BD60CB3D8",
45340957b409SSimon J. Gerraty "A7A7A7A7A7A7A7A7", "A7A7A7A7A7A7A7A7", "E415D80048DBA848",
45350957b409SSimon J. Gerraty "A8A8A8A8A8A8A8A8", "A8A8A8A8A8A8A8A8", "26F88D30C0FB8302",
45360957b409SSimon J. Gerraty "A9A9A9A9A9A9A9A9", "A9A9A9A9A9A9A9A9", "D4E00A9EF5E6D8F3",
45370957b409SSimon J. Gerraty "AAAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAAA", "C4322BE19E9A5A17",
45380957b409SSimon J. Gerraty "ABABABABABABABAB", "ABABABABABABABAB", "ACE41A06BFA258EA",
45390957b409SSimon J. Gerraty "ACACACACACACACAC", "ACACACACACACACAC", "EEAAC6D17880BD56",
45400957b409SSimon J. Gerraty "ADADADADADADADAD", "ADADADADADADADAD", "3C9A34CA4CB49EEB",
45410957b409SSimon J. Gerraty "AEAEAEAEAEAEAEAE", "AEAEAEAEAEAEAEAE", "9527B0287B75F5A3",
45420957b409SSimon J. Gerraty "AFAFAFAFAFAFAFAF", "AFAFAFAFAFAFAFAF", "F2D9D1BE74376C0C",
45430957b409SSimon J. Gerraty "B0B0B0B0B0B0B0B0", "B0B0B0B0B0B0B0B0", "939618DF0AEFAAE7",
45440957b409SSimon J. Gerraty "B1B1B1B1B1B1B1B1", "B1B1B1B1B1B1B1B1", "24692773CB9F27FE",
45450957b409SSimon J. Gerraty "B2B2B2B2B2B2B2B2", "B2B2B2B2B2B2B2B2", "38703BA5E2315D1D",
45460957b409SSimon J. Gerraty "B3B3B3B3B3B3B3B3", "B3B3B3B3B3B3B3B3", "FCB7E4B7D702E2FB",
45470957b409SSimon J. Gerraty "B4B4B4B4B4B4B4B4", "B4B4B4B4B4B4B4B4", "36F0D0B3675704D5",
45480957b409SSimon J. Gerraty "B5B5B5B5B5B5B5B5", "B5B5B5B5B5B5B5B5", "62D473F539FA0D8B",
45490957b409SSimon J. Gerraty "B6B6B6B6B6B6B6B6", "B6B6B6B6B6B6B6B6", "1533F3ED9BE8EF8E",
45500957b409SSimon J. Gerraty "B7B7B7B7B7B7B7B7", "B7B7B7B7B7B7B7B7", "9C4EA352599731ED",
45510957b409SSimon J. Gerraty "B8B8B8B8B8B8B8B8", "B8B8B8B8B8B8B8B8", "FABBF7C046FD273F",
45520957b409SSimon J. Gerraty "B9B9B9B9B9B9B9B9", "B9B9B9B9B9B9B9B9", "B7FE63A61C646F3A",
45530957b409SSimon J. Gerraty "BABABABABABABABA", "BABABABABABABABA", "10ADB6E2AB972BBE",
45540957b409SSimon J. Gerraty "BBBBBBBBBBBBBBBB", "BBBBBBBBBBBBBBBB", "F91DCAD912332F3B",
45550957b409SSimon J. Gerraty "BCBCBCBCBCBCBCBC", "BCBCBCBCBCBCBCBC", "46E7EF47323A701D",
45560957b409SSimon J. Gerraty "BDBDBDBDBDBDBDBD", "BDBDBDBDBDBDBDBD", "8DB18CCD9692F758",
45570957b409SSimon J. Gerraty "BEBEBEBEBEBEBEBE", "BEBEBEBEBEBEBEBE", "E6207B536AAAEFFC",
45580957b409SSimon J. Gerraty "BFBFBFBFBFBFBFBF", "BFBFBFBFBFBFBFBF", "92AA224372156A00",
45590957b409SSimon J. Gerraty "C0C0C0C0C0C0C0C0", "C0C0C0C0C0C0C0C0", "A3B357885B1E16D2",
45600957b409SSimon J. Gerraty "C1C1C1C1C1C1C1C1", "C1C1C1C1C1C1C1C1", "169F7629C970C1E5",
45610957b409SSimon J. Gerraty "C2C2C2C2C2C2C2C2", "C2C2C2C2C2C2C2C2", "62F44B247CF1348C",
45620957b409SSimon J. Gerraty "C3C3C3C3C3C3C3C3", "C3C3C3C3C3C3C3C3", "AE0FEEB0495932C8",
45630957b409SSimon J. Gerraty "C4C4C4C4C4C4C4C4", "C4C4C4C4C4C4C4C4", "72DAF2A7C9EA6803",
45640957b409SSimon J. Gerraty "C5C5C5C5C5C5C5C5", "C5C5C5C5C5C5C5C5", "4FB5D5536DA544F4",
45650957b409SSimon J. Gerraty "C6C6C6C6C6C6C6C6", "C6C6C6C6C6C6C6C6", "1DD4E65AAF7988B4",
45660957b409SSimon J. Gerraty "C7C7C7C7C7C7C7C7", "C7C7C7C7C7C7C7C7", "76BF084C1535A6C6",
45670957b409SSimon J. Gerraty "C8C8C8C8C8C8C8C8", "C8C8C8C8C8C8C8C8", "AFEC35B09D36315F",
45680957b409SSimon J. Gerraty "C9C9C9C9C9C9C9C9", "C9C9C9C9C9C9C9C9", "C8078A6148818403",
45690957b409SSimon J. Gerraty "CACACACACACACACA", "CACACACACACACACA", "4DA91CB4124B67FE",
45700957b409SSimon J. Gerraty "CBCBCBCBCBCBCBCB", "CBCBCBCBCBCBCBCB", "2DABFEB346794C3D",
45710957b409SSimon J. Gerraty "CCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCC", "FBCD12C790D21CD7",
45720957b409SSimon J. Gerraty "CDCDCDCDCDCDCDCD", "CDCDCDCDCDCDCDCD", "536873DB879CC770",
45730957b409SSimon J. Gerraty "CECECECECECECECE", "CECECECECECECECE", "9AA159D7309DA7A0",
45740957b409SSimon J. Gerraty "CFCFCFCFCFCFCFCF", "CFCFCFCFCFCFCFCF", "0B844B9D8C4EA14A",
45750957b409SSimon J. Gerraty "D0D0D0D0D0D0D0D0", "D0D0D0D0D0D0D0D0", "3BBD84CE539E68C4",
45760957b409SSimon J. Gerraty "D1D1D1D1D1D1D1D1", "D1D1D1D1D1D1D1D1", "CF3E4F3E026E2C8E",
45770957b409SSimon J. Gerraty "D2D2D2D2D2D2D2D2", "D2D2D2D2D2D2D2D2", "82F85885D542AF58",
45780957b409SSimon J. Gerraty "D3D3D3D3D3D3D3D3", "D3D3D3D3D3D3D3D3", "22D334D6493B3CB6",
45790957b409SSimon J. Gerraty "D4D4D4D4D4D4D4D4", "D4D4D4D4D4D4D4D4", "47E9CB3E3154D673",
45800957b409SSimon J. Gerraty "D5D5D5D5D5D5D5D5", "D5D5D5D5D5D5D5D5", "2352BCC708ADC7E9",
45810957b409SSimon J. Gerraty "D6D6D6D6D6D6D6D6", "D6D6D6D6D6D6D6D6", "8C0F3BA0C8601980",
45820957b409SSimon J. Gerraty "D7D7D7D7D7D7D7D7", "D7D7D7D7D7D7D7D7", "EE5E9FD70CEF00E9",
45830957b409SSimon J. Gerraty "D8D8D8D8D8D8D8D8", "D8D8D8D8D8D8D8D8", "DEF6BDA6CABF9547",
45840957b409SSimon J. Gerraty "D9D9D9D9D9D9D9D9", "D9D9D9D9D9D9D9D9", "4DADD04A0EA70F20",
45850957b409SSimon J. Gerraty "DADADADADADADADA", "DADADADADADADADA", "C1AA16689EE1B482",
45860957b409SSimon J. Gerraty "DBDBDBDBDBDBDBDB", "DBDBDBDBDBDBDBDB", "F45FC26193E69AEE",
45870957b409SSimon J. Gerraty "DCDCDCDCDCDCDCDC", "DCDCDCDCDCDCDCDC", "D0CFBB937CEDBFB5",
45880957b409SSimon J. Gerraty "DDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDD", "F0752004EE23D87B",
45890957b409SSimon J. Gerraty "DEDEDEDEDEDEDEDE", "DEDEDEDEDEDEDEDE", "77A791E28AA464A5",
45900957b409SSimon J. Gerraty "DFDFDFDFDFDFDFDF", "DFDFDFDFDFDFDFDF", "E7562A7F56FF4966",
45910957b409SSimon J. Gerraty "E0E0E0E0E0E0E0E0", "E0E0E0E0E0E0E0E0", "B026913F2CCFB109",
45920957b409SSimon J. Gerraty "E1E1E1E1E1E1E1E1", "E1E1E1E1E1E1E1E1", "0DB572DDCE388AC7",
45930957b409SSimon J. Gerraty "E2E2E2E2E2E2E2E2", "E2E2E2E2E2E2E2E2", "D9FA6595F0C094CA",
45940957b409SSimon J. Gerraty "E3E3E3E3E3E3E3E3", "E3E3E3E3E3E3E3E3", "ADE4804C4BE4486E",
45950957b409SSimon J. Gerraty "E4E4E4E4E4E4E4E4", "E4E4E4E4E4E4E4E4", "007B81F520E6D7DA",
45960957b409SSimon J. Gerraty "E5E5E5E5E5E5E5E5", "E5E5E5E5E5E5E5E5", "961AEB77BFC10B3C",
45970957b409SSimon J. Gerraty "E6E6E6E6E6E6E6E6", "E6E6E6E6E6E6E6E6", "8A8DD870C9B14AF2",
45980957b409SSimon J. Gerraty "E7E7E7E7E7E7E7E7", "E7E7E7E7E7E7E7E7", "3CC02E14B6349B25",
45990957b409SSimon J. Gerraty "E8E8E8E8E8E8E8E8", "E8E8E8E8E8E8E8E8", "BAD3EE68BDDB9607",
46000957b409SSimon J. Gerraty "E9E9E9E9E9E9E9E9", "E9E9E9E9E9E9E9E9", "DFF918E93BDAD292",
46010957b409SSimon J. Gerraty "EAEAEAEAEAEAEAEA", "EAEAEAEAEAEAEAEA", "8FE559C7CD6FA56D",
46020957b409SSimon J. Gerraty "EBEBEBEBEBEBEBEB", "EBEBEBEBEBEBEBEB", "C88480835C1A444C",
46030957b409SSimon J. Gerraty "ECECECECECECECEC", "ECECECECECECECEC", "D6EE30A16B2CC01E",
46040957b409SSimon J. Gerraty "EDEDEDEDEDEDEDED", "EDEDEDEDEDEDEDED", "6932D887B2EA9C1A",
46050957b409SSimon J. Gerraty "EEEEEEEEEEEEEEEE", "EEEEEEEEEEEEEEEE", "0BFC865461F13ACC",
46060957b409SSimon J. Gerraty "EFEFEFEFEFEFEFEF", "EFEFEFEFEFEFEFEF", "228AEA0D403E807A",
46070957b409SSimon J. Gerraty "F0F0F0F0F0F0F0F0", "F0F0F0F0F0F0F0F0", "2A2891F65BB8173C",
46080957b409SSimon J. Gerraty "F1F1F1F1F1F1F1F1", "F1F1F1F1F1F1F1F1", "5D1B8FAF7839494B",
46090957b409SSimon J. Gerraty "F2F2F2F2F2F2F2F2", "F2F2F2F2F2F2F2F2", "1C0A9280EECF5D48",
46100957b409SSimon J. Gerraty "F3F3F3F3F3F3F3F3", "F3F3F3F3F3F3F3F3", "6CBCE951BBC30F74",
46110957b409SSimon J. Gerraty "F4F4F4F4F4F4F4F4", "F4F4F4F4F4F4F4F4", "9CA66E96BD08BC70",
46120957b409SSimon J. Gerraty "F5F5F5F5F5F5F5F5", "F5F5F5F5F5F5F5F5", "F5D779FCFBB28BF3",
46130957b409SSimon J. Gerraty "F6F6F6F6F6F6F6F6", "F6F6F6F6F6F6F6F6", "0FEC6BBF9B859184",
46140957b409SSimon J. Gerraty "F7F7F7F7F7F7F7F7", "F7F7F7F7F7F7F7F7", "EF88D2BF052DBDA8",
46150957b409SSimon J. Gerraty "F8F8F8F8F8F8F8F8", "F8F8F8F8F8F8F8F8", "39ADBDDB7363090D",
46160957b409SSimon J. Gerraty "F9F9F9F9F9F9F9F9", "F9F9F9F9F9F9F9F9", "C0AEAF445F7E2A7A",
46170957b409SSimon J. Gerraty "FAFAFAFAFAFAFAFA", "FAFAFAFAFAFAFAFA", "C66F54067298D4E9",
46180957b409SSimon J. Gerraty "FBFBFBFBFBFBFBFB", "FBFBFBFBFBFBFBFB", "E0BA8F4488AAF97C",
46190957b409SSimon J. Gerraty "FCFCFCFCFCFCFCFC", "FCFCFCFCFCFCFCFC", "67B36E2875D9631C",
46200957b409SSimon J. Gerraty "FDFDFDFDFDFDFDFD", "FDFDFDFDFDFDFDFD", "1ED83D49E267191D",
46210957b409SSimon J. Gerraty "FEFEFEFEFEFEFEFE", "FEFEFEFEFEFEFEFE", "66B2B23EA84693AD",
46220957b409SSimon J. Gerraty "FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF", "7359B2163E4EDC58",
46230957b409SSimon J. Gerraty "0001020304050607", "0011223344556677", "3EF0A891CF8ED990",
46240957b409SSimon J. Gerraty "2BD6459F82C5B300", "EA024714AD5C4D84", "126EFE8ED312190A",
46250957b409SSimon J. Gerraty
46260957b409SSimon J. Gerraty NULL
46270957b409SSimon J. Gerraty };
46280957b409SSimon J. Gerraty
46290957b409SSimon J. Gerraty /*
46300957b409SSimon J. Gerraty * Known-answer tests for DES/3DES in CBC mode. Order: key, IV,
46310957b409SSimon J. Gerraty * plaintext, ciphertext.
46320957b409SSimon J. Gerraty */
46330957b409SSimon J. Gerraty static const char *const KAT_DES_CBC[] = {
46340957b409SSimon J. Gerraty /*
46350957b409SSimon J. Gerraty * From NIST validation suite (tdesmmt.zip).
46360957b409SSimon J. Gerraty */
46370957b409SSimon J. Gerraty "34a41a8c293176c1b30732ecfe38ae8a34a41a8c293176c1",
46380957b409SSimon J. Gerraty "f55b4855228bd0b4",
46390957b409SSimon J. Gerraty "7dd880d2a9ab411c",
46400957b409SSimon J. Gerraty "c91892948b6cadb4",
46410957b409SSimon J. Gerraty
46420957b409SSimon J. Gerraty "70a88fa1dfb9942fa77f40157ffef2ad70a88fa1dfb9942f",
46430957b409SSimon J. Gerraty "ece08ce2fdc6ce80",
46440957b409SSimon J. Gerraty "bc225304d5a3a5c9918fc5006cbc40cc",
46450957b409SSimon J. Gerraty "27f67dc87af7ddb4b68f63fa7c2d454a",
46460957b409SSimon J. Gerraty
46470957b409SSimon J. Gerraty "e091790be55be0bc0780153861a84adce091790be55be0bc",
46480957b409SSimon J. Gerraty "fd7d430f86fbbffe",
46490957b409SSimon J. Gerraty "03c7fffd7f36499c703dedc9df4de4a92dd4382e576d6ae9",
46500957b409SSimon J. Gerraty "053aeba85dd3a23bfbe8440a432f9578f312be60fb9f0035",
46510957b409SSimon J. Gerraty
46520957b409SSimon J. Gerraty "857feacd16157c58e5347a70e56e578a857feacd16157c58",
46530957b409SSimon J. Gerraty "002dcb6d46ef0969",
46540957b409SSimon J. Gerraty "1f13701c7f0d7385307507a18e89843ebd295bd5e239ef109347a6898c6d3fd5",
46550957b409SSimon J. Gerraty "a0e4edde34f05bd8397ce279e49853e9387ba04be562f5fa19c3289c3f5a3391",
46560957b409SSimon J. Gerraty
46570957b409SSimon J. Gerraty "a173545b265875ba852331fbb95b49a8a173545b265875ba",
46580957b409SSimon J. Gerraty "ab385756391d364c",
46590957b409SSimon J. Gerraty "d08894c565608d9ae51dda63b85b3b33b1703bb5e4f1abcbb8794e743da5d6f3bf630f2e9b6d5b54",
46600957b409SSimon J. Gerraty "370b47acf89ac6bdbb13c9a7336787dc41e1ad8beead32281d0609fb54968404bdf2894892590658",
46610957b409SSimon J. Gerraty
46620957b409SSimon J. Gerraty "26376bcb2f23df1083cd684fe00ed3c726376bcb2f23df10",
46630957b409SSimon J. Gerraty "33acfb0f3d240ea6",
46640957b409SSimon J. Gerraty "903a1911da1e6877f23c1985a9b61786ef438e0ce1240885035ad60fc916b18e5d71a1fb9c5d1eff61db75c0076f6efb",
46650957b409SSimon J. Gerraty "7a4f7510f6ec0b93e2495d21a8355684d303a770ebda2e0e51ff33d72b20cb73e58e2e3de2ef6b2e12c504c0f181ba63",
46660957b409SSimon J. Gerraty
46670957b409SSimon J. Gerraty "3e1f98135d027cec752f67765408a7913e1f98135d027cec",
46680957b409SSimon J. Gerraty "11f5f2304b28f68b",
46690957b409SSimon J. Gerraty "7c022f5af24f7925d323d4d0e20a2ce49272c5e764b22c806f4b6ddc406d864fe5bd1c3f45556d3eb30c8676c2f8b54a5a32423a0bd95a07",
46700957b409SSimon J. Gerraty "2bb4b131fa4ae0b4f0378a2cdb68556af6eee837613016d7ea936f3931f25f8b3ae351d5e9d00be665676e2400408b5db9892d95421e7f1a",
46710957b409SSimon J. Gerraty
46720957b409SSimon J. Gerraty "13b9d549cd136ec7bf9e9810ef2cdcbf13b9d549cd136ec7",
46730957b409SSimon J. Gerraty "a82c1b1057badcc8",
46740957b409SSimon J. Gerraty "1fff1563bc1645b55cb23ea34a0049dfc06607150614b621dedcb07f20433402a2d869c95ac4a070c7a3da838c928a385f899c5d21ecb58f4e5cbdad98d39b8c",
46750957b409SSimon J. Gerraty "75f804d4a2c542a31703e23df26cc38861a0729090e6eae5672c1db8c0b09fba9b125bbca7d6c7d330b3859e6725c6d26de21c4e3af7f5ea94df3cde2349ce37",
46760957b409SSimon J. Gerraty
46770957b409SSimon J. Gerraty "20320dfdad579bb57c6e4acd769dbadf20320dfdad579bb5",
46780957b409SSimon J. Gerraty "879201b5857ccdea",
46790957b409SSimon J. Gerraty "0431283cc8bb4dc7750a9d5c68578486932091632a12d0a79f2c54e3d122130881fff727050f317a40fcd1a8d13793458b99fc98254ba6a233e3d95b55cf5a3faff78809999ea4bf",
46800957b409SSimon J. Gerraty "85d17840eb2af5fc727027336bfd71a2b31bd14a1d9eb64f8a08bfc4f56eaa9ca7654a5ae698287869cc27324813730de4f1384e0b8cfbc472ff5470e3c5e4bd8ceb23dc2d91988c",
46810957b409SSimon J. Gerraty
46820957b409SSimon J. Gerraty "23abb073a2df34cb3d1fdce6b092582c23abb073a2df34cb",
46830957b409SSimon J. Gerraty "7d7fbf19e8562d32",
46840957b409SSimon J. Gerraty "31e718fd95e6d7ca4f94763191add2674ab07c909d88c486916c16d60a048a0cf8cdb631cebec791362cd0c202eb61e166b65c1f65d0047c8aec57d3d84b9e17032442dce148e1191b06a12c284cc41e",
46850957b409SSimon J. Gerraty "c9a3f75ab6a7cd08a7fd53ca540aafe731d257ee1c379fadcc4cc1a06e7c12bddbeb7562c436d1da849ed072629e82a97b56d9becc25ff4f16f21c5f2a01911604f0b5c49df96cb641faee662ca8aa68",
46860957b409SSimon J. Gerraty
46870957b409SSimon J. Gerraty "b5cb1504802326c73df186e3e352a20de643b0d63ee30e37",
46880957b409SSimon J. Gerraty "43f791134c5647ba",
46890957b409SSimon J. Gerraty "dcc153cef81d6f24",
46900957b409SSimon J. Gerraty "92538bd8af18d3ba",
46910957b409SSimon J. Gerraty
46920957b409SSimon J. Gerraty "a49d7564199e97cb529d2c9d97bf2f98d35edf57ba1f7358",
46930957b409SSimon J. Gerraty "c2e999cb6249023c",
46940957b409SSimon J. Gerraty "c689aee38a301bb316da75db36f110b5",
46950957b409SSimon J. Gerraty "e9afaba5ec75ea1bbe65506655bb4ecb",
46960957b409SSimon J. Gerraty
46970957b409SSimon J. Gerraty "1a5d4c0825072a15a8ad9dfdaeda8c048adffb85bc4fced0",
46980957b409SSimon J. Gerraty "7fcfa736f7548b6f",
46990957b409SSimon J. Gerraty "983c3edacd939406010e1bc6ff9e12320ac5008117fa8f84",
47000957b409SSimon J. Gerraty "d84fa24f38cf451ca2c9adc960120bd8ff9871584fe31cee",
47010957b409SSimon J. Gerraty
47020957b409SSimon J. Gerraty "d98aadc76d4a3716158c32866efbb9ce834af2297379a49d",
47030957b409SSimon J. Gerraty "3c5220327c502b44",
47040957b409SSimon J. Gerraty "6174079dda53ca723ebf00a66837f8d5ce648c08acaa5ee45ffe62210ef79d3e",
47050957b409SSimon J. Gerraty "f5bd4d600bed77bec78409e3530ebda1d815506ed53103015b87e371ae000958",
47060957b409SSimon J. Gerraty
47070957b409SSimon J. Gerraty "ef6d3e54266d978ffb0b8ce6689d803e2cd34cc802fd0252",
47080957b409SSimon J. Gerraty "38bae5bce06d0ad9",
47090957b409SSimon J. Gerraty "c4f228b537223cd01c0debb5d9d4e12ba71656618d119b2f8f0af29d23efa3a9e43c4c458a1b79a0",
47100957b409SSimon J. Gerraty "9e3289fb18379f55aa4e45a7e0e6df160b33b75f8627ad0954f8fdcb78cee55a4664caeda1000fe5",
47110957b409SSimon J. Gerraty
47120957b409SSimon J. Gerraty "625bc19b19df83abfb2f5bec9d4f2062017525a75bc26e70",
47130957b409SSimon J. Gerraty "bd0cff364ff69a91",
47140957b409SSimon J. Gerraty "8152d2ab876c3c8201403a5a406d3feaf27319dbea6ad01e24f4d18203704b86de70da6bbb6d638e5aba3ff576b79b28",
47150957b409SSimon J. Gerraty "706fe7a973fac40e25b2b4499ce527078944c70e976d017b6af86a3a7a6b52943a72ba18a58000d2b61fdc3bfef2bc4a",
47160957b409SSimon J. Gerraty
47170957b409SSimon J. Gerraty "b6383176046e6880a1023bf45768b5bf5119022fe054bfe5",
47180957b409SSimon J. Gerraty "ec13ca541c43401e",
47190957b409SSimon J. Gerraty "cd5a886e9af011346c4dba36a424f96a78a1ddf28aaa4188bf65451f4efaffc7179a6dd237c0ae35d9b672314e5cb032612597f7e462c6f3",
47200957b409SSimon J. Gerraty "b030f976f46277ee211c4a324d5c87555d1084513a1223d3b84416b52bbc28f4b77f3a9d8d0d91dc37d3dbe8af8be98f74674b02f9a38527",
47210957b409SSimon J. Gerraty
47220957b409SSimon J. Gerraty "3d8cf273d343b9aedccddacb91ad86206737adc86b4a49a7",
47230957b409SSimon J. Gerraty "bb3a9a0c71c62ef0",
47240957b409SSimon J. Gerraty "1fde3991c32ce220b5b6666a9234f2fd7bd24b921829fd9cdc6eb4218be9eac9faa9c2351777349128086b6d58776bc86ff2f76ee1b3b2850a318462b8983fa1",
47250957b409SSimon J. Gerraty "422ce705a46bb52ad928dab6c863166d617c6fc24003633120d91918314bbf464cea7345c3c35f2042f2d6929735d74d7728f22fea618a0b9cf5b1281acb13fb",
47260957b409SSimon J. Gerraty
47270957b409SSimon J. Gerraty "fbceb5cb646b925be0b92f7f6b493d5e5b16e9159732732a",
47280957b409SSimon J. Gerraty "2e17b3c7025ae86b",
47290957b409SSimon J. Gerraty "4c309bc8e1e464fdd2a2b8978645d668d455f7526bd8d7b6716a722f6a900b815c4a73cc30e788065c1dfca7bf5958a6cc5440a5ebe7f8691c20278cde95db764ff8ce8994ece89c",
47300957b409SSimon J. Gerraty "c02129bdf4bbbd75e71605a00b12c80db6b4e05308e916615011f09147ed915dd1bc67f27f9e027e4e13df36b55464a31c11b4d1fe3d855d89df492e1a7201b995c1ba16a8dbabee",
47310957b409SSimon J. Gerraty
47320957b409SSimon J. Gerraty "9b162a0df8ad9b61c88676e3d586434570b902f12a2046e0",
47330957b409SSimon J. Gerraty "ebd6fefe029ad54b",
47340957b409SSimon J. Gerraty "f4c1c918e77355c8156f0fd778da52bff121ae5f2f44eaf4d2754946d0e10d1f18ce3a0176e69c18b7d20b6e0d0bee5eb5edfe4bd60e4d92adcd86bce72e76f94ee5cbcaa8b01cfddcea2ade575e66ac",
47350957b409SSimon J. Gerraty "1ff3c8709f403a8eff291aedf50c010df5c5ff64a8b205f1fce68564798897a390db16ee0d053856b75898009731da290fcc119dad987277aacef694872e880c4bb41471063fae05c89f25e4bd0cad6a",
47360957b409SSimon J. Gerraty
47370957b409SSimon J. Gerraty NULL
47380957b409SSimon J. Gerraty };
47390957b409SSimon J. Gerraty
47400957b409SSimon J. Gerraty static void
xor_buf(unsigned char * dst,const unsigned char * src,size_t len)47410957b409SSimon J. Gerraty xor_buf(unsigned char *dst, const unsigned char *src, size_t len)
47420957b409SSimon J. Gerraty {
47430957b409SSimon J. Gerraty while (len -- > 0) {
47440957b409SSimon J. Gerraty *dst ++ ^= *src ++;
47450957b409SSimon J. Gerraty }
47460957b409SSimon J. Gerraty }
47470957b409SSimon J. Gerraty
47480957b409SSimon J. Gerraty static void
monte_carlo_DES_encrypt(const br_block_cbcenc_class * ve)47490957b409SSimon J. Gerraty monte_carlo_DES_encrypt(const br_block_cbcenc_class *ve)
47500957b409SSimon J. Gerraty {
47510957b409SSimon J. Gerraty unsigned char k1[8], k2[8], k3[8];
47520957b409SSimon J. Gerraty unsigned char buf[8];
47530957b409SSimon J. Gerraty unsigned char cipher[8];
47540957b409SSimon J. Gerraty int i, j;
47550957b409SSimon J. Gerraty br_des_gen_cbcenc_keys v_ec;
47560957b409SSimon J. Gerraty void *ec;
47570957b409SSimon J. Gerraty
47580957b409SSimon J. Gerraty ec = &v_ec;
47590957b409SSimon J. Gerraty hextobin(k1, "9ec2372c86379df4");
47600957b409SSimon J. Gerraty hextobin(k2, "ad7ac4464f73805d");
47610957b409SSimon J. Gerraty hextobin(k3, "20c4f87564527c91");
47620957b409SSimon J. Gerraty hextobin(buf, "b624d6bd41783ab1");
47630957b409SSimon J. Gerraty hextobin(cipher, "eafd97b190b167fe");
47640957b409SSimon J. Gerraty for (i = 0; i < 400; i ++) {
47650957b409SSimon J. Gerraty unsigned char key[24];
47660957b409SSimon J. Gerraty
47670957b409SSimon J. Gerraty memcpy(key, k1, 8);
47680957b409SSimon J. Gerraty memcpy(key + 8, k2, 8);
47690957b409SSimon J. Gerraty memcpy(key + 16, k3, 8);
47700957b409SSimon J. Gerraty ve->init(ec, key, sizeof key);
47710957b409SSimon J. Gerraty for (j = 0; j < 10000; j ++) {
47720957b409SSimon J. Gerraty unsigned char iv[8];
47730957b409SSimon J. Gerraty
47740957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
47750957b409SSimon J. Gerraty ve->run(ec, iv, buf, sizeof buf);
47760957b409SSimon J. Gerraty switch (j) {
47770957b409SSimon J. Gerraty case 9997: xor_buf(k3, buf, 8); break;
47780957b409SSimon J. Gerraty case 9998: xor_buf(k2, buf, 8); break;
47790957b409SSimon J. Gerraty case 9999: xor_buf(k1, buf, 8); break;
47800957b409SSimon J. Gerraty }
47810957b409SSimon J. Gerraty }
47820957b409SSimon J. Gerraty printf(".");
47830957b409SSimon J. Gerraty fflush(stdout);
47840957b409SSimon J. Gerraty }
47850957b409SSimon J. Gerraty printf(" ");
47860957b409SSimon J. Gerraty fflush(stdout);
47870957b409SSimon J. Gerraty check_equals("MC DES encrypt", buf, cipher, sizeof buf);
47880957b409SSimon J. Gerraty }
47890957b409SSimon J. Gerraty
47900957b409SSimon J. Gerraty static void
monte_carlo_DES_decrypt(const br_block_cbcdec_class * vd)47910957b409SSimon J. Gerraty monte_carlo_DES_decrypt(const br_block_cbcdec_class *vd)
47920957b409SSimon J. Gerraty {
47930957b409SSimon J. Gerraty unsigned char k1[8], k2[8], k3[8];
47940957b409SSimon J. Gerraty unsigned char buf[8];
47950957b409SSimon J. Gerraty unsigned char plain[8];
47960957b409SSimon J. Gerraty int i, j;
47970957b409SSimon J. Gerraty br_des_gen_cbcdec_keys v_dc;
47980957b409SSimon J. Gerraty void *dc;
47990957b409SSimon J. Gerraty
48000957b409SSimon J. Gerraty dc = &v_dc;
48010957b409SSimon J. Gerraty hextobin(k1, "79b63486e0ce37e0");
48020957b409SSimon J. Gerraty hextobin(k2, "08e65231abae3710");
48030957b409SSimon J. Gerraty hextobin(k3, "1f5eb69e925ef185");
48040957b409SSimon J. Gerraty hextobin(buf, "2783aa729432fe96");
48050957b409SSimon J. Gerraty hextobin(plain, "44937ca532cdbf98");
48060957b409SSimon J. Gerraty for (i = 0; i < 400; i ++) {
48070957b409SSimon J. Gerraty unsigned char key[24];
48080957b409SSimon J. Gerraty
48090957b409SSimon J. Gerraty memcpy(key, k1, 8);
48100957b409SSimon J. Gerraty memcpy(key + 8, k2, 8);
48110957b409SSimon J. Gerraty memcpy(key + 16, k3, 8);
48120957b409SSimon J. Gerraty vd->init(dc, key, sizeof key);
48130957b409SSimon J. Gerraty for (j = 0; j < 10000; j ++) {
48140957b409SSimon J. Gerraty unsigned char iv[8];
48150957b409SSimon J. Gerraty
48160957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
48170957b409SSimon J. Gerraty vd->run(dc, iv, buf, sizeof buf);
48180957b409SSimon J. Gerraty switch (j) {
48190957b409SSimon J. Gerraty case 9997: xor_buf(k3, buf, 8); break;
48200957b409SSimon J. Gerraty case 9998: xor_buf(k2, buf, 8); break;
48210957b409SSimon J. Gerraty case 9999: xor_buf(k1, buf, 8); break;
48220957b409SSimon J. Gerraty }
48230957b409SSimon J. Gerraty }
48240957b409SSimon J. Gerraty printf(".");
48250957b409SSimon J. Gerraty fflush(stdout);
48260957b409SSimon J. Gerraty }
48270957b409SSimon J. Gerraty printf(" ");
48280957b409SSimon J. Gerraty fflush(stdout);
48290957b409SSimon J. Gerraty check_equals("MC DES decrypt", buf, plain, sizeof buf);
48300957b409SSimon J. Gerraty }
48310957b409SSimon J. Gerraty
48320957b409SSimon J. Gerraty static void
test_DES_generic(char * name,const br_block_cbcenc_class * ve,const br_block_cbcdec_class * vd,int with_MC,int with_CBC)48330957b409SSimon J. Gerraty test_DES_generic(char *name,
48340957b409SSimon J. Gerraty const br_block_cbcenc_class *ve,
48350957b409SSimon J. Gerraty const br_block_cbcdec_class *vd,
48360957b409SSimon J. Gerraty int with_MC, int with_CBC)
48370957b409SSimon J. Gerraty {
48380957b409SSimon J. Gerraty size_t u;
48390957b409SSimon J. Gerraty
48400957b409SSimon J. Gerraty printf("Test %s: ", name);
48410957b409SSimon J. Gerraty fflush(stdout);
48420957b409SSimon J. Gerraty
48430957b409SSimon J. Gerraty if (ve->block_size != 8 || vd->block_size != 8) {
48440957b409SSimon J. Gerraty fprintf(stderr, "%s failed: wrong block size\n", name);
48450957b409SSimon J. Gerraty exit(EXIT_FAILURE);
48460957b409SSimon J. Gerraty }
48470957b409SSimon J. Gerraty
48480957b409SSimon J. Gerraty for (u = 0; KAT_DES[u]; u += 3) {
48490957b409SSimon J. Gerraty unsigned char key[24];
48500957b409SSimon J. Gerraty unsigned char plain[8];
48510957b409SSimon J. Gerraty unsigned char cipher[8];
48520957b409SSimon J. Gerraty unsigned char buf[8];
48530957b409SSimon J. Gerraty unsigned char iv[8];
48540957b409SSimon J. Gerraty size_t key_len;
48550957b409SSimon J. Gerraty br_des_gen_cbcenc_keys v_ec;
48560957b409SSimon J. Gerraty br_des_gen_cbcdec_keys v_dc;
48570957b409SSimon J. Gerraty const br_block_cbcenc_class **ec;
48580957b409SSimon J. Gerraty const br_block_cbcdec_class **dc;
48590957b409SSimon J. Gerraty
48600957b409SSimon J. Gerraty ec = &v_ec.vtable;
48610957b409SSimon J. Gerraty dc = &v_dc.vtable;
48620957b409SSimon J. Gerraty key_len = hextobin(key, KAT_DES[u]);
48630957b409SSimon J. Gerraty hextobin(plain, KAT_DES[u + 1]);
48640957b409SSimon J. Gerraty hextobin(cipher, KAT_DES[u + 2]);
48650957b409SSimon J. Gerraty ve->init(ec, key, key_len);
48660957b409SSimon J. Gerraty memcpy(buf, plain, sizeof plain);
48670957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
48680957b409SSimon J. Gerraty ve->run(ec, iv, buf, sizeof buf);
48690957b409SSimon J. Gerraty check_equals("KAT DES encrypt", buf, cipher, sizeof cipher);
48700957b409SSimon J. Gerraty vd->init(dc, key, key_len);
48710957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
48720957b409SSimon J. Gerraty vd->run(dc, iv, buf, sizeof buf);
48730957b409SSimon J. Gerraty check_equals("KAT DES decrypt", buf, plain, sizeof plain);
48740957b409SSimon J. Gerraty
48750957b409SSimon J. Gerraty if (key_len == 8) {
48760957b409SSimon J. Gerraty memcpy(key + 8, key, 8);
48770957b409SSimon J. Gerraty memcpy(key + 16, key, 8);
48780957b409SSimon J. Gerraty ve->init(ec, key, 24);
48790957b409SSimon J. Gerraty memcpy(buf, plain, sizeof plain);
48800957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
48810957b409SSimon J. Gerraty ve->run(ec, iv, buf, sizeof buf);
48820957b409SSimon J. Gerraty check_equals("KAT DES->3 encrypt",
48830957b409SSimon J. Gerraty buf, cipher, sizeof cipher);
48840957b409SSimon J. Gerraty vd->init(dc, key, 24);
48850957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
48860957b409SSimon J. Gerraty vd->run(dc, iv, buf, sizeof buf);
48870957b409SSimon J. Gerraty check_equals("KAT DES->3 decrypt",
48880957b409SSimon J. Gerraty buf, plain, sizeof plain);
48890957b409SSimon J. Gerraty }
48900957b409SSimon J. Gerraty }
48910957b409SSimon J. Gerraty
48920957b409SSimon J. Gerraty if (with_CBC) {
48930957b409SSimon J. Gerraty for (u = 0; KAT_DES_CBC[u]; u += 4) {
48940957b409SSimon J. Gerraty unsigned char key[24];
48950957b409SSimon J. Gerraty unsigned char ivref[8];
48960957b409SSimon J. Gerraty unsigned char plain[200];
48970957b409SSimon J. Gerraty unsigned char cipher[200];
48980957b409SSimon J. Gerraty unsigned char buf[200];
48990957b409SSimon J. Gerraty unsigned char iv[8];
49000957b409SSimon J. Gerraty size_t key_len, data_len, v;
49010957b409SSimon J. Gerraty br_des_gen_cbcenc_keys v_ec;
49020957b409SSimon J. Gerraty br_des_gen_cbcdec_keys v_dc;
49030957b409SSimon J. Gerraty const br_block_cbcenc_class **ec;
49040957b409SSimon J. Gerraty const br_block_cbcdec_class **dc;
49050957b409SSimon J. Gerraty
49060957b409SSimon J. Gerraty ec = &v_ec.vtable;
49070957b409SSimon J. Gerraty dc = &v_dc.vtable;
49080957b409SSimon J. Gerraty key_len = hextobin(key, KAT_DES_CBC[u]);
49090957b409SSimon J. Gerraty hextobin(ivref, KAT_DES_CBC[u + 1]);
49100957b409SSimon J. Gerraty data_len = hextobin(plain, KAT_DES_CBC[u + 2]);
49110957b409SSimon J. Gerraty hextobin(cipher, KAT_DES_CBC[u + 3]);
49120957b409SSimon J. Gerraty ve->init(ec, key, key_len);
49130957b409SSimon J. Gerraty
49140957b409SSimon J. Gerraty memcpy(buf, plain, data_len);
49150957b409SSimon J. Gerraty memcpy(iv, ivref, 8);
49160957b409SSimon J. Gerraty ve->run(ec, iv, buf, data_len);
49170957b409SSimon J. Gerraty check_equals("KAT CBC DES encrypt",
49180957b409SSimon J. Gerraty buf, cipher, data_len);
49190957b409SSimon J. Gerraty vd->init(dc, key, key_len);
49200957b409SSimon J. Gerraty memcpy(iv, ivref, 8);
49210957b409SSimon J. Gerraty vd->run(dc, iv, buf, data_len);
49220957b409SSimon J. Gerraty check_equals("KAT CBC DES decrypt",
49230957b409SSimon J. Gerraty buf, plain, data_len);
49240957b409SSimon J. Gerraty
49250957b409SSimon J. Gerraty memcpy(buf, plain, data_len);
49260957b409SSimon J. Gerraty memcpy(iv, ivref, 8);
49270957b409SSimon J. Gerraty for (v = 0; v < data_len; v += 8) {
49280957b409SSimon J. Gerraty ve->run(ec, iv, buf + v, 8);
49290957b409SSimon J. Gerraty }
49300957b409SSimon J. Gerraty check_equals("KAT CBC DES encrypt (2)",
49310957b409SSimon J. Gerraty buf, cipher, data_len);
49320957b409SSimon J. Gerraty memcpy(iv, ivref, 8);
49330957b409SSimon J. Gerraty for (v = 0; v < data_len; v += 8) {
49340957b409SSimon J. Gerraty vd->run(dc, iv, buf + v, 8);
49350957b409SSimon J. Gerraty }
49360957b409SSimon J. Gerraty check_equals("KAT CBC DES decrypt (2)",
49370957b409SSimon J. Gerraty buf, plain, data_len);
49380957b409SSimon J. Gerraty }
49390957b409SSimon J. Gerraty }
49400957b409SSimon J. Gerraty
49410957b409SSimon J. Gerraty if (with_MC) {
49420957b409SSimon J. Gerraty monte_carlo_DES_encrypt(ve);
49430957b409SSimon J. Gerraty monte_carlo_DES_decrypt(vd);
49440957b409SSimon J. Gerraty }
49450957b409SSimon J. Gerraty
49460957b409SSimon J. Gerraty printf("done.\n");
49470957b409SSimon J. Gerraty fflush(stdout);
49480957b409SSimon J. Gerraty }
49490957b409SSimon J. Gerraty
49500957b409SSimon J. Gerraty static void
test_DES_tab(void)49510957b409SSimon J. Gerraty test_DES_tab(void)
49520957b409SSimon J. Gerraty {
49530957b409SSimon J. Gerraty test_DES_generic("DES_tab",
49540957b409SSimon J. Gerraty &br_des_tab_cbcenc_vtable,
49550957b409SSimon J. Gerraty &br_des_tab_cbcdec_vtable,
49560957b409SSimon J. Gerraty 1, 1);
49570957b409SSimon J. Gerraty }
49580957b409SSimon J. Gerraty
49590957b409SSimon J. Gerraty static void
test_DES_ct(void)49600957b409SSimon J. Gerraty test_DES_ct(void)
49610957b409SSimon J. Gerraty {
49620957b409SSimon J. Gerraty test_DES_generic("DES_ct",
49630957b409SSimon J. Gerraty &br_des_ct_cbcenc_vtable,
49640957b409SSimon J. Gerraty &br_des_ct_cbcdec_vtable,
49650957b409SSimon J. Gerraty 1, 1);
49660957b409SSimon J. Gerraty }
49670957b409SSimon J. Gerraty
49680957b409SSimon J. Gerraty static const struct {
49690957b409SSimon J. Gerraty const char *skey;
49700957b409SSimon J. Gerraty const char *snonce;
49710957b409SSimon J. Gerraty uint32_t counter;
49720957b409SSimon J. Gerraty const char *splain;
49730957b409SSimon J. Gerraty const char *scipher;
49740957b409SSimon J. Gerraty } KAT_CHACHA20[] = {
49750957b409SSimon J. Gerraty {
49760957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
49770957b409SSimon J. Gerraty "000000000000000000000000",
49780957b409SSimon J. Gerraty 0,
49790957b409SSimon J. Gerraty "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
49800957b409SSimon J. Gerraty "76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586"
49810957b409SSimon J. Gerraty },
49820957b409SSimon J. Gerraty {
49830957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000001",
49840957b409SSimon J. Gerraty "000000000000000000000002",
49850957b409SSimon J. Gerraty 1,
49860957b409SSimon J. Gerraty "416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f",
49870957b409SSimon J. Gerraty "a3fbf07df3fa2fde4f376ca23e82737041605d9f4f4f57bd8cff2c1d4b7955ec2a97948bd3722915c8f3d337f7d370050e9e96d647b7c39f56e031ca5eb6250d4042e02785ececfa4b4bb5e8ead0440e20b6e8db09d881a7c6132f420e52795042bdfa7773d8a9051447b3291ce1411c680465552aa6c405b7764d5e87bea85ad00f8449ed8f72d0d662ab052691ca66424bc86d2df80ea41f43abf937d3259dc4b2d0dfb48a6c9139ddd7f76966e928e635553ba76c5c879d7b35d49eb2e62b0871cdac638939e25e8a1e0ef9d5280fa8ca328b351c3c765989cbcf3daa8b6ccc3aaf9f3979c92b3720fc88dc95ed84a1be059c6499b9fda236e7e818b04b0bc39c1e876b193bfe5569753f88128cc08aaa9b63d1a16f80ef2554d7189c411f5869ca52c5b83fa36ff216b9c1d30062bebcfd2dc5bce0911934fda79a86f6e698ced759c3ff9b6477338f3da4f9cd8514ea9982ccafb341b2384dd902f3d1ab7ac61dd29c6f21ba5b862f3730e37cfdc4fd806c22f221"
49880957b409SSimon J. Gerraty },
49890957b409SSimon J. Gerraty {
49900957b409SSimon J. Gerraty "1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0",
49910957b409SSimon J. Gerraty "000000000000000000000002",
49920957b409SSimon J. Gerraty 42,
49930957b409SSimon J. Gerraty "2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e",
49940957b409SSimon J. Gerraty "62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1"
49950957b409SSimon J. Gerraty },
49960957b409SSimon J. Gerraty { 0, 0, 0, 0, 0 }
49970957b409SSimon J. Gerraty };
49980957b409SSimon J. Gerraty
49990957b409SSimon J. Gerraty static void
test_ChaCha20_generic(const char * name,br_chacha20_run cr)50000957b409SSimon J. Gerraty test_ChaCha20_generic(const char *name, br_chacha20_run cr)
50010957b409SSimon J. Gerraty {
50020957b409SSimon J. Gerraty size_t u;
50030957b409SSimon J. Gerraty
50040957b409SSimon J. Gerraty printf("Test %s: ", name);
50050957b409SSimon J. Gerraty fflush(stdout);
50060957b409SSimon J. Gerraty if (cr == 0) {
50070957b409SSimon J. Gerraty printf("UNAVAILABLE\n");
50080957b409SSimon J. Gerraty return;
50090957b409SSimon J. Gerraty }
50100957b409SSimon J. Gerraty
50110957b409SSimon J. Gerraty for (u = 0; KAT_CHACHA20[u].skey; u ++) {
50120957b409SSimon J. Gerraty unsigned char key[32], nonce[12], plain[400], cipher[400];
50130957b409SSimon J. Gerraty uint32_t cc;
50140957b409SSimon J. Gerraty size_t v, len;
50150957b409SSimon J. Gerraty
50160957b409SSimon J. Gerraty hextobin(key, KAT_CHACHA20[u].skey);
50170957b409SSimon J. Gerraty hextobin(nonce, KAT_CHACHA20[u].snonce);
50180957b409SSimon J. Gerraty cc = KAT_CHACHA20[u].counter;
50190957b409SSimon J. Gerraty len = hextobin(plain, KAT_CHACHA20[u].splain);
50200957b409SSimon J. Gerraty hextobin(cipher, KAT_CHACHA20[u].scipher);
50210957b409SSimon J. Gerraty
50220957b409SSimon J. Gerraty for (v = 0; v < len; v ++) {
50230957b409SSimon J. Gerraty unsigned char tmp[400];
50240957b409SSimon J. Gerraty size_t w;
50250957b409SSimon J. Gerraty uint32_t cc2;
50260957b409SSimon J. Gerraty
50270957b409SSimon J. Gerraty memset(tmp, 0, sizeof tmp);
50280957b409SSimon J. Gerraty memcpy(tmp, plain, v);
50290957b409SSimon J. Gerraty if (cr(key, nonce, cc, tmp, v)
50300957b409SSimon J. Gerraty != cc + (uint32_t)((v + 63) >> 6))
50310957b409SSimon J. Gerraty {
50320957b409SSimon J. Gerraty fprintf(stderr, "ChaCha20: wrong counter\n");
50330957b409SSimon J. Gerraty exit(EXIT_FAILURE);
50340957b409SSimon J. Gerraty }
50350957b409SSimon J. Gerraty if (memcmp(tmp, cipher, v) != 0) {
50360957b409SSimon J. Gerraty fprintf(stderr, "ChaCha20 KAT fail (1)\n");
50370957b409SSimon J. Gerraty exit(EXIT_FAILURE);
50380957b409SSimon J. Gerraty }
50390957b409SSimon J. Gerraty for (w = v; w < sizeof tmp; w ++) {
50400957b409SSimon J. Gerraty if (tmp[w] != 0) {
50410957b409SSimon J. Gerraty fprintf(stderr, "ChaCha20: overrun\n");
50420957b409SSimon J. Gerraty exit(EXIT_FAILURE);
50430957b409SSimon J. Gerraty }
50440957b409SSimon J. Gerraty }
50450957b409SSimon J. Gerraty for (w = 0, cc2 = cc; w < v; w += 64, cc2 ++) {
50460957b409SSimon J. Gerraty size_t x;
50470957b409SSimon J. Gerraty
50480957b409SSimon J. Gerraty x = v - w;
50490957b409SSimon J. Gerraty if (x > 64) {
50500957b409SSimon J. Gerraty x = 64;
50510957b409SSimon J. Gerraty }
50520957b409SSimon J. Gerraty if (cr(key, nonce, cc2, tmp + w, x)
50530957b409SSimon J. Gerraty != (cc2 + 1))
50540957b409SSimon J. Gerraty {
50550957b409SSimon J. Gerraty fprintf(stderr, "ChaCha20:"
50560957b409SSimon J. Gerraty " wrong counter (2)\n");
50570957b409SSimon J. Gerraty exit(EXIT_FAILURE);
50580957b409SSimon J. Gerraty }
50590957b409SSimon J. Gerraty }
50600957b409SSimon J. Gerraty if (memcmp(tmp, plain, v) != 0) {
50610957b409SSimon J. Gerraty fprintf(stderr, "ChaCha20 KAT fail (2)\n");
50620957b409SSimon J. Gerraty exit(EXIT_FAILURE);
50630957b409SSimon J. Gerraty }
50640957b409SSimon J. Gerraty }
50650957b409SSimon J. Gerraty
50660957b409SSimon J. Gerraty printf(".");
50670957b409SSimon J. Gerraty fflush(stdout);
50680957b409SSimon J. Gerraty }
50690957b409SSimon J. Gerraty
50700957b409SSimon J. Gerraty printf(" done.\n");
50710957b409SSimon J. Gerraty fflush(stdout);
50720957b409SSimon J. Gerraty }
50730957b409SSimon J. Gerraty
50740957b409SSimon J. Gerraty static void
test_ChaCha20_ct(void)50750957b409SSimon J. Gerraty test_ChaCha20_ct(void)
50760957b409SSimon J. Gerraty {
50770957b409SSimon J. Gerraty test_ChaCha20_generic("ChaCha20_ct", &br_chacha20_ct_run);
50780957b409SSimon J. Gerraty }
50790957b409SSimon J. Gerraty
50800957b409SSimon J. Gerraty static void
test_ChaCha20_sse2(void)50810957b409SSimon J. Gerraty test_ChaCha20_sse2(void)
50820957b409SSimon J. Gerraty {
50830957b409SSimon J. Gerraty test_ChaCha20_generic("ChaCha20_sse2", br_chacha20_sse2_get());
50840957b409SSimon J. Gerraty }
50850957b409SSimon J. Gerraty
50860957b409SSimon J. Gerraty static const struct {
50870957b409SSimon J. Gerraty const char *splain;
50880957b409SSimon J. Gerraty const char *saad;
50890957b409SSimon J. Gerraty const char *skey;
50900957b409SSimon J. Gerraty const char *snonce;
50910957b409SSimon J. Gerraty const char *scipher;
50920957b409SSimon J. Gerraty const char *stag;
50930957b409SSimon J. Gerraty } KAT_POLY1305[] = {
50940957b409SSimon J. Gerraty {
50950957b409SSimon J. Gerraty "4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e",
50960957b409SSimon J. Gerraty "50515253c0c1c2c3c4c5c6c7",
50970957b409SSimon J. Gerraty "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
50980957b409SSimon J. Gerraty "070000004041424344454647",
50990957b409SSimon J. Gerraty "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116",
51000957b409SSimon J. Gerraty "1ae10b594f09e26a7e902ecbd0600691"
51010957b409SSimon J. Gerraty },
51020957b409SSimon J. Gerraty { 0, 0, 0, 0, 0, 0 }
51030957b409SSimon J. Gerraty };
51040957b409SSimon J. Gerraty
51050957b409SSimon J. Gerraty static void
test_Poly1305_inner(const char * name,br_poly1305_run ipoly,br_poly1305_run iref)51060957b409SSimon J. Gerraty test_Poly1305_inner(const char *name, br_poly1305_run ipoly,
51070957b409SSimon J. Gerraty br_poly1305_run iref)
51080957b409SSimon J. Gerraty {
51090957b409SSimon J. Gerraty size_t u;
51100957b409SSimon J. Gerraty br_hmac_drbg_context rng;
51110957b409SSimon J. Gerraty
51120957b409SSimon J. Gerraty printf("Test %s: ", name);
51130957b409SSimon J. Gerraty fflush(stdout);
51140957b409SSimon J. Gerraty
51150957b409SSimon J. Gerraty for (u = 0; KAT_POLY1305[u].skey; u ++) {
51160957b409SSimon J. Gerraty unsigned char key[32], nonce[12], plain[400], cipher[400];
51170957b409SSimon J. Gerraty unsigned char aad[400], tag[16], data[400], tmp[16];
51180957b409SSimon J. Gerraty size_t len, aad_len;
51190957b409SSimon J. Gerraty
51200957b409SSimon J. Gerraty len = hextobin(plain, KAT_POLY1305[u].splain);
51210957b409SSimon J. Gerraty aad_len = hextobin(aad, KAT_POLY1305[u].saad);
51220957b409SSimon J. Gerraty hextobin(key, KAT_POLY1305[u].skey);
51230957b409SSimon J. Gerraty hextobin(nonce, KAT_POLY1305[u].snonce);
51240957b409SSimon J. Gerraty hextobin(cipher, KAT_POLY1305[u].scipher);
51250957b409SSimon J. Gerraty hextobin(tag, KAT_POLY1305[u].stag);
51260957b409SSimon J. Gerraty
51270957b409SSimon J. Gerraty memcpy(data, plain, len);
51280957b409SSimon J. Gerraty ipoly(key, nonce, data, len,
51290957b409SSimon J. Gerraty aad, aad_len, tmp, br_chacha20_ct_run, 1);
51300957b409SSimon J. Gerraty check_equals("ChaCha20+Poly1305 KAT (1)", data, cipher, len);
51310957b409SSimon J. Gerraty check_equals("ChaCha20+Poly1305 KAT (2)", tmp, tag, 16);
51320957b409SSimon J. Gerraty ipoly(key, nonce, data, len,
51330957b409SSimon J. Gerraty aad, aad_len, tmp, br_chacha20_ct_run, 0);
51340957b409SSimon J. Gerraty check_equals("ChaCha20+Poly1305 KAT (3)", data, plain, len);
51350957b409SSimon J. Gerraty check_equals("ChaCha20+Poly1305 KAT (4)", tmp, tag, 16);
51360957b409SSimon J. Gerraty
51370957b409SSimon J. Gerraty printf(".");
51380957b409SSimon J. Gerraty fflush(stdout);
51390957b409SSimon J. Gerraty }
51400957b409SSimon J. Gerraty
51410957b409SSimon J. Gerraty printf(" ");
51420957b409SSimon J. Gerraty fflush(stdout);
51430957b409SSimon J. Gerraty
51440957b409SSimon J. Gerraty /*
51450957b409SSimon J. Gerraty * We compare the "ipoly" and "iref" implementations together on
51460957b409SSimon J. Gerraty * a bunch of pseudo-random messages.
51470957b409SSimon J. Gerraty */
51480957b409SSimon J. Gerraty br_hmac_drbg_init(&rng, &br_sha256_vtable, "seed for Poly1305", 17);
51490957b409SSimon J. Gerraty for (u = 0; u < 100; u ++) {
51500957b409SSimon J. Gerraty unsigned char plain[100], aad[100], tmp[100];
51510957b409SSimon J. Gerraty unsigned char key[32], iv[12], tag1[16], tag2[16];
51520957b409SSimon J. Gerraty
51530957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, key, sizeof key);
51540957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, iv, sizeof iv);
51550957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, plain, u);
51560957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, aad, u);
51570957b409SSimon J. Gerraty memcpy(tmp, plain, u);
51580957b409SSimon J. Gerraty memset(tmp + u, 0xFF, (sizeof tmp) - u);
51590957b409SSimon J. Gerraty ipoly(key, iv, tmp, u, aad, u, tag1,
51600957b409SSimon J. Gerraty &br_chacha20_ct_run, 1);
51610957b409SSimon J. Gerraty memset(tmp + u, 0x00, (sizeof tmp) - u);
51620957b409SSimon J. Gerraty iref(key, iv, tmp, u, aad, u, tag2,
51630957b409SSimon J. Gerraty &br_chacha20_ct_run, 0);
51640957b409SSimon J. Gerraty if (memcmp(tmp, plain, u) != 0) {
51650957b409SSimon J. Gerraty fprintf(stderr, "cross enc/dec failed\n");
51660957b409SSimon J. Gerraty exit(EXIT_FAILURE);
51670957b409SSimon J. Gerraty }
51680957b409SSimon J. Gerraty if (memcmp(tag1, tag2, sizeof tag1) != 0) {
51690957b409SSimon J. Gerraty fprintf(stderr, "cross MAC failed\n");
51700957b409SSimon J. Gerraty exit(EXIT_FAILURE);
51710957b409SSimon J. Gerraty }
51720957b409SSimon J. Gerraty printf(".");
51730957b409SSimon J. Gerraty fflush(stdout);
51740957b409SSimon J. Gerraty }
51750957b409SSimon J. Gerraty
51760957b409SSimon J. Gerraty printf(" done.\n");
51770957b409SSimon J. Gerraty fflush(stdout);
51780957b409SSimon J. Gerraty }
51790957b409SSimon J. Gerraty
51800957b409SSimon J. Gerraty static void
test_Poly1305_ctmul(void)51810957b409SSimon J. Gerraty test_Poly1305_ctmul(void)
51820957b409SSimon J. Gerraty {
51830957b409SSimon J. Gerraty test_Poly1305_inner("Poly1305_ctmul", &br_poly1305_ctmul_run,
51840957b409SSimon J. Gerraty &br_poly1305_i15_run);
51850957b409SSimon J. Gerraty }
51860957b409SSimon J. Gerraty
51870957b409SSimon J. Gerraty static void
test_Poly1305_ctmul32(void)51880957b409SSimon J. Gerraty test_Poly1305_ctmul32(void)
51890957b409SSimon J. Gerraty {
51900957b409SSimon J. Gerraty test_Poly1305_inner("Poly1305_ctmul32", &br_poly1305_ctmul32_run,
51910957b409SSimon J. Gerraty &br_poly1305_i15_run);
51920957b409SSimon J. Gerraty }
51930957b409SSimon J. Gerraty
51940957b409SSimon J. Gerraty static void
test_Poly1305_i15(void)51950957b409SSimon J. Gerraty test_Poly1305_i15(void)
51960957b409SSimon J. Gerraty {
51970957b409SSimon J. Gerraty test_Poly1305_inner("Poly1305_i15", &br_poly1305_i15_run,
51980957b409SSimon J. Gerraty &br_poly1305_ctmul_run);
51990957b409SSimon J. Gerraty }
52000957b409SSimon J. Gerraty
52010957b409SSimon J. Gerraty static void
test_Poly1305_ctmulq(void)52020957b409SSimon J. Gerraty test_Poly1305_ctmulq(void)
52030957b409SSimon J. Gerraty {
52040957b409SSimon J. Gerraty br_poly1305_run bp;
52050957b409SSimon J. Gerraty
52060957b409SSimon J. Gerraty bp = br_poly1305_ctmulq_get();
52070957b409SSimon J. Gerraty if (bp == 0) {
52080957b409SSimon J. Gerraty printf("Test Poly1305_ctmulq: UNAVAILABLE\n");
52090957b409SSimon J. Gerraty } else {
52100957b409SSimon J. Gerraty test_Poly1305_inner("Poly1305_ctmulq", bp,
52110957b409SSimon J. Gerraty &br_poly1305_ctmul_run);
52120957b409SSimon J. Gerraty }
52130957b409SSimon J. Gerraty }
52140957b409SSimon J. Gerraty
52150957b409SSimon J. Gerraty /*
52160957b409SSimon J. Gerraty * A 1024-bit RSA key, generated with OpenSSL.
52170957b409SSimon J. Gerraty */
52180957b409SSimon J. Gerraty static const unsigned char RSA_N[] = {
52190957b409SSimon J. Gerraty 0xBF, 0xB4, 0xA6, 0x2E, 0x87, 0x3F, 0x9C, 0x8D,
52200957b409SSimon J. Gerraty 0xA0, 0xC4, 0x2E, 0x7B, 0x59, 0x36, 0x0F, 0xB0,
52210957b409SSimon J. Gerraty 0xFF, 0xE1, 0x25, 0x49, 0xE5, 0xE6, 0x36, 0xB0,
52220957b409SSimon J. Gerraty 0x48, 0xC2, 0x08, 0x6B, 0x77, 0xA7, 0xC0, 0x51,
52230957b409SSimon J. Gerraty 0x66, 0x35, 0x06, 0xA9, 0x59, 0xDF, 0x17, 0x7F,
52240957b409SSimon J. Gerraty 0x15, 0xF6, 0xB4, 0xE5, 0x44, 0xEE, 0x72, 0x3C,
52250957b409SSimon J. Gerraty 0x53, 0x11, 0x52, 0xC9, 0xC9, 0x61, 0x4F, 0x92,
52260957b409SSimon J. Gerraty 0x33, 0x64, 0x70, 0x43, 0x07, 0xF1, 0x3F, 0x7F,
52270957b409SSimon J. Gerraty 0x15, 0xAC, 0xF0, 0xC1, 0x54, 0x7D, 0x55, 0xC0,
52280957b409SSimon J. Gerraty 0x29, 0xDC, 0x9E, 0xCC, 0xE4, 0x1D, 0x11, 0x72,
52290957b409SSimon J. Gerraty 0x45, 0xF4, 0xD2, 0x70, 0xFC, 0x34, 0xB2, 0x1F,
52300957b409SSimon J. Gerraty 0xF3, 0xAD, 0x6A, 0xF0, 0xE5, 0x56, 0x11, 0xF8,
52310957b409SSimon J. Gerraty 0x0C, 0x3A, 0x8B, 0x04, 0x46, 0x7C, 0x77, 0xD9,
52320957b409SSimon J. Gerraty 0x41, 0x1F, 0x40, 0xBE, 0x93, 0x80, 0x9D, 0x23,
52330957b409SSimon J. Gerraty 0x75, 0x80, 0x12, 0x26, 0x5A, 0x72, 0x1C, 0xDD,
52340957b409SSimon J. Gerraty 0x47, 0xB3, 0x2A, 0x33, 0xD8, 0x19, 0x61, 0xE3
52350957b409SSimon J. Gerraty };
52360957b409SSimon J. Gerraty static const unsigned char RSA_E[] = {
52370957b409SSimon J. Gerraty 0x01, 0x00, 0x01
52380957b409SSimon J. Gerraty };
52390957b409SSimon J. Gerraty /* unused
52400957b409SSimon J. Gerraty static const unsigned char RSA_D[] = {
52410957b409SSimon J. Gerraty 0xAE, 0x56, 0x0B, 0x56, 0x7E, 0xDA, 0x83, 0x75,
52420957b409SSimon J. Gerraty 0x6C, 0xC1, 0x5C, 0x00, 0x02, 0x96, 0x1E, 0x58,
52430957b409SSimon J. Gerraty 0xF9, 0xA9, 0xF7, 0x2E, 0x27, 0xEB, 0x5E, 0xCA,
52440957b409SSimon J. Gerraty 0x9B, 0xB0, 0x10, 0xD6, 0x22, 0x7F, 0xA4, 0x6E,
52450957b409SSimon J. Gerraty 0xA2, 0x03, 0x10, 0xE6, 0xCB, 0x7B, 0x0D, 0x34,
52460957b409SSimon J. Gerraty 0x1E, 0x76, 0x37, 0xF5, 0xD3, 0xE5, 0x00, 0x70,
52470957b409SSimon J. Gerraty 0x09, 0x9E, 0xD4, 0x69, 0xFB, 0x40, 0x0A, 0x8B,
52480957b409SSimon J. Gerraty 0xCB, 0x3E, 0xC8, 0xB4, 0xBC, 0xB1, 0x50, 0xEA,
52490957b409SSimon J. Gerraty 0x9D, 0xD9, 0x89, 0x8A, 0x98, 0x40, 0x79, 0xD1,
52500957b409SSimon J. Gerraty 0x07, 0x66, 0xA7, 0x90, 0x63, 0x82, 0xB1, 0xE0,
52510957b409SSimon J. Gerraty 0x24, 0xD0, 0x89, 0x6A, 0xEC, 0xC5, 0xF3, 0x21,
52520957b409SSimon J. Gerraty 0x7D, 0xB8, 0xA5, 0x45, 0x3A, 0x3B, 0x34, 0x42,
52530957b409SSimon J. Gerraty 0xC2, 0x82, 0x3C, 0x8D, 0xFA, 0x5D, 0xA0, 0xA8,
52540957b409SSimon J. Gerraty 0x24, 0xC8, 0x40, 0x22, 0x19, 0xCB, 0xB5, 0x85,
52550957b409SSimon J. Gerraty 0x67, 0x69, 0x60, 0xE4, 0xD0, 0x7E, 0xA3, 0x3B,
52560957b409SSimon J. Gerraty 0xF7, 0x70, 0x50, 0xC9, 0x5C, 0x97, 0x29, 0x49
52570957b409SSimon J. Gerraty };
52580957b409SSimon J. Gerraty */
52590957b409SSimon J. Gerraty static const unsigned char RSA_P[] = {
52600957b409SSimon J. Gerraty 0xF2, 0xE7, 0x6F, 0x66, 0x2E, 0xC4, 0x03, 0xD4,
52610957b409SSimon J. Gerraty 0x89, 0x24, 0xCC, 0xE1, 0xCD, 0x3F, 0x01, 0x82,
52620957b409SSimon J. Gerraty 0xC1, 0xFB, 0xAF, 0x44, 0xFA, 0xCC, 0x0E, 0xAA,
52630957b409SSimon J. Gerraty 0x9D, 0x74, 0xA9, 0x65, 0xEF, 0xED, 0x4C, 0x87,
52640957b409SSimon J. Gerraty 0xF0, 0xB3, 0xC6, 0xEA, 0x61, 0x85, 0xDE, 0x4E,
52650957b409SSimon J. Gerraty 0x66, 0xB2, 0x5A, 0x9F, 0x7A, 0x41, 0xC5, 0x66,
52660957b409SSimon J. Gerraty 0x57, 0xDF, 0x88, 0xF0, 0xB5, 0xF2, 0xC7, 0x7E,
52670957b409SSimon J. Gerraty 0xE6, 0x55, 0x21, 0x96, 0x83, 0xD8, 0xAB, 0x57
52680957b409SSimon J. Gerraty };
52690957b409SSimon J. Gerraty static const unsigned char RSA_Q[] = {
52700957b409SSimon J. Gerraty 0xCA, 0x0A, 0x92, 0xBF, 0x58, 0xB0, 0x2E, 0xF6,
52710957b409SSimon J. Gerraty 0x66, 0x50, 0xB1, 0x48, 0x29, 0x42, 0x86, 0x6C,
52720957b409SSimon J. Gerraty 0x98, 0x06, 0x7E, 0xB8, 0xB5, 0x4F, 0xFB, 0xC4,
52730957b409SSimon J. Gerraty 0xF3, 0xC3, 0x36, 0x91, 0x07, 0xB6, 0xDB, 0xE9,
52740957b409SSimon J. Gerraty 0x56, 0x3C, 0x51, 0x7D, 0xB5, 0xEC, 0x0A, 0xA9,
52750957b409SSimon J. Gerraty 0x7C, 0x66, 0xF9, 0xD8, 0x25, 0xDE, 0xD2, 0x94,
52760957b409SSimon J. Gerraty 0x5A, 0x58, 0xF1, 0x93, 0xE4, 0xF0, 0x5F, 0x27,
52770957b409SSimon J. Gerraty 0xBD, 0x83, 0xC7, 0xCA, 0x48, 0x6A, 0xB2, 0x55
52780957b409SSimon J. Gerraty };
52790957b409SSimon J. Gerraty static const unsigned char RSA_DP[] = {
52800957b409SSimon J. Gerraty 0xAF, 0x97, 0xBE, 0x60, 0x0F, 0xCE, 0x83, 0x36,
52810957b409SSimon J. Gerraty 0x51, 0x2D, 0xD9, 0x2E, 0x22, 0x41, 0x39, 0xC6,
52820957b409SSimon J. Gerraty 0x5C, 0x94, 0xA4, 0xCF, 0x28, 0xBD, 0xFA, 0x9C,
52830957b409SSimon J. Gerraty 0x3B, 0xD6, 0xE9, 0xDE, 0x56, 0xE3, 0x24, 0x3F,
52840957b409SSimon J. Gerraty 0xE1, 0x31, 0x14, 0xCA, 0xBA, 0x55, 0x1B, 0xAF,
52850957b409SSimon J. Gerraty 0x71, 0x6D, 0xDD, 0x35, 0x0C, 0x1C, 0x1F, 0xA7,
52860957b409SSimon J. Gerraty 0x2C, 0x3E, 0xDB, 0xAF, 0xA6, 0xD8, 0x2A, 0x7F,
52870957b409SSimon J. Gerraty 0x01, 0xE2, 0xE8, 0xB4, 0xF5, 0xFA, 0xDB, 0x61
52880957b409SSimon J. Gerraty };
52890957b409SSimon J. Gerraty static const unsigned char RSA_DQ[] = {
52900957b409SSimon J. Gerraty 0x29, 0xC0, 0x4B, 0x98, 0xFD, 0x13, 0xD3, 0x70,
52910957b409SSimon J. Gerraty 0x99, 0xAE, 0x1D, 0x24, 0x83, 0x5A, 0x3A, 0xFB,
52920957b409SSimon J. Gerraty 0x1F, 0xE3, 0x5F, 0xB6, 0x7D, 0xC9, 0x5C, 0x86,
52930957b409SSimon J. Gerraty 0xD3, 0xB4, 0xC8, 0x86, 0xE9, 0xE8, 0x30, 0xC3,
52940957b409SSimon J. Gerraty 0xA4, 0x4D, 0x6C, 0xAD, 0xA4, 0xB5, 0x75, 0x72,
52950957b409SSimon J. Gerraty 0x96, 0xC1, 0x94, 0xE9, 0xC4, 0xD1, 0xAA, 0x04,
52960957b409SSimon J. Gerraty 0x7C, 0x33, 0x1B, 0x20, 0xEB, 0xD3, 0x7C, 0x66,
52970957b409SSimon J. Gerraty 0x72, 0xF4, 0x53, 0x8A, 0x0A, 0xB2, 0xF9, 0xCD
52980957b409SSimon J. Gerraty };
52990957b409SSimon J. Gerraty static const unsigned char RSA_IQ[] = {
53000957b409SSimon J. Gerraty 0xE8, 0xEB, 0x04, 0x79, 0xA5, 0xC1, 0x79, 0xDE,
53010957b409SSimon J. Gerraty 0xD5, 0x49, 0xA1, 0x0B, 0x48, 0xB9, 0x0E, 0x55,
53020957b409SSimon J. Gerraty 0x74, 0x2C, 0x54, 0xEE, 0xA8, 0xB0, 0x01, 0xC2,
53030957b409SSimon J. Gerraty 0xD2, 0x3C, 0x3E, 0x47, 0x3A, 0x7C, 0xC8, 0x3D,
53040957b409SSimon J. Gerraty 0x2E, 0x33, 0x54, 0x4D, 0x40, 0x29, 0x41, 0x74,
53050957b409SSimon J. Gerraty 0xBA, 0xE1, 0x93, 0x09, 0xEC, 0xE0, 0x1B, 0x4D,
53060957b409SSimon J. Gerraty 0x1F, 0x2A, 0xCA, 0x4A, 0x0B, 0x5F, 0xE6, 0xBE,
53070957b409SSimon J. Gerraty 0x59, 0x0A, 0xC4, 0xC9, 0xD9, 0x82, 0xAC, 0xE1
53080957b409SSimon J. Gerraty };
53090957b409SSimon J. Gerraty
53100957b409SSimon J. Gerraty static const br_rsa_public_key RSA_PK = {
53110957b409SSimon J. Gerraty (void *)RSA_N, sizeof RSA_N,
53120957b409SSimon J. Gerraty (void *)RSA_E, sizeof RSA_E
53130957b409SSimon J. Gerraty };
53140957b409SSimon J. Gerraty
53150957b409SSimon J. Gerraty static const br_rsa_private_key RSA_SK = {
53160957b409SSimon J. Gerraty 1024,
53170957b409SSimon J. Gerraty (void *)RSA_P, sizeof RSA_P,
53180957b409SSimon J. Gerraty (void *)RSA_Q, sizeof RSA_Q,
53190957b409SSimon J. Gerraty (void *)RSA_DP, sizeof RSA_DP,
53200957b409SSimon J. Gerraty (void *)RSA_DQ, sizeof RSA_DQ,
53210957b409SSimon J. Gerraty (void *)RSA_IQ, sizeof RSA_IQ
53220957b409SSimon J. Gerraty };
53230957b409SSimon J. Gerraty
53240957b409SSimon J. Gerraty /*
53250957b409SSimon J. Gerraty * A 2048-bit RSA key, generated with OpenSSL.
53260957b409SSimon J. Gerraty */
53270957b409SSimon J. Gerraty static const unsigned char RSA2048_N[] = {
53280957b409SSimon J. Gerraty 0xEA, 0xB1, 0xB0, 0x87, 0x60, 0xE2, 0x69, 0xF5,
53290957b409SSimon J. Gerraty 0xC9, 0x3F, 0xCB, 0x4F, 0x9E, 0x7D, 0xD0, 0x56,
53300957b409SSimon J. Gerraty 0x54, 0x8F, 0xF5, 0x59, 0x97, 0x04, 0x3F, 0x30,
53310957b409SSimon J. Gerraty 0xE1, 0xFB, 0x7B, 0xF5, 0xA0, 0xEB, 0xA7, 0x7B,
53320957b409SSimon J. Gerraty 0x29, 0x96, 0x7B, 0x32, 0x48, 0x48, 0xA4, 0x99,
53330957b409SSimon J. Gerraty 0x90, 0x92, 0x48, 0xFB, 0xDC, 0xEC, 0x8A, 0x3B,
53340957b409SSimon J. Gerraty 0xE0, 0x57, 0x6E, 0xED, 0x1C, 0x5B, 0x78, 0xCF,
53350957b409SSimon J. Gerraty 0x07, 0x41, 0x96, 0x4C, 0x2F, 0xA2, 0xD1, 0xC8,
53360957b409SSimon J. Gerraty 0xA0, 0x5F, 0xFC, 0x2A, 0x5B, 0x3F, 0xBC, 0xD7,
53370957b409SSimon J. Gerraty 0xE6, 0x91, 0xF1, 0x44, 0xD6, 0xD8, 0x41, 0x66,
53380957b409SSimon J. Gerraty 0x3E, 0x80, 0xEE, 0x98, 0x73, 0xD5, 0x32, 0x60,
53390957b409SSimon J. Gerraty 0x7F, 0xDF, 0xBF, 0xB2, 0x0B, 0xA5, 0xCA, 0x11,
53400957b409SSimon J. Gerraty 0x88, 0x1A, 0x0E, 0xA1, 0x61, 0x4C, 0x5A, 0x70,
53410957b409SSimon J. Gerraty 0xCE, 0x12, 0xC0, 0x61, 0xF5, 0x50, 0x0E, 0xF6,
53420957b409SSimon J. Gerraty 0xC1, 0xC2, 0x88, 0x8B, 0xE5, 0xCE, 0xAE, 0x90,
53430957b409SSimon J. Gerraty 0x65, 0x23, 0xA7, 0xAD, 0xCB, 0x04, 0x17, 0x00,
53440957b409SSimon J. Gerraty 0xA2, 0xDB, 0xB0, 0x21, 0x49, 0xDD, 0x3C, 0x2E,
53450957b409SSimon J. Gerraty 0x8C, 0x47, 0x27, 0xF2, 0x84, 0x51, 0x63, 0xEB,
53460957b409SSimon J. Gerraty 0xF8, 0xAF, 0x63, 0xA7, 0x89, 0xE1, 0xF0, 0x2F,
53470957b409SSimon J. Gerraty 0xF9, 0x9C, 0x0A, 0x8A, 0xBC, 0x57, 0x05, 0xB0,
53480957b409SSimon J. Gerraty 0xEF, 0xA0, 0xDA, 0x67, 0x70, 0xAF, 0x3F, 0xA4,
53490957b409SSimon J. Gerraty 0x92, 0xFC, 0x4A, 0xAC, 0xEF, 0x89, 0x41, 0x58,
53500957b409SSimon J. Gerraty 0x57, 0x63, 0x0F, 0x6A, 0x89, 0x68, 0x45, 0x4C,
53510957b409SSimon J. Gerraty 0x20, 0xF9, 0x7F, 0x50, 0x9D, 0x8C, 0x52, 0xC4,
53520957b409SSimon J. Gerraty 0xC1, 0x33, 0xCD, 0x42, 0x35, 0x12, 0xEC, 0x82,
53530957b409SSimon J. Gerraty 0xF9, 0xC1, 0xB7, 0x60, 0x7B, 0x52, 0x61, 0xD0,
53540957b409SSimon J. Gerraty 0xAE, 0xFD, 0x4B, 0x68, 0xB1, 0x55, 0x0E, 0xAB,
53550957b409SSimon J. Gerraty 0x99, 0x24, 0x52, 0x60, 0x8E, 0xDB, 0x90, 0x34,
53560957b409SSimon J. Gerraty 0x61, 0xE3, 0x95, 0x7C, 0x34, 0x64, 0x06, 0xCB,
53570957b409SSimon J. Gerraty 0x44, 0x17, 0x70, 0x78, 0xC1, 0x1B, 0x87, 0x8F,
53580957b409SSimon J. Gerraty 0xCF, 0xB0, 0x7D, 0x93, 0x59, 0x84, 0x49, 0xF5,
53590957b409SSimon J. Gerraty 0x55, 0xBB, 0x48, 0xCA, 0xD3, 0x76, 0x1E, 0x7F
53600957b409SSimon J. Gerraty };
53610957b409SSimon J. Gerraty static const unsigned char RSA2048_E[] = {
53620957b409SSimon J. Gerraty 0x01, 0x00, 0x01
53630957b409SSimon J. Gerraty };
53640957b409SSimon J. Gerraty static const unsigned char RSA2048_P[] = {
53650957b409SSimon J. Gerraty 0xF9, 0xA7, 0xB5, 0xC4, 0xE8, 0x52, 0xEC, 0xB1,
53660957b409SSimon J. Gerraty 0x33, 0x6A, 0x68, 0x32, 0x63, 0x2D, 0xBA, 0xE5,
53670957b409SSimon J. Gerraty 0x61, 0x14, 0x69, 0x82, 0xC8, 0x31, 0x14, 0xD5,
53680957b409SSimon J. Gerraty 0xC2, 0x6C, 0x1A, 0xBE, 0xA0, 0x68, 0xA6, 0xC5,
53690957b409SSimon J. Gerraty 0xEA, 0x40, 0x59, 0xFB, 0x0A, 0x30, 0x3D, 0xD5,
53700957b409SSimon J. Gerraty 0xDD, 0x94, 0xAE, 0x0C, 0x9F, 0xEE, 0x19, 0x0C,
53710957b409SSimon J. Gerraty 0xA8, 0xF2, 0x85, 0x27, 0x60, 0xAA, 0xD5, 0x7C,
53720957b409SSimon J. Gerraty 0x59, 0x91, 0x1F, 0xAF, 0x5E, 0x00, 0xC8, 0x2D,
53730957b409SSimon J. Gerraty 0xCA, 0xB4, 0x70, 0xA1, 0xF8, 0x8C, 0x0A, 0xB3,
53740957b409SSimon J. Gerraty 0x08, 0x95, 0x03, 0x9E, 0xA4, 0x6B, 0x9D, 0x55,
53750957b409SSimon J. Gerraty 0x47, 0xE0, 0xEC, 0xB3, 0x21, 0x7C, 0xE4, 0x16,
53760957b409SSimon J. Gerraty 0x91, 0xE3, 0xD7, 0x1B, 0x3D, 0x81, 0xF1, 0xED,
53770957b409SSimon J. Gerraty 0x16, 0xF9, 0x05, 0x0E, 0xA6, 0x9F, 0x37, 0x73,
53780957b409SSimon J. Gerraty 0x18, 0x1B, 0x9C, 0x9D, 0x33, 0xAD, 0x25, 0xEF,
53790957b409SSimon J. Gerraty 0x3A, 0xC0, 0x4B, 0x34, 0x24, 0xF5, 0xFD, 0x59,
53800957b409SSimon J. Gerraty 0xF5, 0x65, 0xE6, 0x92, 0x2A, 0x04, 0x06, 0x3D
53810957b409SSimon J. Gerraty };
53820957b409SSimon J. Gerraty static const unsigned char RSA2048_Q[] = {
53830957b409SSimon J. Gerraty 0xF0, 0xA8, 0xA4, 0x20, 0xDD, 0xF3, 0x99, 0xE6,
53840957b409SSimon J. Gerraty 0x1C, 0xB1, 0x21, 0xE8, 0x66, 0x68, 0x48, 0x00,
53850957b409SSimon J. Gerraty 0x04, 0xE3, 0x21, 0xA3, 0xE8, 0xC5, 0xFD, 0x85,
53860957b409SSimon J. Gerraty 0x6D, 0x2C, 0x98, 0xE3, 0x36, 0x39, 0x3E, 0x80,
53870957b409SSimon J. Gerraty 0xB7, 0x36, 0xA5, 0xA9, 0xBB, 0xEB, 0x1E, 0xB8,
53880957b409SSimon J. Gerraty 0xEB, 0x44, 0x65, 0xE8, 0x81, 0x7D, 0xE0, 0x87,
53890957b409SSimon J. Gerraty 0xC1, 0x08, 0x94, 0xDD, 0x92, 0x40, 0xF4, 0x8B,
53900957b409SSimon J. Gerraty 0x3C, 0xB5, 0xC1, 0xAD, 0x9D, 0x4C, 0x14, 0xCD,
53910957b409SSimon J. Gerraty 0xD9, 0x2D, 0xB6, 0xE4, 0x99, 0xB3, 0x71, 0x63,
53920957b409SSimon J. Gerraty 0x64, 0xE1, 0x31, 0x7E, 0x34, 0x95, 0x96, 0x52,
53930957b409SSimon J. Gerraty 0x85, 0x27, 0xBE, 0x40, 0x10, 0x0A, 0x9E, 0x01,
53940957b409SSimon J. Gerraty 0x1C, 0xBB, 0xB2, 0x5B, 0x40, 0x85, 0x65, 0x6E,
53950957b409SSimon J. Gerraty 0xA0, 0x88, 0x73, 0xF6, 0x22, 0xCC, 0x23, 0x26,
53960957b409SSimon J. Gerraty 0x62, 0xAD, 0x92, 0x57, 0x57, 0xF4, 0xD4, 0xDF,
53970957b409SSimon J. Gerraty 0xD9, 0x7C, 0xDE, 0xAD, 0xD2, 0x1F, 0x32, 0x29,
53980957b409SSimon J. Gerraty 0xBA, 0xE7, 0xE2, 0x32, 0xA1, 0xA0, 0xBF, 0x6B
53990957b409SSimon J. Gerraty };
54000957b409SSimon J. Gerraty static const unsigned char RSA2048_DP[] = {
54010957b409SSimon J. Gerraty 0xB2, 0xF9, 0xD7, 0x66, 0xC5, 0x83, 0x05, 0x6A,
54020957b409SSimon J. Gerraty 0x77, 0xC8, 0xB5, 0xD0, 0x41, 0xA7, 0xBC, 0x0F,
54030957b409SSimon J. Gerraty 0xCB, 0x4B, 0xFD, 0xE4, 0x23, 0x2E, 0x84, 0x98,
54040957b409SSimon J. Gerraty 0x46, 0x1C, 0x88, 0x03, 0xD7, 0x2D, 0x8F, 0x39,
54050957b409SSimon J. Gerraty 0xDD, 0x98, 0xAA, 0xA9, 0x3D, 0x01, 0x9E, 0xA2,
54060957b409SSimon J. Gerraty 0xDE, 0x8A, 0x43, 0x48, 0x8B, 0xB2, 0xFE, 0xC4,
54070957b409SSimon J. Gerraty 0x43, 0xAE, 0x31, 0x65, 0x2C, 0x78, 0xEC, 0x39,
54080957b409SSimon J. Gerraty 0x8C, 0x60, 0x6C, 0xCD, 0xA4, 0xDF, 0x7C, 0xA2,
54090957b409SSimon J. Gerraty 0xCF, 0x6A, 0x12, 0x41, 0x1B, 0xD5, 0x11, 0xAA,
54100957b409SSimon J. Gerraty 0x8D, 0xE1, 0x7E, 0x49, 0xD1, 0xE7, 0xD0, 0x50,
54110957b409SSimon J. Gerraty 0x1E, 0x0A, 0x92, 0xC6, 0x4C, 0xA0, 0xA3, 0x47,
54120957b409SSimon J. Gerraty 0xC6, 0xE9, 0x07, 0x01, 0xE1, 0x53, 0x72, 0x23,
54130957b409SSimon J. Gerraty 0x9D, 0x4F, 0x82, 0x9F, 0xA1, 0x36, 0x0D, 0x63,
54140957b409SSimon J. Gerraty 0x76, 0x89, 0xFC, 0xF9, 0xF9, 0xDD, 0x0C, 0x8F,
54150957b409SSimon J. Gerraty 0xF7, 0x97, 0x79, 0x92, 0x75, 0x58, 0xE0, 0x7B,
54160957b409SSimon J. Gerraty 0x08, 0x61, 0x38, 0x2D, 0xDA, 0xEF, 0x2D, 0xA5
54170957b409SSimon J. Gerraty };
54180957b409SSimon J. Gerraty static const unsigned char RSA2048_DQ[] = {
54190957b409SSimon J. Gerraty 0x8B, 0x69, 0x56, 0x33, 0x08, 0x00, 0x8F, 0x3D,
54200957b409SSimon J. Gerraty 0xC3, 0x8F, 0x45, 0x52, 0x48, 0xC8, 0xCE, 0x34,
54210957b409SSimon J. Gerraty 0xDC, 0x9F, 0xEB, 0x23, 0xF5, 0xBB, 0x84, 0x62,
54220957b409SSimon J. Gerraty 0xDF, 0xDC, 0xBE, 0xF0, 0x98, 0xBF, 0xCE, 0x9A,
54230957b409SSimon J. Gerraty 0x68, 0x08, 0x4B, 0x2D, 0xA9, 0x83, 0xC9, 0xF7,
54240957b409SSimon J. Gerraty 0x5B, 0xAA, 0xF2, 0xD2, 0x1E, 0xF9, 0x99, 0xB1,
54250957b409SSimon J. Gerraty 0x6A, 0xBC, 0x9A, 0xE8, 0x44, 0x4A, 0x46, 0x9F,
54260957b409SSimon J. Gerraty 0xC6, 0x5A, 0x90, 0x49, 0x0F, 0xDF, 0x3C, 0x0A,
54270957b409SSimon J. Gerraty 0x07, 0x6E, 0xB9, 0x0D, 0x72, 0x90, 0x85, 0xF6,
54280957b409SSimon J. Gerraty 0x0B, 0x41, 0x7D, 0x17, 0x5C, 0x44, 0xEF, 0xA0,
54290957b409SSimon J. Gerraty 0xFC, 0x2C, 0x0A, 0xC5, 0x37, 0xC5, 0xBE, 0xC4,
54300957b409SSimon J. Gerraty 0x6C, 0x2D, 0xBB, 0x63, 0xAB, 0x5B, 0xDB, 0x67,
54310957b409SSimon J. Gerraty 0x9B, 0xAD, 0x90, 0x67, 0x9C, 0xBE, 0xDE, 0xF9,
54320957b409SSimon J. Gerraty 0xE4, 0x9E, 0x22, 0x31, 0x60, 0xED, 0x9E, 0xC7,
54330957b409SSimon J. Gerraty 0xD2, 0x48, 0xC9, 0x02, 0xAE, 0xBF, 0x8D, 0xA2,
54340957b409SSimon J. Gerraty 0xA8, 0xF8, 0x9D, 0x8B, 0xB1, 0x1F, 0xDA, 0xE3
54350957b409SSimon J. Gerraty };
54360957b409SSimon J. Gerraty static const unsigned char RSA2048_IQ[] = {
54370957b409SSimon J. Gerraty 0xB5, 0x48, 0xD4, 0x48, 0x5A, 0x33, 0xCD, 0x13,
54380957b409SSimon J. Gerraty 0xFE, 0xC6, 0xF7, 0x01, 0x0A, 0x3E, 0x40, 0xA3,
54390957b409SSimon J. Gerraty 0x45, 0x94, 0x6F, 0x85, 0xE4, 0x68, 0x66, 0xEC,
54400957b409SSimon J. Gerraty 0x69, 0x6A, 0x3E, 0xE0, 0x62, 0x3F, 0x0C, 0xEF,
54410957b409SSimon J. Gerraty 0x21, 0xCC, 0xDA, 0xAD, 0x75, 0x98, 0x12, 0xCA,
54420957b409SSimon J. Gerraty 0x9E, 0x31, 0xDD, 0x95, 0x0D, 0xBD, 0x55, 0xEB,
54430957b409SSimon J. Gerraty 0x92, 0xF7, 0x9E, 0xBD, 0xFC, 0x28, 0x35, 0x96,
54440957b409SSimon J. Gerraty 0x31, 0xDC, 0x53, 0x80, 0xA3, 0x57, 0x89, 0x3C,
54450957b409SSimon J. Gerraty 0x4A, 0xEC, 0x40, 0x75, 0x13, 0xAC, 0x4F, 0x36,
54460957b409SSimon J. Gerraty 0x3A, 0x86, 0x9A, 0xA6, 0x58, 0xC9, 0xED, 0xCB,
54470957b409SSimon J. Gerraty 0xD6, 0xBB, 0xB2, 0xD9, 0xAA, 0x04, 0xC4, 0xE8,
54480957b409SSimon J. Gerraty 0x47, 0x3E, 0xBD, 0x14, 0x9B, 0x8F, 0x61, 0x70,
54490957b409SSimon J. Gerraty 0x69, 0x66, 0x23, 0x62, 0x18, 0xE3, 0x52, 0x98,
54500957b409SSimon J. Gerraty 0xE3, 0x22, 0xE9, 0x6F, 0xDA, 0x28, 0x68, 0x08,
54510957b409SSimon J. Gerraty 0xB8, 0xB9, 0x8B, 0x97, 0x8B, 0x77, 0x3F, 0xCA,
54520957b409SSimon J. Gerraty 0x9D, 0x9D, 0xBE, 0xD5, 0x2D, 0x3E, 0xC2, 0x11
54530957b409SSimon J. Gerraty };
54540957b409SSimon J. Gerraty
54550957b409SSimon J. Gerraty static const br_rsa_public_key RSA2048_PK = {
54560957b409SSimon J. Gerraty (void *)RSA2048_N, sizeof RSA2048_N,
54570957b409SSimon J. Gerraty (void *)RSA2048_E, sizeof RSA2048_E
54580957b409SSimon J. Gerraty };
54590957b409SSimon J. Gerraty
54600957b409SSimon J. Gerraty static const br_rsa_private_key RSA2048_SK = {
54610957b409SSimon J. Gerraty 2048,
54620957b409SSimon J. Gerraty (void *)RSA2048_P, sizeof RSA2048_P,
54630957b409SSimon J. Gerraty (void *)RSA2048_Q, sizeof RSA2048_Q,
54640957b409SSimon J. Gerraty (void *)RSA2048_DP, sizeof RSA2048_DP,
54650957b409SSimon J. Gerraty (void *)RSA2048_DQ, sizeof RSA2048_DQ,
54660957b409SSimon J. Gerraty (void *)RSA2048_IQ, sizeof RSA2048_IQ
54670957b409SSimon J. Gerraty };
54680957b409SSimon J. Gerraty
54690957b409SSimon J. Gerraty /*
54700957b409SSimon J. Gerraty * A 4096-bit RSA key, generated with OpenSSL.
54710957b409SSimon J. Gerraty */
54720957b409SSimon J. Gerraty static const unsigned char RSA4096_N[] = {
54730957b409SSimon J. Gerraty 0xAA, 0x17, 0x71, 0xBC, 0x92, 0x3E, 0xB5, 0xBD,
54740957b409SSimon J. Gerraty 0x3E, 0x64, 0xCF, 0x03, 0x9B, 0x24, 0x65, 0x33,
54750957b409SSimon J. Gerraty 0x5F, 0xB4, 0x47, 0x89, 0xE5, 0x63, 0xE4, 0xA0,
54760957b409SSimon J. Gerraty 0x5A, 0x51, 0x95, 0x07, 0x73, 0xEE, 0x00, 0xF6,
54770957b409SSimon J. Gerraty 0x3E, 0x31, 0x0E, 0xDA, 0x15, 0xC3, 0xAA, 0x21,
54780957b409SSimon J. Gerraty 0x6A, 0xCD, 0xFF, 0x46, 0x6B, 0xDF, 0x0A, 0x7F,
54790957b409SSimon J. Gerraty 0x8A, 0xC2, 0x25, 0x19, 0x47, 0x44, 0xD8, 0x52,
54800957b409SSimon J. Gerraty 0xC1, 0x56, 0x25, 0x6A, 0xE0, 0xD2, 0x61, 0x11,
54810957b409SSimon J. Gerraty 0x2C, 0xF7, 0x73, 0x9F, 0x5F, 0x74, 0xAA, 0xDD,
54820957b409SSimon J. Gerraty 0xDE, 0xAF, 0x81, 0xF6, 0x0C, 0x1A, 0x3A, 0xF9,
54830957b409SSimon J. Gerraty 0xC5, 0x47, 0x82, 0x75, 0x1D, 0x41, 0xF0, 0xB2,
54840957b409SSimon J. Gerraty 0xFD, 0xBA, 0xE2, 0xA4, 0xA1, 0xB8, 0x32, 0x48,
54850957b409SSimon J. Gerraty 0x06, 0x0D, 0x29, 0x2F, 0x44, 0x14, 0xF5, 0xAC,
54860957b409SSimon J. Gerraty 0x54, 0x83, 0xC4, 0xB6, 0x85, 0x85, 0x9B, 0x1C,
54870957b409SSimon J. Gerraty 0x05, 0x61, 0x28, 0x62, 0x24, 0xA8, 0xF0, 0xE6,
54880957b409SSimon J. Gerraty 0x80, 0xA7, 0x91, 0xE8, 0xC7, 0x8E, 0x52, 0x17,
54890957b409SSimon J. Gerraty 0xBE, 0xAF, 0xC6, 0x0A, 0xA3, 0xFB, 0xD1, 0x04,
54900957b409SSimon J. Gerraty 0x15, 0x3B, 0x14, 0x35, 0xA5, 0x41, 0xF5, 0x30,
54910957b409SSimon J. Gerraty 0xFE, 0xEF, 0x53, 0xA7, 0x89, 0x91, 0x78, 0x30,
54920957b409SSimon J. Gerraty 0xBE, 0x3A, 0xB1, 0x4B, 0x2E, 0x4A, 0x0E, 0x25,
54930957b409SSimon J. Gerraty 0x1D, 0xCF, 0x51, 0x54, 0x52, 0xF1, 0x88, 0x85,
54940957b409SSimon J. Gerraty 0x36, 0x23, 0xDE, 0xBA, 0x66, 0x25, 0x60, 0x8D,
54950957b409SSimon J. Gerraty 0x45, 0xD7, 0xD8, 0x10, 0x41, 0x64, 0xC7, 0x4B,
54960957b409SSimon J. Gerraty 0xCE, 0x72, 0x13, 0xD7, 0x20, 0xF8, 0x2A, 0x74,
54970957b409SSimon J. Gerraty 0xA5, 0x05, 0xF4, 0x5A, 0x90, 0xF4, 0x9C, 0xE7,
54980957b409SSimon J. Gerraty 0xC9, 0xCF, 0x1E, 0xD5, 0x9C, 0xAC, 0xE5, 0x00,
54990957b409SSimon J. Gerraty 0x83, 0x73, 0x9F, 0xE7, 0xC6, 0x93, 0xC0, 0x06,
55000957b409SSimon J. Gerraty 0xA7, 0xB8, 0xF8, 0x46, 0x90, 0xC8, 0x78, 0x27,
55010957b409SSimon J. Gerraty 0x2E, 0xCC, 0xC0, 0x2A, 0x20, 0xC5, 0xFC, 0x63,
55020957b409SSimon J. Gerraty 0x22, 0xA1, 0xD6, 0x16, 0xAD, 0x9C, 0xD6, 0xFC,
55030957b409SSimon J. Gerraty 0x7A, 0x6E, 0x9C, 0x98, 0x51, 0xEE, 0x6B, 0x6D,
55040957b409SSimon J. Gerraty 0x8F, 0xEF, 0xCE, 0x7C, 0x5D, 0x16, 0xB0, 0xCE,
55050957b409SSimon J. Gerraty 0x9C, 0xEE, 0x92, 0xCF, 0xB7, 0xEB, 0x41, 0x36,
55060957b409SSimon J. Gerraty 0x3A, 0x6C, 0xF2, 0x0D, 0x26, 0x11, 0x2F, 0x6C,
55070957b409SSimon J. Gerraty 0x27, 0x62, 0xA2, 0xCC, 0x63, 0x53, 0xBD, 0xFC,
55080957b409SSimon J. Gerraty 0x9F, 0xBE, 0x9B, 0xBD, 0xE5, 0xA7, 0xDA, 0xD4,
55090957b409SSimon J. Gerraty 0xF8, 0xED, 0x5E, 0x59, 0x2D, 0xAC, 0xCD, 0x13,
55100957b409SSimon J. Gerraty 0xEB, 0xE5, 0x9E, 0x39, 0x82, 0x8B, 0xFD, 0xA8,
55110957b409SSimon J. Gerraty 0xFB, 0xCB, 0x86, 0x27, 0xC7, 0x4B, 0x4C, 0xD0,
55120957b409SSimon J. Gerraty 0xBA, 0x12, 0xD0, 0x76, 0x1A, 0xDB, 0x30, 0xC5,
55130957b409SSimon J. Gerraty 0xB3, 0x2C, 0x4C, 0xC5, 0x32, 0x03, 0x05, 0x67,
55140957b409SSimon J. Gerraty 0x8D, 0xD0, 0x14, 0x37, 0x59, 0x2B, 0xE3, 0x1C,
55150957b409SSimon J. Gerraty 0x25, 0x3E, 0xA5, 0xE4, 0xF1, 0x0D, 0x34, 0xBB,
55160957b409SSimon J. Gerraty 0xD5, 0xF6, 0x76, 0x45, 0x5B, 0x0F, 0x1E, 0x07,
55170957b409SSimon J. Gerraty 0x0A, 0xBA, 0x9D, 0x71, 0x87, 0xDE, 0x45, 0x50,
55180957b409SSimon J. Gerraty 0xE5, 0x0F, 0x32, 0xBB, 0x5C, 0x32, 0x2D, 0x40,
55190957b409SSimon J. Gerraty 0xCD, 0x19, 0x95, 0x4E, 0xC5, 0x54, 0x3A, 0x9A,
55200957b409SSimon J. Gerraty 0x46, 0x9B, 0x85, 0xFE, 0x53, 0xB7, 0xD8, 0x65,
55210957b409SSimon J. Gerraty 0x6D, 0x68, 0x0C, 0xBB, 0xE3, 0x3D, 0x8E, 0x64,
55220957b409SSimon J. Gerraty 0xBE, 0x27, 0x15, 0xAB, 0x12, 0x20, 0xD9, 0x84,
55230957b409SSimon J. Gerraty 0xF5, 0x02, 0xE4, 0xBB, 0xDD, 0xAB, 0x59, 0x51,
55240957b409SSimon J. Gerraty 0xF4, 0xE1, 0x79, 0xBE, 0xB8, 0xA3, 0x8E, 0xD1,
55250957b409SSimon J. Gerraty 0x1C, 0xB0, 0xFA, 0x48, 0x76, 0xC2, 0x9D, 0x7A,
55260957b409SSimon J. Gerraty 0x01, 0xA5, 0xAF, 0x8C, 0xBA, 0xAA, 0x4C, 0x06,
55270957b409SSimon J. Gerraty 0x2B, 0x0A, 0x62, 0xF0, 0x79, 0x5B, 0x42, 0xFC,
55280957b409SSimon J. Gerraty 0xF8, 0xBF, 0xD4, 0xDD, 0x62, 0x32, 0xE3, 0xCE,
55290957b409SSimon J. Gerraty 0xF1, 0x2C, 0xE6, 0xED, 0xA8, 0x8A, 0x41, 0xA3,
55300957b409SSimon J. Gerraty 0xC1, 0x1E, 0x07, 0xB6, 0x43, 0x10, 0x80, 0xB7,
55310957b409SSimon J. Gerraty 0xF3, 0xD0, 0x53, 0x2A, 0x9A, 0x98, 0xA7, 0x4F,
55320957b409SSimon J. Gerraty 0x9E, 0xA3, 0x3E, 0x1B, 0xDA, 0x93, 0x15, 0xF2,
55330957b409SSimon J. Gerraty 0xF4, 0x20, 0xA5, 0xA8, 0x4F, 0x8A, 0xBA, 0xED,
55340957b409SSimon J. Gerraty 0xB1, 0x17, 0x6C, 0x0F, 0xD9, 0x8F, 0x38, 0x11,
55350957b409SSimon J. Gerraty 0xF3, 0xD9, 0x5E, 0x88, 0xA1, 0xA1, 0x82, 0x8B,
55360957b409SSimon J. Gerraty 0x30, 0xD7, 0xC6, 0xCE, 0x4E, 0x30, 0x55, 0x57
55370957b409SSimon J. Gerraty };
55380957b409SSimon J. Gerraty static const unsigned char RSA4096_E[] = {
55390957b409SSimon J. Gerraty 0x01, 0x00, 0x01
55400957b409SSimon J. Gerraty };
55410957b409SSimon J. Gerraty static const unsigned char RSA4096_P[] = {
55420957b409SSimon J. Gerraty 0xD3, 0x7A, 0x22, 0xD8, 0x9B, 0xBF, 0x42, 0xB4,
55430957b409SSimon J. Gerraty 0x53, 0x04, 0x10, 0x6A, 0x84, 0xFD, 0x7C, 0x1D,
55440957b409SSimon J. Gerraty 0xF6, 0xF4, 0x10, 0x65, 0xAA, 0xE5, 0xE1, 0x4E,
55450957b409SSimon J. Gerraty 0xB4, 0x37, 0xF7, 0xAC, 0xF7, 0xD3, 0xB2, 0x3B,
55460957b409SSimon J. Gerraty 0xFE, 0xE7, 0x63, 0x42, 0xE9, 0xF0, 0x3C, 0xE0,
55470957b409SSimon J. Gerraty 0x42, 0xB4, 0xBB, 0x09, 0xD0, 0xB2, 0x7C, 0x70,
55480957b409SSimon J. Gerraty 0xA4, 0x11, 0x97, 0x90, 0x01, 0xD0, 0x0E, 0x7B,
55490957b409SSimon J. Gerraty 0xAF, 0x7D, 0x30, 0x4E, 0x6B, 0x3A, 0xCC, 0x50,
55500957b409SSimon J. Gerraty 0x4E, 0xAF, 0x2F, 0xC3, 0xC2, 0x4F, 0x7E, 0xC5,
55510957b409SSimon J. Gerraty 0xB3, 0x76, 0x33, 0xFB, 0xA7, 0xB1, 0x96, 0xA5,
55520957b409SSimon J. Gerraty 0x46, 0x41, 0xC6, 0xDA, 0x5A, 0xFD, 0x17, 0x0A,
55530957b409SSimon J. Gerraty 0x6A, 0x86, 0x54, 0x83, 0xE1, 0x57, 0xE7, 0xAF,
55540957b409SSimon J. Gerraty 0x8C, 0x42, 0xE5, 0x39, 0xF2, 0xC7, 0xFC, 0x4A,
55550957b409SSimon J. Gerraty 0x3D, 0x3C, 0x94, 0x89, 0xC2, 0xC6, 0x2D, 0x0A,
55560957b409SSimon J. Gerraty 0x5F, 0xD0, 0x21, 0x23, 0x5C, 0xC9, 0xC8, 0x44,
55570957b409SSimon J. Gerraty 0x8A, 0x96, 0x72, 0x4D, 0x96, 0xC6, 0x17, 0x0C,
55580957b409SSimon J. Gerraty 0x36, 0x43, 0x7F, 0xD8, 0xA0, 0x7A, 0x31, 0x7E,
55590957b409SSimon J. Gerraty 0xCE, 0x13, 0xE3, 0x13, 0x2E, 0xE0, 0x91, 0xC2,
55600957b409SSimon J. Gerraty 0x61, 0x13, 0x16, 0x8D, 0x99, 0xCB, 0xA9, 0x2C,
55610957b409SSimon J. Gerraty 0x4D, 0x9D, 0xDD, 0x1D, 0x03, 0xE7, 0xA7, 0x50,
55620957b409SSimon J. Gerraty 0xF4, 0x16, 0x43, 0xB1, 0x7F, 0x99, 0x61, 0x3F,
55630957b409SSimon J. Gerraty 0xA5, 0x59, 0x91, 0x16, 0xC3, 0x06, 0x63, 0x59,
55640957b409SSimon J. Gerraty 0xE9, 0xDA, 0xB5, 0x06, 0x2E, 0x0C, 0xD9, 0xAB,
55650957b409SSimon J. Gerraty 0x93, 0x89, 0x12, 0x82, 0xFB, 0x90, 0xD9, 0x30,
55660957b409SSimon J. Gerraty 0x60, 0xF7, 0x35, 0x2D, 0x18, 0x78, 0xEB, 0x2B,
55670957b409SSimon J. Gerraty 0xA1, 0x06, 0x67, 0x37, 0xDE, 0x72, 0x20, 0xD2,
55680957b409SSimon J. Gerraty 0x80, 0xE5, 0x2C, 0xD7, 0x5E, 0xC7, 0x67, 0x2D,
55690957b409SSimon J. Gerraty 0x40, 0xE7, 0x7A, 0xCF, 0x4A, 0x69, 0x9D, 0xA7,
55700957b409SSimon J. Gerraty 0x90, 0x9F, 0x3B, 0xDF, 0x07, 0x97, 0x64, 0x69,
55710957b409SSimon J. Gerraty 0x06, 0x4F, 0xBA, 0xF4, 0xE5, 0xBD, 0x71, 0x60,
55720957b409SSimon J. Gerraty 0x36, 0xB7, 0xA3, 0xDE, 0x76, 0xC5, 0x38, 0xD7,
55730957b409SSimon J. Gerraty 0x1D, 0x9A, 0xFC, 0x36, 0x3D, 0x3B, 0xDC, 0xCF
55740957b409SSimon J. Gerraty };
55750957b409SSimon J. Gerraty static const unsigned char RSA4096_Q[] = {
55760957b409SSimon J. Gerraty 0xCD, 0xE6, 0xC6, 0xA6, 0x42, 0x4C, 0x45, 0x65,
55770957b409SSimon J. Gerraty 0x8B, 0x85, 0x76, 0xFC, 0x21, 0xB6, 0x57, 0x79,
55780957b409SSimon J. Gerraty 0x3C, 0xE4, 0xE3, 0x85, 0x55, 0x2F, 0x59, 0xD3,
55790957b409SSimon J. Gerraty 0x3F, 0x74, 0xAF, 0x9F, 0x11, 0x04, 0x10, 0x8B,
55800957b409SSimon J. Gerraty 0xF9, 0x5F, 0x4D, 0x25, 0xEE, 0x20, 0xF9, 0x69,
55810957b409SSimon J. Gerraty 0x3B, 0x02, 0xB6, 0x43, 0x0D, 0x0C, 0xED, 0x30,
55820957b409SSimon J. Gerraty 0x31, 0x57, 0xE7, 0x9A, 0x57, 0x24, 0x6B, 0x4A,
55830957b409SSimon J. Gerraty 0x5E, 0xA2, 0xBF, 0xD4, 0x47, 0x7D, 0xFA, 0x78,
55840957b409SSimon J. Gerraty 0x51, 0x86, 0x80, 0x68, 0x85, 0x7C, 0x7B, 0x08,
55850957b409SSimon J. Gerraty 0x4A, 0x35, 0x24, 0x4F, 0x8B, 0x24, 0x49, 0xF8,
55860957b409SSimon J. Gerraty 0x16, 0x06, 0x9C, 0x57, 0x4E, 0x94, 0x4C, 0xBD,
55870957b409SSimon J. Gerraty 0x6E, 0x53, 0x52, 0xC9, 0xC1, 0x64, 0x43, 0x22,
55880957b409SSimon J. Gerraty 0x1E, 0xDD, 0xEB, 0xAC, 0x90, 0x58, 0xCA, 0xBA,
55890957b409SSimon J. Gerraty 0x9C, 0xAC, 0xCF, 0xDD, 0x08, 0x6D, 0xB7, 0x31,
55900957b409SSimon J. Gerraty 0xDB, 0x0D, 0x83, 0xE6, 0x50, 0xA6, 0x69, 0xB1,
55910957b409SSimon J. Gerraty 0x1C, 0x68, 0x92, 0xB4, 0xB5, 0x76, 0xDE, 0xBD,
55920957b409SSimon J. Gerraty 0x4F, 0xA5, 0x30, 0xED, 0x23, 0xFF, 0xE5, 0x80,
55930957b409SSimon J. Gerraty 0x21, 0xAB, 0xED, 0xE6, 0xDC, 0x32, 0x3D, 0xF7,
55940957b409SSimon J. Gerraty 0x45, 0xB8, 0x19, 0x3D, 0x8E, 0x15, 0x7C, 0xE5,
55950957b409SSimon J. Gerraty 0x0D, 0xC8, 0x9B, 0x7D, 0x1F, 0x7C, 0x14, 0x14,
55960957b409SSimon J. Gerraty 0x41, 0x09, 0xA7, 0xEB, 0xFB, 0xD9, 0x5F, 0x9A,
55970957b409SSimon J. Gerraty 0x94, 0xB6, 0xD5, 0xA0, 0x2C, 0xAF, 0xB5, 0xEF,
55980957b409SSimon J. Gerraty 0x5C, 0x5A, 0x8E, 0x34, 0xA1, 0x8F, 0xEB, 0x38,
55990957b409SSimon J. Gerraty 0x0F, 0x31, 0x6E, 0x45, 0x21, 0x7A, 0xAA, 0xAF,
56000957b409SSimon J. Gerraty 0x6C, 0xB1, 0x8E, 0xB2, 0xB9, 0xD4, 0x1E, 0xEF,
56010957b409SSimon J. Gerraty 0x66, 0xD8, 0x4E, 0x3D, 0xF2, 0x0C, 0xF1, 0xBA,
56020957b409SSimon J. Gerraty 0xFB, 0xA9, 0x27, 0xD2, 0x45, 0x54, 0x83, 0x4B,
56030957b409SSimon J. Gerraty 0x10, 0xC4, 0x9A, 0x32, 0x9C, 0xC7, 0x9A, 0xCF,
56040957b409SSimon J. Gerraty 0x4E, 0xBF, 0x07, 0xFC, 0x27, 0xB7, 0x96, 0x1D,
56050957b409SSimon J. Gerraty 0xDE, 0x9D, 0xE4, 0x84, 0x68, 0x00, 0x9A, 0x9F,
56060957b409SSimon J. Gerraty 0x3D, 0xE6, 0xC7, 0x26, 0x11, 0x48, 0x79, 0xFA,
56070957b409SSimon J. Gerraty 0x09, 0x76, 0xC8, 0x25, 0x3A, 0xE4, 0x70, 0xF9
56080957b409SSimon J. Gerraty };
56090957b409SSimon J. Gerraty static const unsigned char RSA4096_DP[] = {
56100957b409SSimon J. Gerraty 0x5C, 0xE3, 0x3E, 0xBF, 0x09, 0xD9, 0xFE, 0x80,
56110957b409SSimon J. Gerraty 0x9A, 0x1E, 0x24, 0xDF, 0xC4, 0xBE, 0x5A, 0x70,
56120957b409SSimon J. Gerraty 0x06, 0xF2, 0xB8, 0xE9, 0x0F, 0x21, 0x9D, 0xCF,
56130957b409SSimon J. Gerraty 0x26, 0x15, 0x97, 0x32, 0x60, 0x40, 0x99, 0xFF,
56140957b409SSimon J. Gerraty 0x04, 0x3D, 0xBA, 0x39, 0xBF, 0xEB, 0x87, 0xB1,
56150957b409SSimon J. Gerraty 0xB1, 0x5B, 0x14, 0xF4, 0x80, 0xB8, 0x85, 0x34,
56160957b409SSimon J. Gerraty 0x2C, 0xBC, 0x95, 0x67, 0xE9, 0x83, 0xEB, 0x78,
56170957b409SSimon J. Gerraty 0xA4, 0x62, 0x46, 0x7F, 0x8B, 0x55, 0xEE, 0x3C,
56180957b409SSimon J. Gerraty 0x2F, 0xF3, 0x7E, 0xF5, 0x6B, 0x39, 0xE3, 0xA3,
56190957b409SSimon J. Gerraty 0x0E, 0xEA, 0x92, 0x76, 0xAC, 0xF7, 0xB2, 0x05,
56200957b409SSimon J. Gerraty 0xB2, 0x50, 0x5D, 0xF9, 0xB7, 0x11, 0x87, 0xB7,
56210957b409SSimon J. Gerraty 0x49, 0x86, 0xEB, 0x44, 0x6A, 0x0C, 0x64, 0x75,
56220957b409SSimon J. Gerraty 0x95, 0x14, 0x24, 0xFF, 0x49, 0x06, 0x52, 0x68,
56230957b409SSimon J. Gerraty 0x81, 0x71, 0x44, 0x85, 0x26, 0x0A, 0x49, 0xEA,
56240957b409SSimon J. Gerraty 0x4E, 0x9F, 0x6A, 0x8E, 0xCF, 0xC8, 0xC9, 0xB0,
56250957b409SSimon J. Gerraty 0x61, 0x77, 0x27, 0x89, 0xB0, 0xFA, 0x1D, 0x51,
56260957b409SSimon J. Gerraty 0x7D, 0xDC, 0x34, 0x21, 0x80, 0x8B, 0x6B, 0x86,
56270957b409SSimon J. Gerraty 0x19, 0x1A, 0x5F, 0x19, 0x23, 0xF3, 0xFB, 0xD1,
56280957b409SSimon J. Gerraty 0xF7, 0x35, 0x9D, 0x28, 0x61, 0x2F, 0x35, 0x85,
56290957b409SSimon J. Gerraty 0x82, 0x2A, 0x1E, 0xDF, 0x09, 0xC2, 0x0C, 0x99,
56300957b409SSimon J. Gerraty 0xE0, 0x3C, 0x8F, 0x4B, 0x3D, 0x92, 0xAF, 0x46,
56310957b409SSimon J. Gerraty 0x77, 0x68, 0x59, 0xF4, 0x37, 0x81, 0x6C, 0xCE,
56320957b409SSimon J. Gerraty 0x27, 0x8B, 0xAB, 0x0B, 0xA5, 0xDA, 0x7B, 0x19,
56330957b409SSimon J. Gerraty 0x83, 0xDA, 0x27, 0x49, 0x65, 0x1A, 0x00, 0x6B,
56340957b409SSimon J. Gerraty 0xE1, 0x8B, 0x73, 0xCD, 0xF4, 0xFB, 0xD7, 0xBF,
56350957b409SSimon J. Gerraty 0xF8, 0x20, 0x89, 0xE1, 0xDE, 0x51, 0x1E, 0xDD,
56360957b409SSimon J. Gerraty 0x97, 0x44, 0x12, 0x68, 0x1E, 0xF7, 0x52, 0xF8,
56370957b409SSimon J. Gerraty 0x6B, 0x93, 0xC1, 0x3B, 0x9F, 0xA1, 0xB8, 0x5F,
56380957b409SSimon J. Gerraty 0xCB, 0x84, 0x45, 0x95, 0xF7, 0x0D, 0xA6, 0x4B,
56390957b409SSimon J. Gerraty 0x03, 0x3C, 0xAE, 0x0F, 0xB7, 0x81, 0x78, 0x75,
56400957b409SSimon J. Gerraty 0x1C, 0x53, 0x99, 0x24, 0xB3, 0xE2, 0x78, 0xCE,
56410957b409SSimon J. Gerraty 0xF3, 0xF0, 0x09, 0x6C, 0x01, 0x85, 0x73, 0xBD
56420957b409SSimon J. Gerraty };
56430957b409SSimon J. Gerraty static const unsigned char RSA4096_DQ[] = {
56440957b409SSimon J. Gerraty 0xCD, 0x88, 0xAC, 0x8B, 0x92, 0x6A, 0xA8, 0x6B,
56450957b409SSimon J. Gerraty 0x71, 0x16, 0xCD, 0x6B, 0x6A, 0x0B, 0xA6, 0xCD,
56460957b409SSimon J. Gerraty 0xF3, 0x27, 0x58, 0xA6, 0xE4, 0x1D, 0xDC, 0x40,
56470957b409SSimon J. Gerraty 0xAF, 0x7B, 0x3F, 0x44, 0x3D, 0xAC, 0x1D, 0x08,
56480957b409SSimon J. Gerraty 0x5C, 0xE9, 0xF1, 0x0D, 0x07, 0xE4, 0x0A, 0x94,
56490957b409SSimon J. Gerraty 0x2C, 0xBF, 0xCC, 0x48, 0xAA, 0x62, 0x58, 0xF2,
56500957b409SSimon J. Gerraty 0x5E, 0x8F, 0x2D, 0x36, 0x37, 0xFE, 0xB6, 0xCB,
56510957b409SSimon J. Gerraty 0x0A, 0x24, 0xD3, 0xF0, 0x87, 0x5D, 0x0E, 0x05,
56520957b409SSimon J. Gerraty 0xC4, 0xFB, 0xCA, 0x7A, 0x8B, 0xA5, 0x72, 0xFB,
56530957b409SSimon J. Gerraty 0x17, 0x78, 0x6C, 0xC2, 0xAA, 0x56, 0x93, 0x2F,
56540957b409SSimon J. Gerraty 0xFE, 0x6C, 0xA2, 0xEB, 0xD4, 0x18, 0xDD, 0x71,
56550957b409SSimon J. Gerraty 0xCB, 0x0B, 0x89, 0xFC, 0xB3, 0xFB, 0xED, 0xB7,
56560957b409SSimon J. Gerraty 0xC5, 0xB0, 0x29, 0x6D, 0x9C, 0xB9, 0xC5, 0xC4,
56570957b409SSimon J. Gerraty 0xFA, 0x58, 0xD7, 0x36, 0x01, 0x0F, 0xE4, 0x6A,
56580957b409SSimon J. Gerraty 0xF4, 0x0B, 0x4D, 0xBB, 0x3E, 0x8E, 0x9F, 0xBA,
56590957b409SSimon J. Gerraty 0x98, 0x6D, 0x1A, 0xE5, 0x20, 0xAF, 0x84, 0x30,
56600957b409SSimon J. Gerraty 0xDD, 0xAC, 0x3C, 0x66, 0xBC, 0x24, 0xD9, 0x67,
56610957b409SSimon J. Gerraty 0x4A, 0x35, 0x61, 0xC9, 0xAD, 0xCC, 0xC9, 0x66,
56620957b409SSimon J. Gerraty 0x68, 0x46, 0x19, 0x8C, 0x04, 0xA5, 0x16, 0x83,
56630957b409SSimon J. Gerraty 0x5F, 0x7A, 0xFD, 0x1B, 0xAD, 0xAE, 0x22, 0x2D,
56640957b409SSimon J. Gerraty 0x05, 0xAF, 0x29, 0xDC, 0xBB, 0x0E, 0x86, 0x0C,
56650957b409SSimon J. Gerraty 0xBC, 0x9E, 0xB6, 0x28, 0xA9, 0xF2, 0xCC, 0x5E,
56660957b409SSimon J. Gerraty 0x1F, 0x86, 0x95, 0xA5, 0x9C, 0x11, 0x19, 0xF0,
56670957b409SSimon J. Gerraty 0x5F, 0xDA, 0x2C, 0x04, 0xFE, 0x22, 0x80, 0xF7,
56680957b409SSimon J. Gerraty 0x94, 0x3C, 0xBA, 0x01, 0x56, 0xD6, 0x93, 0xFA,
56690957b409SSimon J. Gerraty 0xCE, 0x62, 0xE5, 0xD7, 0x98, 0x23, 0xAB, 0xB9,
56700957b409SSimon J. Gerraty 0xC7, 0x35, 0x57, 0xF6, 0xE2, 0x16, 0x36, 0xE9,
56710957b409SSimon J. Gerraty 0x5B, 0xD7, 0xA5, 0x45, 0x18, 0x93, 0x77, 0xC9,
56720957b409SSimon J. Gerraty 0xB1, 0x05, 0xA8, 0x66, 0xE1, 0x0E, 0xB5, 0xDF,
56730957b409SSimon J. Gerraty 0x23, 0x35, 0xE1, 0xC2, 0xFA, 0x3E, 0x80, 0x1A,
56740957b409SSimon J. Gerraty 0xAD, 0xA4, 0x0C, 0xEF, 0xC7, 0x18, 0xDE, 0x09,
56750957b409SSimon J. Gerraty 0xE6, 0x20, 0x98, 0x31, 0xF1, 0xD3, 0xCF, 0xA1
56760957b409SSimon J. Gerraty };
56770957b409SSimon J. Gerraty static const unsigned char RSA4096_IQ[] = {
56780957b409SSimon J. Gerraty 0x76, 0xD7, 0x75, 0xDF, 0xA3, 0x0C, 0x9D, 0x64,
56790957b409SSimon J. Gerraty 0x6E, 0x00, 0x82, 0x2E, 0x5C, 0x5E, 0x43, 0xC4,
56800957b409SSimon J. Gerraty 0xD2, 0x28, 0xB0, 0xB1, 0xA8, 0xD8, 0x26, 0x91,
56810957b409SSimon J. Gerraty 0xA0, 0xF5, 0xC8, 0x69, 0xFF, 0x24, 0x33, 0xAB,
56820957b409SSimon J. Gerraty 0x67, 0xC7, 0xA3, 0xAE, 0xBB, 0x17, 0x27, 0x5B,
56830957b409SSimon J. Gerraty 0x5A, 0xCD, 0x67, 0xA3, 0x70, 0x91, 0x9E, 0xD5,
56840957b409SSimon J. Gerraty 0xF1, 0x97, 0x00, 0x0A, 0x30, 0x64, 0x3D, 0x9B,
56850957b409SSimon J. Gerraty 0xBF, 0xB5, 0x8C, 0xAC, 0xC7, 0x20, 0x0A, 0xD2,
56860957b409SSimon J. Gerraty 0x76, 0x36, 0x36, 0x5D, 0xE4, 0xAC, 0x5D, 0xBC,
56870957b409SSimon J. Gerraty 0x44, 0x32, 0xB0, 0x76, 0x33, 0x40, 0xDD, 0x29,
56880957b409SSimon J. Gerraty 0x22, 0xE0, 0xFF, 0x55, 0x4C, 0xCE, 0x3F, 0x43,
56890957b409SSimon J. Gerraty 0x34, 0x95, 0x94, 0x7C, 0x22, 0x0D, 0xAB, 0x20,
56900957b409SSimon J. Gerraty 0x38, 0x70, 0xC3, 0x4A, 0x19, 0xCF, 0x81, 0xCE,
56910957b409SSimon J. Gerraty 0x79, 0x28, 0x6C, 0xC2, 0xA3, 0xB3, 0x48, 0x20,
56920957b409SSimon J. Gerraty 0x2D, 0x3E, 0x74, 0x45, 0x2C, 0xAA, 0x9F, 0xA5,
56930957b409SSimon J. Gerraty 0xC2, 0xE3, 0x2D, 0x41, 0x95, 0xBD, 0x78, 0xAB,
56940957b409SSimon J. Gerraty 0x6A, 0xA8, 0x7A, 0x45, 0x52, 0xE2, 0x66, 0xE7,
56950957b409SSimon J. Gerraty 0x6C, 0x38, 0x03, 0xA5, 0xDA, 0xAD, 0x94, 0x3C,
56960957b409SSimon J. Gerraty 0x6A, 0xA1, 0xA2, 0xD5, 0xCD, 0xDE, 0x05, 0xCC,
56970957b409SSimon J. Gerraty 0x6E, 0x3D, 0x8A, 0xF6, 0x9A, 0xA5, 0x0F, 0xA9,
56980957b409SSimon J. Gerraty 0x18, 0xC4, 0xF9, 0x9C, 0x2F, 0xB3, 0xF1, 0x30,
56990957b409SSimon J. Gerraty 0x38, 0x60, 0x69, 0x09, 0x67, 0x2C, 0xE9, 0x42,
57000957b409SSimon J. Gerraty 0x68, 0x3C, 0x70, 0x32, 0x1A, 0x44, 0x32, 0x02,
57010957b409SSimon J. Gerraty 0x82, 0x9F, 0x60, 0xE8, 0xA4, 0x42, 0x74, 0xA2,
57020957b409SSimon J. Gerraty 0xA2, 0x5A, 0x99, 0xDC, 0xC8, 0xCA, 0x15, 0x4D,
57030957b409SSimon J. Gerraty 0xFF, 0xF1, 0x8A, 0x23, 0xD8, 0xD3, 0xB1, 0x9A,
57040957b409SSimon J. Gerraty 0xB4, 0x0B, 0xBB, 0xE8, 0x38, 0x74, 0x0C, 0x52,
57050957b409SSimon J. Gerraty 0xC7, 0x8B, 0x63, 0x4C, 0xEA, 0x7D, 0x5F, 0x58,
57060957b409SSimon J. Gerraty 0x34, 0x53, 0x3E, 0x23, 0x10, 0xBB, 0x60, 0x6B,
57070957b409SSimon J. Gerraty 0x52, 0x9D, 0x89, 0x9F, 0xF0, 0x5F, 0xCE, 0xB3,
57080957b409SSimon J. Gerraty 0x9C, 0x0E, 0x75, 0x0F, 0x87, 0xF6, 0x66, 0xA5,
57090957b409SSimon J. Gerraty 0x4C, 0x94, 0x84, 0xFE, 0x94, 0xB9, 0x04, 0xB7
57100957b409SSimon J. Gerraty };
57110957b409SSimon J. Gerraty
57120957b409SSimon J. Gerraty static const br_rsa_public_key RSA4096_PK = {
57130957b409SSimon J. Gerraty (void *)RSA4096_N, sizeof RSA4096_N,
57140957b409SSimon J. Gerraty (void *)RSA4096_E, sizeof RSA4096_E
57150957b409SSimon J. Gerraty };
57160957b409SSimon J. Gerraty
57170957b409SSimon J. Gerraty static const br_rsa_private_key RSA4096_SK = {
57180957b409SSimon J. Gerraty 4096,
57190957b409SSimon J. Gerraty (void *)RSA4096_P, sizeof RSA4096_P,
57200957b409SSimon J. Gerraty (void *)RSA4096_Q, sizeof RSA4096_Q,
57210957b409SSimon J. Gerraty (void *)RSA4096_DP, sizeof RSA4096_DP,
57220957b409SSimon J. Gerraty (void *)RSA4096_DQ, sizeof RSA4096_DQ,
57230957b409SSimon J. Gerraty (void *)RSA4096_IQ, sizeof RSA4096_IQ
57240957b409SSimon J. Gerraty };
57250957b409SSimon J. Gerraty
57260957b409SSimon J. Gerraty static void
test_RSA_core(const char * name,br_rsa_public fpub,br_rsa_private fpriv)57270957b409SSimon J. Gerraty test_RSA_core(const char *name, br_rsa_public fpub, br_rsa_private fpriv)
57280957b409SSimon J. Gerraty {
57290957b409SSimon J. Gerraty unsigned char t1[512], t2[512], t3[512];
57300957b409SSimon J. Gerraty size_t len;
57310957b409SSimon J. Gerraty
57320957b409SSimon J. Gerraty printf("Test %s: ", name);
57330957b409SSimon J. Gerraty fflush(stdout);
57340957b409SSimon J. Gerraty
57350957b409SSimon J. Gerraty /*
57360957b409SSimon J. Gerraty * A KAT test (computed with OpenSSL).
57370957b409SSimon J. Gerraty */
57380957b409SSimon J. Gerraty len = hextobin(t1, "45A3DC6A106BCD3BD0E48FB579643AA3FF801E5903E80AA9B43A695A8E7F454E93FA208B69995FF7A6D5617C2FEB8E546375A664977A48931842AAE796B5A0D64393DCA35F3490FC157F5BD83B9D58C2F7926E6AE648A2BD96CAB8FCCD3D35BB11424AD47D973FF6D69CA774841AEC45DFAE99CCF79893E7047FDE6CB00AA76D");
57390957b409SSimon J. Gerraty hextobin(t2, "0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003021300906052B0E03021A05000414A94A8FE5CCB19BA61C4C0873D391E987982FBBD3");
57400957b409SSimon J. Gerraty memcpy(t3, t1, len);
57410957b409SSimon J. Gerraty if (!fpub(t3, len, &RSA_PK)) {
57420957b409SSimon J. Gerraty fprintf(stderr, "RSA public operation failed (1)\n");
57430957b409SSimon J. Gerraty exit(EXIT_FAILURE);
57440957b409SSimon J. Gerraty }
57450957b409SSimon J. Gerraty check_equals("KAT RSA pub", t2, t3, len);
57460957b409SSimon J. Gerraty if (!fpriv(t3, &RSA_SK)) {
57470957b409SSimon J. Gerraty fprintf(stderr, "RSA private operation failed (1)\n");
57480957b409SSimon J. Gerraty exit(EXIT_FAILURE);
57490957b409SSimon J. Gerraty }
57500957b409SSimon J. Gerraty check_equals("KAT RSA priv (1)", t1, t3, len);
57510957b409SSimon J. Gerraty
57520957b409SSimon J. Gerraty /*
57530957b409SSimon J. Gerraty * Another KAT test, with a (fake) hash value slightly different
57540957b409SSimon J. Gerraty * (last byte is 0xD9 instead of 0xD3).
57550957b409SSimon J. Gerraty */
57560957b409SSimon J. Gerraty len = hextobin(t1, "32C2DB8B2C73BBCA9960CB3F11FEDEE7B699359EF2EEC3A632E56B7FF3DE2F371E5179BAB03F17E0BB20D2891ACAB679F95DA9B43A01DAAD192FADD25D8ACCF1498EC80F5BBCAC88EA59D60E3BC9D3CE27743981DE42385FFFFF04DD2D716E1A46C04A28ECAF6CD200DAB81083A830D61538D69BB39A183107BD50302AA6BC28");
57570957b409SSimon J. Gerraty hextobin(t2, "0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003021300906052B0E03021A05000414A94A8FE5CCB19BA61C4C0873D391E987982FBBD9");
57580957b409SSimon J. Gerraty memcpy(t3, t1, len);
57590957b409SSimon J. Gerraty if (!fpub(t3, len, &RSA_PK)) {
57600957b409SSimon J. Gerraty fprintf(stderr, "RSA public operation failed (2)\n");
57610957b409SSimon J. Gerraty exit(EXIT_FAILURE);
57620957b409SSimon J. Gerraty }
57630957b409SSimon J. Gerraty check_equals("KAT RSA pub", t2, t3, len);
57640957b409SSimon J. Gerraty if (!fpriv(t3, &RSA_SK)) {
57650957b409SSimon J. Gerraty fprintf(stderr, "RSA private operation failed (2)\n");
57660957b409SSimon J. Gerraty exit(EXIT_FAILURE);
57670957b409SSimon J. Gerraty }
57680957b409SSimon J. Gerraty check_equals("KAT RSA priv (2)", t1, t3, len);
57690957b409SSimon J. Gerraty
57700957b409SSimon J. Gerraty /*
57710957b409SSimon J. Gerraty * Third KAT vector is invalid, because the encrypted value is
57720957b409SSimon J. Gerraty * out of range: instead of x, value is x+n (where n is the
57730957b409SSimon J. Gerraty * modulus). Mathematically, this still works, but implementations
57740957b409SSimon J. Gerraty * are supposed to reject such cases.
57750957b409SSimon J. Gerraty */
57760957b409SSimon J. Gerraty len = hextobin(t1, "F27781B9B3B358583A24F9BA6B34EE98B67A5AE8D8D4FA567BA773EB6B85EF88848680640A1E2F5FD117876E5FB928B64C6EFC7E03632A3F4C941E15657C0C705F3BB8D0B03A0249143674DB1FE6E5406D690BF2DA76EA7FF3AC6FCE12C7801252FAD52D332BE4AB41F9F8CF1728CDF98AB8E8C20E0C350E4F707A6402C01E0B");
57770957b409SSimon J. Gerraty hextobin(t2, "BFB6A62E873F9C8DA0C42E7B59360FB0FFE12549E5E636B048C2086B77A7C051663506A959DF177F15F6B4E544EE723C531152C9C9614F923364704307F13F7F15ACF0C1547D55C029DC9ECCE41D117245F4D270FC34B21FF3AD6AEFE58633281540902F547F79F3461F44D33CCB2D094231ADCC76BE25511B4513BB70491DBC");
57780957b409SSimon J. Gerraty memcpy(t3, t1, len);
57790957b409SSimon J. Gerraty if (fpub(t3, len, &RSA_PK)) {
57800957b409SSimon J. Gerraty size_t u;
57810957b409SSimon J. Gerraty fprintf(stderr, "RSA public operation should have failed"
57820957b409SSimon J. Gerraty " (value out of range)\n");
57830957b409SSimon J. Gerraty fprintf(stderr, "x = ");
57840957b409SSimon J. Gerraty for (u = 0; u < len; u ++) {
57850957b409SSimon J. Gerraty fprintf(stderr, "%02X", t3[u]);
57860957b409SSimon J. Gerraty }
57870957b409SSimon J. Gerraty fprintf(stderr, "\n");
57880957b409SSimon J. Gerraty exit(EXIT_FAILURE);
57890957b409SSimon J. Gerraty }
57900957b409SSimon J. Gerraty memcpy(t3, t2, len);
57910957b409SSimon J. Gerraty if (fpriv(t3, &RSA_SK)) {
57920957b409SSimon J. Gerraty size_t u;
57930957b409SSimon J. Gerraty fprintf(stderr, "RSA private operation should have failed"
57940957b409SSimon J. Gerraty " (value out of range)\n");
57950957b409SSimon J. Gerraty fprintf(stderr, "x = ");
57960957b409SSimon J. Gerraty for (u = 0; u < len; u ++) {
57970957b409SSimon J. Gerraty fprintf(stderr, "%02X", t3[u]);
57980957b409SSimon J. Gerraty }
57990957b409SSimon J. Gerraty fprintf(stderr, "\n");
58000957b409SSimon J. Gerraty exit(EXIT_FAILURE);
58010957b409SSimon J. Gerraty }
58020957b409SSimon J. Gerraty
58030957b409SSimon J. Gerraty /*
58040957b409SSimon J. Gerraty * RSA-2048 test vector.
58050957b409SSimon J. Gerraty */
58060957b409SSimon J. Gerraty len = hextobin(t1, "B188ED4EF173A30AED3889926E3CF1CE03FE3BAA7AB122B119A8CD529062F235A7B321008FB898894A624B3E6C8C5374950E78FAC86651345FE2ABA0791968284F23B0D794F8DCDDA924518854822CB7FF2AA9F205AACD909BB5EA541534CC00DBC2EF7727B9FE1BAFE6241B931E8BD01E13632E5AF9E94F4A335772B61F24D6F6AA642AEABB173E36F546CB02B19A1E5D4E27E3EB67F2E986E9F084D4BD266543800B1DC96088A05DFA9AFA595398E9A766D41DD8DA4F74F36C9D74867F0BF7BFA8622EE43C79DA0CEAC14B5D39DE074BDB89D84145BC19D8B2D0EA74DBF2DC29E907BF7C7506A2603CD8BC25EFE955D0125EDB2685EF158B020C9FC539242A");
58070957b409SSimon J. Gerraty hextobin(t2, "0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003031300D060960864801650304020105000420A5A0A792A09438811584A68E240C6C89F1FB1C53C0C86E270B942635F4F6B24A");
58080957b409SSimon J. Gerraty memcpy(t3, t1, len);
58090957b409SSimon J. Gerraty if (!fpub(t3, len, &RSA2048_PK)) {
58100957b409SSimon J. Gerraty fprintf(stderr, "RSA public operation failed (2048)\n");
58110957b409SSimon J. Gerraty exit(EXIT_FAILURE);
58120957b409SSimon J. Gerraty }
58130957b409SSimon J. Gerraty check_equals("KAT RSA pub", t2, t3, len);
58140957b409SSimon J. Gerraty if (!fpriv(t3, &RSA2048_SK)) {
58150957b409SSimon J. Gerraty fprintf(stderr, "RSA private operation failed (2048)\n");
58160957b409SSimon J. Gerraty exit(EXIT_FAILURE);
58170957b409SSimon J. Gerraty }
58180957b409SSimon J. Gerraty check_equals("KAT RSA priv (2048)", t1, t3, len);
58190957b409SSimon J. Gerraty
58200957b409SSimon J. Gerraty /*
58210957b409SSimon J. Gerraty * RSA-4096 test vector.
58220957b409SSimon J. Gerraty */
58230957b409SSimon J. Gerraty len = hextobin(t1, "7D35B6B4D85252D08A2658C0B04126CC617B0E56B2A782A5FA2722AD05BD49538111682C12DA2C5FA1B9C30FB1AB8DA2C6A49EB4226A4D32290CF091FBB22EC499C7B18192C230B29F957DAF551F1EAD1917BA9E03D757100BD1F96B829708A6188A3927436113BB21E175D436BBB7A90E20162203FFB8F675313DFB21EFDA3EA0C7CC9B605AE7FB47E2DD2A9C4D5F124D7DE1B690AF9ADFEDC6055E0F9D2C9A891FB2501F3055D6DA7E94D51672BA1E86AEB782E4B020F70E0DF5399262909FC5B4770B987F2826EF2099A15F3CD5A0D6FE82E0C85FBA2C53C77305F534A7B0C7EA0D5244E37F1C1318EEF7079995F0642E4AB80EB0ED60DB4955FB652ED372DAC787581054A827C37A25C7B4DE7AE7EF3D099D47D6682ADF02BCC4DE04DDF2920F7124CF5B4955705E4BDB97A0BF341B584797878B4D3795134A9469FB391E4E4988F0AA451027CBC2ED6121FC23B26BF593E3C51DEDD53B62E23050D5B41CA34204679916A87AF1B17873A0867924D0C303942ADA478B769487FCEF861D4B20DCEE6942CCB84184833CDB258167258631C796BC1977D001354E2EE168ABE3B45FC969EA7F22B8E133C57A10FBB25ED19694E89C399CF7723B3C0DF0CC9F57A8ED0959EFC392FB31B8ADAEA969E2DEE8282CB245E5677368F00CCE4BA52C07C16BE7F9889D57191D5B2FE552D72B3415C64C09EE622457766EC809344A1EFE");
58240957b409SSimon J. Gerraty hextobin(t2, "0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003031300D0609608648016503040201050004205B60DD5AD5B3C62E0DA25FD0D8CB26325E1CE32CC9ED234B288235BCCF6ED2C8");
58250957b409SSimon J. Gerraty memcpy(t3, t1, len);
58260957b409SSimon J. Gerraty if (!fpub(t3, len, &RSA4096_PK)) {
58270957b409SSimon J. Gerraty fprintf(stderr, "RSA public operation failed (4096)\n");
58280957b409SSimon J. Gerraty exit(EXIT_FAILURE);
58290957b409SSimon J. Gerraty }
58300957b409SSimon J. Gerraty check_equals("KAT RSA pub", t2, t3, len);
58310957b409SSimon J. Gerraty if (!fpriv(t3, &RSA4096_SK)) {
58320957b409SSimon J. Gerraty fprintf(stderr, "RSA private operation failed (4096)\n");
58330957b409SSimon J. Gerraty exit(EXIT_FAILURE);
58340957b409SSimon J. Gerraty }
58350957b409SSimon J. Gerraty check_equals("KAT RSA priv (4096)", t1, t3, len);
58360957b409SSimon J. Gerraty
58370957b409SSimon J. Gerraty printf("done.\n");
58380957b409SSimon J. Gerraty fflush(stdout);
58390957b409SSimon J. Gerraty }
58400957b409SSimon J. Gerraty
58410957b409SSimon J. Gerraty static const unsigned char SHA1_OID[] = {
58420957b409SSimon J. Gerraty 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A
58430957b409SSimon J. Gerraty };
58440957b409SSimon J. Gerraty
58450957b409SSimon J. Gerraty static void
test_RSA_sign(const char * name,br_rsa_private fpriv,br_rsa_pkcs1_sign fsign,br_rsa_pkcs1_vrfy fvrfy)58460957b409SSimon J. Gerraty test_RSA_sign(const char *name, br_rsa_private fpriv,
58470957b409SSimon J. Gerraty br_rsa_pkcs1_sign fsign, br_rsa_pkcs1_vrfy fvrfy)
58480957b409SSimon J. Gerraty {
58490957b409SSimon J. Gerraty unsigned char t1[128], t2[128];
58500957b409SSimon J. Gerraty unsigned char hv[20], tmp[20];
58510957b409SSimon J. Gerraty unsigned char rsa_n[128], rsa_e[3], rsa_p[64], rsa_q[64];
58520957b409SSimon J. Gerraty unsigned char rsa_dp[64], rsa_dq[64], rsa_iq[64];
58530957b409SSimon J. Gerraty br_rsa_public_key rsa_pk;
58540957b409SSimon J. Gerraty br_rsa_private_key rsa_sk;
58550957b409SSimon J. Gerraty unsigned char hv2[64], tmp2[64], sig[128];
58560957b409SSimon J. Gerraty br_sha1_context hc;
58570957b409SSimon J. Gerraty size_t u;
58580957b409SSimon J. Gerraty
58590957b409SSimon J. Gerraty printf("Test %s: ", name);
58600957b409SSimon J. Gerraty fflush(stdout);
58610957b409SSimon J. Gerraty
58620957b409SSimon J. Gerraty /*
58630957b409SSimon J. Gerraty * Verify the KAT test (computed with OpenSSL).
58640957b409SSimon J. Gerraty */
58650957b409SSimon J. Gerraty hextobin(t1, "45A3DC6A106BCD3BD0E48FB579643AA3FF801E5903E80AA9B43A695A8E7F454E93FA208B69995FF7A6D5617C2FEB8E546375A664977A48931842AAE796B5A0D64393DCA35F3490FC157F5BD83B9D58C2F7926E6AE648A2BD96CAB8FCCD3D35BB11424AD47D973FF6D69CA774841AEC45DFAE99CCF79893E7047FDE6CB00AA76D");
58660957b409SSimon J. Gerraty br_sha1_init(&hc);
58670957b409SSimon J. Gerraty br_sha1_update(&hc, "test", 4);
58680957b409SSimon J. Gerraty br_sha1_out(&hc, hv);
58690957b409SSimon J. Gerraty if (!fvrfy(t1, sizeof t1, SHA1_OID, sizeof tmp, &RSA_PK, tmp)) {
58700957b409SSimon J. Gerraty fprintf(stderr, "Signature verification failed\n");
58710957b409SSimon J. Gerraty exit(EXIT_FAILURE);
58720957b409SSimon J. Gerraty }
58730957b409SSimon J. Gerraty check_equals("Extracted hash value", hv, tmp, sizeof tmp);
58740957b409SSimon J. Gerraty
58750957b409SSimon J. Gerraty /*
58760957b409SSimon J. Gerraty * Regenerate the signature. This should yield the same value as
58770957b409SSimon J. Gerraty * the KAT test, since PKCS#1 v1.5 signatures are deterministic
58780957b409SSimon J. Gerraty * (except the usual detail about hash function parameter
58790957b409SSimon J. Gerraty * encoding, but OpenSSL uses the same convention as BearSSL).
58800957b409SSimon J. Gerraty */
58810957b409SSimon J. Gerraty if (!fsign(SHA1_OID, hv, 20, &RSA_SK, t2)) {
58820957b409SSimon J. Gerraty fprintf(stderr, "Signature generation failed\n");
58830957b409SSimon J. Gerraty exit(EXIT_FAILURE);
58840957b409SSimon J. Gerraty }
58850957b409SSimon J. Gerraty check_equals("Regenerated signature", t1, t2, sizeof t1);
58860957b409SSimon J. Gerraty
58870957b409SSimon J. Gerraty /*
58880957b409SSimon J. Gerraty * Use the raw private core to generate fake signatures, where
58890957b409SSimon J. Gerraty * one byte of the padded hash value is altered. They should all be
58900957b409SSimon J. Gerraty * rejected.
58910957b409SSimon J. Gerraty */
58920957b409SSimon J. Gerraty hextobin(t2, "0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003021300906052B0E03021A05000414A94A8FE5CCB19BA61C4C0873D391E987982FBBD3");
58930957b409SSimon J. Gerraty for (u = 0; u < (sizeof t2) - 20; u ++) {
58940957b409SSimon J. Gerraty memcpy(t1, t2, sizeof t2);
58950957b409SSimon J. Gerraty t1[u] ^= 0x01;
58960957b409SSimon J. Gerraty if (!fpriv(t1, &RSA_SK)) {
58970957b409SSimon J. Gerraty fprintf(stderr, "RSA private key operation failed\n");
58980957b409SSimon J. Gerraty exit(EXIT_FAILURE);
58990957b409SSimon J. Gerraty }
59000957b409SSimon J. Gerraty if (fvrfy(t1, sizeof t1, SHA1_OID, sizeof tmp, &RSA_PK, tmp)) {
59010957b409SSimon J. Gerraty fprintf(stderr,
59020957b409SSimon J. Gerraty "Signature verification should have failed\n");
59030957b409SSimon J. Gerraty exit(EXIT_FAILURE);
59040957b409SSimon J. Gerraty }
59050957b409SSimon J. Gerraty printf(".");
59060957b409SSimon J. Gerraty fflush(stdout);
59070957b409SSimon J. Gerraty }
59080957b409SSimon J. Gerraty
59090957b409SSimon J. Gerraty /*
59100957b409SSimon J. Gerraty * Another KAT test, which historically showed a bug.
59110957b409SSimon J. Gerraty */
59120957b409SSimon J. Gerraty rsa_pk.n = rsa_n;
59130957b409SSimon J. Gerraty rsa_pk.nlen = hextobin(rsa_n, "E65DAEF196D22C300B3DAE1CE5157EDF821BB6038E419D8D363A8B2DA84A1321042330E6F87A8BD8FE6BA1D2A17031955ED2315CC5FD2397197E238A5E0D2D0AFD25717E814EC4D2BBA887327A3C5B3A450FD8D547BDFCBB0F73B997CA13DD5E7572C4D5BAA764A349BAB2F868ACF4574AE2C7AEC94B77D2EE00A21B6CB175BB");
59140957b409SSimon J. Gerraty rsa_pk.e = rsa_e;
59150957b409SSimon J. Gerraty rsa_pk.elen = hextobin(rsa_e, "010001");
59160957b409SSimon J. Gerraty
59170957b409SSimon J. Gerraty rsa_sk.n_bitlen = 1024;
59180957b409SSimon J. Gerraty rsa_sk.p = rsa_p;
59190957b409SSimon J. Gerraty rsa_sk.plen = hextobin(rsa_p, "FF58513DBA4F3F42DFDFD3E6AFB6BD62DE27E06BA3C9D9F9B542CB21228C2AAE67936514161C8FDC1A248A50195CAF22ADC50DA89BFED1B9EEFBB37304241357");
59200957b409SSimon J. Gerraty rsa_sk.q = rsa_q;
59210957b409SSimon J. Gerraty rsa_sk.qlen = hextobin(rsa_q, "E6F4F66818B7442297DDEB45E9B3D438E5B57BB5EF86EFF2462AD6B9C10F383517CDD2E7E36EAD4BEBCC57CFE8AA985F7E7B38B96D30FFBE9ED9FE21B1CFB63D");
59220957b409SSimon J. Gerraty rsa_sk.dp = rsa_dp;
59230957b409SSimon J. Gerraty rsa_sk.dplen = hextobin(rsa_dp, "6F89517B682D83919F9EF2BDBA955526A1A9C382E139A3A84AC01160B8E9871F458901C7035D988D6931FAE4C01F57350BB89E9DBEFE50F829E6F25CD43B39E3");
59240957b409SSimon J. Gerraty rsa_sk.dq = rsa_dq;
59250957b409SSimon J. Gerraty rsa_sk.dqlen = hextobin(rsa_dq, "409E08D2D7176F58BE64B88EB6F4394C31F8B4C412600E821A5FA1F416AFCB6A0F5EE6C33A3E9CFDC0DB4B3640427A9F3D23FC9AE491F0FBC435F98433DB8981");
59260957b409SSimon J. Gerraty rsa_sk.iq = rsa_iq;
59270957b409SSimon J. Gerraty rsa_sk.iqlen = hextobin(rsa_iq, "CF333D6AD66D02B4D11C8C23CA669D14D71803ADC3943BE03B1E48F52F385BCFDDFD0F85AD02A984E504FC6612549D4E7867B7D09DD13196BFC3FAA4B57393A9");
59280957b409SSimon J. Gerraty hextobin(sig, "CFB84D161E6DB130736FC6212EBE575571AF341CEF5757C19952A5364C90E3C47549E520E26253DAE70F645F31FA8B5DA9AE282741D3CA4B1CC365B7BD75D6D61D4CFD9AD9EDD17D23E0BA7D9775138DBABC7FF2A57587FE1EA1B51E8F3C68326E26FF89D8CF92BDD4C787D04857DFC3266E6B33B92AA08809929C72642F35C2");
59290957b409SSimon J. Gerraty
59300957b409SSimon J. Gerraty hextobin(hv2, "F66C62B38E1CC69C378C0E16574AE5C6443FDFA3E85C6205C00B3231CAA3074EC1481BDC22AB575E6CF3CCD9EDA6B39F83923FC0E6475C799D257545F77233B4");
59310957b409SSimon J. Gerraty if (!fsign(BR_HASH_OID_SHA512, hv2, 64, &rsa_sk, t2)) {
59320957b409SSimon J. Gerraty fprintf(stderr, "Signature generation failed (2)\n");
59330957b409SSimon J. Gerraty exit(EXIT_FAILURE);
59340957b409SSimon J. Gerraty }
59350957b409SSimon J. Gerraty check_equals("Regenerated signature (2)", t2, sig, sizeof t2);
59360957b409SSimon J. Gerraty if (!fvrfy(t2, sizeof t2, BR_HASH_OID_SHA512,
59370957b409SSimon J. Gerraty sizeof tmp2, &rsa_pk, tmp2))
59380957b409SSimon J. Gerraty {
59390957b409SSimon J. Gerraty fprintf(stderr, "Signature verification failed (2)\n");
59400957b409SSimon J. Gerraty exit(EXIT_FAILURE);
59410957b409SSimon J. Gerraty }
59420957b409SSimon J. Gerraty check_equals("Extracted hash value (2)", hv2, tmp2, sizeof tmp2);
59430957b409SSimon J. Gerraty
59440957b409SSimon J. Gerraty printf(" done.\n");
59450957b409SSimon J. Gerraty fflush(stdout);
59460957b409SSimon J. Gerraty }
59470957b409SSimon J. Gerraty
59480957b409SSimon J. Gerraty /*
59490957b409SSimon J. Gerraty * Fake RNG that returns exactly the provided bytes.
59500957b409SSimon J. Gerraty */
59510957b409SSimon J. Gerraty typedef struct {
59520957b409SSimon J. Gerraty const br_prng_class *vtable;
59530957b409SSimon J. Gerraty unsigned char buf[128];
59540957b409SSimon J. Gerraty size_t ptr, len;
59550957b409SSimon J. Gerraty } rng_fake_ctx;
59560957b409SSimon J. Gerraty
59570957b409SSimon J. Gerraty static void rng_fake_init(rng_fake_ctx *cc,
59580957b409SSimon J. Gerraty const void *params, const void *seed, size_t len);
59590957b409SSimon J. Gerraty static void rng_fake_generate(rng_fake_ctx *cc, void *dst, size_t len);
59600957b409SSimon J. Gerraty static void rng_fake_update(rng_fake_ctx *cc, const void *src, size_t len);
59610957b409SSimon J. Gerraty
59620957b409SSimon J. Gerraty static const br_prng_class rng_fake_vtable = {
59630957b409SSimon J. Gerraty sizeof(rng_fake_ctx),
59640957b409SSimon J. Gerraty (void (*)(const br_prng_class **,
59650957b409SSimon J. Gerraty const void *, const void *, size_t))&rng_fake_init,
59660957b409SSimon J. Gerraty (void (*)(const br_prng_class **,
59670957b409SSimon J. Gerraty void *, size_t))&rng_fake_generate,
59680957b409SSimon J. Gerraty (void (*)(const br_prng_class **,
59690957b409SSimon J. Gerraty const void *, size_t))&rng_fake_update
59700957b409SSimon J. Gerraty };
59710957b409SSimon J. Gerraty
59720957b409SSimon J. Gerraty static void
rng_fake_init(rng_fake_ctx * cc,const void * params,const void * seed,size_t len)59730957b409SSimon J. Gerraty rng_fake_init(rng_fake_ctx *cc, const void *params,
59740957b409SSimon J. Gerraty const void *seed, size_t len)
59750957b409SSimon J. Gerraty {
59760957b409SSimon J. Gerraty (void)params;
59770957b409SSimon J. Gerraty if (len > sizeof cc->buf) {
59780957b409SSimon J. Gerraty fprintf(stderr, "seed is too large (%lu bytes)\n",
59790957b409SSimon J. Gerraty (unsigned long)len);
59800957b409SSimon J. Gerraty exit(EXIT_FAILURE);
59810957b409SSimon J. Gerraty }
59820957b409SSimon J. Gerraty cc->vtable = &rng_fake_vtable;
59830957b409SSimon J. Gerraty memcpy(cc->buf, seed, len);
59840957b409SSimon J. Gerraty cc->ptr = 0;
59850957b409SSimon J. Gerraty cc->len = len;
59860957b409SSimon J. Gerraty }
59870957b409SSimon J. Gerraty
59880957b409SSimon J. Gerraty static void
rng_fake_generate(rng_fake_ctx * cc,void * dst,size_t len)59890957b409SSimon J. Gerraty rng_fake_generate(rng_fake_ctx *cc, void *dst, size_t len)
59900957b409SSimon J. Gerraty {
59910957b409SSimon J. Gerraty if (len > (cc->len - cc->ptr)) {
59920957b409SSimon J. Gerraty fprintf(stderr, "asking for more data than expected\n");
59930957b409SSimon J. Gerraty exit(EXIT_FAILURE);
59940957b409SSimon J. Gerraty }
59950957b409SSimon J. Gerraty memcpy(dst, cc->buf + cc->ptr, len);
59960957b409SSimon J. Gerraty cc->ptr += len;
59970957b409SSimon J. Gerraty }
59980957b409SSimon J. Gerraty
59990957b409SSimon J. Gerraty static void
rng_fake_update(rng_fake_ctx * cc,const void * src,size_t len)60000957b409SSimon J. Gerraty rng_fake_update(rng_fake_ctx *cc, const void *src, size_t len)
60010957b409SSimon J. Gerraty {
60020957b409SSimon J. Gerraty (void)cc;
60030957b409SSimon J. Gerraty (void)src;
60040957b409SSimon J. Gerraty (void)len;
60050957b409SSimon J. Gerraty fprintf(stderr, "unexpected update\n");
60060957b409SSimon J. Gerraty exit(EXIT_FAILURE);
60070957b409SSimon J. Gerraty }
60080957b409SSimon J. Gerraty
60090957b409SSimon J. Gerraty /*
60100957b409SSimon J. Gerraty * Test vectors from pkcs-1v2-1d2-vec.zip (originally from ftp.rsa.com).
60110957b409SSimon J. Gerraty * There are ten RSA keys, and for each RSA key, there are 6 messages,
60120957b409SSimon J. Gerraty * each with an explicit salt.
60130957b409SSimon J. Gerraty *
60140957b409SSimon J. Gerraty * Field order:
60150957b409SSimon J. Gerraty * modulus (n)
60160957b409SSimon J. Gerraty * public exponent (e)
60170957b409SSimon J. Gerraty * first factor (p)
60180957b409SSimon J. Gerraty * second factor (q)
60190957b409SSimon J. Gerraty * first private exponent (dp)
60200957b409SSimon J. Gerraty * second private exponent (dq)
60210957b409SSimon J. Gerraty * CRT coefficient (iq)
60220957b409SSimon J. Gerraty * message 1
60230957b409SSimon J. Gerraty * salt 1 (20-byte random value)
60240957b409SSimon J. Gerraty * signature 1
60250957b409SSimon J. Gerraty * message 2
60260957b409SSimon J. Gerraty * salt 2 (20-byte random value)
60270957b409SSimon J. Gerraty * signature 2
60280957b409SSimon J. Gerraty * ...
60290957b409SSimon J. Gerraty * message 6
60300957b409SSimon J. Gerraty * salt 6 (20-byte random value)
60310957b409SSimon J. Gerraty * signature 6
60320957b409SSimon J. Gerraty *
60330957b409SSimon J. Gerraty * This pattern is repeated for all keys. The array stops on a NULL.
60340957b409SSimon J. Gerraty */
60350957b409SSimon J. Gerraty static const char *KAT_RSA_PSS[] = {
60360957b409SSimon J. Gerraty
60370957b409SSimon J. Gerraty /* 1024-bit key */
60380957b409SSimon J. Gerraty "a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137",
60390957b409SSimon J. Gerraty "010001",
60400957b409SSimon J. Gerraty "33a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325",
60410957b409SSimon J. Gerraty "e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443",
60420957b409SSimon J. Gerraty "b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd",
60430957b409SSimon J. Gerraty "28fa13938655be1f8a159cbaca5a72ea190c30089e19cd274a556f36c4f6e19f554b34c077790427bbdd8dd3ede2448328f385d81b30e8e43b2fffa027861979",
60440957b409SSimon J. Gerraty "1a8b38f398fa712049898d7fb79ee0a77668791299cdfa09efc0e507acb21ed74301ef5bfd48be455eaeb6e1678255827580a8e4e8e14151d1510a82a3f2e729",
60450957b409SSimon J. Gerraty "27156aba4126d24a81f3a528cbfb27f56886f840a9f6e86e17a44b94fe9319584b8e22fdde1e5a2e3bd8aa5ba8d8584194eb2190acf832b847f13a3d24a79f4d",
60460957b409SSimon J. Gerraty
60470957b409SSimon J. Gerraty "cdc87da223d786df3b45e0bbbc721326d1ee2af806cc315475cc6f0d9c66e1b62371d45ce2392e1ac92844c310102f156a0d8d52c1f4c40ba3aa65095786cb769757a6563ba958fed0bcc984e8b517a3d5f515b23b8a41e74aa867693f90dfb061a6e86dfaaee64472c00e5f20945729cbebe77f06ce78e08f4098fba41f9d6193c0317e8b60d4b6084acb42d29e3808a3bc372d85e331170fcbf7cc72d0b71c296648b3a4d10f416295d0807aa625cab2744fd9ea8fd223c42537029828bd16be02546f130fd2e33b936d2676e08aed1b73318b750a0167d0",
60480957b409SSimon J. Gerraty "dee959c7e06411361420ff80185ed57f3e6776af",
60490957b409SSimon J. Gerraty "9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c",
60500957b409SSimon J. Gerraty
60510957b409SSimon J. Gerraty "851384cdfe819c22ed6c4ccb30daeb5cf059bc8e1166b7e3530c4c233e2b5f8f71a1cca582d43ecc72b1bca16dfc7013226b9e",
60520957b409SSimon J. Gerraty "ef2869fa40c346cb183dab3d7bffc98fd56df42d",
60530957b409SSimon J. Gerraty "3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843",
60540957b409SSimon J. Gerraty
60550957b409SSimon J. Gerraty "a4b159941761c40c6a82f2b80d1b94f5aa2654fd17e12d588864679b54cd04ef8bd03012be8dc37f4b83af7963faff0dfa225477437c48017ff2be8191cf3955fc07356eab3f322f7f620e21d254e5db4324279fe067e0910e2e81ca2cab31c745e67a54058eb50d993cdb9ed0b4d029c06d21a94ca661c3ce27fae1d6cb20f4564d66ce4767583d0e5f060215b59017be85ea848939127bd8c9c4d47b51056c031cf336f17c9980f3b8f5b9b6878e8b797aa43b882684333e17893fe9caa6aa299f7ed1a18ee2c54864b7b2b99b72618fb02574d139ef50f019c9eef416971338e7d470",
60560957b409SSimon J. Gerraty "710b9c4747d800d4de87f12afdce6df18107cc77",
60570957b409SSimon J. Gerraty "666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1",
60580957b409SSimon J. Gerraty
60590957b409SSimon J. Gerraty "bc656747fa9eafb3f0",
60600957b409SSimon J. Gerraty "056f00985de14d8ef5cea9e82f8c27bef720335e",
60610957b409SSimon J. Gerraty "4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87",
60620957b409SSimon J. Gerraty
60630957b409SSimon J. Gerraty "b45581547e5427770c768e8b82b75564e0ea4e9c32594d6bff706544de0a8776c7a80b4576550eee1b2acabc7e8b7d3ef7bb5b03e462c11047eadd00629ae575480ac1470fe046f13a2bf5af17921dc4b0aa8b02bee6334911651d7f8525d10f32b51d33be520d3ddf5a709955a3dfe78283b9e0ab54046d150c177f037fdccc5be4ea5f68b5e5a38c9d7edcccc4975f455a6909b4",
60640957b409SSimon J. Gerraty "80e70ff86a08de3ec60972b39b4fbfdcea67ae8e",
60650957b409SSimon J. Gerraty "1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad",
60660957b409SSimon J. Gerraty
60670957b409SSimon J. Gerraty "10aae9a0ab0b595d0841207b700d48d75faedde3b775cd6b4cc88ae06e4694ec74ba18f8520d4f5ea69cbbe7cc2beba43efdc10215ac4eb32dc302a1f53dc6c4352267e7936cfebf7c8d67035784a3909fa859c7b7b59b8e39c5c2349f1886b705a30267d402f7486ab4f58cad5d69adb17ab8cd0ce1caf5025af4ae24b1fb8794c6070cc09a51e2f9911311e3877d0044c71c57a993395008806b723ac38373d395481818528c1e7053739282053529510e935cd0fa77b8fa53cc2d474bd4fb3cc5c672d6ffdc90a00f9848712c4bcfe46c60573659b11e6457e861f0f604b6138d144f8ce4e2da73",
60680957b409SSimon J. Gerraty "a8ab69dd801f0074c2a1fc60649836c616d99681",
60690957b409SSimon J. Gerraty "2a34f6125e1f6b0bf971e84fbd41c632be8f2c2ace7de8b6926e31ff93e9af987fbc06e51e9be14f5198f91f3f953bd67da60a9df59764c3dc0fe08e1cbef0b75f868d10ad3fba749fef59fb6dac46a0d6e504369331586f58e4628f39aa278982543bc0eeb537dc61958019b394fb273f215858a0a01ac4d650b955c67f4c58",
60700957b409SSimon J. Gerraty
60710957b409SSimon J. Gerraty /* 1025-bit key */
60720957b409SSimon J. Gerraty "01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9",
60730957b409SSimon J. Gerraty "010001",
60740957b409SSimon J. Gerraty "027d147e4673057377fd1ea201565772176a7dc38358d376045685a2e787c23c15576bc16b9f444402d6bfc5d98a3e88ea13ef67c353eca0c0ddba9255bd7b8bb50a644afdfd1dd51695b252d22e7318d1b6687a1c10ff75545f3db0fe602d5f2b7f294e3601eab7b9d1cecd767f64692e3e536ca2846cb0c2dd486a39fa75b1",
60750957b409SSimon J. Gerraty "016601e926a0f8c9e26ecab769ea65a5e7c52cc9e080ef519457c644da6891c5a104d3ea7955929a22e7c68a7af9fcad777c3ccc2b9e3d3650bce404399b7e59d1",
60760957b409SSimon J. Gerraty "014eafa1d4d0184da7e31f877d1281ddda625664869e8379e67ad3b75eae74a580e9827abd6eb7a002cb5411f5266797768fb8e95ae40e3e8a01f35ff89e56c079",
60770957b409SSimon J. Gerraty "e247cce504939b8f0a36090de200938755e2444b29539a7da7a902f6056835c0db7b52559497cfe2c61a8086d0213c472c78851800b171f6401de2e9c2756f31",
60780957b409SSimon J. Gerraty "b12fba757855e586e46f64c38a70c68b3f548d93d787b399999d4c8f0bbd2581c21e19ed0018a6d5d3df86424b3abcad40199d31495b61309f27c1bf55d487c1",
60790957b409SSimon J. Gerraty "564b1e1fa003bda91e89090425aac05b91da9ee25061e7628d5f51304a84992fdc33762bd378a59f030a334d532bd0dae8f298ea9ed844636ad5fb8cbdc03cad",
60800957b409SSimon J. Gerraty
60810957b409SSimon J. Gerraty "daba032066263faedb659848115278a52c44faa3a76f37515ed336321072c40a9d9b53bc05014078adf520875146aae70ff060226dcb7b1f1fc27e9360",
60820957b409SSimon J. Gerraty "57bf160bcb02bb1dc7280cf0458530b7d2832ff7",
60830957b409SSimon J. Gerraty "014c5ba5338328ccc6e7a90bf1c0ab3fd606ff4796d3c12e4b639ed9136a5fec6c16d8884bdd99cfdc521456b0742b736868cf90de099adb8d5ffd1deff39ba4007ab746cefdb22d7df0e225f54627dc65466131721b90af445363a8358b9f607642f78fab0ab0f43b7168d64bae70d8827848d8ef1e421c5754ddf42c2589b5b3",
60840957b409SSimon J. Gerraty
60850957b409SSimon J. Gerraty "e4f8601a8a6da1be34447c0959c058570c3668cfd51dd5f9ccd6ad4411fe8213486d78a6c49f93efc2ca2288cebc2b9b60bd04b1e220d86e3d4848d709d032d1e8c6a070c6af9a499fcf95354b14ba6127c739de1bb0fd16431e46938aec0cf8ad9eb72e832a7035de9b7807bdc0ed8b68eb0f5ac2216be40ce920c0db0eddd3860ed788efaccaca502d8f2bd6d1a7c1f41ff46f1681c8f1f818e9c4f6d91a0c7803ccc63d76a6544d843e084e363b8acc55aa531733edb5dee5b5196e9f03e8b731b3776428d9e457fe3fbcb3db7274442d785890e9cb0854b6444dace791d7273de1889719338a77fe",
60860957b409SSimon J. Gerraty "7f6dd359e604e60870e898e47b19bf2e5a7b2a90",
60870957b409SSimon J. Gerraty "010991656cca182b7f29d2dbc007e7ae0fec158eb6759cb9c45c5ff87c7635dd46d150882f4de1e9ae65e7f7d9018f6836954a47c0a81a8a6b6f83f2944d6081b1aa7c759b254b2c34b691da67cc0226e20b2f18b42212761dcd4b908a62b371b5918c5742af4b537e296917674fb914194761621cc19a41f6fb953fbcbb649dea",
60880957b409SSimon J. Gerraty
60890957b409SSimon J. Gerraty "52a1d96c8ac39e41e455809801b927a5b445c10d902a0dcd3850d22a66d2bb0703e67d5867114595aabf5a7aeb5a8f87034bbb30e13cfd4817a9be76230023606d0286a3faf8a4d22b728ec518079f9e64526e3a0cc7941aa338c437997c680ccac67c66bfa1",
60900957b409SSimon J. Gerraty "fca862068bce2246724b708a0519da17e648688c",
60910957b409SSimon J. Gerraty "007f0030018f53cdc71f23d03659fde54d4241f758a750b42f185f87578520c30742afd84359b6e6e8d3ed959dc6fe486bedc8e2cf001f63a7abe16256a1b84df0d249fc05d3194ce5f0912742dbbf80dd174f6c51f6bad7f16cf3364eba095a06267dc3793803ac7526aebe0a475d38b8c2247ab51c4898df7047dc6adf52c6c4",
60920957b409SSimon J. Gerraty
60930957b409SSimon J. Gerraty "a7182c83ac18be6570a106aa9d5c4e3dbbd4afaeb0c60c4a23e1969d79ff",
60940957b409SSimon J. Gerraty "8070ef2de945c02387684ba0d33096732235d440",
60950957b409SSimon J. Gerraty "009cd2f4edbe23e12346ae8c76dd9ad3230a62076141f16c152ba18513a48ef6f010e0e37fd3df10a1ec629a0cb5a3b5d2893007298c30936a95903b6ba85555d9ec3673a06108fd62a2fda56d1ce2e85c4db6b24a81ca3b496c36d4fd06eb7c9166d8e94877c42bea622b3bfe9251fdc21d8d5371badad78a488214796335b40b",
60960957b409SSimon J. Gerraty
60970957b409SSimon J. Gerraty "86a83d4a72ee932a4f5630af6579a386b78fe88999e0abd2d49034a4bfc854dd94f1094e2e8cd7a179d19588e4aefc1b1bd25e95e3dd461f",
60980957b409SSimon J. Gerraty "17639a4e88d722c4fca24d079a8b29c32433b0c9",
60990957b409SSimon J. Gerraty "00ec430824931ebd3baa43034dae98ba646b8c36013d1671c3cf1cf8260c374b19f8e1cc8d965012405e7e9bf7378612dfcc85fce12cda11f950bd0ba8876740436c1d2595a64a1b32efcfb74a21c873b3cc33aaf4e3dc3953de67f0674c0453b4fd9f604406d441b816098cb106fe3472bc251f815f59db2e4378a3addc181ecf",
61000957b409SSimon J. Gerraty
61010957b409SSimon J. Gerraty "049f9154d871ac4a7c7ab45325ba7545a1ed08f70525b2667cf1",
61020957b409SSimon J. Gerraty "37810def1055ed922b063df798de5d0aabf886ee",
61030957b409SSimon J. Gerraty "00475b1648f814a8dc0abdc37b5527f543b666bb6e39d30e5b49d3b876dccc58eac14e32a2d55c2616014456ad2f246fc8e3d560da3ddf379a1c0bd200f10221df078c219a151bc8d4ec9d2fc2564467811014ef15d8ea01c2ebbff8c2c8efab38096e55fcbe3285c7aa558851254faffa92c1c72b78758663ef4582843139d7a6",
61040957b409SSimon J. Gerraty
61050957b409SSimon J. Gerraty /* 1026-bit key */
61060957b409SSimon J. Gerraty "02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443",
61070957b409SSimon J. Gerraty "010001",
61080957b409SSimon J. Gerraty "651451733b56de5ac0a689a4aeb6e6894a69014e076c88dd7a667eab3232bbccd2fc44ba2fa9c31db46f21edd1fdb23c5c128a5da5bab91e7f952b67759c7cff705415ac9fa0907c7ca6178f668fb948d869da4cc3b7356f4008dfd5449d32ee02d9a477eb69fc29266e5d9070512375a50fbbcc27e238ad98425f6ebbf88991",
61090957b409SSimon J. Gerraty "01bd36e18ece4b0fdb2e9c9d548bd1a7d6e2c21c6fdc35074a1d05b1c6c8b3d558ea2639c9a9a421680169317252558bd148ad215aac550e2dcf12a82d0ebfe853",
61100957b409SSimon J. Gerraty "01b1b656ad86d8e19d5dc86292b3a192fdf6e0dd37877bad14822fa00190cab265f90d3f02057b6f54d6ecb14491e5adeacebc48bf0ebd2a2ad26d402e54f61651",
61110957b409SSimon J. Gerraty "1f2779fd2e3e5e6bae05539518fba0cd0ead1aa4513a7cba18f1cf10e3f68195693d278a0f0ee72f89f9bc760d80e2f9d0261d516501c6ae39f14a476ce2ccf5",
61120957b409SSimon J. Gerraty "011a0d36794b04a854aab4b2462d439a5046c91d940b2bc6f75b62956fef35a2a6e63c5309817f307bbff9d59e7e331bd363f6d66849b18346adea169f0ae9aec1",
61130957b409SSimon J. Gerraty "0b30f0ecf558752fb3a6ce4ba2b8c675f659eba6c376585a1b39712d038ae3d2b46fcb418ae15d0905da6440e1513a30b9b7d6668fbc5e88e5ab7a175e73ba35",
61140957b409SSimon J. Gerraty
61150957b409SSimon J. Gerraty "594b37333bbb2c84524a87c1a01f75fcec0e3256f108e38dca36d70d0057",
61160957b409SSimon J. Gerraty "f31ad6c8cf89df78ed77feacbcc2f8b0a8e4cfaa",
61170957b409SSimon J. Gerraty "0088b135fb1794b6b96c4a3e678197f8cac52b64b2fe907d6f27de761124964a99a01a882740ecfaed6c01a47464bb05182313c01338a8cd097214cd68ca103bd57d3bc9e816213e61d784f182467abf8a01cf253e99a156eaa8e3e1f90e3c6e4e3aa2d83ed0345b89fafc9c26077c14b6ac51454fa26e446e3a2f153b2b16797f",
61180957b409SSimon J. Gerraty
61190957b409SSimon J. Gerraty "8b769528884a0d1ffd090cf102993e796dadcfbddd38e44ff6324ca451",
61200957b409SSimon J. Gerraty "fcf9f0e1f199a3d1d0da681c5b8606fc642939f7",
61210957b409SSimon J. Gerraty "02a5f0a858a0864a4f65017a7d69454f3f973a2999839b7bbc48bf78641169179556f595fa41f6ff18e286c2783079bc0910ee9cc34f49ba681124f923dfa88f426141a368a5f5a930c628c2c3c200e18a7644721a0cbec6dd3f6279bde3e8f2be5e2d4ee56f97e7ceaf33054be7042bd91a63bb09f897bd41e81197dee99b11af",
61220957b409SSimon J. Gerraty
61230957b409SSimon J. Gerraty "1abdba489c5ada2f995ed16f19d5a94d9e6ec34a8d84f84557d26e5ef9b02b22887e3f9a4b690ad1149209c20c61431f0c017c36c2657b35d7b07d3f5ad8708507a9c1b831df835a56f831071814ea5d3d8d8f6ade40cba38b42db7a2d3d7a29c8f0a79a7838cf58a9757fa2fe4c40df9baa193bfc6f92b123ad57b07ace3e6ac068c9f106afd9eeb03b4f37c25dbfbcfb3071f6f9771766d072f3bb070af6605532973ae25051",
61240957b409SSimon J. Gerraty "986e7c43dbb671bd41b9a7f4b6afc80e805f2423",
61250957b409SSimon J. Gerraty "0244bcd1c8c16955736c803be401272e18cb990811b14f72db964124d5fa760649cbb57afb8755dbb62bf51f466cf23a0a1607576e983d778fceffa92df7548aea8ea4ecad2c29dd9f95bc07fe91ecf8bee255bfe8762fd7690aa9bfa4fa0849ef728c2c42c4532364522df2ab7f9f8a03b63f7a499175828668f5ef5a29e3802c",
61260957b409SSimon J. Gerraty
61270957b409SSimon J. Gerraty "8fb431f5ee792b6c2ac7db53cc428655aeb32d03f4e889c5c25de683c461b53acf89f9f8d3aabdf6b9f0c2a1de12e15b49edb3919a652fe9491c25a7fce1f722c2543608b69dc375ec",
61280957b409SSimon J. Gerraty "f8312d9c8eea13ec0a4c7b98120c87509087c478",
61290957b409SSimon J. Gerraty "0196f12a005b98129c8df13c4cb16f8aa887d3c40d96df3a88e7532ef39cd992f273abc370bc1be6f097cfebbf0118fd9ef4b927155f3df22b904d90702d1f7ba7a52bed8b8942f412cd7bd676c9d18e170391dcd345c06a730964b3f30bcce0bb20ba106f9ab0eeb39cf8a6607f75c0347f0af79f16afa081d2c92d1ee6f836b8",
61300957b409SSimon J. Gerraty
61310957b409SSimon J. Gerraty "fef4161dfaaf9c5295051dfc1ff3810c8c9ec2e866f7075422c8ec4216a9c4ff49427d483cae10c8534a41b2fd15fee06960ec6fb3f7a7e94a2f8a2e3e43dc4a40576c3097ac953b1de86f0b4ed36d644f23ae14425529622464ca0cbf0b1741347238157fab59e4de5524096d62baec63ac64",
61320957b409SSimon J. Gerraty "50327efec6292f98019fc67a2a6638563e9b6e2d",
61330957b409SSimon J. Gerraty "021eca3ab4892264ec22411a752d92221076d4e01c0e6f0dde9afd26ba5acf6d739ef987545d16683e5674c9e70f1de649d7e61d48d0caeb4fb4d8b24fba84a6e3108fee7d0705973266ac524b4ad280f7ae17dc59d96d3351586b5a3bdb895d1e1f7820ac6135d8753480998382ba32b7349559608c38745290a85ef4e9f9bd83",
61340957b409SSimon J. Gerraty
61350957b409SSimon J. Gerraty "efd237bb098a443aeeb2bf6c3f8c81b8c01b7fcb3feb",
61360957b409SSimon J. Gerraty "b0de3fc25b65f5af96b1d5cc3b27d0c6053087b3",
61370957b409SSimon J. Gerraty "012fafec862f56e9e92f60ab0c77824f4299a0ca734ed26e0644d5d222c7f0bde03964f8e70a5cb65ed44e44d56ae0edf1ff86ca032cc5dd4404dbb76ab854586c44eed8336d08d457ce6c03693b45c0f1efef93624b95b8ec169c616d20e5538ebc0b6737a6f82b4bc0570924fc6b35759a3348426279f8b3d7744e2d222426ce",
61380957b409SSimon J. Gerraty
61390957b409SSimon J. Gerraty /* 1027-bit key */
61400957b409SSimon J. Gerraty "054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705",
61410957b409SSimon J. Gerraty "010001",
61420957b409SSimon J. Gerraty "fa041f8cd9697ceed38ec8caa275523b4dd72b09a301d3541d72f5d31c05cbce2d6983b36183af10690bd46c46131e35789431a556771dd0049b57461bf060c1f68472e8a67c25f357e5b6b4738fa541a730346b4a07649a2dfa806a69c975b6aba64678acc7f5913e89c622f2d8abb1e3e32554e39df94ba60c002e387d9011",
61430957b409SSimon J. Gerraty "029232336d2838945dba9dd7723f4e624a05f7375b927a87abe6a893a1658fd49f47f6c7b0fa596c65fa68a23f0ab432962d18d4343bd6fd671a5ea8d148413995",
61440957b409SSimon J. Gerraty "020ef5efe7c5394aed2272f7e81a74f4c02d145894cb1b3cab23a9a0710a2afc7e3329acbb743d01f680c4d02afb4c8fde7e20930811bb2b995788b5e872c20bb1",
61450957b409SSimon J. Gerraty "026e7e28010ecf2412d9523ad704647fb4fe9b66b1a681581b0e15553a89b1542828898f27243ebab45ff5e1acb9d4df1b051fbc62824dbc6f6c93261a78b9a759",
61460957b409SSimon J. Gerraty "012ddcc86ef655998c39ddae11718669e5e46cf1495b07e13b1014cd69b3af68304ad2a6b64321e78bf3bbca9bb494e91d451717e2d97564c6549465d0205cf421",
61470957b409SSimon J. Gerraty "010600c4c21847459fe576703e2ebecae8a5094ee63f536bf4ac68d3c13e5e4f12ac5cc10ab6a2d05a199214d1824747d551909636b774c22cac0b837599abcc75",
61480957b409SSimon J. Gerraty
61490957b409SSimon J. Gerraty "9fb03b827c8217d9",
61500957b409SSimon J. Gerraty "ed7c98c95f30974fbe4fbddcf0f28d6021c0e91d",
61510957b409SSimon J. Gerraty "0323d5b7bf20ba4539289ae452ae4297080feff4518423ff4811a817837e7d82f1836cdfab54514ff0887bddeebf40bf99b047abc3ecfa6a37a3ef00f4a0c4a88aae0904b745c846c4107e8797723e8ac810d9e3d95dfa30ff4966f4d75d13768d20857f2b1406f264cfe75e27d7652f4b5ed3575f28a702f8c4ed9cf9b2d44948",
61520957b409SSimon J. Gerraty
61530957b409SSimon J. Gerraty "0ca2ad77797ece86de5bf768750ddb5ed6a3116ad99bbd17edf7f782f0db1cd05b0f677468c5ea420dc116b10e80d110de2b0461ea14a38be68620392e7e893cb4ea9393fb886c20ff790642305bf302003892e54df9f667509dc53920df583f50a3dd61abb6fab75d600377e383e6aca6710eeea27156e06752c94ce25ae99fcbf8592dbe2d7e27453cb44de07100ebb1a2a19811a478adbeab270f94e8fe369d90b3ca612f9f",
61540957b409SSimon J. Gerraty "22d71d54363a4217aa55113f059b3384e3e57e44",
61550957b409SSimon J. Gerraty "049d0185845a264d28feb1e69edaec090609e8e46d93abb38371ce51f4aa65a599bdaaa81d24fba66a08a116cb644f3f1e653d95c89db8bbd5daac2709c8984000178410a7c6aa8667ddc38c741f710ec8665aa9052be929d4e3b16782c1662114c5414bb0353455c392fc28f3db59054b5f365c49e1d156f876ee10cb4fd70598",
61560957b409SSimon J. Gerraty
61570957b409SSimon J. Gerraty "288062afc08fcdb7c5f8650b29837300461dd5676c17a20a3c8fb5148949e3f73d66b3ae82c7240e27c5b3ec4328ee7d6ddf6a6a0c9b5b15bcda196a9d0c76b119d534d85abd123962d583b76ce9d180bce1ca",
61580957b409SSimon J. Gerraty "4af870fbc6516012ca916c70ba862ac7e8243617",
61590957b409SSimon J. Gerraty "03fbc410a2ced59500fb99f9e2af2781ada74e13145624602782e2994813eefca0519ecd253b855fb626a90d771eae028b0c47a199cbd9f8e3269734af4163599090713a3fa910fa0960652721432b971036a7181a2bc0cab43b0b598bc6217461d7db305ff7e954c5b5bb231c39e791af6bcfa76b147b081321f72641482a2aad",
61600957b409SSimon J. Gerraty
61610957b409SSimon J. Gerraty "6f4f9ab9501199cef55c6cf408fe7b36c557c49d420a4763d2463c8ad44b3cfc5be2742c0e7d9b0f6608f08c7f47b693ee",
61620957b409SSimon J. Gerraty "40d2e180fae1eac439c190b56c2c0e14ddf9a226",
61630957b409SSimon J. Gerraty "0486644bc66bf75d28335a6179b10851f43f09bded9fac1af33252bb9953ba4298cd6466b27539a70adaa3f89b3db3c74ab635d122f4ee7ce557a61e59b82ffb786630e5f9db53c77d9a0c12fab5958d4c2ce7daa807cd89ba2cc7fcd02ff470ca67b229fcce814c852c73cc93bea35be68459ce478e9d4655d121c8472f371d4f",
61640957b409SSimon J. Gerraty
61650957b409SSimon J. Gerraty "e17d20385d501955823c3f666254c1d3dd36ad5168b8f18d286fdcf67a7dad94097085fab7ed86fe2142a28771717997ef1a7a08884efc39356d76077aaf82459a7fad45848875f2819b098937fe923bcc9dc442d72d754d812025090c9bc03db3080c138dd63b355d0b4b85d6688ac19f4de15084a0ba4e373b93ef4a555096691915dc23c00e954cdeb20a47cd55d16c3d8681d46ed7f2ed5ea42795be17baed25f0f4d113b3636addd585f16a8b5aec0c8fa9c5f03cbf3b9b73",
61660957b409SSimon J. Gerraty "2497dc2b4615dfae5a663d49ffd56bf7efc11304",
61670957b409SSimon J. Gerraty "022a80045353904cb30cbb542d7d4990421a6eec16a8029a8422adfd22d6aff8c4cc0294af110a0c067ec86a7d364134459bb1ae8ff836d5a8a2579840996b320b19f13a13fad378d931a65625dae2739f0c53670b35d9d3cbac08e733e4ec2b83af4b9196d63e7c4ff1ddeae2a122791a125bfea8deb0de8ccf1f4ffaf6e6fb0a",
61680957b409SSimon J. Gerraty
61690957b409SSimon J. Gerraty "afbc19d479249018fdf4e09f618726440495de11ddeee38872d775fcea74a23896b5343c9c38d46af0dba224d047580cc60a65e9391cf9b59b36a860598d4e8216722f993b91cfae87bc255af89a6a199bca4a391eadbc3a24903c0bd667368f6be78e3feabfb4ffd463122763740ffbbefeab9a25564bc5d1c24c93e422f75073e2ad72bf45b10df00b52a147128e73fee33fa3f0577d77f80fbc2df1bed313290c12777f50",
61700957b409SSimon J. Gerraty "a334db6faebf11081a04f87c2d621cdec7930b9b",
61710957b409SSimon J. Gerraty "00938dcb6d583046065f69c78da7a1f1757066a7fa75125a9d2929f0b79a60b627b082f11f5b196f28eb9daa6f21c05e5140f6aef1737d2023075c05ecf04a028c686a2ab3e7d5a0664f295ce12995e890908b6ad21f0839eb65b70393a7b5afd9871de0caa0cedec5b819626756209d13ab1e7bb9546a26ff37e9a51af9fd562e",
61720957b409SSimon J. Gerraty
61730957b409SSimon J. Gerraty /* 1028-bit key */
61740957b409SSimon J. Gerraty "0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507",
61750957b409SSimon J. Gerraty "010001",
61760957b409SSimon J. Gerraty "03ce08b104fff396a979bd3e4e46925b6319ddb63acbcfd819f17d16b8077b3a87101ff34b77fe48b8b205a96e9151ba8ecea64d0cce7b23c3e6a6b83058bc49dae816ae736db5a4708e2ad435232b567f9096ce59ff28061e79ab1c02d717e6b23cea6db8eb5192fa7c1eab227dba74621c45601896eef13792c8440beb15aac1",
61770957b409SSimon J. Gerraty "03f2f331f4142d4f24b43aa10279a89652d4e7537221a1a7b2a25deb551e5de9ac497411c227a94e45f91c2d1c13cc046cf4ce14e32d058734210d44a87ee1b73f",
61780957b409SSimon J. Gerraty "034f090d73b55803030cf0361a5d8081bfb79f851523feac0a2124d08d4013ff08487771a870d0479dc0686c62f7718dfecf024b17c9267678059171339cc00839",
61790957b409SSimon J. Gerraty "02aa663adbf51ab887a018cb426e78bc2fe182dcb2f7bcb50441d17fdf0f06798b5071c6e2f5feb4d54ad8182311c1ef62d4c49f18d1f51f54b2d2cffba4da1be5",
61800957b409SSimon J. Gerraty "02bbe706078b5c0b391512d411db1b199b5a5664b84042ead37fe994ae72b9532dfbfb3e9e6981a0fbb806513141b7c2163fe56c395e4bfaee57e3833f9b918df9",
61810957b409SSimon J. Gerraty "0242b6cd00d30a767aee9a898ead453c8eaea63d500b7d1e00713edae51ce36b23b664df26e63e266ec8f76e6e63ed1ba41eb033b120f7ea5212ae21a98fbc16",
61820957b409SSimon J. Gerraty
61830957b409SSimon J. Gerraty "30c7d557458b436decfdc14d06cb7b96b06718c48d7de57482a868ae7f065870a6216506d11b779323dfdf046cf5775129134b4d5689e4d9c0ce1e12d7d4b06cb5fc5820decfa41baf59bf257b32f025b7679b445b9499c92555145885992f1b76f84891ee4d3be0f5150fd5901e3a4c8ed43fd36b61d022e65ad5008dbf33293c22bfbfd07321f0f1d5fa9fdf0014c2fcb0358aad0e354b0d29",
61840957b409SSimon J. Gerraty "081b233b43567750bd6e78f396a88b9f6a445151",
61850957b409SSimon J. Gerraty "0ba373f76e0921b70a8fbfe622f0bf77b28a3db98e361051c3d7cb92ad0452915a4de9c01722f6823eeb6adf7e0ca8290f5de3e549890ac2a3c5950ab217ba58590894952de96f8df111b2575215da6c161590c745be612476ee578ed384ab33e3ece97481a252f5c79a98b5532ae00cdd62f2ecc0cd1baefe80d80b962193ec1d",
61860957b409SSimon J. Gerraty
61870957b409SSimon J. Gerraty "e7b32e1556ea1b2795046ac69739d22ac8966bf11c116f614b166740e96b90653e5750945fcf772186c03790a07fda323e1a61916b06ee2157db3dff80d67d5e39a53ae268c8f09ed99a732005b0bc6a04af4e08d57a00e7201b3060efaadb73113bfc087fd837093aa25235b8c149f56215f031c24ad5bde7f29960df7d524070f7449c6f785084be1a0f733047f336f9154738674547db02a9f44dfc6e60301081e1ce99847f3b5b601ff06b4d5776a9740b9aa0d34058fd3b906e4f7859dfb07d7173e5e6f6350adac21f27b2307469",
61880957b409SSimon J. Gerraty "bd0ce19549d0700120cbe51077dbbbb00a8d8b09",
61890957b409SSimon J. Gerraty "08180de825e4b8b014a32da8ba761555921204f2f90d5f24b712908ff84f3e220ad17997c0dd6e706630ba3e84add4d5e7ab004e58074b549709565d43ad9e97b5a7a1a29e85b9f90f4aafcdf58321de8c5974ef9abf2d526f33c0f2f82e95d158ea6b81f1736db8d1af3d6ac6a83b32d18bae0ff1b2fe27de4c76ed8c7980a34e",
61900957b409SSimon J. Gerraty
61910957b409SSimon J. Gerraty "8d8396e36507fe1ef6a19017548e0c716674c2fec233adb2f775665ec41f2bd0ba396b061a9daa7e866f7c23fd3531954300a342f924535ea1498c48f6c879932865fc02000c528723b7ad0335745b51209a0afed932af8f0887c219004d2abd894ea92559ee3198af3a734fe9b9638c263a728ad95a5ae8ce3eb15839f3aa7852bb390706e7760e43a71291a2e3f827237deda851874c517665f545f27238df86557f375d09ccd8bd15d8ccf61f5d78ca5c7f5cde782e6bf5d0057056d4bad98b3d2f9575e824ab7a33ff57b0ac100ab0d6ead7aa0b50f6e4d3e5ec0b966b",
61920957b409SSimon J. Gerraty "815779a91b3a8bd049bf2aeb920142772222c9ca",
61930957b409SSimon J. Gerraty "05e0fdbdf6f756ef733185ccfa8ced2eb6d029d9d56e35561b5db8e70257ee6fd019d2f0bbf669fe9b9821e78df6d41e31608d58280f318ee34f559941c8df13287574bac000b7e58dc4f414ba49fb127f9d0f8936638c76e85356c994f79750f7fa3cf4fd482df75e3fb9978cd061f7abb17572e6e63e0bde12cbdcf18c68b979",
61940957b409SSimon J. Gerraty
61950957b409SSimon J. Gerraty "328c659e0a6437433cceb73c14",
61960957b409SSimon J. Gerraty "9aec4a7480d5bbc42920d7ca235db674989c9aac",
61970957b409SSimon J. Gerraty "0bc989853bc2ea86873271ce183a923ab65e8a53100e6df5d87a24c4194eb797813ee2a187c097dd872d591da60c568605dd7e742d5af4e33b11678ccb63903204a3d080b0902c89aba8868f009c0f1c0cb85810bbdd29121abb8471ff2d39e49fd92d56c655c8e037ad18fafbdc92c95863f7f61ea9efa28fea401369d19daea1",
61980957b409SSimon J. Gerraty
61990957b409SSimon J. Gerraty "f37b962379a47d415a376eec8973150bcb34edd5ab654041b61430560c2144582ba133c867d852d6b8e23321901302ecb45b09ec88b1527178fa043263f3067d9ffe973032a99f4cb08ad2c7e0a2456cdd57a7df56fe6053527a5aeb67d7e552063c1ca97b1beffa7b39e997caf27878ea0f62cbebc8c21df4c889a202851e949088490c249b6e9acf1d8063f5be2343989bf95c4da01a2be78b4ab6b378015bc37957f76948b5e58e440c28453d40d7cfd57e7d690600474ab5e75973b1ea0c5f1e45d14190afe2f4eb6d3bdf71f1d2f8bb156a1c295d04aaeb9d689dce79ed62bc443e",
62000957b409SSimon J. Gerraty "e20c1e9878512c39970f58375e1549a68b64f31d",
62010957b409SSimon J. Gerraty "0aefa943b698b9609edf898ad22744ac28dc239497cea369cbbd84f65c95c0ad776b594740164b59a739c6ff7c2f07c7c077a86d95238fe51e1fcf33574a4ae0684b42a3f6bf677d91820ca89874467b2c23add77969c80717430d0efc1d3695892ce855cb7f7011630f4df26def8ddf36fc23905f57fa6243a485c770d5681fcd",
62020957b409SSimon J. Gerraty
62030957b409SSimon J. Gerraty "c6103c330c1ef718c141e47b8fa859be4d5b96259e7d142070ecd485839dba5a8369c17c1114035e532d195c74f44a0476a2d3e8a4da210016caced0e367cb867710a4b5aa2df2b8e5daf5fdc647807d4d5ebb6c56b9763ccdae4dea3308eb0ac2a89501cb209d2639fa5bf87ce790747d3cb2d295e84564f2f637824f0c13028129b0aa4a422d162282",
62040957b409SSimon J. Gerraty "23291e4a3307e8bbb776623ab34e4a5f4cc8a8db",
62050957b409SSimon J. Gerraty "02802dccfa8dfaf5279bf0b4a29ba1b157611faeaaf419b8919d15941900c1339e7e92e6fae562c53e6cc8e84104b110bce03ad18525e3c49a0eadad5d3f28f244a8ed89edbafbb686277cfa8ae909714d6b28f4bf8e293aa04c41efe7c0a81266d5c061e2575be032aa464674ff71626219bd74cc45f0e7ed4e3ff96eee758e8f",
62060957b409SSimon J. Gerraty
62070957b409SSimon J. Gerraty /* 1029-bit key */
62080957b409SSimon J. Gerraty "164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1",
62090957b409SSimon J. Gerraty "010001",
62100957b409SSimon J. Gerraty "03b664ee3b7566723fc6eaf28abb430a3980f1126c81de8ad709eab39ac9dcd0b1550b3729d87068e952009df544534c1f50829a78f4591eb8fd57140426a6bb0405b6a6f51a57d9267b7bbc653391a699a2a90dac8ae226bcc60fa8cd934c73c7b03b1f6b818158631838a8612e6e6ea92be24f8324faf5b1fd8587225267ba6f",
62110957b409SSimon J. Gerraty "04f0548c9626ab1ebf1244934741d99a06220efa2a5856aa0e75730b2ec96adc86be894fa2803b53a5e85d276acbd29ab823f80a7391bb54a5051672fb04eeb543",
62120957b409SSimon J. Gerraty "0483e0ae47915587743ff345362b555d3962d98bb6f15f848b4c92b1771ca8ed107d8d3ee65ec44517dd0faa481a387e902f7a2e747c269e7ea44480bc538b8e5b",
62130957b409SSimon J. Gerraty "03a8e8aea9920c1aa3b2f0d846e4b850d81ca306a51c83544f949f64f90dcf3f8e2661f07e561220a180388fbe273e70e2e5dca83a0e1348dd6490c731d6ece1ab",
62140957b409SSimon J. Gerraty "0135bdcdb60bf2197c436ed34b32cd8b4fc77778832ba76703551fb242b301699593af77fd8fc394a8526ad23cc41a03806bd897fe4b0ea646558aaddcc99e8a25",
62150957b409SSimon J. Gerraty "0304c03d9c736503a984abbd9ba22301407c4a2ab1dd85766481b60d45401152e692be14f4121d9aa3fd6e0b4d1d3a973538a31d42ee6e1e5ef620231a2bbaf35f",
62160957b409SSimon J. Gerraty
62170957b409SSimon J. Gerraty "0a20b774addc2fa51245ed7cb9da609e50cac6636a52543f97458eed7340f8d53ffc64918f949078ee03ef60d42b5fec246050bd5505cd8cb597bad3c4e713b0ef30644e76adabb0de01a1561efb255158c74fc801e6e919e581b46f0f0ddd08e4f34c7810b5ed8318f91d7c8c",
62180957b409SSimon J. Gerraty "5b4ea2ef629cc22f3b538e016904b47b1e40bfd5",
62190957b409SSimon J. Gerraty "04c0cfacec04e5badbece159a5a1103f69b3f32ba593cb4cc4b1b7ab455916a96a27cd2678ea0f46ba37f7fc9c86325f29733b389f1d97f43e7201c0f348fc45fe42892335362eee018b5b161f2f9393031225c713012a576bc88e23052489868d9010cbf033ecc568e8bc152bdc59d560e41291915d28565208e22aeec9ef85d1",
62200957b409SSimon J. Gerraty
62210957b409SSimon J. Gerraty "2aaff6631f621ce615760a9ebce94bb333077ad86488c861d4b76d29c1f48746c611ae1e03ced4445d7cfa1fe5f62e1b3f08452bde3b6ef81973bafbb57f97bceef873985395b8260589aa88cb7db50ab469262e551bdcd9a56f275a0ac4fe484700c35f3dbf2b469ede864741b86fa59172a360ba95a02e139be50ddfb7cf0b42faeabbfbbaa86a4497699c4f2dfd5b08406af7e14144427c253ec0efa20eaf9a8be8cd49ce1f1bc4e93e619cf2aa8ed4fb39bc8590d0f7b96488f7317ac9abf7bee4e3a0e715",
62220957b409SSimon J. Gerraty "83146a9e782722c28b014f98b4267bda2ac9504f",
62230957b409SSimon J. Gerraty "0a2314250cf52b6e4e908de5b35646bcaa24361da8160fb0f9257590ab3ace42b0dc3e77ad2db7c203a20bd952fbb56b1567046ecfaa933d7b1000c3de9ff05b7d989ba46fd43bc4c2d0a3986b7ffa13471d37eb5b47d64707bd290cfd6a9f393ad08ec1e3bd71bb5792615035cdaf2d8929aed3be098379377e777ce79aaa4773",
62240957b409SSimon J. Gerraty
62250957b409SSimon J. Gerraty "0f6195d04a6e6fc7e2c9600dbf840c39ea8d4d624fd53507016b0e26858a5e0aecd7ada543ae5c0ab3a62599cba0a54e6bf446e262f989978f9ddf5e9a41",
62260957b409SSimon J. Gerraty "a87b8aed07d7b8e2daf14ddca4ac68c4d0aabff8",
62270957b409SSimon J. Gerraty "086df6b500098c120f24ff8423f727d9c61a5c9007d3b6a31ce7cf8f3cbec1a26bb20e2bd4a046793299e03e37a21b40194fb045f90b18bf20a47992ccd799cf9c059c299c0526854954aade8a6ad9d97ec91a1145383f42468b231f4d72f23706d9853c3fa43ce8ace8bfe7484987a1ec6a16c8daf81f7c8bf42774707a9df456",
62280957b409SSimon J. Gerraty
62290957b409SSimon J. Gerraty "337d25fe9810ebca0de4d4658d3ceb8e0fe4c066aba3bcc48b105d3bf7e0257d44fecea6596f4d0c59a08402833678f70620f9138dfeb7ded905e4a6d5f05c473d55936652e2a5df43c0cfda7bacaf3087f4524b06cf42157d01539739f7fddec9d58125df31a32eab06c19b71f1d5bf",
62300957b409SSimon J. Gerraty "a37932f8a7494a942d6f767438e724d6d0c0ef18",
62310957b409SSimon J. Gerraty "0b5b11ad549863ffa9c51a14a1106c2a72cc8b646e5c7262509786105a984776534ca9b54c1cc64bf2d5a44fd7e8a69db699d5ea52087a4748fd2abc1afed1e5d6f7c89025530bdaa2213d7e030fa55df6f34bcf1ce46d2edf4e3ae4f3b01891a068c9e3a44bbc43133edad6ecb9f35400c4252a5762d65744b99cb9f4c559329f",
62320957b409SSimon J. Gerraty
62330957b409SSimon J. Gerraty "84ec502b072e8287789d8f9235829ea3b187afd4d4c785611bda5f9eb3cb96717efa7007227f1c08cbcb972e667235e0fb7d431a6570326d2ecce35adb373dc753b3be5f829b89175493193fab16badb41371b3aac0ae670076f24bef420c135add7cee8d35fbc944d79fafb9e307a13b0f556cb654a06f973ed22672330197ef5a748bf826a5db2383a25364b686b9372bb2339aeb1ac9e9889327d016f1670776db06201adbdcaf8a5e3b74e108b73",
62340957b409SSimon J. Gerraty "7b790c1d62f7b84e94df6af28917cf571018110e",
62350957b409SSimon J. Gerraty "02d71fa9b53e4654fefb7f08385cf6b0ae3a817942ebf66c35ac67f0b069952a3ce9c7e1f1b02e480a9500836de5d64cdb7ecde04542f7a79988787e24c2ba05f5fd482c023ed5c30e04839dc44bed2a3a3a4fee01113c891a47d32eb8025c28cb050b5cdb576c70fe76ef523405c08417faf350b037a43c379339fcb18d3a356b",
62360957b409SSimon J. Gerraty
62370957b409SSimon J. Gerraty "9906d89f97a9fdedd3ccd824db687326f30f00aa25a7fca2afcb3b0f86cd41e73f0e8ff7d2d83f59e28ed31a5a0d551523374de22e4c7e8ff568b386ee3dc41163f10bf67bb006261c9082f9af90bf1d9049a6b9fae71c7f84fbe6e55f02789de774f230f115026a4b4e96c55b04a95da3aacbb2cece8f81764a1f1c99515411087cf7d34aeded0932c183",
62380957b409SSimon J. Gerraty "fbbe059025b69b89fb14ae2289e7aaafe60c0fcd",
62390957b409SSimon J. Gerraty "0a40a16e2fe2b38d1df90546167cf9469c9e3c3681a3442b4b2c2f581deb385ce99fc6188bb02a841d56e76d301891e24560550fcc2a26b55f4ccb26d837d350a154bcaca8392d98fa67959e9727b78cad03269f56968fc56b68bd679926d83cc9cb215550645ccda31c760ff35888943d2d8a1d351e81e5d07b86182e751081ef",
62400957b409SSimon J. Gerraty
62410957b409SSimon J. Gerraty /* 1030-bit key */
62420957b409SSimon J. Gerraty "37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3",
62430957b409SSimon J. Gerraty "010001",
62440957b409SSimon J. Gerraty "3bed999052d957bc06d651eef6e3a98094b1621bd38b5449bd6c4aea3de7e084679a4484ded25be0f0826cf3377825414b14d4d61db14de626fbb80e5f4faec956f9a0a2d24f99576380f084eb62e46a57d554278b535626193ce02060575eb66c5798d36f6c5d40fb00d809b42a73102c1c74ee95bd71420fffef6318b52c29",
62450957b409SSimon J. Gerraty "07eefb424b0e3a40e4208ee5afb280b22317308114dde0b4b64f730184ec68da6ce2867a9f48ed7726d5e2614ed04a5410736c8c714ee702474298c6292af07535",
62460957b409SSimon J. Gerraty "070830dbf947eac0228de26314b59b66994cc60e8360e75d3876298f8f8a7d141da064e5ca026a973e28f254738cee669c721b034cb5f8e244dadd7cd1e159d547",
62470957b409SSimon J. Gerraty "0524d20c3d95cff75af2313483227d8702717aa576de155f960515501adb1d70e1c04de91b75b161dbf0398356127ededa7bbc19a32dc1621cc9f53c265d0ce331",
62480957b409SSimon J. Gerraty "05f984a1f23c938d6a0e89724bcf3dd93f9946926037fe7c6b13a29e5284855f89089591d440975627bf5c9e3a8b5ca79c772ad273e40d321af4a6c97dfded78d3",
62490957b409SSimon J. Gerraty "ddd918adada29dcab981ff9acba4257023c09a3801ccce098ce268f855d0df570cd6e7b9b14bd9a5a9254cbc315be6f8ba1e2546ddd569c5ea19eed8353bde5e",
62500957b409SSimon J. Gerraty
62510957b409SSimon J. Gerraty "9ead0e01945640674eb41cad435e2374eaefa8ad7197d97913c44957d8d83f40d76ee60e39bf9c0f9eaf3021421a074d1ade962c6e9d3dc3bb174fe4dfe652b09115495b8fd2794174020a0602b5ca51848cfc96ce5eb57fc0a2adc1dda36a7cc452641a14911b37e45bfa11daa5c7ecdb74f6d0100d1d3e39e752800e203397de0233077b9a88855537fae927f924380d780f98e18dcff39c5ea741b17d6fdd1885bc9d581482d771ceb562d78a8bf88f0c75b11363e5e36cd479ceb0545f9da84203e0e6e508375cc9e844b88b7ac7a0a201ea0f1bee9a2c577920ca02c01b9d8320e974a56f4efb5763b96255abbf8037bf1802cf018f56379493e569a9",
62520957b409SSimon J. Gerraty "b7867a59958cb54328f8775e6546ec06d27eaa50",
62530957b409SSimon J. Gerraty "187f390723c8902591f0154bae6d4ecbffe067f0e8b795476ea4f4d51ccc810520bb3ca9bca7d0b1f2ea8a17d873fa27570acd642e3808561cb9e975ccfd80b23dc5771cdb3306a5f23159dacbd3aa2db93d46d766e09ed15d900ad897a8d274dc26b47e994a27e97e2268a766533ae4b5e42a2fcaf755c1c4794b294c60555823",
62540957b409SSimon J. Gerraty
62550957b409SSimon J. Gerraty "8d80d2d08dbd19c154df3f14673a14bd03735231f24e86bf153d0e69e74cbff7b1836e664de83f680124370fc0f96c9b65c07a366b644c4ab3",
62560957b409SSimon J. Gerraty "0c09582266df086310821ba7e18df64dfee6de09",
62570957b409SSimon J. Gerraty "10fd89768a60a67788abb5856a787c8561f3edcf9a83e898f7dc87ab8cce79429b43e56906941a886194f137e591fe7c339555361fbbe1f24feb2d4bcdb80601f3096bc9132deea60ae13082f44f9ad41cd628936a4d51176e42fc59cb76db815ce5ab4db99a104aafea68f5d330329ebf258d4ede16064bd1d00393d5e1570eb8",
62580957b409SSimon J. Gerraty
62590957b409SSimon J. Gerraty "808405cdfc1a58b9bb0397c720722a81fffb76278f335917ef9c473814b3e016ba2973cd2765f8f3f82d6cc38aa7f8551827fe8d1e3884b7e61c94683b8f82f1843bdae2257eeec9812ad4c2cf283c34e0b0ae0fe3cb990cf88f2ef9",
62600957b409SSimon J. Gerraty "28039dcfe106d3b8296611258c4a56651c9e92dd",
62610957b409SSimon J. Gerraty "2b31fde99859b977aa09586d8e274662b25a2a640640b457f594051cb1e7f7a911865455242926cf88fe80dfa3a75ba9689844a11e634a82b075afbd69c12a0df9d25f84ad4945df3dc8fe90c3cefdf26e95f0534304b5bdba20d3e5640a2ebfb898aac35ae40f26fce5563c2f9f24f3042af76f3c7072d687bbfb959a88460af1",
62620957b409SSimon J. Gerraty
62630957b409SSimon J. Gerraty "f337b9bad937de22a1a052dff11134a8ce26976202981939b91e0715ae5e609649da1adfcef3f4cca59b238360e7d1e496c7bf4b204b5acff9bbd6166a1d87a36ef2247373751039f8a800b8399807b3a85f44893497c0d05fb7017b82228152de6f25e6116dcc7503c786c875c28f3aa607e94ab0f19863ab1b5073770b0cd5f533acde30c6fb953cf3da680264e30fc11bff9a19bffab4779b6223c3fb3fe0f71abade4eb7c09c41e24c22d23fa148e6a173feb63984d1bc6ee3a02d915b752ceaf92a3015eceb38ca586c6801b37c34cefb2cff25ea23c08662dcab26a7a93a285d05d3044c",
62640957b409SSimon J. Gerraty "a77821ebbbef24628e4e12e1d0ea96de398f7b0f",
62650957b409SSimon J. Gerraty "32c7ca38ff26949a15000c4ba04b2b13b35a3810e568184d7ecabaa166b7ffabddf2b6cf4ba07124923790f2e5b1a5be040aea36fe132ec130e1f10567982d17ac3e89b8d26c3094034e762d2e031264f01170beecb3d1439e05846f25458367a7d9c02060444672671e64e877864559ca19b2074d588a281b5804d23772fbbe19",
62660957b409SSimon J. Gerraty
62670957b409SSimon J. Gerraty "45013cebafd960b255476a8e2598b9aa32efbe6dc1f34f4a498d8cf5a2b4548d08c55d5f95f7bcc9619163056f2d58b52fa032",
62680957b409SSimon J. Gerraty "9d5ad8eb452134b65dc3a98b6a73b5f741609cd6",
62690957b409SSimon J. Gerraty "07eb651d75f1b52bc263b2e198336e99fbebc4f332049a922a10815607ee2d989db3a4495b7dccd38f58a211fb7e193171a3d891132437ebca44f318b280509e52b5fa98fcce8205d9697c8ee4b7ff59d4c59c79038a1970bd2a0d451ecdc5ef11d9979c9d35f8c70a6163717607890d586a7c6dc01c79f86a8f28e85235f8c2f1",
62700957b409SSimon J. Gerraty
62710957b409SSimon J. Gerraty "2358097086c899323e75d9c90d0c09f12d9d54edfbdf70a9c2eb5a04d8f36b9b2bdf2aabe0a5bda1968937f9d6ebd3b6b257efb3136d4131f9acb59b85e2602c2a3fcdc835494a1f4e5ec18b226c80232b36a75a45fdf09a7ea9e98efbde1450d1194bf12e15a4c5f9eb5c0bce5269e0c3b28cfab655d81a61a20b4be2f54459bb25a0db94c52218be109a7426de83014424789aaa90e5056e632a698115e282c1a56410f26c2072f193481a9dcd880572005e64f4082ecf",
62720957b409SSimon J. Gerraty "3f2efc595880a7d47fcf3cba04983ea54c4b73fb",
62730957b409SSimon J. Gerraty "18da3cdcfe79bfb77fd9c32f377ad399146f0a8e810620233271a6e3ed3248903f5cdc92dc79b55d3e11615aa056a795853792a3998c349ca5c457e8ca7d29d796aa24f83491709befcfb1510ea513c92829a3f00b104f655634f320752e130ec0ccf6754ff893db302932bb025eb60e87822598fc619e0e981737a9a4c4152d33",
62740957b409SSimon J. Gerraty
62750957b409SSimon J. Gerraty /* 1031-bit key */
62760957b409SSimon J. Gerraty "495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f",
62770957b409SSimon J. Gerraty "010001",
62780957b409SSimon J. Gerraty "6c66ffe98980c38fcdeab5159898836165f4b4b817c4f6a8d486ee4ea9130fe9b9092bd136d184f95f504a607eac565846d2fdd6597a8967c7396ef95a6eeebb4578a643966dca4d8ee3de842de63279c618159c1ab54a89437b6a6120e4930afb52a4ba6ced8a4947ac64b30a3497cbe701c2d6266d517219ad0ec6d347dbe9",
62790957b409SSimon J. Gerraty "08dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab72619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c8060645a1d29edb",
62800957b409SSimon J. Gerraty "0847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca4174825b48f49706d",
62810957b409SSimon J. Gerraty "05c2a83c124b3621a2aa57ea2c3efe035eff4560f33ddebb7adab81fce69a0c8c2edc16520dda83d59a23be867963ac65f2cc710bbcfb96ee103deb771d105fd85",
62820957b409SSimon J. Gerraty "04cae8aa0d9faa165c87b682ec140b8ed3b50b24594b7a3b2c220b3669bb819f984f55310a1ae7823651d4a02e99447972595139363434e5e30a7e7d241551e1b9",
62830957b409SSimon J. Gerraty "07d3e47bf686600b11ac283ce88dbb3f6051e8efd04680e44c171ef531b80b2b7c39fc766320e2cf15d8d99820e96ff30dc69691839c4b40d7b06e45307dc91f3f",
62840957b409SSimon J. Gerraty
62850957b409SSimon J. Gerraty "81332f4be62948415ea1d899792eeacf6c6e1db1da8be13b5cea41db2fed467092e1ff398914c714259775f595f8547f735692a575e6923af78f22c6997ddb90fb6f72d7bb0dd5744a31decd3dc3685849836ed34aec596304ad11843c4f88489f209735f5fb7fdaf7cec8addc5818168f880acbf490d51005b7a8e84e43e54287977571dd99eea4b161eb2df1f5108f12a4142a83322edb05a75487a3435c9a78ce53ed93bc550857d7a9fb",
62860957b409SSimon J. Gerraty "1d65491d79c864b373009be6f6f2467bac4c78fa",
62870957b409SSimon J. Gerraty "0262ac254bfa77f3c1aca22c5179f8f040422b3c5bafd40a8f21cf0fa5a667ccd5993d42dbafb409c520e25fce2b1ee1e716577f1efa17f3da28052f40f0419b23106d7845aaf01125b698e7a4dfe92d3967bb00c4d0d35ba3552ab9a8b3eef07c7fecdbc5424ac4db1e20cb37d0b2744769940ea907e17fbbca673b20522380c5",
62880957b409SSimon J. Gerraty
62890957b409SSimon J. Gerraty "e2f96eaf0e05e7ba326ecca0ba7fd2f7c02356f3cede9d0faabf4fcc8e60a973e5595fd9ea08",
62900957b409SSimon J. Gerraty "435c098aa9909eb2377f1248b091b68987ff1838",
62910957b409SSimon J. Gerraty "2707b9ad5115c58c94e932e8ec0a280f56339e44a1b58d4ddcff2f312e5f34dcfe39e89c6a94dcee86dbbdae5b79ba4e0819a9e7bfd9d982e7ee6c86ee68396e8b3a14c9c8f34b178eb741f9d3f121109bf5c8172fada2e768f9ea1433032c004a8aa07eb990000a48dc94c8bac8aabe2b09b1aa46c0a2aa0e12f63fbba775ba7e",
62920957b409SSimon J. Gerraty
62930957b409SSimon J. Gerraty "e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7",
62940957b409SSimon J. Gerraty "c6ebbe76df0c4aea32c474175b2f136862d04529",
62950957b409SSimon J. Gerraty "2ad20509d78cf26d1b6c406146086e4b0c91a91c2bd164c87b966b8faa42aa0ca446022323ba4b1a1b89706d7f4c3be57d7b69702d168ab5955ee290356b8c4a29ed467d547ec23cbadf286ccb5863c6679da467fc9324a151c7ec55aac6db4084f82726825cfe1aa421bc64049fb42f23148f9c25b2dc300437c38d428aa75f96",
62960957b409SSimon J. Gerraty
62970957b409SSimon J. Gerraty "dbc5f750a7a14be2b93e838d18d14a8695e52e8add9c0ac733b8f56d2747e529a0cca532dd49b902aefed514447f9e81d16195c2853868cb9b30f7d0d495c69d01b5c5d50b27045db3866c2324a44a110b1717746de457d1c8c45c3cd2a92970c3d59632055d4c98a41d6e99e2a3ddd5f7f9979ab3cd18f37505d25141de2a1bff17b3a7dce9419ecc385cf11d72840f19953fd0509251f6cafde2893d0e75c781ba7a5012ca401a4fa99e04b3c3249f926d5afe82cc87dab22c3c1b105de48e34ace9c9124e59597ac7ebf8",
62980957b409SSimon J. Gerraty "021fdcc6ebb5e19b1cb16e9c67f27681657fe20a",
62990957b409SSimon J. Gerraty "1e24e6e58628e5175044a9eb6d837d48af1260b0520e87327de7897ee4d5b9f0df0be3e09ed4dea8c1454ff3423bb08e1793245a9df8bf6ab3968c8eddc3b5328571c77f091cc578576912dfebd164b9de5454fe0be1c1f6385b328360ce67ec7a05f6e30eb45c17c48ac70041d2cab67f0a2ae7aafdcc8d245ea3442a6300ccc7",
63000957b409SSimon J. Gerraty
63010957b409SSimon J. Gerraty "04dc251be72e88e5723485b6383a637e2fefe07660c519a560b8bc18bdedb86eae2364ea53ba9dca6eb3d2e7d6b806af42b3e87f291b4a8881d5bf572cc9a85e19c86acb28f098f9da0383c566d3c0f58cfd8f395dcf602e5cd40e8c7183f714996e2297ef",
63020957b409SSimon J. Gerraty "c558d7167cbb4508ada042971e71b1377eea4269",
63030957b409SSimon J. Gerraty "33341ba3576a130a50e2a5cf8679224388d5693f5accc235ac95add68e5eb1eec31666d0ca7a1cda6f70a1aa762c05752a51950cdb8af3c5379f18cfe6b5bc55a4648226a15e912ef19ad77adeea911d67cfefd69ba43fa4119135ff642117ba985a7e0100325e9519f1ca6a9216bda055b5785015291125e90dcd07a2ca9673ee",
63040957b409SSimon J. Gerraty
63050957b409SSimon J. Gerraty "0ea37df9a6fea4a8b610373c24cf390c20fa6e2135c400c8a34f5c183a7e8ea4c9ae090ed31759f42dc77719cca400ecdcc517acfc7ac6902675b2ef30c509665f3321482fc69a9fb570d15e01c845d0d8e50d2a24cbf1cf0e714975a5db7b18d9e9e9cb91b5cb16869060ed18b7b56245503f0caf90352b8de81cb5a1d9c6336092f0cd",
63060957b409SSimon J. Gerraty "76fd4e64fdc98eb927a0403e35a084e76ba9f92a",
63070957b409SSimon J. Gerraty "1ed1d848fb1edb44129bd9b354795af97a069a7a00d0151048593e0c72c3517ff9ff2a41d0cb5a0ac860d736a199704f7cb6a53986a88bbd8abcc0076a2ce847880031525d449da2ac78356374c536e343faa7cba42a5aaa6506087791c06a8e989335aed19bfab2d5e67e27fb0c2875af896c21b6e8e7309d04e4f6727e69463e",
63080957b409SSimon J. Gerraty
63090957b409SSimon J. Gerraty /* 1536-bit key */
63100957b409SSimon J. Gerraty "e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b",
63110957b409SSimon J. Gerraty "010001",
63120957b409SSimon J. Gerraty "6a7fd84fb85fad073b34406db74f8d61a6abc12196a961dd79565e9da6e5187bce2d980250f7359575359270d91590bb0e427c71460b55d51410b191bcf309fea131a92c8e702738fa719f1e0041f52e40e91f229f4d96a1e6f172e15596b4510a6daec26105f2bebc53316b87bdf21311666070e8dfee69d52c71a976caae79c72b68d28580dc686d9f5129d225f82b3d615513a882b3db91416b48ce08888213e37eeb9af800d81cab328ce420689903c00c7b5fd31b75503a6d419684d629",
63130957b409SSimon J. Gerraty "f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f6154a762aed165d47dee367",
63140957b409SSimon J. Gerraty "ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e4728cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b489c176128092d629e49d3d",
63150957b409SSimon J. Gerraty "2bb68bddfb0c4f56c8558bffaf892d8043037841e7fa81cfa61a38c5e39b901c8ee71122a5da2227bd6cdeeb481452c12ad3d61d5e4f776a0ab556591befe3e59e5a7fddb8345e1f2f35b9f4cee57c32414c086aec993e9353e480d9eec6289f",
63160957b409SSimon J. Gerraty "4ff897709fad079746494578e70fd8546130eeab5627c49b080f05ee4ad9f3e4b7cba9d6a5dff113a41c3409336833f190816d8a6bc42e9bec56b7567d0f3c9c696db619b245d901dd856db7c8092e77e9a1cccd56ee4dba42c5fdb61aec2669",
63170957b409SSimon J. Gerraty "77b9d1137b50404a982729316efafc7dfe66d34e5a182600d5f30a0a8512051c560d081d4d0a1835ec3d25a60f4e4d6aa948b2bf3dbb5b124cbbc3489255a3a948372f6978496745f943e1db4f18382ceaa505dfc65757bb3f857a58dce52156",
63180957b409SSimon J. Gerraty
63190957b409SSimon J. Gerraty "a88e265855e9d7ca36c68795f0b31b591cd6587c71d060a0b3f7f3eaef43795922028bc2b6ad467cfc2d7f659c5385aa70ba3672cdde4cfe4970cc7904601b278872bf51321c4a972f3c95570f3445d4f57980e0f20df54846e6a52c668f1288c03f95006ea32f562d40d52af9feb32f0fa06db65b588a237b34e592d55cf979f903a642ef64d2ed542aa8c77dc1dd762f45a59303ed75e541ca271e2b60ca709e44fa0661131e8d5d4163fd8d398566ce26de8730e72f9cca737641c244159420637028df0a18079d6208ea8b4711a2c750f5",
63200957b409SSimon J. Gerraty "c0a425313df8d7564bd2434d311523d5257eed80",
63210957b409SSimon J. Gerraty "586107226c3ce013a7c8f04d1a6a2959bb4b8e205ba43a27b50f124111bc35ef589b039f5932187cb696d7d9a32c0c38300a5cdda4834b62d2eb240af33f79d13dfbf095bf599e0d9686948c1964747b67e89c9aba5cd85016236f566cc5802cb13ead51bc7ca6bef3b94dcbdbb1d570469771df0e00b1a8a06777472d2316279edae86474668d4e1efff95f1de61c6020da32ae92bbf16520fef3cf4d88f61121f24bbd9fe91b59caf1235b2a93ff81fc403addf4ebdea84934a9cdaf8e1a9e",
63220957b409SSimon J. Gerraty
63230957b409SSimon J. Gerraty "c8c9c6af04acda414d227ef23e0820c3732c500dc87275e95b0d095413993c2658bc1d988581ba879c2d201f14cb88ced153a01969a7bf0a7be79c84c1486bc12b3fa6c59871b6827c8ce253ca5fefa8a8c690bf326e8e37cdb96d90a82ebab69f86350e1822e8bd536a2e",
63240957b409SSimon J. Gerraty "b307c43b4850a8dac2f15f32e37839ef8c5c0e91",
63250957b409SSimon J. Gerraty "80b6d643255209f0a456763897ac9ed259d459b49c2887e5882ecb4434cfd66dd7e1699375381e51cd7f554f2c271704b399d42b4be2540a0eca61951f55267f7c2878c122842dadb28b01bd5f8c025f7e228418a673c03d6bc0c736d0a29546bd67f786d9d692ccea778d71d98c2063b7a71092187a4d35af108111d83e83eae46c46aa34277e06044589903788f1d5e7cee25fb485e92949118814d6f2c3ee361489016f327fb5bc517eb50470bffa1afa5f4ce9aa0ce5b8ee19bf5501b958",
63260957b409SSimon J. Gerraty
63270957b409SSimon J. Gerraty "0afad42ccd4fc60654a55002d228f52a4a5fe03b8bbb08ca82daca558b44dbe1266e50c0e745a36d9d2904e3408abcd1fd569994063f4a75cc72f2fee2a0cd893a43af1c5b8b487df0a71610024e4f6ddf9f28ad0813c1aab91bcb3c9064d5ff742deffea657094139369e5ea6f4a96319a5cc8224145b545062758fefd1fe3409ae169259c6cdfd6b5f2958e314faecbe69d2cace58ee55179ab9b3e6d1ecc14a557c5febe988595264fc5da1c571462eca798a18a1a4940cdab4a3e92009ccd42e1e947b1314e32238a2dece7d23a89b5b30c751fd0a4a430d2c548594",
63280957b409SSimon J. Gerraty "9a2b007e80978bbb192c354eb7da9aedfc74dbf5",
63290957b409SSimon J. Gerraty "484408f3898cd5f53483f80819efbf2708c34d27a8b2a6fae8b322f9240237f981817aca1846f1084daa6d7c0795f6e5bf1af59c38e1858437ce1f7ec419b98c8736adf6dd9a00b1806d2bd3ad0a73775e05f52dfef3a59ab4b08143f0df05cd1ad9d04bececa6daa4a2129803e200cbc77787caf4c1d0663a6c5987b605952019782caf2ec1426d68fb94ed1d4be816a7ed081b77e6ab330b3ffc073820fecde3727fcbe295ee61a050a343658637c3fd659cfb63736de32d9f90d3c2f63eca",
63300957b409SSimon J. Gerraty
63310957b409SSimon J. Gerraty "1dfd43b46c93db82629bdae2bd0a12b882ea04c3b465f5cf93023f01059626dbbe99f26bb1be949dddd16dc7f3debb19a194627f0b224434df7d8700e9e98b06e360c12fdbe3d19f51c9684eb9089ecbb0a2f0450399d3f59eac7294085d044f5393c6ce737423d8b86c415370d389e30b9f0a3c02d25d0082e8ad6f3f1ef24a45c3cf82b383367063a4d4613e4264f01b2dac2e5aa42043f8fb5f69fa871d14fb273e767a531c40f02f343bc2fb45a0c7e0f6be2561923a77211d66a6e2dbb43c366350beae22da3ac2c1f5077096fcb5c4bf255f7574351ae0b1e1f03632817c0856d4a8ba97afbdc8b85855402bc56926fcec209f9ea8",
63320957b409SSimon J. Gerraty "70f382bddf4d5d2dd88b3bc7b7308be632b84045",
63330957b409SSimon J. Gerraty "84ebeb481be59845b46468bafb471c0112e02b235d84b5d911cbd1926ee5074ae0424495cb20e82308b8ebb65f419a03fb40e72b78981d88aad143053685172c97b29c8b7bf0ae73b5b2263c403da0ed2f80ff7450af7828eb8b86f0028bd2a8b176a4d228cccea18394f238b09ff758cc00bc04301152355742f282b54e663a919e709d8da24ade5500a7b9aa50226e0ca52923e6c2d860ec50ff480fa57477e82b0565f4379f79c772d5c2da80af9fbf325ece6fc20b00961614bee89a183e",
63340957b409SSimon J. Gerraty
63350957b409SSimon J. Gerraty "1bdc6e7c98fb8cf54e9b097b66a831e9cfe52d9d4888448ee4b0978093ba1d7d73ae78b3a62ba4ad95cd289ccb9e005226bb3d178bccaa821fb044a4e21ee97696c14d0678c94c2dae93b0ad73922218553daa7e44ebe57725a7a45cc72b9b2138a6b17c8db411ce8279ee1241aff0a8bec6f77f87edb0c69cb27236e3435a800b192e4f11e519e3fe30fc30eaccca4fbb41769029bf708e817a9e683805be67fa100984683b74838e3bcffa79366eed1d481c76729118838f31ba8a048a93c1be4424598e8df6328b7a77880a3f9c7e2e8dfca8eb5a26fb86bdc556d42bbe01d9fa6ed80646491c9341",
63360957b409SSimon J. Gerraty "d689257a86effa68212c5e0c619eca295fb91b67",
63370957b409SSimon J. Gerraty "82102df8cb91e7179919a04d26d335d64fbc2f872c44833943241de8454810274cdf3db5f42d423db152af7135f701420e39b494a67cbfd19f9119da233a23da5c6439b5ba0d2bc373eee3507001378d4a4073856b7fe2aba0b5ee93b27f4afec7d4d120921c83f606765b02c19e4d6a1a3b95fa4c422951be4f52131077ef17179729cddfbdb56950dbaceefe78cb16640a099ea56d24389eef10f8fecb31ba3ea3b227c0a86698bb89e3e9363905bf22777b2a3aa521b65b4cef76d83bde4c",
63380957b409SSimon J. Gerraty
63390957b409SSimon J. Gerraty "88c7a9f1360401d90e53b101b61c5325c3c75db1b411fbeb8e830b75e96b56670ad245404e16793544ee354bc613a90cc9848715a73db5893e7f6d279815c0c1de83ef8e2956e3a56ed26a888d7a9cdcd042f4b16b7fa51ef1a0573662d16a302d0ec5b285d2e03ad96529c87b3d374db372d95b2443d061b6b1a350ba87807ed083afd1eb05c3f52f4eba5ed2227714fdb50b9d9d9dd6814f62f6272fcd5cdbce7a9ef797",
63400957b409SSimon J. Gerraty "c25f13bf67d081671a0481a1f1820d613bba2276",
63410957b409SSimon J. Gerraty "a7fdb0d259165ca2c88d00bbf1028a867d337699d061193b17a9648e14ccbbaadeacaacdec815e7571294ebb8a117af205fa078b47b0712c199e3ad05135c504c24b81705115740802487992ffd511d4afc6b854491eb3f0dd523139542ff15c3101ee85543517c6a3c79417c67e2dd9aa741e9a29b06dcb593c2336b3670ae3afbac7c3e76e215473e866e338ca244de00b62624d6b9426822ceae9f8cc460895f41250073fd45c5a1e7b425c204a423a699159f6903e710b37a7bb2bc8049f",
63420957b409SSimon J. Gerraty
63430957b409SSimon J. Gerraty /* 2048-bit key */
63440957b409SSimon J. Gerraty "a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05",
63450957b409SSimon J. Gerraty "010001",
63460957b409SSimon J. Gerraty "2d2ff567b3fe74e06191b7fded6de112290c670692430d5969184047da234c9693deed1673ed429539c969d372c04d6b47e0f5b8cee0843e5c22835dbd3b05a0997984ae6058b11bc4907cbf67ed84fa9ae252dfb0d0cd49e618e35dfdfe59bca3ddd66c33cebbc77ad441aa695e13e324b518f01c60f5a85c994ad179f2a6b5fbe93402b11767be01bf073444d6ba1dd2bca5bd074d4a5fae3531ad1303d84b30d897318cbbba04e03c2e66de6d91f82f96ea1d4bb54a5aae102d594657f5c9789553512b296dea29d8023196357e3e3a6e958f39e3c2344038ea604b31edc6f0f7ff6e7181a57c92826a268f86768e96f878562fc71d85d69e448612f7048f",
63470957b409SSimon J. Gerraty "cfd50283feeeb97f6f08d73cbc7b3836f82bbcd499479f5e6f76fdfcb8b38c4f71dc9e88bd6a6f76371afd65d2af1862b32afb34a95f71b8b132043ffebe3a952baf7592448148c03f9c69b1d68e4ce5cf32c86baf46fed301ca1ab403069b32f456b91f71898ab081cd8c4252ef5271915c9794b8f295851da7510f99cb73eb",
63480957b409SSimon J. Gerraty "cc4e90d2a1b3a065d3b2d1f5a8fce31b544475664eab561d2971b99fb7bef844e8ec1f360b8c2ac8359692971ea6a38f723fcc211f5dbcb177a0fdac5164a1d4ff7fbb4e829986353cb983659a148cdd420c7d31ba3822ea90a32be46c030e8c17e1fa0ad37859e06b0aa6fa3b216d9cbe6c0e22339769c0a615913e5da719cf",
63490957b409SSimon J. Gerraty "1c2d1fc32f6bc4004fd85dfde0fbbf9a4c38f9c7c4e41dea1aa88234a201cd92f3b7da526583a98ad85bb360fb983b711e23449d561d1778d7a515486bcbf47b46c9e9e1a3a1f77000efbeb09a8afe47e5b857cda99cb16d7fff9b712e3bd60ca96d9c7973d616d46934a9c050281c004399ceff1db7dda78766a8a9b9cb0873",
63500957b409SSimon J. Gerraty "cb3b3c04caa58c60be7d9b2debb3e39643f4f57397be08236a1e9eafaa706536e71c3acfe01cc651f23c9e05858fee13bb6a8afc47df4edc9a4ba30bcecb73d0157852327ee789015c2e8dee7b9f05a0f31ac94eb6173164740c5c95147cd5f3b5ae2cb4a83787f01d8ab31f27c2d0eea2dd8a11ab906aba207c43c6ee125331",
63510957b409SSimon J. Gerraty "12f6b2cf1374a736fad05616050f96ab4b61d1177c7f9d525a29f3d180e77667e99d99abf0525d0758660f3752655b0f25b8df8431d9a8ff77c16c12a0a5122a9f0bf7cfd5a266a35c159f991208b90316ff444f3e0b6bd0e93b8a7a2448e957e3dda6cfcf2266b106013ac46808d3b3887b3b00344baac9530b4ce708fc32b6",
63520957b409SSimon J. Gerraty
63530957b409SSimon J. Gerraty "883177e5126b9be2d9a9680327d5370c6f26861f5820c43da67a3ad609",
63540957b409SSimon J. Gerraty "04e215ee6ff934b9da70d7730c8734abfcecde89",
63550957b409SSimon J. Gerraty "82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666",
63560957b409SSimon J. Gerraty
63570957b409SSimon J. Gerraty "dd670a01465868adc93f26131957a50c52fb777cdbaa30892c9e12361164ec13979d43048118e4445db87bee58dd987b3425d02071d8dbae80708b039dbb64dbd1de5657d9fed0c118a54143742e0ff3c87f74e45857647af3f79eb0a14c9d75ea9a1a04b7cf478a897a708fd988f48e801edb0b7039df8c23bb3c56f4e821ac",
63580957b409SSimon J. Gerraty "8b2bdd4b40faf545c778ddf9bc1a49cb57f9b71b",
63590957b409SSimon J. Gerraty "14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3",
63600957b409SSimon J. Gerraty
63610957b409SSimon J. Gerraty "48b2b6a57a63c84cea859d65c668284b08d96bdcaabe252db0e4a96cb1bac6019341db6fbefb8d106b0e90eda6bcc6c6262f37e7ea9c7e5d226bd7df85ec5e71efff2f54c5db577ff729ff91b842491de2741d0c631607df586b905b23b91af13da12304bf83eca8a73e871ff9db",
63620957b409SSimon J. Gerraty "4e96fc1b398f92b44671010c0dc3efd6e20c2d73",
63630957b409SSimon J. Gerraty "6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb",
63640957b409SSimon J. Gerraty
63650957b409SSimon J. Gerraty "0b8777c7f839baf0a64bbbdbc5ce79755c57a205b845c174e2d2e90546a089c4e6ec8adffa23a7ea97bae6b65d782b82db5d2b5a56d22a29a05e7c4433e2b82a621abba90add05ce393fc48a840542451a",
63660957b409SSimon J. Gerraty "c7cd698d84b65128d8835e3a8b1eb0e01cb541ec",
63670957b409SSimon J. Gerraty "34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb",
63680957b409SSimon J. Gerraty
63690957b409SSimon J. Gerraty "f1036e008e71e964dadc9219ed30e17f06b4b68a955c16b312b1eddf028b74976bed6b3f6a63d4e77859243c9cccdc98016523abb02483b35591c33aad81213bb7c7bb1a470aabc10d44256c4d4559d916",
63700957b409SSimon J. Gerraty "efa8bff96212b2f4a3f371a10d574152655f5dfb",
63710957b409SSimon J. Gerraty "7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc",
63720957b409SSimon J. Gerraty
63730957b409SSimon J. Gerraty "25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7",
63740957b409SSimon J. Gerraty "ad8b1523703646224b660b550885917ca2d1df28",
63750957b409SSimon J. Gerraty "6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f",
63760957b409SSimon J. Gerraty
63770957b409SSimon J. Gerraty NULL
63780957b409SSimon J. Gerraty };
63790957b409SSimon J. Gerraty
63800957b409SSimon J. Gerraty static void
test_RSA_PSS(const char * name,br_rsa_pss_sign sign,br_rsa_pss_vrfy vrfy)63810957b409SSimon J. Gerraty test_RSA_PSS(const char *name,
63820957b409SSimon J. Gerraty br_rsa_pss_sign sign, br_rsa_pss_vrfy vrfy)
63830957b409SSimon J. Gerraty {
63840957b409SSimon J. Gerraty size_t u;
63850957b409SSimon J. Gerraty
63860957b409SSimon J. Gerraty printf("Test %s: ", name);
63870957b409SSimon J. Gerraty fflush(stdout);
63880957b409SSimon J. Gerraty
63890957b409SSimon J. Gerraty u = 0;
63900957b409SSimon J. Gerraty while (KAT_RSA_PSS[u] != NULL) {
63910957b409SSimon J. Gerraty unsigned char n[512];
63920957b409SSimon J. Gerraty unsigned char e[8];
63930957b409SSimon J. Gerraty unsigned char d[512];
63940957b409SSimon J. Gerraty unsigned char p[256];
63950957b409SSimon J. Gerraty unsigned char q[256];
63960957b409SSimon J. Gerraty unsigned char dp[256];
63970957b409SSimon J. Gerraty unsigned char dq[256];
63980957b409SSimon J. Gerraty unsigned char iq[256];
63990957b409SSimon J. Gerraty br_rsa_public_key pk;
64000957b409SSimon J. Gerraty br_rsa_private_key sk;
64010957b409SSimon J. Gerraty size_t v;
64020957b409SSimon J. Gerraty
64030957b409SSimon J. Gerraty pk.n = n;
64040957b409SSimon J. Gerraty pk.nlen = hextobin(n, KAT_RSA_PSS[u ++]);
64050957b409SSimon J. Gerraty pk.e = e;
64060957b409SSimon J. Gerraty pk.elen = hextobin(e, KAT_RSA_PSS[u ++]);
64070957b409SSimon J. Gerraty
64080957b409SSimon J. Gerraty /*
64090957b409SSimon J. Gerraty * 'd' is in the test vectors, but we don't use it.
64100957b409SSimon J. Gerraty */
64110957b409SSimon J. Gerraty hextobin(d, KAT_RSA_PSS[u ++]);
64120957b409SSimon J. Gerraty
64130957b409SSimon J. Gerraty for (v = 0; n[v] == 0; v ++);
64140957b409SSimon J. Gerraty sk.n_bitlen = BIT_LENGTH(n[v]) + ((pk.nlen - 1 - v) << 3);
64150957b409SSimon J. Gerraty sk.p = p;
64160957b409SSimon J. Gerraty sk.plen = hextobin(p, KAT_RSA_PSS[u ++]);
64170957b409SSimon J. Gerraty sk.q = q;
64180957b409SSimon J. Gerraty sk.qlen = hextobin(q, KAT_RSA_PSS[u ++]);
64190957b409SSimon J. Gerraty sk.dp = dp;
64200957b409SSimon J. Gerraty sk.dplen = hextobin(dp, KAT_RSA_PSS[u ++]);
64210957b409SSimon J. Gerraty sk.dq = dq;
64220957b409SSimon J. Gerraty sk.dqlen = hextobin(dq, KAT_RSA_PSS[u ++]);
64230957b409SSimon J. Gerraty sk.iq = iq;
64240957b409SSimon J. Gerraty sk.iqlen = hextobin(iq, KAT_RSA_PSS[u ++]);
64250957b409SSimon J. Gerraty
64260957b409SSimon J. Gerraty for (v = 0; v < 6; v ++) {
64270957b409SSimon J. Gerraty unsigned char plain[512], salt[128], sig[512];
64280957b409SSimon J. Gerraty size_t plain_len, salt_len, sig_len;
64290957b409SSimon J. Gerraty rng_fake_ctx rng;
64300957b409SSimon J. Gerraty unsigned char hash[20], tmp[513];
64310957b409SSimon J. Gerraty br_sha1_context sc;
64320957b409SSimon J. Gerraty
64330957b409SSimon J. Gerraty plain_len = hextobin(plain, KAT_RSA_PSS[u ++]);
64340957b409SSimon J. Gerraty salt_len = hextobin(salt, KAT_RSA_PSS[u ++]);
64350957b409SSimon J. Gerraty sig_len = hextobin(sig, KAT_RSA_PSS[u ++]);
64360957b409SSimon J. Gerraty
64370957b409SSimon J. Gerraty br_sha1_init(&sc);
64380957b409SSimon J. Gerraty br_sha1_update(&sc, plain, plain_len);
64390957b409SSimon J. Gerraty br_sha1_out(&sc, hash);
64400957b409SSimon J. Gerraty rng_fake_init(&rng, NULL, salt, salt_len);
64410957b409SSimon J. Gerraty
64420957b409SSimon J. Gerraty memset(tmp, 0, sizeof tmp);
64430957b409SSimon J. Gerraty if (sign(&rng.vtable,
64440957b409SSimon J. Gerraty &br_sha1_vtable, &br_sha1_vtable,
64450957b409SSimon J. Gerraty hash, salt_len, &sk, tmp) != 1)
64460957b409SSimon J. Gerraty {
64470957b409SSimon J. Gerraty fprintf(stderr, "signature failed\n");
64480957b409SSimon J. Gerraty }
64490957b409SSimon J. Gerraty if (rng.ptr != rng.len) {
64500957b409SSimon J. Gerraty fprintf(stderr, "salt not fully consumed\n");
64510957b409SSimon J. Gerraty exit(EXIT_FAILURE);
64520957b409SSimon J. Gerraty }
64530957b409SSimon J. Gerraty check_equals("KAT RSA/PSS sign", tmp, sig, sig_len);
64540957b409SSimon J. Gerraty
64550957b409SSimon J. Gerraty if (vrfy(sig, sig_len,
64560957b409SSimon J. Gerraty &br_sha1_vtable, &br_sha1_vtable,
64570957b409SSimon J. Gerraty hash, salt_len, &pk) != 1)
64580957b409SSimon J. Gerraty {
64590957b409SSimon J. Gerraty fprintf(stderr, "verification failed\n");
64600957b409SSimon J. Gerraty exit(EXIT_FAILURE);
64610957b409SSimon J. Gerraty }
64620957b409SSimon J. Gerraty
64630957b409SSimon J. Gerraty sig[sig_len >> 1] ^= 0x01;
64640957b409SSimon J. Gerraty if (vrfy(sig, sig_len,
64650957b409SSimon J. Gerraty &br_sha1_vtable, &br_sha1_vtable,
64660957b409SSimon J. Gerraty hash, salt_len, &pk) != 0)
64670957b409SSimon J. Gerraty {
64680957b409SSimon J. Gerraty fprintf(stderr,
64690957b409SSimon J. Gerraty "verification should have failed\n");
64700957b409SSimon J. Gerraty exit(EXIT_FAILURE);
64710957b409SSimon J. Gerraty }
64720957b409SSimon J. Gerraty
64730957b409SSimon J. Gerraty printf(".");
64740957b409SSimon J. Gerraty fflush(stdout);
64750957b409SSimon J. Gerraty }
64760957b409SSimon J. Gerraty }
64770957b409SSimon J. Gerraty
64780957b409SSimon J. Gerraty printf(" done.\n");
64790957b409SSimon J. Gerraty fflush(stdout);
64800957b409SSimon J. Gerraty }
64810957b409SSimon J. Gerraty
64820957b409SSimon J. Gerraty /*
64830957b409SSimon J. Gerraty * Test vectors from pkcs-1v2-1d2-vec.zip (originally from ftp.rsa.com).
64840957b409SSimon J. Gerraty * There are ten RSA keys, and for each RSA key, there are 6 messages,
64850957b409SSimon J. Gerraty * each with an explicit seed.
64860957b409SSimon J. Gerraty *
64870957b409SSimon J. Gerraty * Field order:
64880957b409SSimon J. Gerraty * modulus (n)
64890957b409SSimon J. Gerraty * public exponent (e)
64900957b409SSimon J. Gerraty * first factor (p)
64910957b409SSimon J. Gerraty * second factor (q)
64920957b409SSimon J. Gerraty * first private exponent (dp)
64930957b409SSimon J. Gerraty * second private exponent (dq)
64940957b409SSimon J. Gerraty * CRT coefficient (iq)
64950957b409SSimon J. Gerraty * cleartext 1
64960957b409SSimon J. Gerraty * seed 1 (20-byte random value)
64970957b409SSimon J. Gerraty * ciphertext 1
64980957b409SSimon J. Gerraty * cleartext 2
64990957b409SSimon J. Gerraty * seed 2 (20-byte random value)
65000957b409SSimon J. Gerraty * ciphertext 2
65010957b409SSimon J. Gerraty * ...
65020957b409SSimon J. Gerraty * cleartext 6
65030957b409SSimon J. Gerraty * seed 6 (20-byte random value)
65040957b409SSimon J. Gerraty * ciphertext 6
65050957b409SSimon J. Gerraty *
65060957b409SSimon J. Gerraty * This pattern is repeated for all keys. The array stops on a NULL.
65070957b409SSimon J. Gerraty */
65080957b409SSimon J. Gerraty static const char *KAT_RSA_OAEP[] = {
65090957b409SSimon J. Gerraty /* 1024-bit key, from oeap-int.txt */
65100957b409SSimon J. Gerraty "BBF82F090682CE9C2338AC2B9DA871F7368D07EED41043A440D6B6F07454F51FB8DFBAAF035C02AB61EA48CEEB6FCD4876ED520D60E1EC4619719D8A5B8B807FAFB8E0A3DFC737723EE6B4B7D93A2584EE6A649D060953748834B2454598394EE0AAB12D7B61A51F527A9A41F6C1687FE2537298CA2A8F5946F8E5FD091DBDCB",
65110957b409SSimon J. Gerraty "11",
65120957b409SSimon J. Gerraty "EECFAE81B1B9B3C908810B10A1B5600199EB9F44AEF4FDA493B81A9E3D84F632124EF0236E5D1E3B7E28FAE7AA040A2D5B252176459D1F397541BA2A58FB6599",
65130957b409SSimon J. Gerraty "C97FB1F027F453F6341233EAAAD1D9353F6C42D08866B1D05A0F2035028B9D869840B41666B42E92EA0DA3B43204B5CFCE3352524D0416A5A441E700AF461503",
65140957b409SSimon J. Gerraty "54494CA63EBA0337E4E24023FCD69A5AEB07DDDC0183A4D0AC9B54B051F2B13ED9490975EAB77414FF59C1F7692E9A2E202B38FC910A474174ADC93C1F67C981",
65150957b409SSimon J. Gerraty "471E0290FF0AF0750351B7F878864CA961ADBD3A8A7E991C5C0556A94C3146A7F9803F8F6F8AE342E931FD8AE47A220D1B99A495849807FE39F9245A9836DA3D",
65160957b409SSimon J. Gerraty "B06C4FDABB6301198D265BDBAE9423B380F271F73453885093077FCD39E2119FC98632154F5883B167A967BF402B4E9E2E0F9656E698EA3666EDFB25798039F7",
65170957b409SSimon J. Gerraty
65180957b409SSimon J. Gerraty /* oaep-int.txt contains only one message, so we repeat it six
65190957b409SSimon J. Gerraty times to respect our array format. */
65200957b409SSimon J. Gerraty "D436E99569FD32A7C8A05BBC90D32C49",
65210957b409SSimon J. Gerraty "AAFD12F659CAE63489B479E5076DDEC2F06CB58F",
65220957b409SSimon J. Gerraty "1253E04DC0A5397BB44A7AB87E9BF2A039A33D1E996FC82A94CCD30074C95DF763722017069E5268DA5D1C0B4F872CF653C11DF82314A67968DFEAE28DEF04BB6D84B1C31D654A1970E5783BD6EB96A024C2CA2F4A90FE9F2EF5C9C140E5BB48DA9536AD8700C84FC9130ADEA74E558D51A74DDF85D8B50DE96838D6063E0955",
65230957b409SSimon J. Gerraty
65240957b409SSimon J. Gerraty "D436E99569FD32A7C8A05BBC90D32C49",
65250957b409SSimon J. Gerraty "AAFD12F659CAE63489B479E5076DDEC2F06CB58F",
65260957b409SSimon J. Gerraty "1253E04DC0A5397BB44A7AB87E9BF2A039A33D1E996FC82A94CCD30074C95DF763722017069E5268DA5D1C0B4F872CF653C11DF82314A67968DFEAE28DEF04BB6D84B1C31D654A1970E5783BD6EB96A024C2CA2F4A90FE9F2EF5C9C140E5BB48DA9536AD8700C84FC9130ADEA74E558D51A74DDF85D8B50DE96838D6063E0955",
65270957b409SSimon J. Gerraty
65280957b409SSimon J. Gerraty "D436E99569FD32A7C8A05BBC90D32C49",
65290957b409SSimon J. Gerraty "AAFD12F659CAE63489B479E5076DDEC2F06CB58F",
65300957b409SSimon J. Gerraty "1253E04DC0A5397BB44A7AB87E9BF2A039A33D1E996FC82A94CCD30074C95DF763722017069E5268DA5D1C0B4F872CF653C11DF82314A67968DFEAE28DEF04BB6D84B1C31D654A1970E5783BD6EB96A024C2CA2F4A90FE9F2EF5C9C140E5BB48DA9536AD8700C84FC9130ADEA74E558D51A74DDF85D8B50DE96838D6063E0955",
65310957b409SSimon J. Gerraty
65320957b409SSimon J. Gerraty "D436E99569FD32A7C8A05BBC90D32C49",
65330957b409SSimon J. Gerraty "AAFD12F659CAE63489B479E5076DDEC2F06CB58F",
65340957b409SSimon J. Gerraty "1253E04DC0A5397BB44A7AB87E9BF2A039A33D1E996FC82A94CCD30074C95DF763722017069E5268DA5D1C0B4F872CF653C11DF82314A67968DFEAE28DEF04BB6D84B1C31D654A1970E5783BD6EB96A024C2CA2F4A90FE9F2EF5C9C140E5BB48DA9536AD8700C84FC9130ADEA74E558D51A74DDF85D8B50DE96838D6063E0955",
65350957b409SSimon J. Gerraty
65360957b409SSimon J. Gerraty "D436E99569FD32A7C8A05BBC90D32C49",
65370957b409SSimon J. Gerraty "AAFD12F659CAE63489B479E5076DDEC2F06CB58F",
65380957b409SSimon J. Gerraty "1253E04DC0A5397BB44A7AB87E9BF2A039A33D1E996FC82A94CCD30074C95DF763722017069E5268DA5D1C0B4F872CF653C11DF82314A67968DFEAE28DEF04BB6D84B1C31D654A1970E5783BD6EB96A024C2CA2F4A90FE9F2EF5C9C140E5BB48DA9536AD8700C84FC9130ADEA74E558D51A74DDF85D8B50DE96838D6063E0955",
65390957b409SSimon J. Gerraty
65400957b409SSimon J. Gerraty "D436E99569FD32A7C8A05BBC90D32C49",
65410957b409SSimon J. Gerraty "AAFD12F659CAE63489B479E5076DDEC2F06CB58F",
65420957b409SSimon J. Gerraty "1253E04DC0A5397BB44A7AB87E9BF2A039A33D1E996FC82A94CCD30074C95DF763722017069E5268DA5D1C0B4F872CF653C11DF82314A67968DFEAE28DEF04BB6D84B1C31D654A1970E5783BD6EB96A024C2CA2F4A90FE9F2EF5C9C140E5BB48DA9536AD8700C84FC9130ADEA74E558D51A74DDF85D8B50DE96838D6063E0955",
65430957b409SSimon J. Gerraty
65440957b409SSimon J. Gerraty /* 1024-bit key */
65450957b409SSimon J. Gerraty "A8B3B284AF8EB50B387034A860F146C4919F318763CD6C5598C8AE4811A1E0ABC4C7E0B082D693A5E7FCED675CF4668512772C0CBC64A742C6C630F533C8CC72F62AE833C40BF25842E984BB78BDBF97C0107D55BDB662F5C4E0FAB9845CB5148EF7392DD3AAFF93AE1E6B667BB3D4247616D4F5BA10D4CFD226DE88D39F16FB",
65460957b409SSimon J. Gerraty "010001",
65470957b409SSimon J. Gerraty "D32737E7267FFE1341B2D5C0D150A81B586FB3132BED2F8D5262864A9CB9F30AF38BE448598D413A172EFB802C21ACF1C11C520C2F26A471DCAD212EAC7CA39D",
65480957b409SSimon J. Gerraty "CC8853D1D54DA630FAC004F471F281C7B8982D8224A490EDBEB33D3E3D5CC93C4765703D1DD791642F1F116A0DD852BE2419B2AF72BFE9A030E860B0288B5D77",
65490957b409SSimon J. Gerraty "0E12BF1718E9CEF5599BA1C3882FE8046A90874EEFCE8F2CCC20E4F2741FB0A33A3848AEC9C9305FBECBD2D76819967D4671ACC6431E4037968DB37878E695C1",
65500957b409SSimon J. Gerraty "95297B0F95A2FA67D00707D609DFD4FC05C89DAFC2EF6D6EA55BEC771EA333734D9251E79082ECDA866EFEF13C459E1A631386B7E354C899F5F112CA85D71583",
65510957b409SSimon J. Gerraty "4F456C502493BDC0ED2AB756A3A6ED4D67352A697D4216E93212B127A63D5411CE6FA98D5DBEFD73263E3728142743818166ED7DD63687DD2A8CA1D2F4FBD8E1",
65520957b409SSimon J. Gerraty
65530957b409SSimon J. Gerraty "6628194E12073DB03BA94CDA9EF9532397D50DBA79B987004AFEFE34",
65540957b409SSimon J. Gerraty "18B776EA21069D69776A33E96BAD48E1DDA0A5EF",
65550957b409SSimon J. Gerraty "354FE67B4A126D5D35FE36C777791A3F7BA13DEF484E2D3908AFF722FAD468FB21696DE95D0BE911C2D3174F8AFCC201035F7B6D8E69402DE5451618C21A535FA9D7BFC5B8DD9FC243F8CF927DB31322D6E881EAA91A996170E657A05A266426D98C88003F8477C1227094A0D9FA1E8C4024309CE1ECCCB5210035D47AC72E8A",
65560957b409SSimon J. Gerraty
65570957b409SSimon J. Gerraty "750C4047F547E8E41411856523298AC9BAE245EFAF1397FBE56F9DD5",
65580957b409SSimon J. Gerraty "0CC742CE4A9B7F32F951BCB251EFD925FE4FE35F",
65590957b409SSimon J. Gerraty "640DB1ACC58E0568FE5407E5F9B701DFF8C3C91E716C536FC7FCEC6CB5B71C1165988D4A279E1577D730FC7A29932E3F00C81515236D8D8E31017A7A09DF4352D904CDEB79AA583ADCC31EA698A4C05283DABA9089BE5491F67C1A4EE48DC74BBBE6643AEF846679B4CB395A352D5ED115912DF696FFE0702932946D71492B44",
65600957b409SSimon J. Gerraty
65610957b409SSimon J. Gerraty "D94AE0832E6445CE42331CB06D531A82B1DB4BAAD30F746DC916DF24D4E3C2451FFF59A6423EB0E1D02D4FE646CF699DFD818C6E97B051",
65620957b409SSimon J. Gerraty "2514DF4695755A67B288EAF4905C36EEC66FD2FD",
65630957b409SSimon J. Gerraty "423736ED035F6026AF276C35C0B3741B365E5F76CA091B4E8C29E2F0BEFEE603595AA8322D602D2E625E95EB81B2F1C9724E822ECA76DB8618CF09C5343503A4360835B5903BC637E3879FB05E0EF32685D5AEC5067CD7CC96FE4B2670B6EAC3066B1FCF5686B68589AAFB7D629B02D8F8625CA3833624D4800FB081B1CF94EB",
65640957b409SSimon J. Gerraty
65650957b409SSimon J. Gerraty "52E650D98E7F2A048B4F86852153B97E01DD316F346A19F67A85",
65660957b409SSimon J. Gerraty "C4435A3E1A18A68B6820436290A37CEFB85DB3FB",
65670957b409SSimon J. Gerraty "45EAD4CA551E662C9800F1ACA8283B0525E6ABAE30BE4B4ABA762FA40FD3D38E22ABEFC69794F6EBBBC05DDBB11216247D2F412FD0FBA87C6E3ACD888813646FD0E48E785204F9C3F73D6D8239562722DDDD8771FEC48B83A31EE6F592C4CFD4BC88174F3B13A112AAE3B9F7B80E0FC6F7255BA880DC7D8021E22AD6A85F0755",
65680957b409SSimon J. Gerraty
65690957b409SSimon J. Gerraty "8DA89FD9E5F974A29FEFFB462B49180F6CF9E802",
65700957b409SSimon J. Gerraty "B318C42DF3BE0F83FEA823F5A7B47ED5E425A3B5",
65710957b409SSimon J. Gerraty "36F6E34D94A8D34DAACBA33A2139D00AD85A9345A86051E73071620056B920E219005855A213A0F23897CDCD731B45257C777FE908202BEFDD0B58386B1244EA0CF539A05D5D10329DA44E13030FD760DCD644CFEF2094D1910D3F433E1C7C6DD18BC1F2DF7F643D662FB9DD37EAD9059190F4FA66CA39E869C4EB449CBDC439",
65720957b409SSimon J. Gerraty
65730957b409SSimon J. Gerraty "26521050844271",
65740957b409SSimon J. Gerraty "E4EC0982C2336F3A677F6A356174EB0CE887ABC2",
65750957b409SSimon J. Gerraty "42CEE2617B1ECEA4DB3F4829386FBD61DAFBF038E180D837C96366DF24C097B4AB0FAC6BDF590D821C9F10642E681AD05B8D78B378C0F46CE2FAD63F74E0AD3DF06B075D7EB5F5636F8D403B9059CA761B5C62BB52AA45002EA70BAACE08DED243B9D8CBD62A68ADE265832B56564E43A6FA42ED199A099769742DF1539E8255",
65760957b409SSimon J. Gerraty
65770957b409SSimon J. Gerraty /* 1025-bit key */
65780957b409SSimon J. Gerraty "01947C7FCE90425F47279E70851F25D5E62316FE8A1DF19371E3E628E260543E4901EF6081F68C0B8141190D2AE8DABA7D1250EC6DB636E944EC3722877C7C1D0A67F14B1694C5F0379451A43E49A32DDE83670B73DA91A1C99BC23B436A60055C610F0BAF99C1A079565B95A3F1526632D1D4DA60F20EDA25E653C4F002766F45",
65790957b409SSimon J. Gerraty "010001",
65800957b409SSimon J. Gerraty "0159DBDE04A33EF06FB608B80B190F4D3E22BCC13AC8E4A081033ABFA416EDB0B338AA08B57309EA5A5240E7DC6E54378C69414C31D97DDB1F406DB3769CC41A43",
65810957b409SSimon J. Gerraty "012B652F30403B38B40995FD6FF41A1ACC8ADA70373236B7202D39B2EE30CFB46DB09511F6F307CC61CC21606C18A75B8A62F822DF031BA0DF0DAFD5506F568BD7",
65820957b409SSimon J. Gerraty "436EF508DE736519C2DA4C580D98C82CB7452A3FB5EFADC3B9C7789A1BC6584F795ADDBBD32439C74686552ECB6C2C307A4D3AF7F539EEC157248C7B31F1A255",
65830957b409SSimon J. Gerraty "012B15A89F3DFB2B39073E73F02BDD0C1A7B379DD435F05CDDE2EFF9E462948B7CEC62EE9050D5E0816E0785A856B49108DCB75F3683874D1CA6329A19013066FF",
65840957b409SSimon J. Gerraty "0270DB17D5914B018D76118B24389A7350EC836B0063A21721236FD8EDB6D89B51E7EEB87B611B7132CB7EA7356C23151C1E7751507C786D9EE1794170A8C8E8",
65850957b409SSimon J. Gerraty
65860957b409SSimon J. Gerraty "8FF00CAA605C702830634D9A6C3D42C652B58CF1D92FEC570BEEE7",
65870957b409SSimon J. Gerraty "8C407B5EC2899E5099C53E8CE793BF94E71B1782",
65880957b409SSimon J. Gerraty "0181AF8922B9FCB4D79D92EBE19815992FC0C1439D8BCD491398A0F4AD3A329A5BD9385560DB532683C8B7DA04E4B12AED6AACDF471C34C9CDA891ADDCC2DF3456653AA6382E9AE59B54455257EB099D562BBE10453F2B6D13C59C02E10F1F8ABB5DA0D0570932DACF2D0901DB729D0FEFCC054E70968EA540C81B04BCAEFE720E",
65890957b409SSimon J. Gerraty
65900957b409SSimon J. Gerraty "2D",
65910957b409SSimon J. Gerraty "B600CF3C2E506D7F16778C910D3A8B003EEE61D5",
65920957b409SSimon J. Gerraty "018759FF1DF63B2792410562314416A8AEAF2AC634B46F940AB82D64DBF165EEE33011DA749D4BAB6E2FCD18129C9E49277D8453112B429A222A8471B070993998E758861C4D3F6D749D91C4290D332C7A4AB3F7EA35FF3A07D497C955FF0FFC95006B62C6D296810D9BFAB024196C7934012C2DF978EF299ABA239940CBA10245",
65930957b409SSimon J. Gerraty
65940957b409SSimon J. Gerraty "74FC88C51BC90F77AF9D5E9A4A70133D4B4E0B34DA3C37C7EF8E",
65950957b409SSimon J. Gerraty "A73768AEEAA91F9D8C1ED6F9D2B63467F07CCAE3",
65960957b409SSimon J. Gerraty "018802BAB04C60325E81C4962311F2BE7C2ADCE93041A00719C88F957575F2C79F1B7BC8CED115C706B311C08A2D986CA3B6A9336B147C29C6F229409DDEC651BD1FDD5A0B7F610C9937FDB4A3A762364B8B3206B4EA485FD098D08F63D4AA8BB2697D027B750C32D7F74EAF5180D2E9B66B17CB2FA55523BC280DA10D14BE2053",
65970957b409SSimon J. Gerraty
65980957b409SSimon J. Gerraty "A7EB2A5036931D27D4E891326D99692FFADDA9BF7EFD3E34E622C4ADC085F721DFE885072C78A203B151739BE540FA8C153A10F00A",
65990957b409SSimon J. Gerraty "9A7B3B0E708BD96F8190ECAB4FB9B2B3805A8156",
66000957b409SSimon J. Gerraty "00A4578CBC176318A638FBA7D01DF15746AF44D4F6CD96D7E7C495CBF425B09C649D32BF886DA48FBAF989A2117187CAFB1FB580317690E3CCD446920B7AF82B31DB5804D87D01514ACBFA9156E782F867F6BED9449E0E9A2C09BCECC6AA087636965E34B3EC766F2FE2E43018A2FDDEB140616A0E9D82E5331024EE0652FC7641",
66010957b409SSimon J. Gerraty
66020957b409SSimon J. Gerraty "2EF2B066F854C33F3BDCBB5994A435E73D6C6C",
66030957b409SSimon J. Gerraty "EB3CEBBC4ADC16BB48E88C8AEC0E34AF7F427FD3",
66040957b409SSimon J. Gerraty "00EBC5F5FDA77CFDAD3C83641A9025E77D72D8A6FB33A810F5950F8D74C73E8D931E8634D86AB1246256AE07B6005B71B7F2FB98351218331CE69B8FFBDC9DA08BBC9C704F876DEB9DF9FC2EC065CAD87F9090B07ACC17AA7F997B27ACA48806E897F771D95141FE4526D8A5301B678627EFAB707FD40FBEBD6E792A25613E7AEC",
66050957b409SSimon J. Gerraty
66060957b409SSimon J. Gerraty "8A7FB344C8B6CB2CF2EF1F643F9A3218F6E19BBA89C0",
66070957b409SSimon J. Gerraty "4C45CF4D57C98E3D6D2095ADC51C489EB50DFF84",
66080957b409SSimon J. Gerraty "010839EC20C27B9052E55BEFB9B77E6FC26E9075D7A54378C646ABDF51E445BD5715DE81789F56F1803D9170764A9E93CB78798694023EE7393CE04BC5D8F8C5A52C171D43837E3ACA62F609EB0AA5FFB0960EF04198DD754F57F7FBE6ABF765CF118B4CA443B23B5AAB266F952326AC4581100644325F8B721ACD5D04FF14EF3A",
66090957b409SSimon J. Gerraty
66100957b409SSimon J. Gerraty /* 2048-bit key */
66110957b409SSimon J. Gerraty "AE45ED5601CEC6B8CC05F803935C674DDBE0D75C4C09FD7951FC6B0CAEC313A8DF39970C518BFFBA5ED68F3F0D7F22A4029D413F1AE07E4EBE9E4177CE23E7F5404B569E4EE1BDCF3C1FB03EF113802D4F855EB9B5134B5A7C8085ADCAE6FA2FA1417EC3763BE171B0C62B760EDE23C12AD92B980884C641F5A8FAC26BDAD4A03381A22FE1B754885094C82506D4019A535A286AFEB271BB9BA592DE18DCF600C2AEEAE56E02F7CF79FC14CF3BDC7CD84FEBBBF950CA90304B2219A7AA063AEFA2C3C1980E560CD64AFE779585B6107657B957857EFDE6010988AB7DE417FC88D8F384C4E6E72C3F943E0C31C0C4A5CC36F879D8A3AC9D7D59860EAADA6B83BB",
66120957b409SSimon J. Gerraty "010001",
66130957b409SSimon J. Gerraty "ECF5AECD1E5515FFFACBD75A2816C6EBF49018CDFB4638E185D66A7396B6F8090F8018C7FD95CC34B857DC17F0CC6516BB1346AB4D582CADAD7B4103352387B70338D084047C9D9539B6496204B3DD6EA442499207BEC01F964287FF6336C3984658336846F56E46861881C10233D2176BF15A5E96DDC780BC868AA77D3CE769",
66140957b409SSimon J. Gerraty "BC46C464FC6AC4CA783B0EB08A3C841B772F7E9B2F28BABD588AE885E1A0C61E4858A0FB25AC299990F35BE85164C259BA1175CDD7192707135184992B6C29B746DD0D2CABE142835F7D148CC161524B4A09946D48B828473F1CE76B6CB6886C345C03E05F41D51B5C3A90A3F24073C7D74A4FE25D9CF21C75960F3FC3863183",
66150957b409SSimon J. Gerraty "C73564571D00FB15D08A3DE9957A50915D7126E9442DACF42BC82E862E5673FF6A008ED4D2E374617DF89F17A160B43B7FDA9CB6B6B74218609815F7D45CA263C159AA32D272D127FAF4BC8CA2D77378E8AEB19B0AD7DA3CB3DE0AE7314980F62B6D4B0A875D1DF03C1BAE39CCD833EF6CD7E2D9528BF084D1F969E794E9F6C1",
66160957b409SSimon J. Gerraty "2658B37F6DF9C1030BE1DB68117FA9D87E39EA2B693B7E6D3A2F70947413EEC6142E18FB8DFCB6AC545D7C86A0AD48F8457170F0EFB26BC48126C53EFD1D16920198DC2A1107DC282DB6A80CD3062360BA3FA13F70E4312FF1A6CD6B8FC4CD9C5C3DB17C6D6A57212F73AE29F619327BAD59B153858585BA4E28B60A62A45E49",
66170957b409SSimon J. Gerraty "6F38526B3925085534EF3E415A836EDE8B86158A2C7CBFECCB0BD834304FEC683BA8D4F479C433D43416E63269623CEA100776D85AFF401D3FFF610EE65411CE3B1363D63A9709EEDE42647CEA561493D54570A879C18682CD97710B96205EC31117D73B5F36223FADD6E8BA90DD7C0EE61D44E163251E20C7F66EB305117CB8",
66180957b409SSimon J. Gerraty
66190957b409SSimon J. Gerraty "8BBA6BF82A6C0F86D5F1756E97956870B08953B06B4EB205BC1694EE",
66200957b409SSimon J. Gerraty "47E1AB7119FEE56C95EE5EAAD86F40D0AA63BD33",
66210957b409SSimon J. Gerraty "53EA5DC08CD260FB3B858567287FA91552C30B2FEBFBA213F0AE87702D068D19BAB07FE574523DFB42139D68C3C5AFEEE0BFE4CB7969CBF382B804D6E61396144E2D0E60741F8993C3014B58B9B1957A8BABCD23AF854F4C356FB1662AA72BFCC7E586559DC4280D160C126785A723EBEEBEFF71F11594440AAEF87D10793A8774A239D4A04C87FE1467B9DAF85208EC6C7255794A96CC29142F9A8BD418E3C1FD67344B0CD0829DF3B2BEC60253196293C6B34D3F75D32F213DD45C6273D505ADF4CCED1057CB758FC26AEEFA441255ED4E64C199EE075E7F16646182FDB464739B68AB5DAFF0E63E9552016824F054BF4D3C8C90A97BB6B6553284EB429FCC",
66220957b409SSimon J. Gerraty
66230957b409SSimon J. Gerraty "E6AD181F053B58A904F2457510373E57",
66240957b409SSimon J. Gerraty "6D17F5B4C1FFAC351D195BF7B09D09F09A4079CF",
66250957b409SSimon J. Gerraty "A2B1A430A9D657E2FA1C2BB5ED43FFB25C05A308FE9093C01031795F5874400110828AE58FB9B581CE9DDDD3E549AE04A0985459BDE6C626594E7B05DC4278B2A1465C1368408823C85E96DC66C3A30983C639664FC4569A37FE21E5A195B5776EED2DF8D8D361AF686E750229BBD663F161868A50615E0C337BEC0CA35FEC0BB19C36EB2E0BBCC0582FA1D93AACDB061063F59F2CE1EE43605E5D89ECA183D2ACDFE9F81011022AD3B43A3DD417DAC94B4E11EA81B192966E966B182082E71964607B4F8002F36299844A11F2AE0FAEAC2EAE70F8F4F98088ACDCD0AC556E9FCCC511521908FAD26F04C64201450305778758B0538BF8B5BB144A828E629795",
66260957b409SSimon J. Gerraty
66270957b409SSimon J. Gerraty "510A2CF60E866FA2340553C94EA39FBC256311E83E94454B4124",
66280957b409SSimon J. Gerraty "385387514DECCC7C740DD8CDF9DAEE49A1CBFD54",
66290957b409SSimon J. Gerraty "9886C3E6764A8B9A84E84148EBD8C3B1AA8050381A78F668714C16D9CFD2A6EDC56979C535D9DEE3B44B85C18BE8928992371711472216D95DDA98D2EE8347C9B14DFFDFF84AA48D25AC06F7D7E65398AC967B1CE90925F67DCE049B7F812DB0742997A74D44FE81DBE0E7A3FEAF2E5C40AF888D550DDBBE3BC20657A29543F8FC2913B9BD1A61B2AB2256EC409BBD7DC0D17717EA25C43F42ED27DF8738BF4AFC6766FF7AFF0859555EE283920F4C8A63C4A7340CBAFDDC339ECDB4B0515002F96C932B5B79167AF699C0AD3FCCFDF0F44E85A70262BF2E18FE34B850589975E867FF969D48EABF212271546CDC05A69ECB526E52870C836F307BD798780EDE",
66300957b409SSimon J. Gerraty
66310957b409SSimon J. Gerraty "BCDD190DA3B7D300DF9A06E22CAAE2A75F10C91FF667B7C16BDE8B53064A2649A94045C9",
66320957b409SSimon J. Gerraty "5CACA6A0F764161A9684F85D92B6E0EF37CA8B65",
66330957b409SSimon J. Gerraty "6318E9FB5C0D05E5307E1683436E903293AC4642358AAA223D7163013ABA87E2DFDA8E60C6860E29A1E92686163EA0B9175F329CA3B131A1EDD3A77759A8B97BAD6A4F8F4396F28CF6F39CA58112E48160D6E203DAA5856F3ACA5FFED577AF499408E3DFD233E3E604DBE34A9C4C9082DE65527CAC6331D29DC80E0508A0FA7122E7F329F6CCA5CFA34D4D1DA417805457E008BEC549E478FF9E12A763C477D15BBB78F5B69BD57830FC2C4ED686D79BC72A95D85F88134C6B0AFE56A8CCFBC855828BB339BD17909CF1D70DE3335AE07039093E606D655365DE6550B872CD6DE1D440EE031B61945F629AD8A353B0D40939E96A3C450D2A8D5EEE9F678093C8",
66340957b409SSimon J. Gerraty
66350957b409SSimon J. Gerraty "A7DD6C7DC24B46F9DD5F1E91ADA4C3B3DF947E877232A9",
66360957b409SSimon J. Gerraty "95BCA9E3859894B3DD869FA7ECD5BBC6401BF3E4",
66370957b409SSimon J. Gerraty "75290872CCFD4A4505660D651F56DA6DAA09CA1301D890632F6A992F3D565CEE464AFDED40ED3B5BE9356714EA5AA7655F4A1366C2F17C728F6F2C5A5D1F8E28429BC4E6F8F2CFF8DA8DC0E0A9808E45FD09EA2FA40CB2B6CE6FFFF5C0E159D11B68D90A85F7B84E103B09E682666480C657505C0929259468A314786D74EAB131573CF234BF57DB7D9E66CC6748192E002DC0DEEA930585F0831FDCD9BC33D51F79ED2FFC16BCF4D59812FCEBCAA3F9069B0E445686D644C25CCF63B456EE5FA6FFE96F19CDF751FED9EAF35957754DBF4BFEA5216AA1844DC507CB2D080E722EBA150308C2B5FF1193620F1766ECF4481BAFB943BD292877F2136CA494ABA0",
66380957b409SSimon J. Gerraty
66390957b409SSimon J. Gerraty "EAF1A73A1B0C4609537DE69CD9228BBCFB9A8CA8C6C3EFAF056FE4A7F4634ED00B7C39EC6922D7B8EA2C04EBAC",
66400957b409SSimon J. Gerraty "9F47DDF42E97EEA856A9BDBC714EB3AC22F6EB32",
66410957b409SSimon J. Gerraty "2D207A73432A8FB4C03051B3F73B28A61764098DFA34C47A20995F8115AA6816679B557E82DBEE584908C6E69782D7DEB34DBD65AF063D57FCA76A5FD069492FD6068D9984D209350565A62E5C77F23038C12CB10C6634709B547C46F6B4A709BD85CA122D74465EF97762C29763E06DBC7A9E738C78BFCA0102DC5E79D65B973F28240CAAB2E161A78B57D262457ED8195D53E3C7AE9DA021883C6DB7C24AFDD2322EAC972AD3C354C5FCEF1E146C3A0290FB67ADF007066E00428D2CEC18CE58F9328698DEFEF4B2EB5EC76918FDE1C198CBB38B7AFC67626A9AEFEC4322BFD90D2563481C9A221F78C8272C82D1B62AB914E1C69F6AF6EF30CA5260DB4A46",
66420957b409SSimon J. Gerraty
66430957b409SSimon J. Gerraty NULL
66440957b409SSimon J. Gerraty };
66450957b409SSimon J. Gerraty
66460957b409SSimon J. Gerraty static void
test_RSA_OAEP(const char * name,br_rsa_oaep_encrypt menc,br_rsa_oaep_decrypt mdec)66470957b409SSimon J. Gerraty test_RSA_OAEP(const char *name,
66480957b409SSimon J. Gerraty br_rsa_oaep_encrypt menc, br_rsa_oaep_decrypt mdec)
66490957b409SSimon J. Gerraty {
66500957b409SSimon J. Gerraty size_t u;
66510957b409SSimon J. Gerraty
66520957b409SSimon J. Gerraty printf("Test %s: ", name);
66530957b409SSimon J. Gerraty fflush(stdout);
66540957b409SSimon J. Gerraty
66550957b409SSimon J. Gerraty u = 0;
66560957b409SSimon J. Gerraty while (KAT_RSA_OAEP[u] != NULL) {
66570957b409SSimon J. Gerraty unsigned char n[512];
66580957b409SSimon J. Gerraty unsigned char e[8];
66590957b409SSimon J. Gerraty unsigned char p[256];
66600957b409SSimon J. Gerraty unsigned char q[256];
66610957b409SSimon J. Gerraty unsigned char dp[256];
66620957b409SSimon J. Gerraty unsigned char dq[256];
66630957b409SSimon J. Gerraty unsigned char iq[256];
66640957b409SSimon J. Gerraty br_rsa_public_key pk;
66650957b409SSimon J. Gerraty br_rsa_private_key sk;
66660957b409SSimon J. Gerraty size_t v;
66670957b409SSimon J. Gerraty
66680957b409SSimon J. Gerraty pk.n = n;
66690957b409SSimon J. Gerraty pk.nlen = hextobin(n, KAT_RSA_OAEP[u ++]);
66700957b409SSimon J. Gerraty pk.e = e;
66710957b409SSimon J. Gerraty pk.elen = hextobin(e, KAT_RSA_OAEP[u ++]);
66720957b409SSimon J. Gerraty
66730957b409SSimon J. Gerraty for (v = 0; n[v] == 0; v ++);
66740957b409SSimon J. Gerraty sk.n_bitlen = BIT_LENGTH(n[v]) + ((pk.nlen - 1 - v) << 3);
66750957b409SSimon J. Gerraty sk.p = p;
66760957b409SSimon J. Gerraty sk.plen = hextobin(p, KAT_RSA_OAEP[u ++]);
66770957b409SSimon J. Gerraty sk.q = q;
66780957b409SSimon J. Gerraty sk.qlen = hextobin(q, KAT_RSA_OAEP[u ++]);
66790957b409SSimon J. Gerraty sk.dp = dp;
66800957b409SSimon J. Gerraty sk.dplen = hextobin(dp, KAT_RSA_OAEP[u ++]);
66810957b409SSimon J. Gerraty sk.dq = dq;
66820957b409SSimon J. Gerraty sk.dqlen = hextobin(dq, KAT_RSA_OAEP[u ++]);
66830957b409SSimon J. Gerraty sk.iq = iq;
66840957b409SSimon J. Gerraty sk.iqlen = hextobin(iq, KAT_RSA_OAEP[u ++]);
66850957b409SSimon J. Gerraty
66860957b409SSimon J. Gerraty for (v = 0; v < 6; v ++) {
66870957b409SSimon J. Gerraty unsigned char plain[512], seed[128], cipher[512];
66880957b409SSimon J. Gerraty size_t plain_len, seed_len, cipher_len;
66890957b409SSimon J. Gerraty rng_fake_ctx rng;
66900957b409SSimon J. Gerraty unsigned char tmp[513];
66910957b409SSimon J. Gerraty size_t len;
66920957b409SSimon J. Gerraty
66930957b409SSimon J. Gerraty plain_len = hextobin(plain, KAT_RSA_OAEP[u ++]);
66940957b409SSimon J. Gerraty seed_len = hextobin(seed, KAT_RSA_OAEP[u ++]);
66950957b409SSimon J. Gerraty cipher_len = hextobin(cipher, KAT_RSA_OAEP[u ++]);
66960957b409SSimon J. Gerraty rng_fake_init(&rng, NULL, seed, seed_len);
66970957b409SSimon J. Gerraty
66980957b409SSimon J. Gerraty len = menc(&rng.vtable, &br_sha1_vtable, NULL, 0, &pk,
66990957b409SSimon J. Gerraty tmp, sizeof tmp, plain, plain_len);
67000957b409SSimon J. Gerraty if (len != cipher_len) {
67010957b409SSimon J. Gerraty fprintf(stderr,
67020957b409SSimon J. Gerraty "wrong encrypted length: %lu vs %lu\n",
67030957b409SSimon J. Gerraty (unsigned long)len,
67040957b409SSimon J. Gerraty (unsigned long)cipher_len);
67050957b409SSimon J. Gerraty }
67060957b409SSimon J. Gerraty if (rng.ptr != rng.len) {
67070957b409SSimon J. Gerraty fprintf(stderr, "seed not fully consumed\n");
67080957b409SSimon J. Gerraty exit(EXIT_FAILURE);
67090957b409SSimon J. Gerraty }
67100957b409SSimon J. Gerraty check_equals("KAT RSA/OAEP encrypt", tmp, cipher, len);
67110957b409SSimon J. Gerraty
67120957b409SSimon J. Gerraty if (mdec(&br_sha1_vtable, NULL, 0,
67130957b409SSimon J. Gerraty &sk, tmp, &len) != 1)
67140957b409SSimon J. Gerraty {
67150957b409SSimon J. Gerraty fprintf(stderr, "decryption failed\n");
67160957b409SSimon J. Gerraty exit(EXIT_FAILURE);
67170957b409SSimon J. Gerraty }
67180957b409SSimon J. Gerraty if (len != plain_len) {
67190957b409SSimon J. Gerraty fprintf(stderr,
67200957b409SSimon J. Gerraty "wrong decrypted length: %lu vs %lu\n",
67210957b409SSimon J. Gerraty (unsigned long)len,
67220957b409SSimon J. Gerraty (unsigned long)plain_len);
67230957b409SSimon J. Gerraty }
67240957b409SSimon J. Gerraty check_equals("KAT RSA/OAEP decrypt", tmp, plain, len);
67250957b409SSimon J. Gerraty
67260957b409SSimon J. Gerraty /*
67270957b409SSimon J. Gerraty * Try with a different label; it should fail.
67280957b409SSimon J. Gerraty */
67290957b409SSimon J. Gerraty memcpy(tmp, cipher, cipher_len);
67300957b409SSimon J. Gerraty len = cipher_len;
67310957b409SSimon J. Gerraty if (mdec(&br_sha1_vtable, "T", 1,
67320957b409SSimon J. Gerraty &sk, tmp, &len) != 0)
67330957b409SSimon J. Gerraty {
67340957b409SSimon J. Gerraty fprintf(stderr, "decryption should have failed"
67350957b409SSimon J. Gerraty " (wrong label)\n");
67360957b409SSimon J. Gerraty exit(EXIT_FAILURE);
67370957b409SSimon J. Gerraty }
67380957b409SSimon J. Gerraty
67390957b409SSimon J. Gerraty /*
67400957b409SSimon J. Gerraty * Try with a the wrong length; it should fail.
67410957b409SSimon J. Gerraty */
67420957b409SSimon J. Gerraty tmp[0] = 0x00;
67430957b409SSimon J. Gerraty memcpy(tmp + 1, cipher, cipher_len);
67440957b409SSimon J. Gerraty len = cipher_len + 1;
67450957b409SSimon J. Gerraty if (mdec(&br_sha1_vtable, "T", 1,
67460957b409SSimon J. Gerraty &sk, tmp, &len) != 0)
67470957b409SSimon J. Gerraty {
67480957b409SSimon J. Gerraty fprintf(stderr, "decryption should have failed"
67490957b409SSimon J. Gerraty " (wrong length)\n");
67500957b409SSimon J. Gerraty exit(EXIT_FAILURE);
67510957b409SSimon J. Gerraty }
67520957b409SSimon J. Gerraty
67530957b409SSimon J. Gerraty printf(".");
67540957b409SSimon J. Gerraty fflush(stdout);
67550957b409SSimon J. Gerraty }
67560957b409SSimon J. Gerraty }
67570957b409SSimon J. Gerraty
67580957b409SSimon J. Gerraty printf(" done.\n");
67590957b409SSimon J. Gerraty fflush(stdout);
67600957b409SSimon J. Gerraty }
67610957b409SSimon J. Gerraty
67620957b409SSimon J. Gerraty static void
test_RSA_keygen(const char * name,br_rsa_keygen kg,br_rsa_compute_modulus cm,br_rsa_compute_pubexp ce,br_rsa_compute_privexp cd,br_rsa_public pub,br_rsa_pkcs1_sign sign,br_rsa_pkcs1_vrfy vrfy)67630957b409SSimon J. Gerraty test_RSA_keygen(const char *name, br_rsa_keygen kg, br_rsa_compute_modulus cm,
67640957b409SSimon J. Gerraty br_rsa_compute_pubexp ce, br_rsa_compute_privexp cd,
67650957b409SSimon J. Gerraty br_rsa_public pub, br_rsa_pkcs1_sign sign, br_rsa_pkcs1_vrfy vrfy)
67660957b409SSimon J. Gerraty {
67670957b409SSimon J. Gerraty br_hmac_drbg_context rng;
67680957b409SSimon J. Gerraty int i;
67690957b409SSimon J. Gerraty
67700957b409SSimon J. Gerraty printf("Test %s: ", name);
67710957b409SSimon J. Gerraty fflush(stdout);
67720957b409SSimon J. Gerraty
67730957b409SSimon J. Gerraty br_hmac_drbg_init(&rng, &br_sha256_vtable, "seed for RSA keygen", 19);
67740957b409SSimon J. Gerraty
67750957b409SSimon J. Gerraty for (i = 0; i <= 42; i ++) {
67760957b409SSimon J. Gerraty unsigned size;
67770957b409SSimon J. Gerraty uint32_t pubexp, z;
67780957b409SSimon J. Gerraty br_rsa_private_key sk;
67790957b409SSimon J. Gerraty br_rsa_public_key pk, pk2;
67800957b409SSimon J. Gerraty unsigned char kbuf_priv[BR_RSA_KBUF_PRIV_SIZE(2048)];
67810957b409SSimon J. Gerraty unsigned char kbuf_pub[BR_RSA_KBUF_PUB_SIZE(2048)];
67820957b409SSimon J. Gerraty unsigned char n2[256], d[256], msg1[256], msg2[256];
67830957b409SSimon J. Gerraty uint32_t mod[256];
67840957b409SSimon J. Gerraty uint32_t cc;
67850957b409SSimon J. Gerraty size_t u, v;
6786*cc9e6590SSimon J. Gerraty unsigned char sig[257], hv[32], hv2[32];
67870957b409SSimon J. Gerraty unsigned mask1, mask2;
67880957b409SSimon J. Gerraty int j;
67890957b409SSimon J. Gerraty
67900957b409SSimon J. Gerraty if (i <= 35) {
67910957b409SSimon J. Gerraty size = 1024 + i;
67920957b409SSimon J. Gerraty pubexp = 17;
67930957b409SSimon J. Gerraty } else if (i <= 40) {
67940957b409SSimon J. Gerraty size = 2048;
67950957b409SSimon J. Gerraty pubexp = (i << 1) - 69;
67960957b409SSimon J. Gerraty } else {
67970957b409SSimon J. Gerraty size = 2048;
67980957b409SSimon J. Gerraty pubexp = 0xFFFFFFFF;
67990957b409SSimon J. Gerraty }
68000957b409SSimon J. Gerraty
68010957b409SSimon J. Gerraty if (!kg(&rng.vtable,
68020957b409SSimon J. Gerraty &sk, kbuf_priv, &pk, kbuf_pub, size, pubexp))
68030957b409SSimon J. Gerraty {
68040957b409SSimon J. Gerraty fprintf(stderr, "RSA key pair generation failure\n");
68050957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68060957b409SSimon J. Gerraty }
68070957b409SSimon J. Gerraty
68080957b409SSimon J. Gerraty z = pubexp;
68090957b409SSimon J. Gerraty for (u = pk.elen; u > 0; u --) {
68100957b409SSimon J. Gerraty if (pk.e[u - 1] != (z & 0xFF)) {
68110957b409SSimon J. Gerraty fprintf(stderr, "wrong public exponent\n");
68120957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68130957b409SSimon J. Gerraty }
68140957b409SSimon J. Gerraty z >>= 8;
68150957b409SSimon J. Gerraty }
68160957b409SSimon J. Gerraty if (z != 0) {
68170957b409SSimon J. Gerraty fprintf(stderr, "truncated public exponent\n");
68180957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68190957b409SSimon J. Gerraty }
68200957b409SSimon J. Gerraty
68210957b409SSimon J. Gerraty memset(mod, 0, sizeof mod);
68220957b409SSimon J. Gerraty for (u = 0; u < sk.plen; u ++) {
68230957b409SSimon J. Gerraty for (v = 0; v < sk.qlen; v ++) {
68240957b409SSimon J. Gerraty mod[u + v] += (uint32_t)sk.p[sk.plen - 1 - u]
68250957b409SSimon J. Gerraty * (uint32_t)sk.q[sk.qlen - 1 - v];
68260957b409SSimon J. Gerraty }
68270957b409SSimon J. Gerraty }
68280957b409SSimon J. Gerraty cc = 0;
68290957b409SSimon J. Gerraty for (u = 0; u < sk.plen + sk.qlen; u ++) {
68300957b409SSimon J. Gerraty mod[u] += cc;
68310957b409SSimon J. Gerraty cc = mod[u] >> 8;
68320957b409SSimon J. Gerraty mod[u] &= 0xFF;
68330957b409SSimon J. Gerraty }
68340957b409SSimon J. Gerraty for (u = 0; u < pk.nlen; u ++) {
68350957b409SSimon J. Gerraty if (mod[pk.nlen - 1 - u] != pk.n[u]) {
68360957b409SSimon J. Gerraty fprintf(stderr, "wrong modulus\n");
68370957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68380957b409SSimon J. Gerraty }
68390957b409SSimon J. Gerraty }
68400957b409SSimon J. Gerraty if (sk.n_bitlen != size) {
68410957b409SSimon J. Gerraty fprintf(stderr, "wrong key size\n");
68420957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68430957b409SSimon J. Gerraty }
68440957b409SSimon J. Gerraty if (pk.nlen != (size + 7) >> 3) {
68450957b409SSimon J. Gerraty fprintf(stderr, "wrong modulus size (bytes)\n");
68460957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68470957b409SSimon J. Gerraty }
68480957b409SSimon J. Gerraty mask1 = 0x01 << ((size + 7) & 7);
68490957b409SSimon J. Gerraty mask2 = 0xFF & -mask1;
68500957b409SSimon J. Gerraty if ((pk.n[0] & mask2) != mask1) {
68510957b409SSimon J. Gerraty fprintf(stderr, "wrong modulus size (bits)\n");
68520957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68530957b409SSimon J. Gerraty }
68540957b409SSimon J. Gerraty
68550957b409SSimon J. Gerraty if (cm(NULL, &sk) != pk.nlen) {
68560957b409SSimon J. Gerraty fprintf(stderr, "wrong recomputed modulus length\n");
68570957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68580957b409SSimon J. Gerraty }
68590957b409SSimon J. Gerraty if (cm(n2, &sk) != pk.nlen || memcmp(pk.n, n2, pk.nlen) != 0) {
68600957b409SSimon J. Gerraty fprintf(stderr, "wrong recomputed modulus value\n");
68610957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68620957b409SSimon J. Gerraty }
68630957b409SSimon J. Gerraty
68640957b409SSimon J. Gerraty z = ce(&sk);
68650957b409SSimon J. Gerraty if (z != pubexp) {
68660957b409SSimon J. Gerraty fprintf(stderr,
68670957b409SSimon J. Gerraty "wrong recomputed pubexp: %lu (exp: %lu)\n",
68680957b409SSimon J. Gerraty (unsigned long)z, (unsigned long)pubexp);
68690957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68700957b409SSimon J. Gerraty }
68710957b409SSimon J. Gerraty
68720957b409SSimon J. Gerraty if (cd(NULL, &sk, pubexp) != pk.nlen) {
68730957b409SSimon J. Gerraty fprintf(stderr,
68740957b409SSimon J. Gerraty "wrong recomputed privexp length (1)\n");
68750957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68760957b409SSimon J. Gerraty }
68770957b409SSimon J. Gerraty if (cd(d, &sk, pubexp) != pk.nlen) {
68780957b409SSimon J. Gerraty fprintf(stderr,
68790957b409SSimon J. Gerraty "wrong recomputed privexp length (2)\n");
68800957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68810957b409SSimon J. Gerraty }
68820957b409SSimon J. Gerraty /*
68830957b409SSimon J. Gerraty * To check that the private exponent is correct, we make
68840957b409SSimon J. Gerraty * it into a _public_ key, and use the public-key operation
68850957b409SSimon J. Gerraty * to perform the modular exponentiation.
68860957b409SSimon J. Gerraty */
68870957b409SSimon J. Gerraty pk2 = pk;
68880957b409SSimon J. Gerraty pk2.e = d;
68890957b409SSimon J. Gerraty pk2.elen = pk.nlen;
68900957b409SSimon J. Gerraty rng.vtable->generate(&rng.vtable, msg1, pk.nlen);
68910957b409SSimon J. Gerraty msg1[0] = 0x00;
68920957b409SSimon J. Gerraty memcpy(msg2, msg1, pk.nlen);
68930957b409SSimon J. Gerraty if (!pub(msg2, pk.nlen, &pk2) || !pub(msg2, pk.nlen, &pk)) {
68940957b409SSimon J. Gerraty fprintf(stderr, "public-key operation error\n");
68950957b409SSimon J. Gerraty exit(EXIT_FAILURE);
68960957b409SSimon J. Gerraty }
68970957b409SSimon J. Gerraty if (memcmp(msg1, msg2, pk.nlen) != 0) {
68980957b409SSimon J. Gerraty fprintf(stderr, "wrong recomputed privexp\n");
68990957b409SSimon J. Gerraty exit(EXIT_FAILURE);
69000957b409SSimon J. Gerraty }
69010957b409SSimon J. Gerraty
69020957b409SSimon J. Gerraty /*
69030957b409SSimon J. Gerraty * We test the RSA operation over a some random messages.
69040957b409SSimon J. Gerraty */
69050957b409SSimon J. Gerraty for (j = 0; j < 20; j ++) {
69060957b409SSimon J. Gerraty rng.vtable->generate(&rng.vtable, hv, sizeof hv);
69070957b409SSimon J. Gerraty memset(sig, 0, sizeof sig);
69080957b409SSimon J. Gerraty sig[pk.nlen] = 0x00;
69090957b409SSimon J. Gerraty if (!sign(BR_HASH_OID_SHA256,
69100957b409SSimon J. Gerraty hv, sizeof hv, &sk, sig))
69110957b409SSimon J. Gerraty {
69120957b409SSimon J. Gerraty fprintf(stderr,
69130957b409SSimon J. Gerraty "signature error (%d)\n", j);
69140957b409SSimon J. Gerraty exit(EXIT_FAILURE);
69150957b409SSimon J. Gerraty }
69160957b409SSimon J. Gerraty if (sig[pk.nlen] != 0x00) {
69170957b409SSimon J. Gerraty fprintf(stderr,
69180957b409SSimon J. Gerraty "signature length error (%d)\n", j);
69190957b409SSimon J. Gerraty exit(EXIT_FAILURE);
69200957b409SSimon J. Gerraty }
69210957b409SSimon J. Gerraty if (!vrfy(sig, pk.nlen, BR_HASH_OID_SHA256, sizeof hv,
69220957b409SSimon J. Gerraty &pk, hv2))
69230957b409SSimon J. Gerraty {
69240957b409SSimon J. Gerraty fprintf(stderr,
69250957b409SSimon J. Gerraty "signature verif error (%d)\n", j);
69260957b409SSimon J. Gerraty exit(EXIT_FAILURE);
69270957b409SSimon J. Gerraty }
69280957b409SSimon J. Gerraty if (memcmp(hv, hv2, sizeof hv) != 0) {
69290957b409SSimon J. Gerraty fprintf(stderr,
69300957b409SSimon J. Gerraty "signature extract error (%d)\n", j);
69310957b409SSimon J. Gerraty exit(EXIT_FAILURE);
69320957b409SSimon J. Gerraty }
69330957b409SSimon J. Gerraty }
69340957b409SSimon J. Gerraty
69350957b409SSimon J. Gerraty printf(".");
69360957b409SSimon J. Gerraty fflush(stdout);
69370957b409SSimon J. Gerraty }
69380957b409SSimon J. Gerraty
69390957b409SSimon J. Gerraty printf(" done.\n");
69400957b409SSimon J. Gerraty fflush(stdout);
69410957b409SSimon J. Gerraty }
69420957b409SSimon J. Gerraty
69430957b409SSimon J. Gerraty static void
test_RSA_i15(void)69440957b409SSimon J. Gerraty test_RSA_i15(void)
69450957b409SSimon J. Gerraty {
69460957b409SSimon J. Gerraty test_RSA_core("RSA i15 core", &br_rsa_i15_public, &br_rsa_i15_private);
69470957b409SSimon J. Gerraty test_RSA_sign("RSA i15 sign", &br_rsa_i15_private,
69480957b409SSimon J. Gerraty &br_rsa_i15_pkcs1_sign, &br_rsa_i15_pkcs1_vrfy);
69490957b409SSimon J. Gerraty test_RSA_OAEP("RSA i15 OAEP",
69500957b409SSimon J. Gerraty &br_rsa_i15_oaep_encrypt, &br_rsa_i15_oaep_decrypt);
69510957b409SSimon J. Gerraty test_RSA_PSS("RSA i15 PSS",
69520957b409SSimon J. Gerraty &br_rsa_i15_pss_sign, &br_rsa_i15_pss_vrfy);
69530957b409SSimon J. Gerraty test_RSA_keygen("RSA i15 keygen", &br_rsa_i15_keygen,
69540957b409SSimon J. Gerraty &br_rsa_i15_compute_modulus, &br_rsa_i15_compute_pubexp,
69550957b409SSimon J. Gerraty &br_rsa_i15_compute_privexp, &br_rsa_i15_public,
69560957b409SSimon J. Gerraty &br_rsa_i15_pkcs1_sign, &br_rsa_i15_pkcs1_vrfy);
69570957b409SSimon J. Gerraty }
69580957b409SSimon J. Gerraty
69590957b409SSimon J. Gerraty static void
test_RSA_i31(void)69600957b409SSimon J. Gerraty test_RSA_i31(void)
69610957b409SSimon J. Gerraty {
69620957b409SSimon J. Gerraty test_RSA_core("RSA i31 core", &br_rsa_i31_public, &br_rsa_i31_private);
69630957b409SSimon J. Gerraty test_RSA_sign("RSA i31 sign", &br_rsa_i31_private,
69640957b409SSimon J. Gerraty &br_rsa_i31_pkcs1_sign, &br_rsa_i31_pkcs1_vrfy);
69650957b409SSimon J. Gerraty test_RSA_OAEP("RSA i31 OAEP",
69660957b409SSimon J. Gerraty &br_rsa_i31_oaep_encrypt, &br_rsa_i31_oaep_decrypt);
69670957b409SSimon J. Gerraty test_RSA_PSS("RSA i31 PSS",
69680957b409SSimon J. Gerraty &br_rsa_i31_pss_sign, &br_rsa_i31_pss_vrfy);
69690957b409SSimon J. Gerraty test_RSA_keygen("RSA i31 keygen", &br_rsa_i31_keygen,
69700957b409SSimon J. Gerraty &br_rsa_i31_compute_modulus, &br_rsa_i31_compute_pubexp,
69710957b409SSimon J. Gerraty &br_rsa_i31_compute_privexp, &br_rsa_i31_public,
69720957b409SSimon J. Gerraty &br_rsa_i31_pkcs1_sign, &br_rsa_i31_pkcs1_vrfy);
69730957b409SSimon J. Gerraty }
69740957b409SSimon J. Gerraty
69750957b409SSimon J. Gerraty static void
test_RSA_i32(void)69760957b409SSimon J. Gerraty test_RSA_i32(void)
69770957b409SSimon J. Gerraty {
69780957b409SSimon J. Gerraty test_RSA_core("RSA i32 core", &br_rsa_i32_public, &br_rsa_i32_private);
69790957b409SSimon J. Gerraty test_RSA_sign("RSA i32 sign", &br_rsa_i32_private,
69800957b409SSimon J. Gerraty &br_rsa_i32_pkcs1_sign, &br_rsa_i32_pkcs1_vrfy);
69810957b409SSimon J. Gerraty test_RSA_OAEP("RSA i32 OAEP",
69820957b409SSimon J. Gerraty &br_rsa_i32_oaep_encrypt, &br_rsa_i32_oaep_decrypt);
69830957b409SSimon J. Gerraty test_RSA_PSS("RSA i32 PSS",
69840957b409SSimon J. Gerraty &br_rsa_i32_pss_sign, &br_rsa_i32_pss_vrfy);
69850957b409SSimon J. Gerraty }
69860957b409SSimon J. Gerraty
69870957b409SSimon J. Gerraty static void
test_RSA_i62(void)69880957b409SSimon J. Gerraty test_RSA_i62(void)
69890957b409SSimon J. Gerraty {
69900957b409SSimon J. Gerraty br_rsa_public pub;
69910957b409SSimon J. Gerraty br_rsa_private priv;
69920957b409SSimon J. Gerraty br_rsa_pkcs1_sign sign;
69930957b409SSimon J. Gerraty br_rsa_pkcs1_vrfy vrfy;
69940957b409SSimon J. Gerraty br_rsa_pss_sign pss_sign;
69950957b409SSimon J. Gerraty br_rsa_pss_vrfy pss_vrfy;
69960957b409SSimon J. Gerraty br_rsa_oaep_encrypt menc;
69970957b409SSimon J. Gerraty br_rsa_oaep_decrypt mdec;
69980957b409SSimon J. Gerraty br_rsa_keygen kgen;
69990957b409SSimon J. Gerraty
70000957b409SSimon J. Gerraty pub = br_rsa_i62_public_get();
70010957b409SSimon J. Gerraty priv = br_rsa_i62_private_get();
70020957b409SSimon J. Gerraty sign = br_rsa_i62_pkcs1_sign_get();
70030957b409SSimon J. Gerraty vrfy = br_rsa_i62_pkcs1_vrfy_get();
70040957b409SSimon J. Gerraty pss_sign = br_rsa_i62_pss_sign_get();
70050957b409SSimon J. Gerraty pss_vrfy = br_rsa_i62_pss_vrfy_get();
70060957b409SSimon J. Gerraty menc = br_rsa_i62_oaep_encrypt_get();
70070957b409SSimon J. Gerraty mdec = br_rsa_i62_oaep_decrypt_get();
70080957b409SSimon J. Gerraty kgen = br_rsa_i62_keygen_get();
70090957b409SSimon J. Gerraty if (pub) {
70100957b409SSimon J. Gerraty if (!priv || !sign || !vrfy || !pss_sign || !pss_vrfy
70110957b409SSimon J. Gerraty || !menc || !mdec || !kgen)
70120957b409SSimon J. Gerraty {
70130957b409SSimon J. Gerraty fprintf(stderr, "Inconsistent i62 availability\n");
70140957b409SSimon J. Gerraty exit(EXIT_FAILURE);
70150957b409SSimon J. Gerraty }
70160957b409SSimon J. Gerraty test_RSA_core("RSA i62 core", pub, priv);
70170957b409SSimon J. Gerraty test_RSA_sign("RSA i62 sign", priv, sign, vrfy);
70180957b409SSimon J. Gerraty test_RSA_OAEP("RSA i62 OAEP", menc, mdec);
70190957b409SSimon J. Gerraty test_RSA_PSS("RSA i62 PSS", pss_sign, pss_vrfy);
70200957b409SSimon J. Gerraty test_RSA_keygen("RSA i62 keygen", kgen,
70210957b409SSimon J. Gerraty &br_rsa_i31_compute_modulus, &br_rsa_i31_compute_pubexp,
70220957b409SSimon J. Gerraty &br_rsa_i31_compute_privexp, pub,
70230957b409SSimon J. Gerraty sign, vrfy);
70240957b409SSimon J. Gerraty } else {
70250957b409SSimon J. Gerraty if (priv || sign || vrfy || pss_sign || pss_vrfy
70260957b409SSimon J. Gerraty || menc || mdec || kgen)
70270957b409SSimon J. Gerraty {
70280957b409SSimon J. Gerraty fprintf(stderr, "Inconsistent i62 availability\n");
70290957b409SSimon J. Gerraty exit(EXIT_FAILURE);
70300957b409SSimon J. Gerraty }
70310957b409SSimon J. Gerraty printf("Test RSA i62: UNAVAILABLE\n");
70320957b409SSimon J. Gerraty }
70330957b409SSimon J. Gerraty }
70340957b409SSimon J. Gerraty
70350957b409SSimon J. Gerraty #if 0
70360957b409SSimon J. Gerraty static void
70370957b409SSimon J. Gerraty test_RSA_signatures(void)
70380957b409SSimon J. Gerraty {
70390957b409SSimon J. Gerraty uint32_t n[40], e[2], p[20], q[20], dp[20], dq[20], iq[20], x[40];
70400957b409SSimon J. Gerraty unsigned char hv[20], sig[128];
70410957b409SSimon J. Gerraty unsigned char ref[128], tmp[128];
70420957b409SSimon J. Gerraty br_sha1_context hc;
70430957b409SSimon J. Gerraty
70440957b409SSimon J. Gerraty printf("Test RSA signatures: ");
70450957b409SSimon J. Gerraty fflush(stdout);
70460957b409SSimon J. Gerraty
70470957b409SSimon J. Gerraty /*
70480957b409SSimon J. Gerraty * Decode RSA key elements.
70490957b409SSimon J. Gerraty */
70500957b409SSimon J. Gerraty br_int_decode(n, sizeof n / sizeof n[0], RSA_N, sizeof RSA_N);
70510957b409SSimon J. Gerraty br_int_decode(e, sizeof e / sizeof e[0], RSA_E, sizeof RSA_E);
70520957b409SSimon J. Gerraty br_int_decode(p, sizeof p / sizeof p[0], RSA_P, sizeof RSA_P);
70530957b409SSimon J. Gerraty br_int_decode(q, sizeof q / sizeof q[0], RSA_Q, sizeof RSA_Q);
70540957b409SSimon J. Gerraty br_int_decode(dp, sizeof dp / sizeof dp[0], RSA_DP, sizeof RSA_DP);
70550957b409SSimon J. Gerraty br_int_decode(dq, sizeof dq / sizeof dq[0], RSA_DQ, sizeof RSA_DQ);
70560957b409SSimon J. Gerraty br_int_decode(iq, sizeof iq / sizeof iq[0], RSA_IQ, sizeof RSA_IQ);
70570957b409SSimon J. Gerraty
70580957b409SSimon J. Gerraty /*
70590957b409SSimon J. Gerraty * Decode reference signature (computed with OpenSSL).
70600957b409SSimon J. Gerraty */
70610957b409SSimon J. Gerraty hextobin(ref, "45A3DC6A106BCD3BD0E48FB579643AA3FF801E5903E80AA9B43A695A8E7F454E93FA208B69995FF7A6D5617C2FEB8E546375A664977A48931842AAE796B5A0D64393DCA35F3490FC157F5BD83B9D58C2F7926E6AE648A2BD96CAB8FCCD3D35BB11424AD47D973FF6D69CA774841AEC45DFAE99CCF79893E7047FDE6CB00AA76D");
70620957b409SSimon J. Gerraty
70630957b409SSimon J. Gerraty /*
70640957b409SSimon J. Gerraty * Recompute signature. Since PKCS#1 v1.5 signatures are
70650957b409SSimon J. Gerraty * deterministic, we should get the same as the reference signature.
70660957b409SSimon J. Gerraty */
70670957b409SSimon J. Gerraty br_sha1_init(&hc);
70680957b409SSimon J. Gerraty br_sha1_update(&hc, "test", 4);
70690957b409SSimon J. Gerraty br_sha1_out(&hc, hv);
70700957b409SSimon J. Gerraty if (!br_rsa_sign(sig, sizeof sig, p, q, dp, dq, iq, br_sha1_ID, hv)) {
70710957b409SSimon J. Gerraty fprintf(stderr, "RSA-1024/SHA-1 sig generate failed\n");
70720957b409SSimon J. Gerraty exit(EXIT_FAILURE);
70730957b409SSimon J. Gerraty }
70740957b409SSimon J. Gerraty check_equals("KAT RSA-sign 1", sig, ref, sizeof sig);
70750957b409SSimon J. Gerraty
70760957b409SSimon J. Gerraty /*
70770957b409SSimon J. Gerraty * Verify signature.
70780957b409SSimon J. Gerraty */
70790957b409SSimon J. Gerraty if (!br_rsa_verify(sig, sizeof sig, n, e, br_sha1_ID, hv)) {
70800957b409SSimon J. Gerraty fprintf(stderr, "RSA-1024/SHA-1 sig verify failed\n");
70810957b409SSimon J. Gerraty exit(EXIT_FAILURE);
70820957b409SSimon J. Gerraty }
70830957b409SSimon J. Gerraty hv[5] ^= 0x01;
70840957b409SSimon J. Gerraty if (br_rsa_verify(sig, sizeof sig, n, e, br_sha1_ID, hv)) {
70850957b409SSimon J. Gerraty fprintf(stderr, "RSA-1024/SHA-1 sig verify should have failed\n");
70860957b409SSimon J. Gerraty exit(EXIT_FAILURE);
70870957b409SSimon J. Gerraty }
70880957b409SSimon J. Gerraty hv[5] ^= 0x01;
70890957b409SSimon J. Gerraty
70900957b409SSimon J. Gerraty /*
70910957b409SSimon J. Gerraty * Generate a signature with the alternate encoding (no NULL) and
70920957b409SSimon J. Gerraty * verify it.
70930957b409SSimon J. Gerraty */
70940957b409SSimon J. Gerraty hextobin(tmp, "0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00301F300706052B0E03021A0414A94A8FE5CCB19BA61C4C0873D391E987982FBBD3");
70950957b409SSimon J. Gerraty br_int_decode(x, sizeof x / sizeof x[0], tmp, sizeof tmp);
70960957b409SSimon J. Gerraty x[0] = n[0];
70970957b409SSimon J. Gerraty br_rsa_private_core(x, p, q, dp, dq, iq);
70980957b409SSimon J. Gerraty br_int_encode(sig, sizeof sig, x);
70990957b409SSimon J. Gerraty if (!br_rsa_verify(sig, sizeof sig, n, e, br_sha1_ID, hv)) {
71000957b409SSimon J. Gerraty fprintf(stderr, "RSA-1024/SHA-1 sig verify (alt) failed\n");
71010957b409SSimon J. Gerraty exit(EXIT_FAILURE);
71020957b409SSimon J. Gerraty }
71030957b409SSimon J. Gerraty hv[5] ^= 0x01;
71040957b409SSimon J. Gerraty if (br_rsa_verify(sig, sizeof sig, n, e, br_sha1_ID, hv)) {
71050957b409SSimon J. Gerraty fprintf(stderr, "RSA-1024/SHA-1 sig verify (alt) should have failed\n");
71060957b409SSimon J. Gerraty exit(EXIT_FAILURE);
71070957b409SSimon J. Gerraty }
71080957b409SSimon J. Gerraty hv[5] ^= 0x01;
71090957b409SSimon J. Gerraty
71100957b409SSimon J. Gerraty printf("done.\n");
71110957b409SSimon J. Gerraty fflush(stdout);
71120957b409SSimon J. Gerraty }
71130957b409SSimon J. Gerraty #endif
71140957b409SSimon J. Gerraty
71150957b409SSimon J. Gerraty /*
71160957b409SSimon J. Gerraty * From: http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf
71170957b409SSimon J. Gerraty */
71180957b409SSimon J. Gerraty static const char *const KAT_GHASH[] = {
71190957b409SSimon J. Gerraty
71200957b409SSimon J. Gerraty "66e94bd4ef8a2c3b884cfa59ca342b2e",
71210957b409SSimon J. Gerraty "",
71220957b409SSimon J. Gerraty "",
71230957b409SSimon J. Gerraty "00000000000000000000000000000000",
71240957b409SSimon J. Gerraty
71250957b409SSimon J. Gerraty "66e94bd4ef8a2c3b884cfa59ca342b2e",
71260957b409SSimon J. Gerraty "",
71270957b409SSimon J. Gerraty "0388dace60b6a392f328c2b971b2fe78",
71280957b409SSimon J. Gerraty "f38cbb1ad69223dcc3457ae5b6b0f885",
71290957b409SSimon J. Gerraty
71300957b409SSimon J. Gerraty "b83b533708bf535d0aa6e52980d53b78",
71310957b409SSimon J. Gerraty "",
71320957b409SSimon J. Gerraty "42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985",
71330957b409SSimon J. Gerraty "7f1b32b81b820d02614f8895ac1d4eac",
71340957b409SSimon J. Gerraty
71350957b409SSimon J. Gerraty "b83b533708bf535d0aa6e52980d53b78",
71360957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71370957b409SSimon J. Gerraty "42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091",
71380957b409SSimon J. Gerraty "698e57f70e6ecc7fd9463b7260a9ae5f",
71390957b409SSimon J. Gerraty
71400957b409SSimon J. Gerraty "b83b533708bf535d0aa6e52980d53b78",
71410957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71420957b409SSimon J. Gerraty "61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598",
71430957b409SSimon J. Gerraty "df586bb4c249b92cb6922877e444d37b",
71440957b409SSimon J. Gerraty
71450957b409SSimon J. Gerraty "b83b533708bf535d0aa6e52980d53b78",
71460957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71470957b409SSimon J. Gerraty "8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5",
71480957b409SSimon J. Gerraty "1c5afe9760d3932f3c9a878aac3dc3de",
71490957b409SSimon J. Gerraty
71500957b409SSimon J. Gerraty "aae06992acbf52a3e8f4a96ec9300bd7",
71510957b409SSimon J. Gerraty "",
71520957b409SSimon J. Gerraty "98e7247c07f0fe411c267e4384b0f600",
71530957b409SSimon J. Gerraty "e2c63f0ac44ad0e02efa05ab6743d4ce",
71540957b409SSimon J. Gerraty
71550957b409SSimon J. Gerraty "466923ec9ae682214f2c082badb39249",
71560957b409SSimon J. Gerraty "",
71570957b409SSimon J. Gerraty "3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256",
71580957b409SSimon J. Gerraty "51110d40f6c8fff0eb1ae33445a889f0",
71590957b409SSimon J. Gerraty
71600957b409SSimon J. Gerraty "466923ec9ae682214f2c082badb39249",
71610957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71620957b409SSimon J. Gerraty "3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710",
71630957b409SSimon J. Gerraty "ed2ce3062e4a8ec06db8b4c490e8a268",
71640957b409SSimon J. Gerraty
71650957b409SSimon J. Gerraty "466923ec9ae682214f2c082badb39249",
71660957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71670957b409SSimon J. Gerraty "0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7",
71680957b409SSimon J. Gerraty "1e6a133806607858ee80eaf237064089",
71690957b409SSimon J. Gerraty
71700957b409SSimon J. Gerraty "466923ec9ae682214f2c082badb39249",
71710957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71720957b409SSimon J. Gerraty "d27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b",
71730957b409SSimon J. Gerraty "82567fb0b4cc371801eadec005968e94",
71740957b409SSimon J. Gerraty
71750957b409SSimon J. Gerraty "dc95c078a2408989ad48a21492842087",
71760957b409SSimon J. Gerraty "",
71770957b409SSimon J. Gerraty "cea7403d4d606b6e074ec5d3baf39d18",
71780957b409SSimon J. Gerraty "83de425c5edc5d498f382c441041ca92",
71790957b409SSimon J. Gerraty
71800957b409SSimon J. Gerraty "acbef20579b4b8ebce889bac8732dad7",
71810957b409SSimon J. Gerraty "",
71820957b409SSimon J. Gerraty "522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad",
71830957b409SSimon J. Gerraty "4db870d37cb75fcb46097c36230d1612",
71840957b409SSimon J. Gerraty
71850957b409SSimon J. Gerraty "acbef20579b4b8ebce889bac8732dad7",
71860957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71870957b409SSimon J. Gerraty "522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662",
71880957b409SSimon J. Gerraty "8bd0c4d8aacd391e67cca447e8c38f65",
71890957b409SSimon J. Gerraty
71900957b409SSimon J. Gerraty "acbef20579b4b8ebce889bac8732dad7",
71910957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71920957b409SSimon J. Gerraty "c3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f",
71930957b409SSimon J. Gerraty "75a34288b8c68f811c52b2e9a2f97f63",
71940957b409SSimon J. Gerraty
71950957b409SSimon J. Gerraty "acbef20579b4b8ebce889bac8732dad7",
71960957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
71970957b409SSimon J. Gerraty "5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f",
71980957b409SSimon J. Gerraty "d5ffcf6fc5ac4d69722187421a7f170b",
71990957b409SSimon J. Gerraty
72000957b409SSimon J. Gerraty NULL,
72010957b409SSimon J. Gerraty };
72020957b409SSimon J. Gerraty
72030957b409SSimon J. Gerraty static void
test_GHASH(const char * name,br_ghash gh)72040957b409SSimon J. Gerraty test_GHASH(const char *name, br_ghash gh)
72050957b409SSimon J. Gerraty {
72060957b409SSimon J. Gerraty size_t u;
72070957b409SSimon J. Gerraty
72080957b409SSimon J. Gerraty printf("Test %s: ", name);
72090957b409SSimon J. Gerraty fflush(stdout);
72100957b409SSimon J. Gerraty
72110957b409SSimon J. Gerraty for (u = 0; KAT_GHASH[u]; u += 4) {
72120957b409SSimon J. Gerraty unsigned char h[16];
72130957b409SSimon J. Gerraty unsigned char a[100];
72140957b409SSimon J. Gerraty size_t a_len;
72150957b409SSimon J. Gerraty unsigned char c[100];
72160957b409SSimon J. Gerraty size_t c_len;
72170957b409SSimon J. Gerraty unsigned char p[16];
72180957b409SSimon J. Gerraty unsigned char y[16];
72190957b409SSimon J. Gerraty unsigned char ref[16];
72200957b409SSimon J. Gerraty
72210957b409SSimon J. Gerraty hextobin(h, KAT_GHASH[u]);
72220957b409SSimon J. Gerraty a_len = hextobin(a, KAT_GHASH[u + 1]);
72230957b409SSimon J. Gerraty c_len = hextobin(c, KAT_GHASH[u + 2]);
72240957b409SSimon J. Gerraty hextobin(ref, KAT_GHASH[u + 3]);
72250957b409SSimon J. Gerraty memset(y, 0, sizeof y);
72260957b409SSimon J. Gerraty gh(y, h, a, a_len);
72270957b409SSimon J. Gerraty gh(y, h, c, c_len);
72280957b409SSimon J. Gerraty memset(p, 0, sizeof p);
72290957b409SSimon J. Gerraty br_enc32be(p + 4, (uint32_t)a_len << 3);
72300957b409SSimon J. Gerraty br_enc32be(p + 12, (uint32_t)c_len << 3);
72310957b409SSimon J. Gerraty gh(y, h, p, sizeof p);
72320957b409SSimon J. Gerraty check_equals("KAT GHASH", y, ref, sizeof ref);
72330957b409SSimon J. Gerraty }
72340957b409SSimon J. Gerraty
72350957b409SSimon J. Gerraty for (u = 0; u <= 1024; u ++) {
72360957b409SSimon J. Gerraty unsigned char key[32], iv[12];
72370957b409SSimon J. Gerraty unsigned char buf[1024 + 32];
72380957b409SSimon J. Gerraty unsigned char y0[16], y1[16];
72390957b409SSimon J. Gerraty char tmp[100];
72400957b409SSimon J. Gerraty
72410957b409SSimon J. Gerraty memset(key, 0, sizeof key);
72420957b409SSimon J. Gerraty memset(iv, 0, sizeof iv);
72430957b409SSimon J. Gerraty br_enc32be(key, u);
72440957b409SSimon J. Gerraty memset(buf, 0, sizeof buf);
72450957b409SSimon J. Gerraty br_chacha20_ct_run(key, iv, 1, buf, sizeof buf);
72460957b409SSimon J. Gerraty
72470957b409SSimon J. Gerraty memcpy(y0, buf, 16);
72480957b409SSimon J. Gerraty br_ghash_ctmul32(y0, buf + 16, buf + 32, u);
72490957b409SSimon J. Gerraty memcpy(y1, buf, 16);
72500957b409SSimon J. Gerraty gh(y1, buf + 16, buf + 32, u);
72510957b409SSimon J. Gerraty sprintf(tmp, "XREF %s (len = %u)", name, (unsigned)u);
72520957b409SSimon J. Gerraty check_equals(tmp, y0, y1, 16);
72530957b409SSimon J. Gerraty
72540957b409SSimon J. Gerraty if ((u & 31) == 0) {
72550957b409SSimon J. Gerraty printf(".");
72560957b409SSimon J. Gerraty fflush(stdout);
72570957b409SSimon J. Gerraty }
72580957b409SSimon J. Gerraty }
72590957b409SSimon J. Gerraty
72600957b409SSimon J. Gerraty printf("done.\n");
72610957b409SSimon J. Gerraty fflush(stdout);
72620957b409SSimon J. Gerraty }
72630957b409SSimon J. Gerraty
72640957b409SSimon J. Gerraty static void
test_GHASH_ctmul(void)72650957b409SSimon J. Gerraty test_GHASH_ctmul(void)
72660957b409SSimon J. Gerraty {
72670957b409SSimon J. Gerraty test_GHASH("GHASH_ctmul", br_ghash_ctmul);
72680957b409SSimon J. Gerraty }
72690957b409SSimon J. Gerraty
72700957b409SSimon J. Gerraty static void
test_GHASH_ctmul32(void)72710957b409SSimon J. Gerraty test_GHASH_ctmul32(void)
72720957b409SSimon J. Gerraty {
72730957b409SSimon J. Gerraty test_GHASH("GHASH_ctmul32", br_ghash_ctmul32);
72740957b409SSimon J. Gerraty }
72750957b409SSimon J. Gerraty
72760957b409SSimon J. Gerraty static void
test_GHASH_ctmul64(void)72770957b409SSimon J. Gerraty test_GHASH_ctmul64(void)
72780957b409SSimon J. Gerraty {
72790957b409SSimon J. Gerraty test_GHASH("GHASH_ctmul64", br_ghash_ctmul64);
72800957b409SSimon J. Gerraty }
72810957b409SSimon J. Gerraty
72820957b409SSimon J. Gerraty static void
test_GHASH_pclmul(void)72830957b409SSimon J. Gerraty test_GHASH_pclmul(void)
72840957b409SSimon J. Gerraty {
72850957b409SSimon J. Gerraty br_ghash gh;
72860957b409SSimon J. Gerraty
72870957b409SSimon J. Gerraty gh = br_ghash_pclmul_get();
72880957b409SSimon J. Gerraty if (gh == 0) {
72890957b409SSimon J. Gerraty printf("Test GHASH_pclmul: UNAVAILABLE\n");
72900957b409SSimon J. Gerraty } else {
72910957b409SSimon J. Gerraty test_GHASH("GHASH_pclmul", gh);
72920957b409SSimon J. Gerraty }
72930957b409SSimon J. Gerraty }
72940957b409SSimon J. Gerraty
72950957b409SSimon J. Gerraty static void
test_GHASH_pwr8(void)72960957b409SSimon J. Gerraty test_GHASH_pwr8(void)
72970957b409SSimon J. Gerraty {
72980957b409SSimon J. Gerraty br_ghash gh;
72990957b409SSimon J. Gerraty
73000957b409SSimon J. Gerraty gh = br_ghash_pwr8_get();
73010957b409SSimon J. Gerraty if (gh == 0) {
73020957b409SSimon J. Gerraty printf("Test GHASH_pwr8: UNAVAILABLE\n");
73030957b409SSimon J. Gerraty } else {
73040957b409SSimon J. Gerraty test_GHASH("GHASH_pwr8", gh);
73050957b409SSimon J. Gerraty }
73060957b409SSimon J. Gerraty }
73070957b409SSimon J. Gerraty
73080957b409SSimon J. Gerraty /*
73090957b409SSimon J. Gerraty * From: http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf
73100957b409SSimon J. Gerraty *
73110957b409SSimon J. Gerraty * Order: key, plaintext, AAD, IV, ciphertext, tag
73120957b409SSimon J. Gerraty */
73130957b409SSimon J. Gerraty static const char *const KAT_GCM[] = {
73140957b409SSimon J. Gerraty "00000000000000000000000000000000",
73150957b409SSimon J. Gerraty "",
73160957b409SSimon J. Gerraty "",
73170957b409SSimon J. Gerraty "000000000000000000000000",
73180957b409SSimon J. Gerraty "",
73190957b409SSimon J. Gerraty "58e2fccefa7e3061367f1d57a4e7455a",
73200957b409SSimon J. Gerraty
73210957b409SSimon J. Gerraty "00000000000000000000000000000000",
73220957b409SSimon J. Gerraty "00000000000000000000000000000000",
73230957b409SSimon J. Gerraty "",
73240957b409SSimon J. Gerraty "000000000000000000000000",
73250957b409SSimon J. Gerraty "0388dace60b6a392f328c2b971b2fe78",
73260957b409SSimon J. Gerraty "ab6e47d42cec13bdf53a67b21257bddf",
73270957b409SSimon J. Gerraty
73280957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308",
73290957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255",
73300957b409SSimon J. Gerraty "",
73310957b409SSimon J. Gerraty "cafebabefacedbaddecaf888",
73320957b409SSimon J. Gerraty "42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985",
73330957b409SSimon J. Gerraty "4d5c2af327cd64a62cf35abd2ba6fab4",
73340957b409SSimon J. Gerraty
73350957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308",
73360957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
73370957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
73380957b409SSimon J. Gerraty "cafebabefacedbaddecaf888",
73390957b409SSimon J. Gerraty "42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091",
73400957b409SSimon J. Gerraty "5bc94fbc3221a5db94fae95ae7121a47",
73410957b409SSimon J. Gerraty
73420957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308",
73430957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
73440957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
73450957b409SSimon J. Gerraty "cafebabefacedbad",
73460957b409SSimon J. Gerraty "61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598",
73470957b409SSimon J. Gerraty "3612d2e79e3b0785561be14aaca2fccb",
73480957b409SSimon J. Gerraty
73490957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308",
73500957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
73510957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
73520957b409SSimon J. Gerraty "9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b",
73530957b409SSimon J. Gerraty "8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5",
73540957b409SSimon J. Gerraty "619cc5aefffe0bfa462af43c1699d050",
73550957b409SSimon J. Gerraty
73560957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
73570957b409SSimon J. Gerraty "",
73580957b409SSimon J. Gerraty "",
73590957b409SSimon J. Gerraty "000000000000000000000000",
73600957b409SSimon J. Gerraty "",
73610957b409SSimon J. Gerraty "cd33b28ac773f74ba00ed1f312572435",
73620957b409SSimon J. Gerraty
73630957b409SSimon J. Gerraty "000000000000000000000000000000000000000000000000",
73640957b409SSimon J. Gerraty "00000000000000000000000000000000",
73650957b409SSimon J. Gerraty "",
73660957b409SSimon J. Gerraty "000000000000000000000000",
73670957b409SSimon J. Gerraty "98e7247c07f0fe411c267e4384b0f600",
73680957b409SSimon J. Gerraty "2ff58d80033927ab8ef4d4587514f0fb",
73690957b409SSimon J. Gerraty
73700957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308feffe9928665731c",
73710957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255",
73720957b409SSimon J. Gerraty "",
73730957b409SSimon J. Gerraty "cafebabefacedbaddecaf888",
73740957b409SSimon J. Gerraty "3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256",
73750957b409SSimon J. Gerraty "9924a7c8587336bfb118024db8674a14",
73760957b409SSimon J. Gerraty
73770957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308feffe9928665731c",
73780957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
73790957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
73800957b409SSimon J. Gerraty "cafebabefacedbaddecaf888",
73810957b409SSimon J. Gerraty "3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710",
73820957b409SSimon J. Gerraty "2519498e80f1478f37ba55bd6d27618c",
73830957b409SSimon J. Gerraty
73840957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308feffe9928665731c",
73850957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
73860957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
73870957b409SSimon J. Gerraty "cafebabefacedbad",
73880957b409SSimon J. Gerraty "0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7",
73890957b409SSimon J. Gerraty "65dcc57fcf623a24094fcca40d3533f8",
73900957b409SSimon J. Gerraty
73910957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308feffe9928665731c",
73920957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
73930957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
73940957b409SSimon J. Gerraty "9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b",
73950957b409SSimon J. Gerraty "d27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b",
73960957b409SSimon J. Gerraty "dcf566ff291c25bbb8568fc3d376a6d9",
73970957b409SSimon J. Gerraty
73980957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
73990957b409SSimon J. Gerraty "",
74000957b409SSimon J. Gerraty "",
74010957b409SSimon J. Gerraty "000000000000000000000000",
74020957b409SSimon J. Gerraty "",
74030957b409SSimon J. Gerraty "530f8afbc74536b9a963b4f1c4cb738b",
74040957b409SSimon J. Gerraty
74050957b409SSimon J. Gerraty "0000000000000000000000000000000000000000000000000000000000000000",
74060957b409SSimon J. Gerraty "00000000000000000000000000000000",
74070957b409SSimon J. Gerraty "",
74080957b409SSimon J. Gerraty "000000000000000000000000",
74090957b409SSimon J. Gerraty "cea7403d4d606b6e074ec5d3baf39d18",
74100957b409SSimon J. Gerraty "d0d1c8a799996bf0265b98b5d48ab919",
74110957b409SSimon J. Gerraty
74120957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308",
74130957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255",
74140957b409SSimon J. Gerraty "",
74150957b409SSimon J. Gerraty "cafebabefacedbaddecaf888",
74160957b409SSimon J. Gerraty "522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad",
74170957b409SSimon J. Gerraty "b094dac5d93471bdec1a502270e3cc6c",
74180957b409SSimon J. Gerraty
74190957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308",
74200957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
74210957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
74220957b409SSimon J. Gerraty "cafebabefacedbaddecaf888",
74230957b409SSimon J. Gerraty "522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662",
74240957b409SSimon J. Gerraty "76fc6ece0f4e1768cddf8853bb2d551b",
74250957b409SSimon J. Gerraty
74260957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308",
74270957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
74280957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
74290957b409SSimon J. Gerraty "cafebabefacedbad",
74300957b409SSimon J. Gerraty "c3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f",
74310957b409SSimon J. Gerraty "3a337dbf46a792c45e454913fe2ea8f2",
74320957b409SSimon J. Gerraty
74330957b409SSimon J. Gerraty "feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308",
74340957b409SSimon J. Gerraty "d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39",
74350957b409SSimon J. Gerraty "feedfacedeadbeeffeedfacedeadbeefabaddad2",
74360957b409SSimon J. Gerraty "9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b",
74370957b409SSimon J. Gerraty "5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f",
74380957b409SSimon J. Gerraty "a44a8266ee1c8eb0c8b5d4cf5ae9f19a",
74390957b409SSimon J. Gerraty
74400957b409SSimon J. Gerraty NULL
74410957b409SSimon J. Gerraty };
74420957b409SSimon J. Gerraty
74430957b409SSimon J. Gerraty static void
test_GCM(void)74440957b409SSimon J. Gerraty test_GCM(void)
74450957b409SSimon J. Gerraty {
74460957b409SSimon J. Gerraty size_t u;
74470957b409SSimon J. Gerraty
74480957b409SSimon J. Gerraty printf("Test GCM: ");
74490957b409SSimon J. Gerraty fflush(stdout);
74500957b409SSimon J. Gerraty
74510957b409SSimon J. Gerraty for (u = 0; KAT_GCM[u]; u += 6) {
74520957b409SSimon J. Gerraty unsigned char key[32];
74530957b409SSimon J. Gerraty unsigned char plain[100];
74540957b409SSimon J. Gerraty unsigned char aad[100];
74550957b409SSimon J. Gerraty unsigned char iv[100];
74560957b409SSimon J. Gerraty unsigned char cipher[100];
74570957b409SSimon J. Gerraty unsigned char tag[100];
74580957b409SSimon J. Gerraty size_t key_len, plain_len, aad_len, iv_len;
74590957b409SSimon J. Gerraty br_aes_ct_ctr_keys bc;
74600957b409SSimon J. Gerraty br_gcm_context gc;
74610957b409SSimon J. Gerraty unsigned char tmp[100], out[16];
74620957b409SSimon J. Gerraty size_t v, tag_len;
74630957b409SSimon J. Gerraty
74640957b409SSimon J. Gerraty key_len = hextobin(key, KAT_GCM[u]);
74650957b409SSimon J. Gerraty plain_len = hextobin(plain, KAT_GCM[u + 1]);
74660957b409SSimon J. Gerraty aad_len = hextobin(aad, KAT_GCM[u + 2]);
74670957b409SSimon J. Gerraty iv_len = hextobin(iv, KAT_GCM[u + 3]);
74680957b409SSimon J. Gerraty hextobin(cipher, KAT_GCM[u + 4]);
74690957b409SSimon J. Gerraty hextobin(tag, KAT_GCM[u + 5]);
74700957b409SSimon J. Gerraty
74710957b409SSimon J. Gerraty br_aes_ct_ctr_init(&bc, key, key_len);
74720957b409SSimon J. Gerraty br_gcm_init(&gc, &bc.vtable, br_ghash_ctmul32);
74730957b409SSimon J. Gerraty
74740957b409SSimon J. Gerraty memset(tmp, 0x54, sizeof tmp);
74750957b409SSimon J. Gerraty
74760957b409SSimon J. Gerraty /*
74770957b409SSimon J. Gerraty * Basic operation.
74780957b409SSimon J. Gerraty */
74790957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
74800957b409SSimon J. Gerraty br_gcm_reset(&gc, iv, iv_len);
74810957b409SSimon J. Gerraty br_gcm_aad_inject(&gc, aad, aad_len);
74820957b409SSimon J. Gerraty br_gcm_flip(&gc);
74830957b409SSimon J. Gerraty br_gcm_run(&gc, 1, tmp, plain_len);
74840957b409SSimon J. Gerraty br_gcm_get_tag(&gc, out);
74850957b409SSimon J. Gerraty check_equals("KAT GCM 1", tmp, cipher, plain_len);
74860957b409SSimon J. Gerraty check_equals("KAT GCM 2", out, tag, 16);
74870957b409SSimon J. Gerraty
74880957b409SSimon J. Gerraty br_gcm_reset(&gc, iv, iv_len);
74890957b409SSimon J. Gerraty br_gcm_aad_inject(&gc, aad, aad_len);
74900957b409SSimon J. Gerraty br_gcm_flip(&gc);
74910957b409SSimon J. Gerraty br_gcm_run(&gc, 0, tmp, plain_len);
74920957b409SSimon J. Gerraty check_equals("KAT GCM 3", tmp, plain, plain_len);
74930957b409SSimon J. Gerraty if (!br_gcm_check_tag(&gc, tag)) {
74940957b409SSimon J. Gerraty fprintf(stderr, "Tag not verified (1)\n");
74950957b409SSimon J. Gerraty exit(EXIT_FAILURE);
74960957b409SSimon J. Gerraty }
74970957b409SSimon J. Gerraty
74980957b409SSimon J. Gerraty for (v = plain_len; v < sizeof tmp; v ++) {
74990957b409SSimon J. Gerraty if (tmp[v] != 0x54) {
75000957b409SSimon J. Gerraty fprintf(stderr, "overflow on data\n");
75010957b409SSimon J. Gerraty exit(EXIT_FAILURE);
75020957b409SSimon J. Gerraty }
75030957b409SSimon J. Gerraty }
75040957b409SSimon J. Gerraty
75050957b409SSimon J. Gerraty /*
75060957b409SSimon J. Gerraty * Byte-by-byte injection.
75070957b409SSimon J. Gerraty */
75080957b409SSimon J. Gerraty br_gcm_reset(&gc, iv, iv_len);
75090957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
75100957b409SSimon J. Gerraty br_gcm_aad_inject(&gc, aad + v, 1);
75110957b409SSimon J. Gerraty }
75120957b409SSimon J. Gerraty br_gcm_flip(&gc);
75130957b409SSimon J. Gerraty for (v = 0; v < plain_len; v ++) {
75140957b409SSimon J. Gerraty br_gcm_run(&gc, 1, tmp + v, 1);
75150957b409SSimon J. Gerraty }
75160957b409SSimon J. Gerraty check_equals("KAT GCM 4", tmp, cipher, plain_len);
75170957b409SSimon J. Gerraty if (!br_gcm_check_tag(&gc, tag)) {
75180957b409SSimon J. Gerraty fprintf(stderr, "Tag not verified (2)\n");
75190957b409SSimon J. Gerraty exit(EXIT_FAILURE);
75200957b409SSimon J. Gerraty }
75210957b409SSimon J. Gerraty
75220957b409SSimon J. Gerraty br_gcm_reset(&gc, iv, iv_len);
75230957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
75240957b409SSimon J. Gerraty br_gcm_aad_inject(&gc, aad + v, 1);
75250957b409SSimon J. Gerraty }
75260957b409SSimon J. Gerraty br_gcm_flip(&gc);
75270957b409SSimon J. Gerraty for (v = 0; v < plain_len; v ++) {
75280957b409SSimon J. Gerraty br_gcm_run(&gc, 0, tmp + v, 1);
75290957b409SSimon J. Gerraty }
75300957b409SSimon J. Gerraty br_gcm_get_tag(&gc, out);
75310957b409SSimon J. Gerraty check_equals("KAT GCM 5", tmp, plain, plain_len);
75320957b409SSimon J. Gerraty check_equals("KAT GCM 6", out, tag, 16);
75330957b409SSimon J. Gerraty
75340957b409SSimon J. Gerraty /*
75350957b409SSimon J. Gerraty * Check that alterations are detected.
75360957b409SSimon J. Gerraty */
75370957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
75380957b409SSimon J. Gerraty memcpy(tmp, cipher, plain_len);
75390957b409SSimon J. Gerraty br_gcm_reset(&gc, iv, iv_len);
75400957b409SSimon J. Gerraty aad[v] ^= 0x04;
75410957b409SSimon J. Gerraty br_gcm_aad_inject(&gc, aad, aad_len);
75420957b409SSimon J. Gerraty aad[v] ^= 0x04;
75430957b409SSimon J. Gerraty br_gcm_flip(&gc);
75440957b409SSimon J. Gerraty br_gcm_run(&gc, 0, tmp, plain_len);
75450957b409SSimon J. Gerraty check_equals("KAT GCM 7", tmp, plain, plain_len);
75460957b409SSimon J. Gerraty if (br_gcm_check_tag(&gc, tag)) {
75470957b409SSimon J. Gerraty fprintf(stderr, "Tag should have changed\n");
75480957b409SSimon J. Gerraty exit(EXIT_FAILURE);
75490957b409SSimon J. Gerraty }
75500957b409SSimon J. Gerraty }
75510957b409SSimon J. Gerraty
75520957b409SSimon J. Gerraty /*
75530957b409SSimon J. Gerraty * Tag truncation.
75540957b409SSimon J. Gerraty */
75550957b409SSimon J. Gerraty for (tag_len = 1; tag_len <= 16; tag_len ++) {
75560957b409SSimon J. Gerraty memset(out, 0x54, sizeof out);
75570957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
75580957b409SSimon J. Gerraty br_gcm_reset(&gc, iv, iv_len);
75590957b409SSimon J. Gerraty br_gcm_aad_inject(&gc, aad, aad_len);
75600957b409SSimon J. Gerraty br_gcm_flip(&gc);
75610957b409SSimon J. Gerraty br_gcm_run(&gc, 1, tmp, plain_len);
75620957b409SSimon J. Gerraty br_gcm_get_tag_trunc(&gc, out, tag_len);
75630957b409SSimon J. Gerraty check_equals("KAT GCM 8", out, tag, tag_len);
75640957b409SSimon J. Gerraty for (v = tag_len; v < sizeof out; v ++) {
75650957b409SSimon J. Gerraty if (out[v] != 0x54) {
75660957b409SSimon J. Gerraty fprintf(stderr, "overflow on tag\n");
75670957b409SSimon J. Gerraty exit(EXIT_FAILURE);
75680957b409SSimon J. Gerraty }
75690957b409SSimon J. Gerraty }
75700957b409SSimon J. Gerraty
75710957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
75720957b409SSimon J. Gerraty br_gcm_reset(&gc, iv, iv_len);
75730957b409SSimon J. Gerraty br_gcm_aad_inject(&gc, aad, aad_len);
75740957b409SSimon J. Gerraty br_gcm_flip(&gc);
75750957b409SSimon J. Gerraty br_gcm_run(&gc, 1, tmp, plain_len);
75760957b409SSimon J. Gerraty if (!br_gcm_check_tag_trunc(&gc, out, tag_len)) {
75770957b409SSimon J. Gerraty fprintf(stderr, "Tag not verified (3)\n");
75780957b409SSimon J. Gerraty exit(EXIT_FAILURE);
75790957b409SSimon J. Gerraty }
75800957b409SSimon J. Gerraty }
75810957b409SSimon J. Gerraty
75820957b409SSimon J. Gerraty printf(".");
75830957b409SSimon J. Gerraty fflush(stdout);
75840957b409SSimon J. Gerraty }
75850957b409SSimon J. Gerraty
75860957b409SSimon J. Gerraty printf(" done.\n");
75870957b409SSimon J. Gerraty fflush(stdout);
75880957b409SSimon J. Gerraty }
75890957b409SSimon J. Gerraty
75900957b409SSimon J. Gerraty /*
75910957b409SSimon J. Gerraty * From "The EAX Mode of Operation (A Two-Pass Authenticated Encryption
75920957b409SSimon J. Gerraty * Scheme Optimized for Simplicity and Efficiency)" (Bellare, Rogaway,
75930957b409SSimon J. Gerraty * Wagner), presented at FSE 2004. Full article is available at:
75940957b409SSimon J. Gerraty * http://web.cs.ucdavis.edu/~rogaway/papers/eax.html
75950957b409SSimon J. Gerraty *
75960957b409SSimon J. Gerraty * EAX specification concatenates the authentication tag at the end of
75970957b409SSimon J. Gerraty * the ciphertext; in our API and the vectors below, the tag is separate.
75980957b409SSimon J. Gerraty *
75990957b409SSimon J. Gerraty * Order is: plaintext, key, nonce, header, ciphertext, tag.
76000957b409SSimon J. Gerraty */
76010957b409SSimon J. Gerraty static const char *const KAT_EAX[] = {
76020957b409SSimon J. Gerraty "",
76030957b409SSimon J. Gerraty "233952dee4d5ed5f9b9c6d6ff80ff478",
76040957b409SSimon J. Gerraty "62ec67f9c3a4a407fcb2a8c49031a8b3",
76050957b409SSimon J. Gerraty "6bfb914fd07eae6b",
76060957b409SSimon J. Gerraty "",
76070957b409SSimon J. Gerraty "e037830e8389f27b025a2d6527e79d01",
76080957b409SSimon J. Gerraty
76090957b409SSimon J. Gerraty "f7fb",
76100957b409SSimon J. Gerraty "91945d3f4dcbee0bf45ef52255f095a4",
76110957b409SSimon J. Gerraty "becaf043b0a23d843194ba972c66debd",
76120957b409SSimon J. Gerraty "fa3bfd4806eb53fa",
76130957b409SSimon J. Gerraty "19dd",
76140957b409SSimon J. Gerraty "5c4c9331049d0bdab0277408f67967e5",
76150957b409SSimon J. Gerraty
76160957b409SSimon J. Gerraty "1a47cb4933",
76170957b409SSimon J. Gerraty "01f74ad64077f2e704c0f60ada3dd523",
76180957b409SSimon J. Gerraty "70c3db4f0d26368400a10ed05d2bff5e",
76190957b409SSimon J. Gerraty "234a3463c1264ac6",
76200957b409SSimon J. Gerraty "d851d5bae0",
76210957b409SSimon J. Gerraty "3a59f238a23e39199dc9266626c40f80",
76220957b409SSimon J. Gerraty
76230957b409SSimon J. Gerraty "481c9e39b1",
76240957b409SSimon J. Gerraty "d07cf6cbb7f313bdde66b727afd3c5e8",
76250957b409SSimon J. Gerraty "8408dfff3c1a2b1292dc199e46b7d617",
76260957b409SSimon J. Gerraty "33cce2eabff5a79d",
76270957b409SSimon J. Gerraty "632a9d131a",
76280957b409SSimon J. Gerraty "d4c168a4225d8e1ff755939974a7bede",
76290957b409SSimon J. Gerraty
76300957b409SSimon J. Gerraty "40d0c07da5e4",
76310957b409SSimon J. Gerraty "35b6d0580005bbc12b0587124557d2c2",
76320957b409SSimon J. Gerraty "fdb6b06676eedc5c61d74276e1f8e816",
76330957b409SSimon J. Gerraty "aeb96eaebe2970e9",
76340957b409SSimon J. Gerraty "071dfe16c675",
76350957b409SSimon J. Gerraty "cb0677e536f73afe6a14b74ee49844dd",
76360957b409SSimon J. Gerraty
76370957b409SSimon J. Gerraty "4de3b35c3fc039245bd1fb7d",
76380957b409SSimon J. Gerraty "bd8e6e11475e60b268784c38c62feb22",
76390957b409SSimon J. Gerraty "6eac5c93072d8e8513f750935e46da1b",
76400957b409SSimon J. Gerraty "d4482d1ca78dce0f",
76410957b409SSimon J. Gerraty "835bb4f15d743e350e728414",
76420957b409SSimon J. Gerraty "abb8644fd6ccb86947c5e10590210a4f",
76430957b409SSimon J. Gerraty
76440957b409SSimon J. Gerraty "8b0a79306c9ce7ed99dae4f87f8dd61636",
76450957b409SSimon J. Gerraty "7c77d6e813bed5ac98baa417477a2e7d",
76460957b409SSimon J. Gerraty "1a8c98dcd73d38393b2bf1569deefc19",
76470957b409SSimon J. Gerraty "65d2017990d62528",
76480957b409SSimon J. Gerraty "02083e3979da014812f59f11d52630da30",
76490957b409SSimon J. Gerraty "137327d10649b0aa6e1c181db617d7f2",
76500957b409SSimon J. Gerraty
76510957b409SSimon J. Gerraty "1bda122bce8a8dbaf1877d962b8592dd2d56",
76520957b409SSimon J. Gerraty "5fff20cafab119ca2fc73549e20f5b0d",
76530957b409SSimon J. Gerraty "dde59b97d722156d4d9aff2bc7559826",
76540957b409SSimon J. Gerraty "54b9f04e6a09189a",
76550957b409SSimon J. Gerraty "2ec47b2c4954a489afc7ba4897edcdae8cc3",
76560957b409SSimon J. Gerraty "3b60450599bd02c96382902aef7f832a",
76570957b409SSimon J. Gerraty
76580957b409SSimon J. Gerraty "6cf36720872b8513f6eab1a8a44438d5ef11",
76590957b409SSimon J. Gerraty "a4a4782bcffd3ec5e7ef6d8c34a56123",
76600957b409SSimon J. Gerraty "b781fcf2f75fa5a8de97a9ca48e522ec",
76610957b409SSimon J. Gerraty "899a175897561d7e",
76620957b409SSimon J. Gerraty "0de18fd0fdd91e7af19f1d8ee8733938b1e8",
76630957b409SSimon J. Gerraty "e7f6d2231618102fdb7fe55ff1991700",
76640957b409SSimon J. Gerraty
76650957b409SSimon J. Gerraty "ca40d7446e545ffaed3bd12a740a659ffbbb3ceab7",
76660957b409SSimon J. Gerraty "8395fcf1e95bebd697bd010bc766aac3",
76670957b409SSimon J. Gerraty "22e7add93cfc6393c57ec0b3c17d6b44",
76680957b409SSimon J. Gerraty "126735fcc320d25a",
76690957b409SSimon J. Gerraty "cb8920f87a6c75cff39627b56e3ed197c552d295a7",
76700957b409SSimon J. Gerraty "cfc46afc253b4652b1af3795b124ab6e",
76710957b409SSimon J. Gerraty
76720957b409SSimon J. Gerraty NULL
76730957b409SSimon J. Gerraty };
76740957b409SSimon J. Gerraty
76750957b409SSimon J. Gerraty static void
test_EAX_inner(const char * name,const br_block_ctrcbc_class * vt)76760957b409SSimon J. Gerraty test_EAX_inner(const char *name, const br_block_ctrcbc_class *vt)
76770957b409SSimon J. Gerraty {
76780957b409SSimon J. Gerraty size_t u;
76790957b409SSimon J. Gerraty
76800957b409SSimon J. Gerraty printf("Test EAX %s: ", name);
76810957b409SSimon J. Gerraty fflush(stdout);
76820957b409SSimon J. Gerraty
76830957b409SSimon J. Gerraty for (u = 0; KAT_EAX[u]; u += 6) {
76840957b409SSimon J. Gerraty unsigned char plain[100];
76850957b409SSimon J. Gerraty unsigned char key[32];
76860957b409SSimon J. Gerraty unsigned char nonce[100];
76870957b409SSimon J. Gerraty unsigned char aad[100];
76880957b409SSimon J. Gerraty unsigned char cipher[100];
76890957b409SSimon J. Gerraty unsigned char tag[100];
76900957b409SSimon J. Gerraty size_t plain_len, key_len, nonce_len, aad_len;
76910957b409SSimon J. Gerraty br_aes_gen_ctrcbc_keys bc;
76920957b409SSimon J. Gerraty br_eax_context ec;
76930957b409SSimon J. Gerraty br_eax_state st;
76940957b409SSimon J. Gerraty unsigned char tmp[100], out[16];
76950957b409SSimon J. Gerraty size_t v, tag_len;
76960957b409SSimon J. Gerraty
76970957b409SSimon J. Gerraty plain_len = hextobin(plain, KAT_EAX[u]);
76980957b409SSimon J. Gerraty key_len = hextobin(key, KAT_EAX[u + 1]);
76990957b409SSimon J. Gerraty nonce_len = hextobin(nonce, KAT_EAX[u + 2]);
77000957b409SSimon J. Gerraty aad_len = hextobin(aad, KAT_EAX[u + 3]);
77010957b409SSimon J. Gerraty hextobin(cipher, KAT_EAX[u + 4]);
77020957b409SSimon J. Gerraty hextobin(tag, KAT_EAX[u + 5]);
77030957b409SSimon J. Gerraty
77040957b409SSimon J. Gerraty vt->init(&bc.vtable, key, key_len);
77050957b409SSimon J. Gerraty br_eax_init(&ec, &bc.vtable);
77060957b409SSimon J. Gerraty
77070957b409SSimon J. Gerraty memset(tmp, 0x54, sizeof tmp);
77080957b409SSimon J. Gerraty
77090957b409SSimon J. Gerraty /*
77100957b409SSimon J. Gerraty * Basic operation.
77110957b409SSimon J. Gerraty */
77120957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
77130957b409SSimon J. Gerraty br_eax_reset(&ec, nonce, nonce_len);
77140957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad, aad_len);
77150957b409SSimon J. Gerraty br_eax_flip(&ec);
77160957b409SSimon J. Gerraty br_eax_run(&ec, 1, tmp, plain_len);
77170957b409SSimon J. Gerraty br_eax_get_tag(&ec, out);
77180957b409SSimon J. Gerraty check_equals("KAT EAX 1", tmp, cipher, plain_len);
77190957b409SSimon J. Gerraty check_equals("KAT EAX 2", out, tag, 16);
77200957b409SSimon J. Gerraty
77210957b409SSimon J. Gerraty br_eax_reset(&ec, nonce, nonce_len);
77220957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad, aad_len);
77230957b409SSimon J. Gerraty br_eax_flip(&ec);
77240957b409SSimon J. Gerraty br_eax_run(&ec, 0, tmp, plain_len);
77250957b409SSimon J. Gerraty check_equals("KAT EAX 3", tmp, plain, plain_len);
77260957b409SSimon J. Gerraty if (!br_eax_check_tag(&ec, tag)) {
77270957b409SSimon J. Gerraty fprintf(stderr, "Tag not verified (1)\n");
77280957b409SSimon J. Gerraty exit(EXIT_FAILURE);
77290957b409SSimon J. Gerraty }
77300957b409SSimon J. Gerraty
77310957b409SSimon J. Gerraty for (v = plain_len; v < sizeof tmp; v ++) {
77320957b409SSimon J. Gerraty if (tmp[v] != 0x54) {
77330957b409SSimon J. Gerraty fprintf(stderr, "overflow on data\n");
77340957b409SSimon J. Gerraty exit(EXIT_FAILURE);
77350957b409SSimon J. Gerraty }
77360957b409SSimon J. Gerraty }
77370957b409SSimon J. Gerraty
77380957b409SSimon J. Gerraty /*
77390957b409SSimon J. Gerraty * Byte-by-byte injection.
77400957b409SSimon J. Gerraty */
77410957b409SSimon J. Gerraty br_eax_reset(&ec, nonce, nonce_len);
77420957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
77430957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad + v, 1);
77440957b409SSimon J. Gerraty }
77450957b409SSimon J. Gerraty br_eax_flip(&ec);
77460957b409SSimon J. Gerraty for (v = 0; v < plain_len; v ++) {
77470957b409SSimon J. Gerraty br_eax_run(&ec, 1, tmp + v, 1);
77480957b409SSimon J. Gerraty }
77490957b409SSimon J. Gerraty check_equals("KAT EAX 4", tmp, cipher, plain_len);
77500957b409SSimon J. Gerraty if (!br_eax_check_tag(&ec, tag)) {
77510957b409SSimon J. Gerraty fprintf(stderr, "Tag not verified (2)\n");
77520957b409SSimon J. Gerraty exit(EXIT_FAILURE);
77530957b409SSimon J. Gerraty }
77540957b409SSimon J. Gerraty
77550957b409SSimon J. Gerraty br_eax_reset(&ec, nonce, nonce_len);
77560957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
77570957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad + v, 1);
77580957b409SSimon J. Gerraty }
77590957b409SSimon J. Gerraty br_eax_flip(&ec);
77600957b409SSimon J. Gerraty for (v = 0; v < plain_len; v ++) {
77610957b409SSimon J. Gerraty br_eax_run(&ec, 0, tmp + v, 1);
77620957b409SSimon J. Gerraty }
77630957b409SSimon J. Gerraty br_eax_get_tag(&ec, out);
77640957b409SSimon J. Gerraty check_equals("KAT EAX 5", tmp, plain, plain_len);
77650957b409SSimon J. Gerraty check_equals("KAT EAX 6", out, tag, 16);
77660957b409SSimon J. Gerraty
77670957b409SSimon J. Gerraty /*
77680957b409SSimon J. Gerraty * Check that alterations are detected.
77690957b409SSimon J. Gerraty */
77700957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
77710957b409SSimon J. Gerraty memcpy(tmp, cipher, plain_len);
77720957b409SSimon J. Gerraty br_eax_reset(&ec, nonce, nonce_len);
77730957b409SSimon J. Gerraty aad[v] ^= 0x04;
77740957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad, aad_len);
77750957b409SSimon J. Gerraty aad[v] ^= 0x04;
77760957b409SSimon J. Gerraty br_eax_flip(&ec);
77770957b409SSimon J. Gerraty br_eax_run(&ec, 0, tmp, plain_len);
77780957b409SSimon J. Gerraty check_equals("KAT EAX 7", tmp, plain, plain_len);
77790957b409SSimon J. Gerraty if (br_eax_check_tag(&ec, tag)) {
77800957b409SSimon J. Gerraty fprintf(stderr, "Tag should have changed\n");
77810957b409SSimon J. Gerraty exit(EXIT_FAILURE);
77820957b409SSimon J. Gerraty }
77830957b409SSimon J. Gerraty }
77840957b409SSimon J. Gerraty
77850957b409SSimon J. Gerraty /*
77860957b409SSimon J. Gerraty * Tag truncation.
77870957b409SSimon J. Gerraty */
77880957b409SSimon J. Gerraty for (tag_len = 1; tag_len <= 16; tag_len ++) {
77890957b409SSimon J. Gerraty memset(out, 0x54, sizeof out);
77900957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
77910957b409SSimon J. Gerraty br_eax_reset(&ec, nonce, nonce_len);
77920957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad, aad_len);
77930957b409SSimon J. Gerraty br_eax_flip(&ec);
77940957b409SSimon J. Gerraty br_eax_run(&ec, 1, tmp, plain_len);
77950957b409SSimon J. Gerraty br_eax_get_tag_trunc(&ec, out, tag_len);
77960957b409SSimon J. Gerraty check_equals("KAT EAX 8", out, tag, tag_len);
77970957b409SSimon J. Gerraty for (v = tag_len; v < sizeof out; v ++) {
77980957b409SSimon J. Gerraty if (out[v] != 0x54) {
77990957b409SSimon J. Gerraty fprintf(stderr, "overflow on tag\n");
78000957b409SSimon J. Gerraty exit(EXIT_FAILURE);
78010957b409SSimon J. Gerraty }
78020957b409SSimon J. Gerraty }
78030957b409SSimon J. Gerraty
78040957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
78050957b409SSimon J. Gerraty br_eax_reset(&ec, nonce, nonce_len);
78060957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad, aad_len);
78070957b409SSimon J. Gerraty br_eax_flip(&ec);
78080957b409SSimon J. Gerraty br_eax_run(&ec, 1, tmp, plain_len);
78090957b409SSimon J. Gerraty if (!br_eax_check_tag_trunc(&ec, out, tag_len)) {
78100957b409SSimon J. Gerraty fprintf(stderr, "Tag not verified (3)\n");
78110957b409SSimon J. Gerraty exit(EXIT_FAILURE);
78120957b409SSimon J. Gerraty }
78130957b409SSimon J. Gerraty }
78140957b409SSimon J. Gerraty
78150957b409SSimon J. Gerraty printf(".");
78160957b409SSimon J. Gerraty fflush(stdout);
78170957b409SSimon J. Gerraty
78180957b409SSimon J. Gerraty /*
78190957b409SSimon J. Gerraty * For capture tests, we need the message to be non-empty.
78200957b409SSimon J. Gerraty */
78210957b409SSimon J. Gerraty if (plain_len == 0) {
78220957b409SSimon J. Gerraty continue;
78230957b409SSimon J. Gerraty }
78240957b409SSimon J. Gerraty
78250957b409SSimon J. Gerraty /*
78260957b409SSimon J. Gerraty * Captured state, pre-AAD. This requires the AAD and the
78270957b409SSimon J. Gerraty * message to be non-empty.
78280957b409SSimon J. Gerraty */
78290957b409SSimon J. Gerraty br_eax_capture(&ec, &st);
78300957b409SSimon J. Gerraty
78310957b409SSimon J. Gerraty if (aad_len > 0) {
78320957b409SSimon J. Gerraty br_eax_reset_pre_aad(&ec, &st, nonce, nonce_len);
78330957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad, aad_len);
78340957b409SSimon J. Gerraty br_eax_flip(&ec);
78350957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
78360957b409SSimon J. Gerraty br_eax_run(&ec, 1, tmp, plain_len);
78370957b409SSimon J. Gerraty br_eax_get_tag(&ec, out);
78380957b409SSimon J. Gerraty check_equals("KAT EAX 9", tmp, cipher, plain_len);
78390957b409SSimon J. Gerraty check_equals("KAT EAX 10", out, tag, 16);
78400957b409SSimon J. Gerraty
78410957b409SSimon J. Gerraty br_eax_reset_pre_aad(&ec, &st, nonce, nonce_len);
78420957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad, aad_len);
78430957b409SSimon J. Gerraty br_eax_flip(&ec);
78440957b409SSimon J. Gerraty br_eax_run(&ec, 0, tmp, plain_len);
78450957b409SSimon J. Gerraty br_eax_get_tag(&ec, out);
78460957b409SSimon J. Gerraty check_equals("KAT EAX 11", tmp, plain, plain_len);
78470957b409SSimon J. Gerraty check_equals("KAT EAX 12", out, tag, 16);
78480957b409SSimon J. Gerraty }
78490957b409SSimon J. Gerraty
78500957b409SSimon J. Gerraty /*
78510957b409SSimon J. Gerraty * Captured state, post-AAD. This requires the message to
78520957b409SSimon J. Gerraty * be non-empty.
78530957b409SSimon J. Gerraty */
78540957b409SSimon J. Gerraty br_eax_reset(&ec, nonce, nonce_len);
78550957b409SSimon J. Gerraty br_eax_aad_inject(&ec, aad, aad_len);
78560957b409SSimon J. Gerraty br_eax_flip(&ec);
78570957b409SSimon J. Gerraty br_eax_get_aad_mac(&ec, &st);
78580957b409SSimon J. Gerraty
78590957b409SSimon J. Gerraty br_eax_reset_post_aad(&ec, &st, nonce, nonce_len);
78600957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
78610957b409SSimon J. Gerraty br_eax_run(&ec, 1, tmp, plain_len);
78620957b409SSimon J. Gerraty br_eax_get_tag(&ec, out);
78630957b409SSimon J. Gerraty check_equals("KAT EAX 13", tmp, cipher, plain_len);
78640957b409SSimon J. Gerraty check_equals("KAT EAX 14", out, tag, 16);
78650957b409SSimon J. Gerraty
78660957b409SSimon J. Gerraty br_eax_reset_post_aad(&ec, &st, nonce, nonce_len);
78670957b409SSimon J. Gerraty br_eax_run(&ec, 0, tmp, plain_len);
78680957b409SSimon J. Gerraty br_eax_get_tag(&ec, out);
78690957b409SSimon J. Gerraty check_equals("KAT EAX 15", tmp, plain, plain_len);
78700957b409SSimon J. Gerraty check_equals("KAT EAX 16", out, tag, 16);
78710957b409SSimon J. Gerraty
78720957b409SSimon J. Gerraty printf(".");
78730957b409SSimon J. Gerraty fflush(stdout);
78740957b409SSimon J. Gerraty }
78750957b409SSimon J. Gerraty
78760957b409SSimon J. Gerraty printf(" done.\n");
78770957b409SSimon J. Gerraty fflush(stdout);
78780957b409SSimon J. Gerraty }
78790957b409SSimon J. Gerraty
78800957b409SSimon J. Gerraty static void
test_EAX(void)78810957b409SSimon J. Gerraty test_EAX(void)
78820957b409SSimon J. Gerraty {
78830957b409SSimon J. Gerraty const br_block_ctrcbc_class *x_ctrcbc;
78840957b409SSimon J. Gerraty
78850957b409SSimon J. Gerraty test_EAX_inner("aes_big", &br_aes_big_ctrcbc_vtable);
78860957b409SSimon J. Gerraty test_EAX_inner("aes_small", &br_aes_small_ctrcbc_vtable);
78870957b409SSimon J. Gerraty test_EAX_inner("aes_ct", &br_aes_ct_ctrcbc_vtable);
78880957b409SSimon J. Gerraty test_EAX_inner("aes_ct64", &br_aes_ct64_ctrcbc_vtable);
78890957b409SSimon J. Gerraty
78900957b409SSimon J. Gerraty x_ctrcbc = br_aes_x86ni_ctrcbc_get_vtable();
78910957b409SSimon J. Gerraty if (x_ctrcbc != NULL) {
78920957b409SSimon J. Gerraty test_EAX_inner("aes_x86ni", x_ctrcbc);
78930957b409SSimon J. Gerraty } else {
78940957b409SSimon J. Gerraty printf("Test EAX aes_x86ni: UNAVAILABLE\n");
78950957b409SSimon J. Gerraty }
78960957b409SSimon J. Gerraty
78970957b409SSimon J. Gerraty x_ctrcbc = br_aes_pwr8_ctrcbc_get_vtable();
78980957b409SSimon J. Gerraty if (x_ctrcbc != NULL) {
78990957b409SSimon J. Gerraty test_EAX_inner("aes_pwr8", x_ctrcbc);
79000957b409SSimon J. Gerraty } else {
79010957b409SSimon J. Gerraty printf("Test EAX aes_pwr8: UNAVAILABLE\n");
79020957b409SSimon J. Gerraty }
79030957b409SSimon J. Gerraty }
79040957b409SSimon J. Gerraty
79050957b409SSimon J. Gerraty /*
79060957b409SSimon J. Gerraty * From NIST SP 800-38C, appendix C.
79070957b409SSimon J. Gerraty *
79080957b409SSimon J. Gerraty * CCM specification concatenates the authentication tag at the end of
79090957b409SSimon J. Gerraty * the ciphertext; in our API and the vectors below, the tag is separate.
79100957b409SSimon J. Gerraty *
79110957b409SSimon J. Gerraty * Order is: key, nonce, aad, plaintext, ciphertext, tag.
79120957b409SSimon J. Gerraty */
79130957b409SSimon J. Gerraty static const char *const KAT_CCM[] = {
79140957b409SSimon J. Gerraty "404142434445464748494a4b4c4d4e4f",
79150957b409SSimon J. Gerraty "10111213141516",
79160957b409SSimon J. Gerraty "0001020304050607",
79170957b409SSimon J. Gerraty "20212223",
79180957b409SSimon J. Gerraty "7162015b",
79190957b409SSimon J. Gerraty "4dac255d",
79200957b409SSimon J. Gerraty
79210957b409SSimon J. Gerraty "404142434445464748494a4b4c4d4e4f",
79220957b409SSimon J. Gerraty "1011121314151617",
79230957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f",
79240957b409SSimon J. Gerraty "202122232425262728292a2b2c2d2e2f",
79250957b409SSimon J. Gerraty "d2a1f0e051ea5f62081a7792073d593d",
79260957b409SSimon J. Gerraty "1fc64fbfaccd",
79270957b409SSimon J. Gerraty
79280957b409SSimon J. Gerraty "404142434445464748494a4b4c4d4e4f",
79290957b409SSimon J. Gerraty "101112131415161718191a1b",
79300957b409SSimon J. Gerraty "000102030405060708090a0b0c0d0e0f10111213",
79310957b409SSimon J. Gerraty "202122232425262728292a2b2c2d2e2f3031323334353637",
79320957b409SSimon J. Gerraty "e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5",
79330957b409SSimon J. Gerraty "484392fbc1b09951",
79340957b409SSimon J. Gerraty
79350957b409SSimon J. Gerraty "404142434445464748494a4b4c4d4e4f",
79360957b409SSimon J. Gerraty "101112131415161718191a1b1c",
79370957b409SSimon J. Gerraty NULL,
79380957b409SSimon J. Gerraty "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
79390957b409SSimon J. Gerraty "69915dad1e84c6376a68c2967e4dab615ae0fd1faec44cc484828529463ccf72",
79400957b409SSimon J. Gerraty "b4ac6bec93e8598e7f0dadbcea5b",
79410957b409SSimon J. Gerraty
79420957b409SSimon J. Gerraty NULL
79430957b409SSimon J. Gerraty };
79440957b409SSimon J. Gerraty
79450957b409SSimon J. Gerraty static void
test_CCM_inner(const char * name,const br_block_ctrcbc_class * vt)79460957b409SSimon J. Gerraty test_CCM_inner(const char *name, const br_block_ctrcbc_class *vt)
79470957b409SSimon J. Gerraty {
79480957b409SSimon J. Gerraty size_t u;
79490957b409SSimon J. Gerraty
79500957b409SSimon J. Gerraty printf("Test CCM %s: ", name);
79510957b409SSimon J. Gerraty fflush(stdout);
79520957b409SSimon J. Gerraty
79530957b409SSimon J. Gerraty for (u = 0; KAT_CCM[u]; u += 6) {
79540957b409SSimon J. Gerraty unsigned char plain[100];
79550957b409SSimon J. Gerraty unsigned char key[32];
79560957b409SSimon J. Gerraty unsigned char nonce[100];
79570957b409SSimon J. Gerraty unsigned char aad_buf[100], *aad;
79580957b409SSimon J. Gerraty unsigned char cipher[100];
79590957b409SSimon J. Gerraty unsigned char tag[100];
79600957b409SSimon J. Gerraty size_t plain_len, key_len, nonce_len, aad_len, tag_len;
79610957b409SSimon J. Gerraty br_aes_gen_ctrcbc_keys bc;
79620957b409SSimon J. Gerraty br_ccm_context ec;
79630957b409SSimon J. Gerraty unsigned char tmp[100], out[16];
79640957b409SSimon J. Gerraty size_t v;
79650957b409SSimon J. Gerraty
79660957b409SSimon J. Gerraty key_len = hextobin(key, KAT_CCM[u]);
79670957b409SSimon J. Gerraty nonce_len = hextobin(nonce, KAT_CCM[u + 1]);
79680957b409SSimon J. Gerraty if (KAT_CCM[u + 2] == NULL) {
79690957b409SSimon J. Gerraty aad_len = 65536;
79700957b409SSimon J. Gerraty aad = malloc(aad_len);
79710957b409SSimon J. Gerraty if (aad == NULL) {
79720957b409SSimon J. Gerraty fprintf(stderr, "OOM error\n");
79730957b409SSimon J. Gerraty exit(EXIT_FAILURE);
79740957b409SSimon J. Gerraty }
79750957b409SSimon J. Gerraty for (v = 0; v < 65536; v ++) {
79760957b409SSimon J. Gerraty aad[v] = (unsigned char)v;
79770957b409SSimon J. Gerraty }
79780957b409SSimon J. Gerraty } else {
79790957b409SSimon J. Gerraty aad = aad_buf;
79800957b409SSimon J. Gerraty aad_len = hextobin(aad, KAT_CCM[u + 2]);
79810957b409SSimon J. Gerraty }
79820957b409SSimon J. Gerraty plain_len = hextobin(plain, KAT_CCM[u + 3]);
79830957b409SSimon J. Gerraty hextobin(cipher, KAT_CCM[u + 4]);
79840957b409SSimon J. Gerraty tag_len = hextobin(tag, KAT_CCM[u + 5]);
79850957b409SSimon J. Gerraty
79860957b409SSimon J. Gerraty vt->init(&bc.vtable, key, key_len);
79870957b409SSimon J. Gerraty br_ccm_init(&ec, &bc.vtable);
79880957b409SSimon J. Gerraty
79890957b409SSimon J. Gerraty memset(tmp, 0x54, sizeof tmp);
79900957b409SSimon J. Gerraty
79910957b409SSimon J. Gerraty /*
79920957b409SSimon J. Gerraty * Basic operation.
79930957b409SSimon J. Gerraty */
79940957b409SSimon J. Gerraty memcpy(tmp, plain, plain_len);
79950957b409SSimon J. Gerraty if (!br_ccm_reset(&ec, nonce, nonce_len,
79960957b409SSimon J. Gerraty aad_len, plain_len, tag_len))
79970957b409SSimon J. Gerraty {
79980957b409SSimon J. Gerraty fprintf(stderr, "CCM reset failed\n");
79990957b409SSimon J. Gerraty exit(EXIT_FAILURE);
80000957b409SSimon J. Gerraty }
80010957b409SSimon J. Gerraty br_ccm_aad_inject(&ec, aad, aad_len);
80020957b409SSimon J. Gerraty br_ccm_flip(&ec);
80030957b409SSimon J. Gerraty br_ccm_run(&ec, 1, tmp, plain_len);
80040957b409SSimon J. Gerraty if (br_ccm_get_tag(&ec, out) != tag_len) {
80050957b409SSimon J. Gerraty fprintf(stderr, "CCM returned wrong tag length\n");
80060957b409SSimon J. Gerraty exit(EXIT_FAILURE);
80070957b409SSimon J. Gerraty }
80080957b409SSimon J. Gerraty check_equals("KAT CCM 1", tmp, cipher, plain_len);
80090957b409SSimon J. Gerraty check_equals("KAT CCM 2", out, tag, tag_len);
80100957b409SSimon J. Gerraty
80110957b409SSimon J. Gerraty br_ccm_reset(&ec, nonce, nonce_len,
80120957b409SSimon J. Gerraty aad_len, plain_len, tag_len);
80130957b409SSimon J. Gerraty br_ccm_aad_inject(&ec, aad, aad_len);
80140957b409SSimon J. Gerraty br_ccm_flip(&ec);
80150957b409SSimon J. Gerraty br_ccm_run(&ec, 0, tmp, plain_len);
80160957b409SSimon J. Gerraty check_equals("KAT CCM 3", tmp, plain, plain_len);
80170957b409SSimon J. Gerraty if (!br_ccm_check_tag(&ec, tag)) {
80180957b409SSimon J. Gerraty fprintf(stderr, "Tag not verified (1)\n");
80190957b409SSimon J. Gerraty exit(EXIT_FAILURE);
80200957b409SSimon J. Gerraty }
80210957b409SSimon J. Gerraty
80220957b409SSimon J. Gerraty for (v = plain_len; v < sizeof tmp; v ++) {
80230957b409SSimon J. Gerraty if (tmp[v] != 0x54) {
80240957b409SSimon J. Gerraty fprintf(stderr, "overflow on data\n");
80250957b409SSimon J. Gerraty exit(EXIT_FAILURE);
80260957b409SSimon J. Gerraty }
80270957b409SSimon J. Gerraty }
80280957b409SSimon J. Gerraty
80290957b409SSimon J. Gerraty /*
80300957b409SSimon J. Gerraty * Byte-by-byte injection.
80310957b409SSimon J. Gerraty */
80320957b409SSimon J. Gerraty br_ccm_reset(&ec, nonce, nonce_len,
80330957b409SSimon J. Gerraty aad_len, plain_len, tag_len);
80340957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
80350957b409SSimon J. Gerraty br_ccm_aad_inject(&ec, aad + v, 1);
80360957b409SSimon J. Gerraty }
80370957b409SSimon J. Gerraty br_ccm_flip(&ec);
80380957b409SSimon J. Gerraty for (v = 0; v < plain_len; v ++) {
80390957b409SSimon J. Gerraty br_ccm_run(&ec, 1, tmp + v, 1);
80400957b409SSimon J. Gerraty }
80410957b409SSimon J. Gerraty check_equals("KAT CCM 4", tmp, cipher, plain_len);
80420957b409SSimon J. Gerraty if (!br_ccm_check_tag(&ec, tag)) {
80430957b409SSimon J. Gerraty fprintf(stderr, "Tag not verified (2)\n");
80440957b409SSimon J. Gerraty exit(EXIT_FAILURE);
80450957b409SSimon J. Gerraty }
80460957b409SSimon J. Gerraty
80470957b409SSimon J. Gerraty br_ccm_reset(&ec, nonce, nonce_len,
80480957b409SSimon J. Gerraty aad_len, plain_len, tag_len);
80490957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
80500957b409SSimon J. Gerraty br_ccm_aad_inject(&ec, aad + v, 1);
80510957b409SSimon J. Gerraty }
80520957b409SSimon J. Gerraty br_ccm_flip(&ec);
80530957b409SSimon J. Gerraty for (v = 0; v < plain_len; v ++) {
80540957b409SSimon J. Gerraty br_ccm_run(&ec, 0, tmp + v, 1);
80550957b409SSimon J. Gerraty }
80560957b409SSimon J. Gerraty br_ccm_get_tag(&ec, out);
80570957b409SSimon J. Gerraty check_equals("KAT CCM 5", tmp, plain, plain_len);
80580957b409SSimon J. Gerraty check_equals("KAT CCM 6", out, tag, tag_len);
80590957b409SSimon J. Gerraty
80600957b409SSimon J. Gerraty /*
80610957b409SSimon J. Gerraty * Check that alterations are detected.
80620957b409SSimon J. Gerraty */
80630957b409SSimon J. Gerraty for (v = 0; v < aad_len; v ++) {
80640957b409SSimon J. Gerraty memcpy(tmp, cipher, plain_len);
80650957b409SSimon J. Gerraty br_ccm_reset(&ec, nonce, nonce_len,
80660957b409SSimon J. Gerraty aad_len, plain_len, tag_len);
80670957b409SSimon J. Gerraty aad[v] ^= 0x04;
80680957b409SSimon J. Gerraty br_ccm_aad_inject(&ec, aad, aad_len);
80690957b409SSimon J. Gerraty aad[v] ^= 0x04;
80700957b409SSimon J. Gerraty br_ccm_flip(&ec);
80710957b409SSimon J. Gerraty br_ccm_run(&ec, 0, tmp, plain_len);
80720957b409SSimon J. Gerraty check_equals("KAT CCM 7", tmp, plain, plain_len);
80730957b409SSimon J. Gerraty if (br_ccm_check_tag(&ec, tag)) {
80740957b409SSimon J. Gerraty fprintf(stderr, "Tag should have changed\n");
80750957b409SSimon J. Gerraty exit(EXIT_FAILURE);
80760957b409SSimon J. Gerraty }
80770957b409SSimon J. Gerraty
80780957b409SSimon J. Gerraty /*
80790957b409SSimon J. Gerraty * When the AAD is really big, we don't want to do
80800957b409SSimon J. Gerraty * the complete quadratic operation.
80810957b409SSimon J. Gerraty */
80820957b409SSimon J. Gerraty if (v >= 32) {
80830957b409SSimon J. Gerraty break;
80840957b409SSimon J. Gerraty }
80850957b409SSimon J. Gerraty }
80860957b409SSimon J. Gerraty
80870957b409SSimon J. Gerraty if (aad != aad_buf) {
80880957b409SSimon J. Gerraty free(aad);
80890957b409SSimon J. Gerraty }
80900957b409SSimon J. Gerraty
80910957b409SSimon J. Gerraty printf(".");
80920957b409SSimon J. Gerraty fflush(stdout);
80930957b409SSimon J. Gerraty }
80940957b409SSimon J. Gerraty
80950957b409SSimon J. Gerraty printf(" done.\n");
80960957b409SSimon J. Gerraty fflush(stdout);
80970957b409SSimon J. Gerraty }
80980957b409SSimon J. Gerraty
80990957b409SSimon J. Gerraty static void
test_CCM(void)81000957b409SSimon J. Gerraty test_CCM(void)
81010957b409SSimon J. Gerraty {
81020957b409SSimon J. Gerraty const br_block_ctrcbc_class *x_ctrcbc;
81030957b409SSimon J. Gerraty
81040957b409SSimon J. Gerraty test_CCM_inner("aes_big", &br_aes_big_ctrcbc_vtable);
81050957b409SSimon J. Gerraty test_CCM_inner("aes_small", &br_aes_small_ctrcbc_vtable);
81060957b409SSimon J. Gerraty test_CCM_inner("aes_ct", &br_aes_ct_ctrcbc_vtable);
81070957b409SSimon J. Gerraty test_CCM_inner("aes_ct64", &br_aes_ct64_ctrcbc_vtable);
81080957b409SSimon J. Gerraty
81090957b409SSimon J. Gerraty x_ctrcbc = br_aes_x86ni_ctrcbc_get_vtable();
81100957b409SSimon J. Gerraty if (x_ctrcbc != NULL) {
81110957b409SSimon J. Gerraty test_CCM_inner("aes_x86ni", x_ctrcbc);
81120957b409SSimon J. Gerraty } else {
81130957b409SSimon J. Gerraty printf("Test CCM aes_x86ni: UNAVAILABLE\n");
81140957b409SSimon J. Gerraty }
81150957b409SSimon J. Gerraty
81160957b409SSimon J. Gerraty x_ctrcbc = br_aes_pwr8_ctrcbc_get_vtable();
81170957b409SSimon J. Gerraty if (x_ctrcbc != NULL) {
81180957b409SSimon J. Gerraty test_CCM_inner("aes_pwr8", x_ctrcbc);
81190957b409SSimon J. Gerraty } else {
81200957b409SSimon J. Gerraty printf("Test CCM aes_pwr8: UNAVAILABLE\n");
81210957b409SSimon J. Gerraty }
81220957b409SSimon J. Gerraty }
81230957b409SSimon J. Gerraty
81240957b409SSimon J. Gerraty static void
test_EC_inner(const char * sk,const char * sU,const br_ec_impl * impl,int curve)81250957b409SSimon J. Gerraty test_EC_inner(const char *sk, const char *sU,
81260957b409SSimon J. Gerraty const br_ec_impl *impl, int curve)
81270957b409SSimon J. Gerraty {
81280957b409SSimon J. Gerraty unsigned char bk[70];
81290957b409SSimon J. Gerraty unsigned char eG[150], eU[150];
81300957b409SSimon J. Gerraty uint32_t n[22], n0i;
81310957b409SSimon J. Gerraty size_t klen, ulen, nlen;
81320957b409SSimon J. Gerraty const br_ec_curve_def *cd;
81330957b409SSimon J. Gerraty br_hmac_drbg_context rng;
81340957b409SSimon J. Gerraty int i;
81350957b409SSimon J. Gerraty
81360957b409SSimon J. Gerraty klen = hextobin(bk, sk);
81370957b409SSimon J. Gerraty ulen = hextobin(eU, sU);
81380957b409SSimon J. Gerraty switch (curve) {
81390957b409SSimon J. Gerraty case BR_EC_secp256r1:
81400957b409SSimon J. Gerraty cd = &br_secp256r1;
81410957b409SSimon J. Gerraty break;
81420957b409SSimon J. Gerraty case BR_EC_secp384r1:
81430957b409SSimon J. Gerraty cd = &br_secp384r1;
81440957b409SSimon J. Gerraty break;
81450957b409SSimon J. Gerraty case BR_EC_secp521r1:
81460957b409SSimon J. Gerraty cd = &br_secp521r1;
81470957b409SSimon J. Gerraty break;
81480957b409SSimon J. Gerraty default:
81490957b409SSimon J. Gerraty fprintf(stderr, "Unknown curve: %d\n", curve);
81500957b409SSimon J. Gerraty exit(EXIT_FAILURE);
81510957b409SSimon J. Gerraty break;
81520957b409SSimon J. Gerraty }
81530957b409SSimon J. Gerraty if (ulen != cd->generator_len) {
81540957b409SSimon J. Gerraty fprintf(stderr, "KAT vector wrong (%lu / %lu)\n",
81550957b409SSimon J. Gerraty (unsigned long)ulen,
81560957b409SSimon J. Gerraty (unsigned long)cd->generator_len);
81570957b409SSimon J. Gerraty }
81580957b409SSimon J. Gerraty memcpy(eG, cd->generator, ulen);
81590957b409SSimon J. Gerraty if (impl->mul(eG, ulen, bk, klen, curve) != 1) {
81600957b409SSimon J. Gerraty fprintf(stderr, "KAT multiplication failed\n");
81610957b409SSimon J. Gerraty exit(EXIT_FAILURE);
81620957b409SSimon J. Gerraty }
81630957b409SSimon J. Gerraty if (memcmp(eG, eU, ulen) != 0) {
81640957b409SSimon J. Gerraty fprintf(stderr, "KAT mul: mismatch\n");
81650957b409SSimon J. Gerraty exit(EXIT_FAILURE);
81660957b409SSimon J. Gerraty }
81670957b409SSimon J. Gerraty
81680957b409SSimon J. Gerraty /*
81690957b409SSimon J. Gerraty * Test the two-point-mul function. We want to test the basic
81700957b409SSimon J. Gerraty * functionality, and the following special cases:
81710957b409SSimon J. Gerraty * x = y
81720957b409SSimon J. Gerraty * x + y = curve order
81730957b409SSimon J. Gerraty */
81740957b409SSimon J. Gerraty nlen = cd->order_len;
81750957b409SSimon J. Gerraty br_i31_decode(n, cd->order, nlen);
81760957b409SSimon J. Gerraty n0i = br_i31_ninv31(n[1]);
81770957b409SSimon J. Gerraty br_hmac_drbg_init(&rng, &br_sha256_vtable, "seed for EC", 11);
81780957b409SSimon J. Gerraty for (i = 0; i < 10; i ++) {
81790957b409SSimon J. Gerraty unsigned char ba[80], bb[80], bx[80], by[80], bz[80];
81800957b409SSimon J. Gerraty uint32_t a[22], b[22], x[22], y[22], z[22], t1[22], t2[22];
81810957b409SSimon J. Gerraty uint32_t r;
81820957b409SSimon J. Gerraty unsigned char eA[160], eB[160], eC[160], eD[160];
81830957b409SSimon J. Gerraty
81840957b409SSimon J. Gerraty /*
81850957b409SSimon J. Gerraty * Generate random a and b, and compute A = a*G and B = b*G.
81860957b409SSimon J. Gerraty */
81870957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, ba, sizeof ba);
81880957b409SSimon J. Gerraty br_i31_decode_reduce(a, ba, sizeof ba, n);
81890957b409SSimon J. Gerraty br_i31_encode(ba, nlen, a);
81900957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, bb, sizeof bb);
81910957b409SSimon J. Gerraty br_i31_decode_reduce(b, bb, sizeof bb, n);
81920957b409SSimon J. Gerraty br_i31_encode(bb, nlen, b);
81930957b409SSimon J. Gerraty memcpy(eA, cd->generator, ulen);
81940957b409SSimon J. Gerraty impl->mul(eA, ulen, ba, nlen, cd->curve);
81950957b409SSimon J. Gerraty memcpy(eB, cd->generator, ulen);
81960957b409SSimon J. Gerraty impl->mul(eB, ulen, bb, nlen, cd->curve);
81970957b409SSimon J. Gerraty
81980957b409SSimon J. Gerraty /*
81990957b409SSimon J. Gerraty * Generate random x and y (modulo n).
82000957b409SSimon J. Gerraty */
82010957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, bx, sizeof bx);
82020957b409SSimon J. Gerraty br_i31_decode_reduce(x, bx, sizeof bx, n);
82030957b409SSimon J. Gerraty br_i31_encode(bx, nlen, x);
82040957b409SSimon J. Gerraty br_hmac_drbg_generate(&rng, by, sizeof by);
82050957b409SSimon J. Gerraty br_i31_decode_reduce(y, by, sizeof by, n);
82060957b409SSimon J. Gerraty br_i31_encode(by, nlen, y);
82070957b409SSimon J. Gerraty
82080957b409SSimon J. Gerraty /*
82090957b409SSimon J. Gerraty * Compute z = a*x + b*y (mod n).
82100957b409SSimon J. Gerraty */
82110957b409SSimon J. Gerraty memcpy(t1, x, sizeof x);
82120957b409SSimon J. Gerraty br_i31_to_monty(t1, n);
82130957b409SSimon J. Gerraty br_i31_montymul(z, a, t1, n, n0i);
82140957b409SSimon J. Gerraty memcpy(t1, y, sizeof y);
82150957b409SSimon J. Gerraty br_i31_to_monty(t1, n);
82160957b409SSimon J. Gerraty br_i31_montymul(t2, b, t1, n, n0i);
82170957b409SSimon J. Gerraty r = br_i31_add(z, t2, 1);
82180957b409SSimon J. Gerraty r |= br_i31_sub(z, n, 0) ^ 1;
82190957b409SSimon J. Gerraty br_i31_sub(z, n, r);
82200957b409SSimon J. Gerraty br_i31_encode(bz, nlen, z);
82210957b409SSimon J. Gerraty
82220957b409SSimon J. Gerraty /*
82230957b409SSimon J. Gerraty * Compute C = x*A + y*B with muladd(), and also
82240957b409SSimon J. Gerraty * D = z*G with mul(). The two points must match.
82250957b409SSimon J. Gerraty */
82260957b409SSimon J. Gerraty memcpy(eC, eA, ulen);
82270957b409SSimon J. Gerraty if (impl->muladd(eC, eB, ulen,
82280957b409SSimon J. Gerraty bx, nlen, by, nlen, cd->curve) != 1)
82290957b409SSimon J. Gerraty {
82300957b409SSimon J. Gerraty fprintf(stderr, "muladd() failed (1)\n");
82310957b409SSimon J. Gerraty exit(EXIT_FAILURE);
82320957b409SSimon J. Gerraty }
82330957b409SSimon J. Gerraty memcpy(eD, cd->generator, ulen);
82340957b409SSimon J. Gerraty if (impl->mul(eD, ulen, bz, nlen, cd->curve) != 1) {
82350957b409SSimon J. Gerraty fprintf(stderr, "mul() failed (1)\n");
82360957b409SSimon J. Gerraty exit(EXIT_FAILURE);
82370957b409SSimon J. Gerraty }
82380957b409SSimon J. Gerraty if (memcmp(eC, eD, nlen) != 0) {
82390957b409SSimon J. Gerraty fprintf(stderr, "mul() / muladd() mismatch\n");
82400957b409SSimon J. Gerraty exit(EXIT_FAILURE);
82410957b409SSimon J. Gerraty }
82420957b409SSimon J. Gerraty
82430957b409SSimon J. Gerraty /*
82440957b409SSimon J. Gerraty * Also recomputed D = z*G with mulgen(). This must
82450957b409SSimon J. Gerraty * again match.
82460957b409SSimon J. Gerraty */
82470957b409SSimon J. Gerraty memset(eD, 0, ulen);
82480957b409SSimon J. Gerraty if (impl->mulgen(eD, bz, nlen, cd->curve) != ulen) {
82490957b409SSimon J. Gerraty fprintf(stderr, "mulgen() failed: wrong length\n");
82500957b409SSimon J. Gerraty exit(EXIT_FAILURE);
82510957b409SSimon J. Gerraty }
82520957b409SSimon J. Gerraty if (memcmp(eC, eD, nlen) != 0) {
82530957b409SSimon J. Gerraty fprintf(stderr, "mulgen() / muladd() mismatch\n");
82540957b409SSimon J. Gerraty exit(EXIT_FAILURE);
82550957b409SSimon J. Gerraty }
82560957b409SSimon J. Gerraty
82570957b409SSimon J. Gerraty /*
82580957b409SSimon J. Gerraty * Check with x*A = y*B. We do so by setting b = x and y = a.
82590957b409SSimon J. Gerraty */
82600957b409SSimon J. Gerraty memcpy(b, x, sizeof x);
82610957b409SSimon J. Gerraty br_i31_encode(bb, nlen, b);
82620957b409SSimon J. Gerraty memcpy(eB, cd->generator, ulen);
82630957b409SSimon J. Gerraty impl->mul(eB, ulen, bb, nlen, cd->curve);
82640957b409SSimon J. Gerraty memcpy(y, a, sizeof a);
82650957b409SSimon J. Gerraty br_i31_encode(by, nlen, y);
82660957b409SSimon J. Gerraty
82670957b409SSimon J. Gerraty memcpy(t1, x, sizeof x);
82680957b409SSimon J. Gerraty br_i31_to_monty(t1, n);
82690957b409SSimon J. Gerraty br_i31_montymul(z, a, t1, n, n0i);
82700957b409SSimon J. Gerraty memcpy(t1, y, sizeof y);
82710957b409SSimon J. Gerraty br_i31_to_monty(t1, n);
82720957b409SSimon J. Gerraty br_i31_montymul(t2, b, t1, n, n0i);
82730957b409SSimon J. Gerraty r = br_i31_add(z, t2, 1);
82740957b409SSimon J. Gerraty r |= br_i31_sub(z, n, 0) ^ 1;
82750957b409SSimon J. Gerraty br_i31_sub(z, n, r);
82760957b409SSimon J. Gerraty br_i31_encode(bz, nlen, z);
82770957b409SSimon J. Gerraty
82780957b409SSimon J. Gerraty memcpy(eC, eA, ulen);
82790957b409SSimon J. Gerraty if (impl->muladd(eC, eB, ulen,
82800957b409SSimon J. Gerraty bx, nlen, by, nlen, cd->curve) != 1)
82810957b409SSimon J. Gerraty {
82820957b409SSimon J. Gerraty fprintf(stderr, "muladd() failed (2)\n");
82830957b409SSimon J. Gerraty exit(EXIT_FAILURE);
82840957b409SSimon J. Gerraty }
82850957b409SSimon J. Gerraty memcpy(eD, cd->generator, ulen);
82860957b409SSimon J. Gerraty if (impl->mul(eD, ulen, bz, nlen, cd->curve) != 1) {
82870957b409SSimon J. Gerraty fprintf(stderr, "mul() failed (2)\n");
82880957b409SSimon J. Gerraty exit(EXIT_FAILURE);
82890957b409SSimon J. Gerraty }
82900957b409SSimon J. Gerraty if (memcmp(eC, eD, nlen) != 0) {
82910957b409SSimon J. Gerraty fprintf(stderr,
82920957b409SSimon J. Gerraty "mul() / muladd() mismatch (x*A=y*B)\n");
82930957b409SSimon J. Gerraty exit(EXIT_FAILURE);
82940957b409SSimon J. Gerraty }
82950957b409SSimon J. Gerraty
82960957b409SSimon J. Gerraty /*
82970957b409SSimon J. Gerraty * Check with x*A + y*B = 0. At that point, b = x, so we
82980957b409SSimon J. Gerraty * just need to set y = -a (mod n).
82990957b409SSimon J. Gerraty */
83000957b409SSimon J. Gerraty memcpy(y, n, sizeof n);
83010957b409SSimon J. Gerraty br_i31_sub(y, a, 1);
83020957b409SSimon J. Gerraty br_i31_encode(by, nlen, y);
83030957b409SSimon J. Gerraty memcpy(eC, eA, ulen);
83040957b409SSimon J. Gerraty if (impl->muladd(eC, eB, ulen,
83050957b409SSimon J. Gerraty bx, nlen, by, nlen, cd->curve) != 0)
83060957b409SSimon J. Gerraty {
83070957b409SSimon J. Gerraty fprintf(stderr, "muladd() should have failed\n");
83080957b409SSimon J. Gerraty exit(EXIT_FAILURE);
83090957b409SSimon J. Gerraty }
83100957b409SSimon J. Gerraty }
83110957b409SSimon J. Gerraty
83120957b409SSimon J. Gerraty printf(".");
83130957b409SSimon J. Gerraty fflush(stdout);
83140957b409SSimon J. Gerraty }
83150957b409SSimon J. Gerraty
83160957b409SSimon J. Gerraty static void
test_EC_P256_carry_inner(const br_ec_impl * impl,const char * sP,const char * sQ)83170957b409SSimon J. Gerraty test_EC_P256_carry_inner(const br_ec_impl *impl, const char *sP, const char *sQ)
83180957b409SSimon J. Gerraty {
8319*cc9e6590SSimon J. Gerraty unsigned char P[65], Q[65], k[1];
83200957b409SSimon J. Gerraty size_t plen, qlen;
83210957b409SSimon J. Gerraty
83220957b409SSimon J. Gerraty plen = hextobin(P, sP);
83230957b409SSimon J. Gerraty qlen = hextobin(Q, sQ);
83240957b409SSimon J. Gerraty if (plen != sizeof P || qlen != sizeof P) {
83250957b409SSimon J. Gerraty fprintf(stderr, "KAT is incorrect\n");
83260957b409SSimon J. Gerraty exit(EXIT_FAILURE);
83270957b409SSimon J. Gerraty }
83280957b409SSimon J. Gerraty k[0] = 0x10;
83290957b409SSimon J. Gerraty if (impl->mul(P, plen, k, 1, BR_EC_secp256r1) != 1) {
83300957b409SSimon J. Gerraty fprintf(stderr, "P-256 multiplication failed\n");
83310957b409SSimon J. Gerraty exit(EXIT_FAILURE);
83320957b409SSimon J. Gerraty }
83330957b409SSimon J. Gerraty check_equals("P256_carry", P, Q, plen);
83340957b409SSimon J. Gerraty printf(".");
83350957b409SSimon J. Gerraty fflush(stdout);
83360957b409SSimon J. Gerraty }
83370957b409SSimon J. Gerraty
83380957b409SSimon J. Gerraty static void
test_EC_P256_carry(const br_ec_impl * impl)83390957b409SSimon J. Gerraty test_EC_P256_carry(const br_ec_impl *impl)
83400957b409SSimon J. Gerraty {
83410957b409SSimon J. Gerraty test_EC_P256_carry_inner(impl,
83420957b409SSimon J. Gerraty "0435BAA24B2B6E1B3C88E22A383BD88CC4B9A3166E7BCF94FF6591663AE066B33B821EBA1B4FC8EA609A87EB9A9C9A1CCD5C9F42FA1365306F64D7CAA718B8C978",
83430957b409SSimon J. Gerraty "0447752A76CA890328D34E675C4971EC629132D1FC4863EDB61219B72C4E58DC5E9D51E7B293488CFD913C3CF20E438BB65C2BA66A7D09EABB45B55E804260C5EB");
83440957b409SSimon J. Gerraty test_EC_P256_carry_inner(impl,
83450957b409SSimon J. Gerraty "04DCAE9D9CE211223602024A6933BD42F77B6BF4EAB9C8915F058C149419FADD2CC9FC0707B270A1B5362BA4D249AFC8AC3DA1EFCA8270176EEACA525B49EE19E6",
83460957b409SSimon J. Gerraty "048DAC7B0BE9B3206FCE8B24B6B4AEB122F2A67D13E536B390B6585CA193427E63F222388B5F51D744D6F5D47536D89EEEC89552BCB269E7828019C4410DFE980A");
83470957b409SSimon J. Gerraty }
83480957b409SSimon J. Gerraty
83490957b409SSimon J. Gerraty static void
test_EC_KAT(const char * name,const br_ec_impl * impl,uint32_t curve_mask)83500957b409SSimon J. Gerraty test_EC_KAT(const char *name, const br_ec_impl *impl, uint32_t curve_mask)
83510957b409SSimon J. Gerraty {
83520957b409SSimon J. Gerraty printf("Test %s: ", name);
83530957b409SSimon J. Gerraty fflush(stdout);
83540957b409SSimon J. Gerraty
83550957b409SSimon J. Gerraty if (curve_mask & ((uint32_t)1 << BR_EC_secp256r1)) {
83560957b409SSimon J. Gerraty test_EC_inner(
83570957b409SSimon J. Gerraty "C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721",
83580957b409SSimon J. Gerraty "0460FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB67903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299",
83590957b409SSimon J. Gerraty impl, BR_EC_secp256r1);
83600957b409SSimon J. Gerraty test_EC_P256_carry(impl);
83610957b409SSimon J. Gerraty }
83620957b409SSimon J. Gerraty if (curve_mask & ((uint32_t)1 << BR_EC_secp384r1)) {
83630957b409SSimon J. Gerraty test_EC_inner(
83640957b409SSimon J. Gerraty "6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5",
83650957b409SSimon J. Gerraty "04EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC138015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720",
83660957b409SSimon J. Gerraty impl, BR_EC_secp384r1);
83670957b409SSimon J. Gerraty }
83680957b409SSimon J. Gerraty if (curve_mask & ((uint32_t)1 << BR_EC_secp521r1)) {
83690957b409SSimon J. Gerraty test_EC_inner(
83700957b409SSimon J. Gerraty "00FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538",
83710957b409SSimon J. Gerraty "0401894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A400493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5",
83720957b409SSimon J. Gerraty impl, BR_EC_secp521r1);
83730957b409SSimon J. Gerraty }
83740957b409SSimon J. Gerraty
83750957b409SSimon J. Gerraty printf(" done.\n");
83760957b409SSimon J. Gerraty fflush(stdout);
83770957b409SSimon J. Gerraty }
83780957b409SSimon J. Gerraty
83790957b409SSimon J. Gerraty static void
test_EC_keygen(const char * name,const br_ec_impl * impl,uint32_t curves)83800957b409SSimon J. Gerraty test_EC_keygen(const char *name, const br_ec_impl *impl, uint32_t curves)
83810957b409SSimon J. Gerraty {
83820957b409SSimon J. Gerraty int curve;
83830957b409SSimon J. Gerraty br_hmac_drbg_context rng;
83840957b409SSimon J. Gerraty
83850957b409SSimon J. Gerraty printf("Test %s keygen: ", name);
83860957b409SSimon J. Gerraty fflush(stdout);
83870957b409SSimon J. Gerraty
83880957b409SSimon J. Gerraty br_hmac_drbg_init(&rng, &br_sha256_vtable, "seed for EC keygen", 18);
83890957b409SSimon J. Gerraty br_hmac_drbg_update(&rng, name, strlen(name));
83900957b409SSimon J. Gerraty
83910957b409SSimon J. Gerraty for (curve = -1; curve <= 35; curve ++) {
83920957b409SSimon J. Gerraty br_ec_private_key sk;
83930957b409SSimon J. Gerraty br_ec_public_key pk;
83940957b409SSimon J. Gerraty unsigned char kbuf_priv[BR_EC_KBUF_PRIV_MAX_SIZE];
83950957b409SSimon J. Gerraty unsigned char kbuf_pub[BR_EC_KBUF_PUB_MAX_SIZE];
83960957b409SSimon J. Gerraty
83970957b409SSimon J. Gerraty if (curve < 0 || curve >= 32 || ((curves >> curve) & 1) == 0) {
83980957b409SSimon J. Gerraty if (br_ec_keygen(&rng.vtable, impl,
83990957b409SSimon J. Gerraty &sk, kbuf_priv, curve) != 0)
84000957b409SSimon J. Gerraty {
84010957b409SSimon J. Gerraty fprintf(stderr, "br_ec_keygen() did not"
84020957b409SSimon J. Gerraty " reject unsupported curve %d\n",
84030957b409SSimon J. Gerraty curve);
84040957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84050957b409SSimon J. Gerraty }
84060957b409SSimon J. Gerraty sk.curve = curve;
84070957b409SSimon J. Gerraty if (br_ec_compute_pub(impl, NULL, NULL, &sk) != 0) {
84080957b409SSimon J. Gerraty fprintf(stderr, "br_ec_keygen() did not"
84090957b409SSimon J. Gerraty " reject unsupported curve %d\n",
84100957b409SSimon J. Gerraty curve);
84110957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84120957b409SSimon J. Gerraty }
84130957b409SSimon J. Gerraty } else {
84140957b409SSimon J. Gerraty size_t len, u;
84150957b409SSimon J. Gerraty unsigned char tmp_priv[sizeof kbuf_priv];
84160957b409SSimon J. Gerraty unsigned char tmp_pub[sizeof kbuf_pub];
84170957b409SSimon J. Gerraty unsigned z;
84180957b409SSimon J. Gerraty
84190957b409SSimon J. Gerraty len = br_ec_keygen(&rng.vtable, impl,
84200957b409SSimon J. Gerraty NULL, NULL, curve);
84210957b409SSimon J. Gerraty if (len == 0) {
84220957b409SSimon J. Gerraty fprintf(stderr, "br_ec_keygen() rejects"
84230957b409SSimon J. Gerraty " supported curve %d\n", curve);
84240957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84250957b409SSimon J. Gerraty }
84260957b409SSimon J. Gerraty if (len > sizeof kbuf_priv) {
84270957b409SSimon J. Gerraty fprintf(stderr, "oversized kbuf_priv\n");
84280957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84290957b409SSimon J. Gerraty }
84300957b409SSimon J. Gerraty memset(kbuf_priv, 0, sizeof kbuf_priv);
84310957b409SSimon J. Gerraty if (br_ec_keygen(&rng.vtable, impl,
84320957b409SSimon J. Gerraty NULL, kbuf_priv, curve) != len)
84330957b409SSimon J. Gerraty {
84340957b409SSimon J. Gerraty fprintf(stderr, "kbuf_priv length mismatch\n");
84350957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84360957b409SSimon J. Gerraty }
84370957b409SSimon J. Gerraty z = 0;
84380957b409SSimon J. Gerraty for (u = 0; u < len; u ++) {
84390957b409SSimon J. Gerraty z |= kbuf_priv[u];
84400957b409SSimon J. Gerraty }
84410957b409SSimon J. Gerraty if (z == 0) {
84420957b409SSimon J. Gerraty fprintf(stderr, "kbuf_priv not initialized\n");
84430957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84440957b409SSimon J. Gerraty }
84450957b409SSimon J. Gerraty for (u = len; u < sizeof kbuf_priv; u ++) {
84460957b409SSimon J. Gerraty if (kbuf_priv[u] != 0) {
84470957b409SSimon J. Gerraty fprintf(stderr, "kbuf_priv overflow\n");
84480957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84490957b409SSimon J. Gerraty }
84500957b409SSimon J. Gerraty }
84510957b409SSimon J. Gerraty if (br_ec_keygen(&rng.vtable, impl,
84520957b409SSimon J. Gerraty NULL, tmp_priv, curve) != len)
84530957b409SSimon J. Gerraty {
84540957b409SSimon J. Gerraty fprintf(stderr, "tmp_priv length mismatch\n");
84550957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84560957b409SSimon J. Gerraty }
84570957b409SSimon J. Gerraty if (memcmp(kbuf_priv, tmp_priv, len) == 0) {
84580957b409SSimon J. Gerraty fprintf(stderr, "keygen stutter\n");
84590957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84600957b409SSimon J. Gerraty }
84610957b409SSimon J. Gerraty memset(&sk, 0, sizeof sk);
84620957b409SSimon J. Gerraty if (br_ec_keygen(&rng.vtable, impl,
84630957b409SSimon J. Gerraty &sk, kbuf_priv, curve) != len)
84640957b409SSimon J. Gerraty {
84650957b409SSimon J. Gerraty fprintf(stderr,
84660957b409SSimon J. Gerraty "kbuf_priv length mismatch (2)\n");
84670957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84680957b409SSimon J. Gerraty }
84690957b409SSimon J. Gerraty if (sk.curve != curve || sk.x != kbuf_priv
84700957b409SSimon J. Gerraty || sk.xlen != len)
84710957b409SSimon J. Gerraty {
84720957b409SSimon J. Gerraty fprintf(stderr, "sk not initialized\n");
84730957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84740957b409SSimon J. Gerraty }
84750957b409SSimon J. Gerraty
84760957b409SSimon J. Gerraty len = br_ec_compute_pub(impl, NULL, NULL, &sk);
84770957b409SSimon J. Gerraty if (len > sizeof kbuf_pub) {
84780957b409SSimon J. Gerraty fprintf(stderr, "oversized kbuf_pub\n");
84790957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84800957b409SSimon J. Gerraty }
84810957b409SSimon J. Gerraty memset(kbuf_pub, 0, sizeof kbuf_pub);
84820957b409SSimon J. Gerraty if (br_ec_compute_pub(impl, NULL,
84830957b409SSimon J. Gerraty kbuf_pub, &sk) != len)
84840957b409SSimon J. Gerraty {
84850957b409SSimon J. Gerraty fprintf(stderr, "kbuf_pub length mismatch\n");
84860957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84870957b409SSimon J. Gerraty }
84880957b409SSimon J. Gerraty for (u = len; u < sizeof kbuf_pub; u ++) {
84890957b409SSimon J. Gerraty if (kbuf_pub[u] != 0) {
84900957b409SSimon J. Gerraty fprintf(stderr, "kbuf_pub overflow\n");
84910957b409SSimon J. Gerraty exit(EXIT_FAILURE);
84920957b409SSimon J. Gerraty }
84930957b409SSimon J. Gerraty }
84940957b409SSimon J. Gerraty memset(&pk, 0, sizeof pk);
84950957b409SSimon J. Gerraty if (br_ec_compute_pub(impl, &pk,
84960957b409SSimon J. Gerraty tmp_pub, &sk) != len)
84970957b409SSimon J. Gerraty {
84980957b409SSimon J. Gerraty fprintf(stderr, "tmp_pub length mismatch\n");
84990957b409SSimon J. Gerraty exit(EXIT_FAILURE);
85000957b409SSimon J. Gerraty }
85010957b409SSimon J. Gerraty if (memcmp(kbuf_pub, tmp_pub, len) != 0) {
85020957b409SSimon J. Gerraty fprintf(stderr, "pubkey mismatch\n");
85030957b409SSimon J. Gerraty exit(EXIT_FAILURE);
85040957b409SSimon J. Gerraty }
85050957b409SSimon J. Gerraty if (pk.curve != curve || pk.q != tmp_pub
85060957b409SSimon J. Gerraty || pk.qlen != len)
85070957b409SSimon J. Gerraty {
85080957b409SSimon J. Gerraty fprintf(stderr, "pk not initialized\n");
85090957b409SSimon J. Gerraty exit(EXIT_FAILURE);
85100957b409SSimon J. Gerraty }
85110957b409SSimon J. Gerraty
85120957b409SSimon J. Gerraty if (impl->mulgen(kbuf_pub,
85130957b409SSimon J. Gerraty sk.x, sk.xlen, curve) != len
85140957b409SSimon J. Gerraty || memcmp(pk.q, kbuf_pub, len) != 0)
85150957b409SSimon J. Gerraty {
85160957b409SSimon J. Gerraty fprintf(stderr, "wrong pubkey\n");
85170957b409SSimon J. Gerraty exit(EXIT_FAILURE);
85180957b409SSimon J. Gerraty }
85190957b409SSimon J. Gerraty }
85200957b409SSimon J. Gerraty printf(".");
85210957b409SSimon J. Gerraty fflush(stdout);
85220957b409SSimon J. Gerraty }
85230957b409SSimon J. Gerraty
85240957b409SSimon J. Gerraty printf(" done.\n");
85250957b409SSimon J. Gerraty fflush(stdout);
85260957b409SSimon J. Gerraty }
85270957b409SSimon J. Gerraty
85280957b409SSimon J. Gerraty static void
test_EC_prime_i15(void)85290957b409SSimon J. Gerraty test_EC_prime_i15(void)
85300957b409SSimon J. Gerraty {
85310957b409SSimon J. Gerraty test_EC_KAT("EC_prime_i15", &br_ec_prime_i15,
85320957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1
85330957b409SSimon J. Gerraty | (uint32_t)1 << BR_EC_secp384r1
85340957b409SSimon J. Gerraty | (uint32_t)1 << BR_EC_secp521r1);
85350957b409SSimon J. Gerraty test_EC_keygen("EC_prime_i15", &br_ec_prime_i15,
85360957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1
85370957b409SSimon J. Gerraty | (uint32_t)1 << BR_EC_secp384r1
85380957b409SSimon J. Gerraty | (uint32_t)1 << BR_EC_secp521r1);
85390957b409SSimon J. Gerraty }
85400957b409SSimon J. Gerraty
85410957b409SSimon J. Gerraty static void
test_EC_prime_i31(void)85420957b409SSimon J. Gerraty test_EC_prime_i31(void)
85430957b409SSimon J. Gerraty {
85440957b409SSimon J. Gerraty test_EC_KAT("EC_prime_i31", &br_ec_prime_i31,
85450957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1
85460957b409SSimon J. Gerraty | (uint32_t)1 << BR_EC_secp384r1
85470957b409SSimon J. Gerraty | (uint32_t)1 << BR_EC_secp521r1);
85480957b409SSimon J. Gerraty test_EC_keygen("EC_prime_i31", &br_ec_prime_i31,
85490957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1
85500957b409SSimon J. Gerraty | (uint32_t)1 << BR_EC_secp384r1
85510957b409SSimon J. Gerraty | (uint32_t)1 << BR_EC_secp521r1);
85520957b409SSimon J. Gerraty }
85530957b409SSimon J. Gerraty
85540957b409SSimon J. Gerraty static void
test_EC_p256_m15(void)85550957b409SSimon J. Gerraty test_EC_p256_m15(void)
85560957b409SSimon J. Gerraty {
85570957b409SSimon J. Gerraty test_EC_KAT("EC_p256_m15", &br_ec_p256_m15,
85580957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1);
85590957b409SSimon J. Gerraty test_EC_keygen("EC_p256_m15", &br_ec_p256_m15,
85600957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1);
85610957b409SSimon J. Gerraty }
85620957b409SSimon J. Gerraty
85630957b409SSimon J. Gerraty static void
test_EC_p256_m31(void)85640957b409SSimon J. Gerraty test_EC_p256_m31(void)
85650957b409SSimon J. Gerraty {
85660957b409SSimon J. Gerraty test_EC_KAT("EC_p256_m31", &br_ec_p256_m31,
85670957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1);
85680957b409SSimon J. Gerraty test_EC_keygen("EC_p256_m31", &br_ec_p256_m31,
85690957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1);
85700957b409SSimon J. Gerraty }
85710957b409SSimon J. Gerraty
85720957b409SSimon J. Gerraty static void
test_EC_p256_m62(void)85730957b409SSimon J. Gerraty test_EC_p256_m62(void)
85740957b409SSimon J. Gerraty {
85750957b409SSimon J. Gerraty const br_ec_impl *ec;
85760957b409SSimon J. Gerraty
85770957b409SSimon J. Gerraty ec = br_ec_p256_m62_get();
85780957b409SSimon J. Gerraty if (ec != NULL) {
85790957b409SSimon J. Gerraty test_EC_KAT("EC_p256_m62", ec,
85800957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1);
85810957b409SSimon J. Gerraty test_EC_keygen("EC_p256_m62", ec,
85820957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1);
85830957b409SSimon J. Gerraty } else {
85840957b409SSimon J. Gerraty printf("Test EC_p256_m62: UNAVAILABLE\n");
85850957b409SSimon J. Gerraty printf("Test EC_p256_m62 keygen: UNAVAILABLE\n");
85860957b409SSimon J. Gerraty }
85870957b409SSimon J. Gerraty }
85880957b409SSimon J. Gerraty
85890957b409SSimon J. Gerraty static void
test_EC_p256_m64(void)85900957b409SSimon J. Gerraty test_EC_p256_m64(void)
85910957b409SSimon J. Gerraty {
85920957b409SSimon J. Gerraty const br_ec_impl *ec;
85930957b409SSimon J. Gerraty
85940957b409SSimon J. Gerraty ec = br_ec_p256_m64_get();
85950957b409SSimon J. Gerraty if (ec != NULL) {
85960957b409SSimon J. Gerraty test_EC_KAT("EC_p256_m64", ec,
85970957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1);
85980957b409SSimon J. Gerraty test_EC_keygen("EC_p256_m64", ec,
85990957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_secp256r1);
86000957b409SSimon J. Gerraty } else {
86010957b409SSimon J. Gerraty printf("Test EC_p256_m64: UNAVAILABLE\n");
86020957b409SSimon J. Gerraty printf("Test EC_p256_m64 keygen: UNAVAILABLE\n");
86030957b409SSimon J. Gerraty }
86040957b409SSimon J. Gerraty }
86050957b409SSimon J. Gerraty
86060957b409SSimon J. Gerraty const struct {
86070957b409SSimon J. Gerraty const char *scalar_le;
86080957b409SSimon J. Gerraty const char *u_in;
86090957b409SSimon J. Gerraty const char *u_out;
86100957b409SSimon J. Gerraty } C25519_KAT[] = {
86110957b409SSimon J. Gerraty { "A546E36BF0527C9D3B16154B82465EDD62144C0AC1FC5A18506A2244BA449AC4",
86120957b409SSimon J. Gerraty "E6DB6867583030DB3594C1A424B15F7C726624EC26B3353B10A903A6D0AB1C4C",
86130957b409SSimon J. Gerraty "C3DA55379DE9C6908E94EA4DF28D084F32ECCF03491C71F754B4075577A28552" },
86140957b409SSimon J. Gerraty { "4B66E9D4D1B4673C5AD22691957D6AF5C11B6421E0EA01D42CA4169E7918BA0D",
86150957b409SSimon J. Gerraty "E5210F12786811D3F4B7959D0538AE2C31DBE7106FC03C3EFC4CD549C715A493",
86160957b409SSimon J. Gerraty "95CBDE9476E8907D7AADE45CB4B873F88B595A68799FA152E6F8F7647AAC7957" },
86170957b409SSimon J. Gerraty { 0, 0, 0 }
86180957b409SSimon J. Gerraty };
86190957b409SSimon J. Gerraty
86200957b409SSimon J. Gerraty static void
revbytes(unsigned char * buf,size_t len)86210957b409SSimon J. Gerraty revbytes(unsigned char *buf, size_t len)
86220957b409SSimon J. Gerraty {
86230957b409SSimon J. Gerraty size_t u;
86240957b409SSimon J. Gerraty
86250957b409SSimon J. Gerraty for (u = 0; u < (len >> 1); u ++) {
86260957b409SSimon J. Gerraty unsigned t;
86270957b409SSimon J. Gerraty
86280957b409SSimon J. Gerraty t = buf[u];
86290957b409SSimon J. Gerraty buf[u] = buf[len - 1 - u];
86300957b409SSimon J. Gerraty buf[len - 1 - u] = t;
86310957b409SSimon J. Gerraty }
86320957b409SSimon J. Gerraty }
86330957b409SSimon J. Gerraty
86340957b409SSimon J. Gerraty static void
test_EC_c25519(const char * name,const br_ec_impl * iec)86350957b409SSimon J. Gerraty test_EC_c25519(const char *name, const br_ec_impl *iec)
86360957b409SSimon J. Gerraty {
86370957b409SSimon J. Gerraty unsigned char bu[32], bk[32], br[32];
86380957b409SSimon J. Gerraty size_t v;
86390957b409SSimon J. Gerraty int i;
86400957b409SSimon J. Gerraty
86410957b409SSimon J. Gerraty printf("Test %s: ", name);
86420957b409SSimon J. Gerraty fflush(stdout);
86430957b409SSimon J. Gerraty for (v = 0; C25519_KAT[v].scalar_le; v ++) {
86440957b409SSimon J. Gerraty hextobin(bk, C25519_KAT[v].scalar_le);
86450957b409SSimon J. Gerraty revbytes(bk, sizeof bk);
86460957b409SSimon J. Gerraty hextobin(bu, C25519_KAT[v].u_in);
86470957b409SSimon J. Gerraty hextobin(br, C25519_KAT[v].u_out);
86480957b409SSimon J. Gerraty if (!iec->mul(bu, sizeof bu, bk, sizeof bk, BR_EC_curve25519)) {
86490957b409SSimon J. Gerraty fprintf(stderr, "Curve25519 multiplication failed\n");
86500957b409SSimon J. Gerraty exit(EXIT_FAILURE);
86510957b409SSimon J. Gerraty }
86520957b409SSimon J. Gerraty if (memcmp(bu, br, sizeof bu) != 0) {
86530957b409SSimon J. Gerraty fprintf(stderr, "Curve25519 failed KAT\n");
86540957b409SSimon J. Gerraty exit(EXIT_FAILURE);
86550957b409SSimon J. Gerraty }
86560957b409SSimon J. Gerraty printf(".");
86570957b409SSimon J. Gerraty fflush(stdout);
86580957b409SSimon J. Gerraty }
86590957b409SSimon J. Gerraty printf(" ");
86600957b409SSimon J. Gerraty fflush(stdout);
86610957b409SSimon J. Gerraty
86620957b409SSimon J. Gerraty memset(bu, 0, sizeof bu);
86630957b409SSimon J. Gerraty bu[0] = 0x09;
86640957b409SSimon J. Gerraty memcpy(bk, bu, sizeof bu);
86650957b409SSimon J. Gerraty for (i = 1; i <= 1000; i ++) {
86660957b409SSimon J. Gerraty revbytes(bk, sizeof bk);
86670957b409SSimon J. Gerraty if (!iec->mul(bu, sizeof bu, bk, sizeof bk, BR_EC_curve25519)) {
86680957b409SSimon J. Gerraty fprintf(stderr, "Curve25519 multiplication failed"
86690957b409SSimon J. Gerraty " (iter=%d)\n", i);
86700957b409SSimon J. Gerraty exit(EXIT_FAILURE);
86710957b409SSimon J. Gerraty }
86720957b409SSimon J. Gerraty revbytes(bk, sizeof bk);
86730957b409SSimon J. Gerraty for (v = 0; v < sizeof bu; v ++) {
86740957b409SSimon J. Gerraty unsigned t;
86750957b409SSimon J. Gerraty
86760957b409SSimon J. Gerraty t = bu[v];
86770957b409SSimon J. Gerraty bu[v] = bk[v];
86780957b409SSimon J. Gerraty bk[v] = t;
86790957b409SSimon J. Gerraty }
86800957b409SSimon J. Gerraty if (i == 1 || i == 1000) {
86810957b409SSimon J. Gerraty const char *sref;
86820957b409SSimon J. Gerraty
86830957b409SSimon J. Gerraty sref = (i == 1)
86840957b409SSimon J. Gerraty ? "422C8E7A6227D7BCA1350B3E2BB7279F7897B87BB6854B783C60E80311AE3079"
86850957b409SSimon J. Gerraty : "684CF59BA83309552800EF566F2F4D3C1C3887C49360E3875F2EB94D99532C51";
86860957b409SSimon J. Gerraty hextobin(br, sref);
86870957b409SSimon J. Gerraty if (memcmp(bk, br, sizeof bk) != 0) {
86880957b409SSimon J. Gerraty fprintf(stderr,
86890957b409SSimon J. Gerraty "Curve25519 failed KAT (iter=%d)\n", i);
86900957b409SSimon J. Gerraty exit(EXIT_FAILURE);
86910957b409SSimon J. Gerraty }
86920957b409SSimon J. Gerraty }
86930957b409SSimon J. Gerraty if (i % 100 == 0) {
86940957b409SSimon J. Gerraty printf(".");
86950957b409SSimon J. Gerraty fflush(stdout);
86960957b409SSimon J. Gerraty }
86970957b409SSimon J. Gerraty }
86980957b409SSimon J. Gerraty
86990957b409SSimon J. Gerraty printf(" done.\n");
87000957b409SSimon J. Gerraty fflush(stdout);
87010957b409SSimon J. Gerraty }
87020957b409SSimon J. Gerraty
87030957b409SSimon J. Gerraty static void
test_EC_c25519_i15(void)87040957b409SSimon J. Gerraty test_EC_c25519_i15(void)
87050957b409SSimon J. Gerraty {
87060957b409SSimon J. Gerraty test_EC_c25519("EC_c25519_i15", &br_ec_c25519_i15);
87070957b409SSimon J. Gerraty test_EC_keygen("EC_c25519_i15", &br_ec_c25519_i15,
87080957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_curve25519);
87090957b409SSimon J. Gerraty }
87100957b409SSimon J. Gerraty
87110957b409SSimon J. Gerraty static void
test_EC_c25519_i31(void)87120957b409SSimon J. Gerraty test_EC_c25519_i31(void)
87130957b409SSimon J. Gerraty {
87140957b409SSimon J. Gerraty test_EC_c25519("EC_c25519_i31", &br_ec_c25519_i31);
87150957b409SSimon J. Gerraty test_EC_keygen("EC_c25519_i31", &br_ec_c25519_i31,
87160957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_curve25519);
87170957b409SSimon J. Gerraty }
87180957b409SSimon J. Gerraty
87190957b409SSimon J. Gerraty static void
test_EC_c25519_m15(void)87200957b409SSimon J. Gerraty test_EC_c25519_m15(void)
87210957b409SSimon J. Gerraty {
87220957b409SSimon J. Gerraty test_EC_c25519("EC_c25519_m15", &br_ec_c25519_m15);
87230957b409SSimon J. Gerraty test_EC_keygen("EC_c25519_m15", &br_ec_c25519_m15,
87240957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_curve25519);
87250957b409SSimon J. Gerraty }
87260957b409SSimon J. Gerraty
87270957b409SSimon J. Gerraty static void
test_EC_c25519_m31(void)87280957b409SSimon J. Gerraty test_EC_c25519_m31(void)
87290957b409SSimon J. Gerraty {
87300957b409SSimon J. Gerraty test_EC_c25519("EC_c25519_m31", &br_ec_c25519_m31);
87310957b409SSimon J. Gerraty test_EC_keygen("EC_c25519_m31", &br_ec_c25519_m31,
87320957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_curve25519);
87330957b409SSimon J. Gerraty }
87340957b409SSimon J. Gerraty
87350957b409SSimon J. Gerraty static void
test_EC_c25519_m62(void)87360957b409SSimon J. Gerraty test_EC_c25519_m62(void)
87370957b409SSimon J. Gerraty {
87380957b409SSimon J. Gerraty const br_ec_impl *ec;
87390957b409SSimon J. Gerraty
87400957b409SSimon J. Gerraty ec = br_ec_c25519_m62_get();
87410957b409SSimon J. Gerraty if (ec != NULL) {
87420957b409SSimon J. Gerraty test_EC_c25519("EC_c25519_m62", ec);
87430957b409SSimon J. Gerraty test_EC_keygen("EC_c25519_m62", ec,
87440957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_curve25519);
87450957b409SSimon J. Gerraty } else {
87460957b409SSimon J. Gerraty printf("Test EC_c25519_m62: UNAVAILABLE\n");
87470957b409SSimon J. Gerraty printf("Test EC_c25519_m62 keygen: UNAVAILABLE\n");
87480957b409SSimon J. Gerraty }
87490957b409SSimon J. Gerraty }
87500957b409SSimon J. Gerraty
87510957b409SSimon J. Gerraty static void
test_EC_c25519_m64(void)87520957b409SSimon J. Gerraty test_EC_c25519_m64(void)
87530957b409SSimon J. Gerraty {
87540957b409SSimon J. Gerraty const br_ec_impl *ec;
87550957b409SSimon J. Gerraty
87560957b409SSimon J. Gerraty ec = br_ec_c25519_m64_get();
87570957b409SSimon J. Gerraty if (ec != NULL) {
87580957b409SSimon J. Gerraty test_EC_c25519("EC_c25519_m64", ec);
87590957b409SSimon J. Gerraty test_EC_keygen("EC_c25519_m64", ec,
87600957b409SSimon J. Gerraty (uint32_t)1 << BR_EC_curve25519);
87610957b409SSimon J. Gerraty } else {
87620957b409SSimon J. Gerraty printf("Test EC_c25519_m64: UNAVAILABLE\n");
87630957b409SSimon J. Gerraty printf("Test EC_c25519_m64 keygen: UNAVAILABLE\n");
87640957b409SSimon J. Gerraty }
87650957b409SSimon J. Gerraty }
87660957b409SSimon J. Gerraty
87670957b409SSimon J. Gerraty static const unsigned char EC_P256_PUB_POINT[] = {
87680957b409SSimon J. Gerraty 0x04, 0x60, 0xFE, 0xD4, 0xBA, 0x25, 0x5A, 0x9D,
87690957b409SSimon J. Gerraty 0x31, 0xC9, 0x61, 0xEB, 0x74, 0xC6, 0x35, 0x6D,
87700957b409SSimon J. Gerraty 0x68, 0xC0, 0x49, 0xB8, 0x92, 0x3B, 0x61, 0xFA,
87710957b409SSimon J. Gerraty 0x6C, 0xE6, 0x69, 0x62, 0x2E, 0x60, 0xF2, 0x9F,
87720957b409SSimon J. Gerraty 0xB6, 0x79, 0x03, 0xFE, 0x10, 0x08, 0xB8, 0xBC,
87730957b409SSimon J. Gerraty 0x99, 0xA4, 0x1A, 0xE9, 0xE9, 0x56, 0x28, 0xBC,
87740957b409SSimon J. Gerraty 0x64, 0xF2, 0xF1, 0xB2, 0x0C, 0x2D, 0x7E, 0x9F,
87750957b409SSimon J. Gerraty 0x51, 0x77, 0xA3, 0xC2, 0x94, 0xD4, 0x46, 0x22,
87760957b409SSimon J. Gerraty 0x99
87770957b409SSimon J. Gerraty };
87780957b409SSimon J. Gerraty
87790957b409SSimon J. Gerraty static const unsigned char EC_P256_PRIV_X[] = {
87800957b409SSimon J. Gerraty 0xC9, 0xAF, 0xA9, 0xD8, 0x45, 0xBA, 0x75, 0x16,
87810957b409SSimon J. Gerraty 0x6B, 0x5C, 0x21, 0x57, 0x67, 0xB1, 0xD6, 0x93,
87820957b409SSimon J. Gerraty 0x4E, 0x50, 0xC3, 0xDB, 0x36, 0xE8, 0x9B, 0x12,
87830957b409SSimon J. Gerraty 0x7B, 0x8A, 0x62, 0x2B, 0x12, 0x0F, 0x67, 0x21
87840957b409SSimon J. Gerraty };
87850957b409SSimon J. Gerraty
87860957b409SSimon J. Gerraty static const br_ec_public_key EC_P256_PUB = {
87870957b409SSimon J. Gerraty BR_EC_secp256r1,
87880957b409SSimon J. Gerraty (unsigned char *)EC_P256_PUB_POINT, sizeof EC_P256_PUB_POINT
87890957b409SSimon J. Gerraty };
87900957b409SSimon J. Gerraty
87910957b409SSimon J. Gerraty static const br_ec_private_key EC_P256_PRIV = {
87920957b409SSimon J. Gerraty BR_EC_secp256r1,
87930957b409SSimon J. Gerraty (unsigned char *)EC_P256_PRIV_X, sizeof EC_P256_PRIV_X
87940957b409SSimon J. Gerraty };
87950957b409SSimon J. Gerraty
87960957b409SSimon J. Gerraty static const unsigned char EC_P384_PUB_POINT[] = {
87970957b409SSimon J. Gerraty 0x04, 0xEC, 0x3A, 0x4E, 0x41, 0x5B, 0x4E, 0x19,
87980957b409SSimon J. Gerraty 0xA4, 0x56, 0x86, 0x18, 0x02, 0x9F, 0x42, 0x7F,
87990957b409SSimon J. Gerraty 0xA5, 0xDA, 0x9A, 0x8B, 0xC4, 0xAE, 0x92, 0xE0,
88000957b409SSimon J. Gerraty 0x2E, 0x06, 0xAA, 0xE5, 0x28, 0x6B, 0x30, 0x0C,
88010957b409SSimon J. Gerraty 0x64, 0xDE, 0xF8, 0xF0, 0xEA, 0x90, 0x55, 0x86,
88020957b409SSimon J. Gerraty 0x60, 0x64, 0xA2, 0x54, 0x51, 0x54, 0x80, 0xBC,
88030957b409SSimon J. Gerraty 0x13, 0x80, 0x15, 0xD9, 0xB7, 0x2D, 0x7D, 0x57,
88040957b409SSimon J. Gerraty 0x24, 0x4E, 0xA8, 0xEF, 0x9A, 0xC0, 0xC6, 0x21,
88050957b409SSimon J. Gerraty 0x89, 0x67, 0x08, 0xA5, 0x93, 0x67, 0xF9, 0xDF,
88060957b409SSimon J. Gerraty 0xB9, 0xF5, 0x4C, 0xA8, 0x4B, 0x3F, 0x1C, 0x9D,
88070957b409SSimon J. Gerraty 0xB1, 0x28, 0x8B, 0x23, 0x1C, 0x3A, 0xE0, 0xD4,
88080957b409SSimon J. Gerraty 0xFE, 0x73, 0x44, 0xFD, 0x25, 0x33, 0x26, 0x47,
88090957b409SSimon J. Gerraty 0x20
88100957b409SSimon J. Gerraty };
88110957b409SSimon J. Gerraty
88120957b409SSimon J. Gerraty static const unsigned char EC_P384_PRIV_X[] = {
88130957b409SSimon J. Gerraty 0x6B, 0x9D, 0x3D, 0xAD, 0x2E, 0x1B, 0x8C, 0x1C,
88140957b409SSimon J. Gerraty 0x05, 0xB1, 0x98, 0x75, 0xB6, 0x65, 0x9F, 0x4D,
88150957b409SSimon J. Gerraty 0xE2, 0x3C, 0x3B, 0x66, 0x7B, 0xF2, 0x97, 0xBA,
88160957b409SSimon J. Gerraty 0x9A, 0xA4, 0x77, 0x40, 0x78, 0x71, 0x37, 0xD8,
88170957b409SSimon J. Gerraty 0x96, 0xD5, 0x72, 0x4E, 0x4C, 0x70, 0xA8, 0x25,
88180957b409SSimon J. Gerraty 0xF8, 0x72, 0xC9, 0xEA, 0x60, 0xD2, 0xED, 0xF5
88190957b409SSimon J. Gerraty };
88200957b409SSimon J. Gerraty
88210957b409SSimon J. Gerraty static const br_ec_public_key EC_P384_PUB = {
88220957b409SSimon J. Gerraty BR_EC_secp384r1,
88230957b409SSimon J. Gerraty (unsigned char *)EC_P384_PUB_POINT, sizeof EC_P384_PUB_POINT
88240957b409SSimon J. Gerraty };
88250957b409SSimon J. Gerraty
88260957b409SSimon J. Gerraty static const br_ec_private_key EC_P384_PRIV = {
88270957b409SSimon J. Gerraty BR_EC_secp384r1,
88280957b409SSimon J. Gerraty (unsigned char *)EC_P384_PRIV_X, sizeof EC_P384_PRIV_X
88290957b409SSimon J. Gerraty };
88300957b409SSimon J. Gerraty
88310957b409SSimon J. Gerraty static const unsigned char EC_P521_PUB_POINT[] = {
88320957b409SSimon J. Gerraty 0x04, 0x01, 0x89, 0x45, 0x50, 0xD0, 0x78, 0x59,
88330957b409SSimon J. Gerraty 0x32, 0xE0, 0x0E, 0xAA, 0x23, 0xB6, 0x94, 0xF2,
88340957b409SSimon J. Gerraty 0x13, 0xF8, 0xC3, 0x12, 0x1F, 0x86, 0xDC, 0x97,
88350957b409SSimon J. Gerraty 0xA0, 0x4E, 0x5A, 0x71, 0x67, 0xDB, 0x4E, 0x5B,
88360957b409SSimon J. Gerraty 0xCD, 0x37, 0x11, 0x23, 0xD4, 0x6E, 0x45, 0xDB,
88370957b409SSimon J. Gerraty 0x6B, 0x5D, 0x53, 0x70, 0xA7, 0xF2, 0x0F, 0xB6,
88380957b409SSimon J. Gerraty 0x33, 0x15, 0x5D, 0x38, 0xFF, 0xA1, 0x6D, 0x2B,
88390957b409SSimon J. Gerraty 0xD7, 0x61, 0xDC, 0xAC, 0x47, 0x4B, 0x9A, 0x2F,
88400957b409SSimon J. Gerraty 0x50, 0x23, 0xA4, 0x00, 0x49, 0x31, 0x01, 0xC9,
88410957b409SSimon J. Gerraty 0x62, 0xCD, 0x4D, 0x2F, 0xDD, 0xF7, 0x82, 0x28,
88420957b409SSimon J. Gerraty 0x5E, 0x64, 0x58, 0x41, 0x39, 0xC2, 0xF9, 0x1B,
88430957b409SSimon J. Gerraty 0x47, 0xF8, 0x7F, 0xF8, 0x23, 0x54, 0xD6, 0x63,
88440957b409SSimon J. Gerraty 0x0F, 0x74, 0x6A, 0x28, 0xA0, 0xDB, 0x25, 0x74,
88450957b409SSimon J. Gerraty 0x1B, 0x5B, 0x34, 0xA8, 0x28, 0x00, 0x8B, 0x22,
88460957b409SSimon J. Gerraty 0xAC, 0xC2, 0x3F, 0x92, 0x4F, 0xAA, 0xFB, 0xD4,
88470957b409SSimon J. Gerraty 0xD3, 0x3F, 0x81, 0xEA, 0x66, 0x95, 0x6D, 0xFE,
88480957b409SSimon J. Gerraty 0xAA, 0x2B, 0xFD, 0xFC, 0xF5
88490957b409SSimon J. Gerraty };
88500957b409SSimon J. Gerraty
88510957b409SSimon J. Gerraty static const unsigned char EC_P521_PRIV_X[] = {
88520957b409SSimon J. Gerraty 0x00, 0xFA, 0xD0, 0x6D, 0xAA, 0x62, 0xBA, 0x3B,
88530957b409SSimon J. Gerraty 0x25, 0xD2, 0xFB, 0x40, 0x13, 0x3D, 0xA7, 0x57,
88540957b409SSimon J. Gerraty 0x20, 0x5D, 0xE6, 0x7F, 0x5B, 0xB0, 0x01, 0x8F,
88550957b409SSimon J. Gerraty 0xEE, 0x8C, 0x86, 0xE1, 0xB6, 0x8C, 0x7E, 0x75,
88560957b409SSimon J. Gerraty 0xCA, 0xA8, 0x96, 0xEB, 0x32, 0xF1, 0xF4, 0x7C,
88570957b409SSimon J. Gerraty 0x70, 0x85, 0x58, 0x36, 0xA6, 0xD1, 0x6F, 0xCC,
88580957b409SSimon J. Gerraty 0x14, 0x66, 0xF6, 0xD8, 0xFB, 0xEC, 0x67, 0xDB,
88590957b409SSimon J. Gerraty 0x89, 0xEC, 0x0C, 0x08, 0xB0, 0xE9, 0x96, 0xB8,
88600957b409SSimon J. Gerraty 0x35, 0x38
88610957b409SSimon J. Gerraty };
88620957b409SSimon J. Gerraty
88630957b409SSimon J. Gerraty static const br_ec_public_key EC_P521_PUB = {
88640957b409SSimon J. Gerraty BR_EC_secp521r1,
88650957b409SSimon J. Gerraty (unsigned char *)EC_P521_PUB_POINT, sizeof EC_P521_PUB_POINT
88660957b409SSimon J. Gerraty };
88670957b409SSimon J. Gerraty
88680957b409SSimon J. Gerraty static const br_ec_private_key EC_P521_PRIV = {
88690957b409SSimon J. Gerraty BR_EC_secp521r1,
88700957b409SSimon J. Gerraty (unsigned char *)EC_P521_PRIV_X, sizeof EC_P521_PRIV_X
88710957b409SSimon J. Gerraty };
88720957b409SSimon J. Gerraty
88730957b409SSimon J. Gerraty typedef struct {
88740957b409SSimon J. Gerraty const br_ec_public_key *pub;
88750957b409SSimon J. Gerraty const br_ec_private_key *priv;
88760957b409SSimon J. Gerraty const br_hash_class *hf;
88770957b409SSimon J. Gerraty const char *msg;
88780957b409SSimon J. Gerraty const char *sk;
88790957b409SSimon J. Gerraty const char *sraw;
88800957b409SSimon J. Gerraty const char *sasn1;
88810957b409SSimon J. Gerraty } ecdsa_kat_vector;
88820957b409SSimon J. Gerraty
88830957b409SSimon J. Gerraty const ecdsa_kat_vector ECDSA_KAT[] = {
88840957b409SSimon J. Gerraty
88850957b409SSimon J. Gerraty /* Test vectors for P-256, from RFC 6979. */
88860957b409SSimon J. Gerraty {
88870957b409SSimon J. Gerraty &EC_P256_PUB,
88880957b409SSimon J. Gerraty &EC_P256_PRIV,
88890957b409SSimon J. Gerraty &br_sha1_vtable, "sample",
88900957b409SSimon J. Gerraty "882905F1227FD620FBF2ABF21244F0BA83D0DC3A9103DBBEE43A1FB858109DB4",
88910957b409SSimon J. Gerraty "61340C88C3AAEBEB4F6D667F672CA9759A6CCAA9FA8811313039EE4A35471D326D7F147DAC089441BB2E2FE8F7A3FA264B9C475098FDCF6E00D7C996E1B8B7EB",
88920957b409SSimon J. Gerraty "3044022061340C88C3AAEBEB4F6D667F672CA9759A6CCAA9FA8811313039EE4A35471D3202206D7F147DAC089441BB2E2FE8F7A3FA264B9C475098FDCF6E00D7C996E1B8B7EB"
88930957b409SSimon J. Gerraty },
88940957b409SSimon J. Gerraty {
88950957b409SSimon J. Gerraty &EC_P256_PUB,
88960957b409SSimon J. Gerraty &EC_P256_PRIV,
88970957b409SSimon J. Gerraty &br_sha224_vtable, "sample",
88980957b409SSimon J. Gerraty "103F90EE9DC52E5E7FB5132B7033C63066D194321491862059967C715985D473",
88990957b409SSimon J. Gerraty "53B2FFF5D1752B2C689DF257C04C40A587FABABB3F6FC2702F1343AF7CA9AA3FB9AFB64FDC03DC1A131C7D2386D11E349F070AA432A4ACC918BEA988BF75C74C",
89000957b409SSimon J. Gerraty "3045022053B2FFF5D1752B2C689DF257C04C40A587FABABB3F6FC2702F1343AF7CA9AA3F022100B9AFB64FDC03DC1A131C7D2386D11E349F070AA432A4ACC918BEA988BF75C74C"
89010957b409SSimon J. Gerraty },
89020957b409SSimon J. Gerraty {
89030957b409SSimon J. Gerraty &EC_P256_PUB,
89040957b409SSimon J. Gerraty &EC_P256_PRIV,
89050957b409SSimon J. Gerraty &br_sha256_vtable, "sample",
89060957b409SSimon J. Gerraty "A6E3C57DD01ABE90086538398355DD4C3B17AA873382B0F24D6129493D8AAD60",
89070957b409SSimon J. Gerraty "EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8",
89080957b409SSimon J. Gerraty "3046022100EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716022100F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8"
89090957b409SSimon J. Gerraty },
89100957b409SSimon J. Gerraty {
89110957b409SSimon J. Gerraty &EC_P256_PUB,
89120957b409SSimon J. Gerraty &EC_P256_PRIV,
89130957b409SSimon J. Gerraty &br_sha384_vtable, "sample",
89140957b409SSimon J. Gerraty "09F634B188CEFD98E7EC88B1AA9852D734D0BC272F7D2A47DECC6EBEB375AAD4",
89150957b409SSimon J. Gerraty "0EAFEA039B20E9B42309FB1D89E213057CBF973DC0CFC8F129EDDDC800EF77194861F0491E6998B9455193E34E7B0D284DDD7149A74B95B9261F13ABDE940954",
89160957b409SSimon J. Gerraty "304402200EAFEA039B20E9B42309FB1D89E213057CBF973DC0CFC8F129EDDDC800EF771902204861F0491E6998B9455193E34E7B0D284DDD7149A74B95B9261F13ABDE940954"
89170957b409SSimon J. Gerraty },
89180957b409SSimon J. Gerraty {
89190957b409SSimon J. Gerraty &EC_P256_PUB,
89200957b409SSimon J. Gerraty &EC_P256_PRIV,
89210957b409SSimon J. Gerraty &br_sha512_vtable, "sample",
89220957b409SSimon J. Gerraty "5FA81C63109BADB88C1F367B47DA606DA28CAD69AA22C4FE6AD7DF73A7173AA5",
89230957b409SSimon J. Gerraty "8496A60B5E9B47C825488827E0495B0E3FA109EC4568FD3F8D1097678EB97F002362AB1ADBE2B8ADF9CB9EDAB740EA6049C028114F2460F96554F61FAE3302FE",
89240957b409SSimon J. Gerraty "30450221008496A60B5E9B47C825488827E0495B0E3FA109EC4568FD3F8D1097678EB97F0002202362AB1ADBE2B8ADF9CB9EDAB740EA6049C028114F2460F96554F61FAE3302FE"
89250957b409SSimon J. Gerraty },
89260957b409SSimon J. Gerraty {
89270957b409SSimon J. Gerraty &EC_P256_PUB,
89280957b409SSimon J. Gerraty &EC_P256_PRIV,
89290957b409SSimon J. Gerraty &br_sha1_vtable, "test",
89300957b409SSimon J. Gerraty "8C9520267C55D6B980DF741E56B4ADEE114D84FBFA2E62137954164028632A2E",
89310957b409SSimon J. Gerraty "0CBCC86FD6ABD1D99E703E1EC50069EE5C0B4BA4B9AC60E409E8EC5910D81A8901B9D7B73DFAA60D5651EC4591A0136F87653E0FD780C3B1BC872FFDEAE479B1",
89320957b409SSimon J. Gerraty "304402200CBCC86FD6ABD1D99E703E1EC50069EE5C0B4BA4B9AC60E409E8EC5910D81A89022001B9D7B73DFAA60D5651EC4591A0136F87653E0FD780C3B1BC872FFDEAE479B1"
89330957b409SSimon J. Gerraty },
89340957b409SSimon J. Gerraty {
89350957b409SSimon J. Gerraty &EC_P256_PUB,
89360957b409SSimon J. Gerraty &EC_P256_PRIV,
89370957b409SSimon J. Gerraty &br_sha224_vtable, "test",
89380957b409SSimon J. Gerraty "669F4426F2688B8BE0DB3A6BD1989BDAEFFF84B649EEB84F3DD26080F667FAA7",
89390957b409SSimon J. Gerraty "C37EDB6F0AE79D47C3C27E962FA269BB4F441770357E114EE511F662EC34A692C820053A05791E521FCAAD6042D40AEA1D6B1A540138558F47D0719800E18F2D",
89400957b409SSimon J. Gerraty "3046022100C37EDB6F0AE79D47C3C27E962FA269BB4F441770357E114EE511F662EC34A692022100C820053A05791E521FCAAD6042D40AEA1D6B1A540138558F47D0719800E18F2D"
89410957b409SSimon J. Gerraty },
89420957b409SSimon J. Gerraty {
89430957b409SSimon J. Gerraty &EC_P256_PUB,
89440957b409SSimon J. Gerraty &EC_P256_PRIV,
89450957b409SSimon J. Gerraty &br_sha256_vtable, "test",
89460957b409SSimon J. Gerraty "D16B6AE827F17175E040871A1C7EC3500192C4C92677336EC2537ACAEE0008E0",
89470957b409SSimon J. Gerraty "F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D38367019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083",
89480957b409SSimon J. Gerraty "3045022100F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D383670220019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083"
89490957b409SSimon J. Gerraty },
89500957b409SSimon J. Gerraty {
89510957b409SSimon J. Gerraty &EC_P256_PUB,
89520957b409SSimon J. Gerraty &EC_P256_PRIV,
89530957b409SSimon J. Gerraty &br_sha384_vtable, "test",
89540957b409SSimon J. Gerraty "16AEFFA357260B04B1DD199693960740066C1A8F3E8EDD79070AA914D361B3B8",
89550957b409SSimon J. Gerraty "83910E8B48BB0C74244EBDF7F07A1C5413D61472BD941EF3920E623FBCCEBEB68DDBEC54CF8CD5874883841D712142A56A8D0F218F5003CB0296B6B509619F2C",
89560957b409SSimon J. Gerraty "304602210083910E8B48BB0C74244EBDF7F07A1C5413D61472BD941EF3920E623FBCCEBEB60221008DDBEC54CF8CD5874883841D712142A56A8D0F218F5003CB0296B6B509619F2C"
89570957b409SSimon J. Gerraty },
89580957b409SSimon J. Gerraty {
89590957b409SSimon J. Gerraty &EC_P256_PUB,
89600957b409SSimon J. Gerraty &EC_P256_PRIV,
89610957b409SSimon J. Gerraty &br_sha512_vtable, "test",
89620957b409SSimon J. Gerraty "6915D11632ACA3C40D5D51C08DAF9C555933819548784480E93499000D9F0B7F",
89630957b409SSimon J. Gerraty "461D93F31B6540894788FD206C07CFA0CC35F46FA3C91816FFF1040AD1581A0439AF9F15DE0DB8D97E72719C74820D304CE5226E32DEDAE67519E840D1194E55",
89640957b409SSimon J. Gerraty "30440220461D93F31B6540894788FD206C07CFA0CC35F46FA3C91816FFF1040AD1581A04022039AF9F15DE0DB8D97E72719C74820D304CE5226E32DEDAE67519E840D1194E55"
89650957b409SSimon J. Gerraty },
89660957b409SSimon J. Gerraty
89670957b409SSimon J. Gerraty /* Test vectors for P-384, from RFC 6979. */
89680957b409SSimon J. Gerraty {
89690957b409SSimon J. Gerraty &EC_P384_PUB,
89700957b409SSimon J. Gerraty &EC_P384_PRIV,
89710957b409SSimon J. Gerraty &br_sha1_vtable, "sample",
89720957b409SSimon J. Gerraty "4471EF7518BB2C7C20F62EAE1C387AD0C5E8E470995DB4ACF694466E6AB096630F29E5938D25106C3C340045A2DB01A7",
89730957b409SSimon J. Gerraty "EC748D839243D6FBEF4FC5C4859A7DFFD7F3ABDDF72014540C16D73309834FA37B9BA002899F6FDA3A4A9386790D4EB2A3BCFA947BEEF4732BF247AC17F71676CB31A847B9FF0CBC9C9ED4C1A5B3FACF26F49CA031D4857570CCB5CA4424A443",
89740957b409SSimon J. Gerraty "3066023100EC748D839243D6FBEF4FC5C4859A7DFFD7F3ABDDF72014540C16D73309834FA37B9BA002899F6FDA3A4A9386790D4EB2023100A3BCFA947BEEF4732BF247AC17F71676CB31A847B9FF0CBC9C9ED4C1A5B3FACF26F49CA031D4857570CCB5CA4424A443"
89750957b409SSimon J. Gerraty },
89760957b409SSimon J. Gerraty
89770957b409SSimon J. Gerraty {
89780957b409SSimon J. Gerraty &EC_P384_PUB,
89790957b409SSimon J. Gerraty &EC_P384_PRIV,
89800957b409SSimon J. Gerraty &br_sha224_vtable, "sample",
89810957b409SSimon J. Gerraty "A4E4D2F0E729EB786B31FC20AD5D849E304450E0AE8E3E341134A5C1AFA03CAB8083EE4E3C45B06A5899EA56C51B5879",
89820957b409SSimon J. Gerraty "42356E76B55A6D9B4631C865445DBE54E056D3B3431766D0509244793C3F9366450F76EE3DE43F5A125333A6BE0601229DA0C81787064021E78DF658F2FBB0B042BF304665DB721F077A4298B095E4834C082C03D83028EFBF93A3C23940CA8D",
89830957b409SSimon J. Gerraty "3065023042356E76B55A6D9B4631C865445DBE54E056D3B3431766D0509244793C3F9366450F76EE3DE43F5A125333A6BE0601220231009DA0C81787064021E78DF658F2FBB0B042BF304665DB721F077A4298B095E4834C082C03D83028EFBF93A3C23940CA8D"
89840957b409SSimon J. Gerraty },
89850957b409SSimon J. Gerraty {
89860957b409SSimon J. Gerraty &EC_P384_PUB,
89870957b409SSimon J. Gerraty &EC_P384_PRIV,
89880957b409SSimon J. Gerraty &br_sha256_vtable, "sample",
89890957b409SSimon J. Gerraty "180AE9F9AEC5438A44BC159A1FCB277C7BE54FA20E7CF404B490650A8ACC414E375572342863C899F9F2EDF9747A9B60",
89900957b409SSimon J. Gerraty "21B13D1E013C7FA1392D03C5F99AF8B30C570C6F98D4EA8E354B63A21D3DAA33BDE1E888E63355D92FA2B3C36D8FB2CDF3AA443FB107745BF4BD77CB3891674632068A10CA67E3D45DB2266FA7D1FEEBEFDC63ECCD1AC42EC0CB8668A4FA0AB0",
89910957b409SSimon J. Gerraty "3065023021B13D1E013C7FA1392D03C5F99AF8B30C570C6F98D4EA8E354B63A21D3DAA33BDE1E888E63355D92FA2B3C36D8FB2CD023100F3AA443FB107745BF4BD77CB3891674632068A10CA67E3D45DB2266FA7D1FEEBEFDC63ECCD1AC42EC0CB8668A4FA0AB0"
89920957b409SSimon J. Gerraty },
89930957b409SSimon J. Gerraty {
89940957b409SSimon J. Gerraty &EC_P384_PUB,
89950957b409SSimon J. Gerraty &EC_P384_PRIV,
89960957b409SSimon J. Gerraty &br_sha384_vtable, "sample",
89970957b409SSimon J. Gerraty "94ED910D1A099DAD3254E9242AE85ABDE4BA15168EAF0CA87A555FD56D10FBCA2907E3E83BA95368623B8C4686915CF9",
89980957b409SSimon J. Gerraty "94EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C81A648152E44ACF96E36DD1E80FABE4699EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94FA329C145786E679E7B82C71A38628AC8",
89990957b409SSimon J. Gerraty "306602310094EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C81A648152E44ACF96E36DD1E80FABE4602310099EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94FA329C145786E679E7B82C71A38628AC8"
90000957b409SSimon J. Gerraty },
90010957b409SSimon J. Gerraty {
90020957b409SSimon J. Gerraty &EC_P384_PUB,
90030957b409SSimon J. Gerraty &EC_P384_PRIV,
90040957b409SSimon J. Gerraty &br_sha512_vtable, "sample",
90050957b409SSimon J. Gerraty "92FC3C7183A883E24216D1141F1A8976C5B0DD797DFA597E3D7B32198BD35331A4E966532593A52980D0E3AAA5E10EC3",
90060957b409SSimon J. Gerraty "ED0959D5880AB2D869AE7F6C2915C6D60F96507F9CB3E047C0046861DA4A799CFE30F35CC900056D7C99CD7882433709512C8CCEEE3890A84058CE1E22DBC2198F42323CE8ACA9135329F03C068E5112DC7CC3EF3446DEFCEB01A45C2667FDD5",
90070957b409SSimon J. Gerraty "3065023100ED0959D5880AB2D869AE7F6C2915C6D60F96507F9CB3E047C0046861DA4A799CFE30F35CC900056D7C99CD78824337090230512C8CCEEE3890A84058CE1E22DBC2198F42323CE8ACA9135329F03C068E5112DC7CC3EF3446DEFCEB01A45C2667FDD5"
90080957b409SSimon J. Gerraty },
90090957b409SSimon J. Gerraty {
90100957b409SSimon J. Gerraty &EC_P384_PUB,
90110957b409SSimon J. Gerraty &EC_P384_PRIV,
90120957b409SSimon J. Gerraty &br_sha1_vtable, "test",
90130957b409SSimon J. Gerraty "66CC2C8F4D303FC962E5FF6A27BD79F84EC812DDAE58CF5243B64A4AD8094D47EC3727F3A3C186C15054492E30698497",
90140957b409SSimon J. Gerraty "4BC35D3A50EF4E30576F58CD96CE6BF638025EE624004A1F7789A8B8E43D0678ACD9D29876DAF46638645F7F404B11C7D5A6326C494ED3FF614703878961C0FDE7B2C278F9A65FD8C4B7186201A2991695BA1C84541327E966FA7B50F7382282",
90150957b409SSimon J. Gerraty "306502304BC35D3A50EF4E30576F58CD96CE6BF638025EE624004A1F7789A8B8E43D0678ACD9D29876DAF46638645F7F404B11C7023100D5A6326C494ED3FF614703878961C0FDE7B2C278F9A65FD8C4B7186201A2991695BA1C84541327E966FA7B50F7382282"
90160957b409SSimon J. Gerraty },
90170957b409SSimon J. Gerraty {
90180957b409SSimon J. Gerraty &EC_P384_PUB,
90190957b409SSimon J. Gerraty &EC_P384_PRIV,
90200957b409SSimon J. Gerraty &br_sha224_vtable, "test",
90210957b409SSimon J. Gerraty "18FA39DB95AA5F561F30FA3591DC59C0FA3653A80DAFFA0B48D1A4C6DFCBFF6E3D33BE4DC5EB8886A8ECD093F2935726",
90220957b409SSimon J. Gerraty "E8C9D0B6EA72A0E7837FEA1D14A1A9557F29FAA45D3E7EE888FC5BF954B5E62464A9A817C47FF78B8C11066B24080E7207041D4A7A0379AC7232FF72E6F77B6DDB8F09B16CCE0EC3286B2BD43FA8C6141C53EA5ABEF0D8231077A04540A96B66",
90230957b409SSimon J. Gerraty "3065023100E8C9D0B6EA72A0E7837FEA1D14A1A9557F29FAA45D3E7EE888FC5BF954B5E62464A9A817C47FF78B8C11066B24080E72023007041D4A7A0379AC7232FF72E6F77B6DDB8F09B16CCE0EC3286B2BD43FA8C6141C53EA5ABEF0D8231077A04540A96B66"
90240957b409SSimon J. Gerraty },
90250957b409SSimon J. Gerraty {
90260957b409SSimon J. Gerraty &EC_P384_PUB,
90270957b409SSimon J. Gerraty &EC_P384_PRIV,
90280957b409SSimon J. Gerraty &br_sha256_vtable, "test",
90290957b409SSimon J. Gerraty "0CFAC37587532347DC3389FDC98286BBA8C73807285B184C83E62E26C401C0FAA48DD070BA79921A3457ABFF2D630AD7",
90300957b409SSimon J. Gerraty "6D6DEFAC9AB64DABAFE36C6BF510352A4CC27001263638E5B16D9BB51D451559F918EEDAF2293BE5B475CC8F0188636B2D46F3BECBCC523D5F1A1256BF0C9B024D879BA9E838144C8BA6BAEB4B53B47D51AB373F9845C0514EEFB14024787265",
90310957b409SSimon J. Gerraty "306402306D6DEFAC9AB64DABAFE36C6BF510352A4CC27001263638E5B16D9BB51D451559F918EEDAF2293BE5B475CC8F0188636B02302D46F3BECBCC523D5F1A1256BF0C9B024D879BA9E838144C8BA6BAEB4B53B47D51AB373F9845C0514EEFB14024787265"
90320957b409SSimon J. Gerraty },
90330957b409SSimon J. Gerraty {
90340957b409SSimon J. Gerraty &EC_P384_PUB,
90350957b409SSimon J. Gerraty &EC_P384_PRIV,
90360957b409SSimon J. Gerraty &br_sha384_vtable, "test",
90370957b409SSimon J. Gerraty "015EE46A5BF88773ED9123A5AB0807962D193719503C527B031B4C2D225092ADA71F4A459BC0DA98ADB95837DB8312EA",
90380957b409SSimon J. Gerraty "8203B63D3C853E8D77227FB377BCF7B7B772E97892A80F36AB775D509D7A5FEB0542A7F0812998DA8F1DD3CA3CF023DBDDD0760448D42D8A43AF45AF836FCE4DE8BE06B485E9B61B827C2F13173923E06A739F040649A667BF3B828246BAA5A5",
90390957b409SSimon J. Gerraty "30660231008203B63D3C853E8D77227FB377BCF7B7B772E97892A80F36AB775D509D7A5FEB0542A7F0812998DA8F1DD3CA3CF023DB023100DDD0760448D42D8A43AF45AF836FCE4DE8BE06B485E9B61B827C2F13173923E06A739F040649A667BF3B828246BAA5A5"
90400957b409SSimon J. Gerraty },
90410957b409SSimon J. Gerraty {
90420957b409SSimon J. Gerraty &EC_P384_PUB,
90430957b409SSimon J. Gerraty &EC_P384_PRIV,
90440957b409SSimon J. Gerraty &br_sha512_vtable, "test",
90450957b409SSimon J. Gerraty "3780C4F67CB15518B6ACAE34C9F83568D2E12E47DEAB6C50A4E4EE5319D1E8CE0E2CC8A136036DC4B9C00E6888F66B6C",
90460957b409SSimon J. Gerraty "A0D5D090C9980FAF3C2CE57B7AE951D31977DD11C775D314AF55F76C676447D06FB6495CD21B4B6E340FC236584FB277976984E59B4C77B0E8E4460DCA3D9F20E07B9BB1F63BEEFAF576F6B2E8B224634A2092CD3792E0159AD9CEE37659C736",
90470957b409SSimon J. Gerraty "3066023100A0D5D090C9980FAF3C2CE57B7AE951D31977DD11C775D314AF55F76C676447D06FB6495CD21B4B6E340FC236584FB277023100976984E59B4C77B0E8E4460DCA3D9F20E07B9BB1F63BEEFAF576F6B2E8B224634A2092CD3792E0159AD9CEE37659C736"
90480957b409SSimon J. Gerraty },
90490957b409SSimon J. Gerraty
90500957b409SSimon J. Gerraty /* Test vectors for P-521, from RFC 6979. */
90510957b409SSimon J. Gerraty {
90520957b409SSimon J. Gerraty &EC_P521_PUB,
90530957b409SSimon J. Gerraty &EC_P521_PRIV,
90540957b409SSimon J. Gerraty &br_sha1_vtable, "sample",
90550957b409SSimon J. Gerraty "0089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9",
90560957b409SSimon J. Gerraty "00343B6EC45728975EA5CBA6659BBB6062A5FF89EEA58BE3C80B619F322C87910FE092F7D45BB0F8EEE01ED3F20BABEC079D202AE677B243AB40B5431D497C55D75D00E7B0E675A9B24413D448B8CC119D2BF7B2D2DF032741C096634D6D65D0DBE3D5694625FB9E8104D3B842C1B0E2D0B98BEA19341E8676AEF66AE4EBA3D5475D5D16",
90570957b409SSimon J. Gerraty "3081870241343B6EC45728975EA5CBA6659BBB6062A5FF89EEA58BE3C80B619F322C87910FE092F7D45BB0F8EEE01ED3F20BABEC079D202AE677B243AB40B5431D497C55D75D024200E7B0E675A9B24413D448B8CC119D2BF7B2D2DF032741C096634D6D65D0DBE3D5694625FB9E8104D3B842C1B0E2D0B98BEA19341E8676AEF66AE4EBA3D5475D5D16"
90580957b409SSimon J. Gerraty },
90590957b409SSimon J. Gerraty {
90600957b409SSimon J. Gerraty &EC_P521_PUB,
90610957b409SSimon J. Gerraty &EC_P521_PRIV,
90620957b409SSimon J. Gerraty &br_sha224_vtable, "sample",
90630957b409SSimon J. Gerraty "0121415EC2CD7726330A61F7F3FA5DE14BE9436019C4DB8CB4041F3B54CF31BE0493EE3F427FB906393D895A19C9523F3A1D54BB8702BD4AA9C99DAB2597B92113F3",
90640957b409SSimon J. Gerraty "01776331CFCDF927D666E032E00CF776187BC9FDD8E69D0DABB4109FFE1B5E2A30715F4CC923A4A5E94D2503E9ACFED92857B7F31D7152E0F8C00C15FF3D87E2ED2E0050CB5265417FE2320BBB5A122B8E1A32BD699089851128E360E620A30C7E17BA41A666AF126CE100E5799B153B60528D5300D08489CA9178FB610A2006C254B41F",
90650957b409SSimon J. Gerraty "308187024201776331CFCDF927D666E032E00CF776187BC9FDD8E69D0DABB4109FFE1B5E2A30715F4CC923A4A5E94D2503E9ACFED92857B7F31D7152E0F8C00C15FF3D87E2ED2E024150CB5265417FE2320BBB5A122B8E1A32BD699089851128E360E620A30C7E17BA41A666AF126CE100E5799B153B60528D5300D08489CA9178FB610A2006C254B41F"
90660957b409SSimon J. Gerraty },
90670957b409SSimon J. Gerraty {
90680957b409SSimon J. Gerraty &EC_P521_PUB,
90690957b409SSimon J. Gerraty &EC_P521_PRIV,
90700957b409SSimon J. Gerraty &br_sha256_vtable, "sample",
90710957b409SSimon J. Gerraty "00EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0",
90720957b409SSimon J. Gerraty "01511BB4D675114FE266FC4372B87682BAECC01D3CC62CF2303C92B3526012659D16876E25C7C1E57648F23B73564D67F61C6F14D527D54972810421E7D87589E1A7004A171143A83163D6DF460AAF61522695F207A58B95C0644D87E52AA1A347916E4F7A72930B1BC06DBE22CE3F58264AFD23704CBB63B29B931F7DE6C9D949A7ECFC",
90730957b409SSimon J. Gerraty "308187024201511BB4D675114FE266FC4372B87682BAECC01D3CC62CF2303C92B3526012659D16876E25C7C1E57648F23B73564D67F61C6F14D527D54972810421E7D87589E1A702414A171143A83163D6DF460AAF61522695F207A58B95C0644D87E52AA1A347916E4F7A72930B1BC06DBE22CE3F58264AFD23704CBB63B29B931F7DE6C9D949A7ECFC"
90740957b409SSimon J. Gerraty },
90750957b409SSimon J. Gerraty {
90760957b409SSimon J. Gerraty &EC_P521_PUB,
90770957b409SSimon J. Gerraty &EC_P521_PRIV,
90780957b409SSimon J. Gerraty &br_sha384_vtable, "sample",
90790957b409SSimon J. Gerraty "01546A108BC23A15D6F21872F7DED661FA8431DDBD922D0DCDB77CC878C8553FFAD064C95A920A750AC9137E527390D2D92F153E66196966EA554D9ADFCB109C4211",
90800957b409SSimon J. Gerraty "01EA842A0E17D2DE4F92C15315C63DDF72685C18195C2BB95E572B9C5136CA4B4B576AD712A52BE9730627D16054BA40CC0B8D3FF035B12AE75168397F5D50C6745101F21A3CEE066E1961025FB048BD5FE2B7924D0CD797BABE0A83B66F1E35EEAF5FDE143FA85DC394A7DEE766523393784484BDF3E00114A1C857CDE1AA203DB65D61",
90810957b409SSimon J. Gerraty "308188024201EA842A0E17D2DE4F92C15315C63DDF72685C18195C2BB95E572B9C5136CA4B4B576AD712A52BE9730627D16054BA40CC0B8D3FF035B12AE75168397F5D50C67451024201F21A3CEE066E1961025FB048BD5FE2B7924D0CD797BABE0A83B66F1E35EEAF5FDE143FA85DC394A7DEE766523393784484BDF3E00114A1C857CDE1AA203DB65D61"
90820957b409SSimon J. Gerraty },
90830957b409SSimon J. Gerraty {
90840957b409SSimon J. Gerraty &EC_P521_PUB,
90850957b409SSimon J. Gerraty &EC_P521_PRIV,
90860957b409SSimon J. Gerraty &br_sha512_vtable, "sample",
90870957b409SSimon J. Gerraty "01DAE2EA071F8110DC26882D4D5EAE0621A3256FC8847FB9022E2B7D28E6F10198B1574FDD03A9053C08A1854A168AA5A57470EC97DD5CE090124EF52A2F7ECBFFD3",
90880957b409SSimon J. Gerraty "00C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F174E25A1EE9017B5D450606ADD152B534931D7D4E8455CC91F9B15BF05EC36E377FA00617CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF282623EAA63E5B5C0723D8B8C37FF0777B1A20F8CCB1DCCC43997F1EE0E44DA4A67A",
90890957b409SSimon J. Gerraty "308187024200C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F174E25A1EE9017B5D450606ADD152B534931D7D4E8455CC91F9B15BF05EC36E377FA0241617CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF282623EAA63E5B5C0723D8B8C37FF0777B1A20F8CCB1DCCC43997F1EE0E44DA4A67A"
90900957b409SSimon J. Gerraty },
90910957b409SSimon J. Gerraty {
90920957b409SSimon J. Gerraty &EC_P521_PUB,
90930957b409SSimon J. Gerraty &EC_P521_PRIV,
90940957b409SSimon J. Gerraty &br_sha1_vtable, "test",
90950957b409SSimon J. Gerraty "00BB9F2BF4FE1038CCF4DABD7139A56F6FD8BB1386561BD3C6A4FC818B20DF5DDBA80795A947107A1AB9D12DAA615B1ADE4F7A9DC05E8E6311150F47F5C57CE8B222",
90960957b409SSimon J. Gerraty "013BAD9F29ABE20DE37EBEB823C252CA0F63361284015A3BF430A46AAA80B87B0693F0694BD88AFE4E661FC33B094CD3B7963BED5A727ED8BD6A3A202ABE009D036701E9BB81FF7944CA409AD138DBBEE228E1AFCC0C890FC78EC8604639CB0DBDC90F717A99EAD9D272855D00162EE9527567DD6A92CBD629805C0445282BBC916797FF",
90970957b409SSimon J. Gerraty "3081880242013BAD9F29ABE20DE37EBEB823C252CA0F63361284015A3BF430A46AAA80B87B0693F0694BD88AFE4E661FC33B094CD3B7963BED5A727ED8BD6A3A202ABE009D0367024201E9BB81FF7944CA409AD138DBBEE228E1AFCC0C890FC78EC8604639CB0DBDC90F717A99EAD9D272855D00162EE9527567DD6A92CBD629805C0445282BBC916797FF"
90980957b409SSimon J. Gerraty },
90990957b409SSimon J. Gerraty {
91000957b409SSimon J. Gerraty &EC_P521_PUB,
91010957b409SSimon J. Gerraty &EC_P521_PRIV,
91020957b409SSimon J. Gerraty &br_sha224_vtable, "test",
91030957b409SSimon J. Gerraty "0040D09FCF3C8A5F62CF4FB223CBBB2B9937F6B0577C27020A99602C25A01136987E452988781484EDBBCF1C47E554E7FC901BC3085E5206D9F619CFF07E73D6F706",
91040957b409SSimon J. Gerraty "01C7ED902E123E6815546065A2C4AF977B22AA8EADDB68B2C1110E7EA44D42086BFE4A34B67DDC0E17E96536E358219B23A706C6A6E16BA77B65E1C595D43CAE17FB0177336676304FCB343CE028B38E7B4FBA76C1C1B277DA18CAD2A8478B2A9A9F5BEC0F3BA04F35DB3E4263569EC6AADE8C92746E4C82F8299AE1B8F1739F8FD519A4",
91050957b409SSimon J. Gerraty "308188024201C7ED902E123E6815546065A2C4AF977B22AA8EADDB68B2C1110E7EA44D42086BFE4A34B67DDC0E17E96536E358219B23A706C6A6E16BA77B65E1C595D43CAE17FB02420177336676304FCB343CE028B38E7B4FBA76C1C1B277DA18CAD2A8478B2A9A9F5BEC0F3BA04F35DB3E4263569EC6AADE8C92746E4C82F8299AE1B8F1739F8FD519A4"
91060957b409SSimon J. Gerraty },
91070957b409SSimon J. Gerraty {
91080957b409SSimon J. Gerraty &EC_P521_PUB,
91090957b409SSimon J. Gerraty &EC_P521_PRIV,
91100957b409SSimon J. Gerraty &br_sha256_vtable, "test",
91110957b409SSimon J. Gerraty "001DE74955EFAABC4C4F17F8E84D881D1310B5392D7700275F82F145C61E843841AF09035BF7A6210F5A431A6A9E81C9323354A9E69135D44EBD2FCAA7731B909258",
91120957b409SSimon J. Gerraty "000E871C4A14F993C6C7369501900C4BC1E9C7B0B4BA44E04868B30B41D8071042EB28C4C250411D0CE08CD197E4188EA4876F279F90B3D8D74A3C76E6F1E4656AA800CD52DBAA33B063C3A6CD8058A1FB0A46A4754B034FCC644766CA14DA8CA5CA9FDE00E88C1AD60CCBA759025299079D7A427EC3CC5B619BFBC828E7769BCD694E86",
91130957b409SSimon J. Gerraty "30818702410E871C4A14F993C6C7369501900C4BC1E9C7B0B4BA44E04868B30B41D8071042EB28C4C250411D0CE08CD197E4188EA4876F279F90B3D8D74A3C76E6F1E4656AA8024200CD52DBAA33B063C3A6CD8058A1FB0A46A4754B034FCC644766CA14DA8CA5CA9FDE00E88C1AD60CCBA759025299079D7A427EC3CC5B619BFBC828E7769BCD694E86"
91140957b409SSimon J. Gerraty },
91150957b409SSimon J. Gerraty {
91160957b409SSimon J. Gerraty &EC_P521_PUB,
91170957b409SSimon J. Gerraty &EC_P521_PRIV,
91180957b409SSimon J. Gerraty &br_sha384_vtable, "test",
91190957b409SSimon J. Gerraty "01F1FC4A349A7DA9A9E116BFDD055DC08E78252FF8E23AC276AC88B1770AE0B5DCEB1ED14A4916B769A523CE1E90BA22846AF11DF8B300C38818F713DADD85DE0C88",
91200957b409SSimon J. Gerraty "014BEE21A18B6D8B3C93FAB08D43E739707953244FDBE924FA926D76669E7AC8C89DF62ED8975C2D8397A65A49DCC09F6B0AC62272741924D479354D74FF6075578C0133330865C067A0EAF72362A65E2D7BC4E461E8C8995C3B6226A21BD1AA78F0ED94FE536A0DCA35534F0CD1510C41525D163FE9D74D134881E35141ED5E8E95B979",
91210957b409SSimon J. Gerraty "3081880242014BEE21A18B6D8B3C93FAB08D43E739707953244FDBE924FA926D76669E7AC8C89DF62ED8975C2D8397A65A49DCC09F6B0AC62272741924D479354D74FF6075578C02420133330865C067A0EAF72362A65E2D7BC4E461E8C8995C3B6226A21BD1AA78F0ED94FE536A0DCA35534F0CD1510C41525D163FE9D74D134881E35141ED5E8E95B979"
91220957b409SSimon J. Gerraty },
91230957b409SSimon J. Gerraty {
91240957b409SSimon J. Gerraty &EC_P521_PUB,
91250957b409SSimon J. Gerraty &EC_P521_PRIV,
91260957b409SSimon J. Gerraty &br_sha512_vtable, "test",
91270957b409SSimon J. Gerraty "016200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56D",
91280957b409SSimon J. Gerraty "013E99020ABF5CEE7525D16B69B229652AB6BDF2AFFCAEF38773B4B7D08725F10CDB93482FDCC54EDCEE91ECA4166B2A7C6265EF0CE2BD7051B7CEF945BABD47EE6D01FBD0013C674AA79CB39849527916CE301C66EA7CE8B80682786AD60F98F7E78A19CA69EFF5C57400E3B3A0AD66CE0978214D13BAF4E9AC60752F7B155E2DE4DCE3",
91290957b409SSimon J. Gerraty "3081880242013E99020ABF5CEE7525D16B69B229652AB6BDF2AFFCAEF38773B4B7D08725F10CDB93482FDCC54EDCEE91ECA4166B2A7C6265EF0CE2BD7051B7CEF945BABD47EE6D024201FBD0013C674AA79CB39849527916CE301C66EA7CE8B80682786AD60F98F7E78A19CA69EFF5C57400E3B3A0AD66CE0978214D13BAF4E9AC60752F7B155E2DE4DCE3"
91300957b409SSimon J. Gerraty },
91310957b409SSimon J. Gerraty
91320957b409SSimon J. Gerraty /* Terminator for list of test vectors. */
91330957b409SSimon J. Gerraty {
91340957b409SSimon J. Gerraty 0, 0, 0, 0, 0, 0, 0
91350957b409SSimon J. Gerraty }
91360957b409SSimon J. Gerraty };
91370957b409SSimon J. Gerraty
91380957b409SSimon J. Gerraty static void
test_ECDSA_KAT(const br_ec_impl * iec,br_ecdsa_sign sign,br_ecdsa_vrfy vrfy,int asn1)91390957b409SSimon J. Gerraty test_ECDSA_KAT(const br_ec_impl *iec,
91400957b409SSimon J. Gerraty br_ecdsa_sign sign, br_ecdsa_vrfy vrfy, int asn1)
91410957b409SSimon J. Gerraty {
91420957b409SSimon J. Gerraty size_t u;
91430957b409SSimon J. Gerraty
91440957b409SSimon J. Gerraty for (u = 0;; u ++) {
91450957b409SSimon J. Gerraty const ecdsa_kat_vector *kv;
91460957b409SSimon J. Gerraty unsigned char hash[64];
91470957b409SSimon J. Gerraty size_t hash_len;
91480957b409SSimon J. Gerraty unsigned char sig[150], sig2[150];
91490957b409SSimon J. Gerraty size_t sig_len, sig2_len;
91500957b409SSimon J. Gerraty br_hash_compat_context hc;
91510957b409SSimon J. Gerraty
91520957b409SSimon J. Gerraty kv = &ECDSA_KAT[u];
91530957b409SSimon J. Gerraty if (kv->pub == 0) {
91540957b409SSimon J. Gerraty break;
91550957b409SSimon J. Gerraty }
91560957b409SSimon J. Gerraty kv->hf->init(&hc.vtable);
91570957b409SSimon J. Gerraty kv->hf->update(&hc.vtable, kv->msg, strlen(kv->msg));
91580957b409SSimon J. Gerraty kv->hf->out(&hc.vtable, hash);
91590957b409SSimon J. Gerraty hash_len = (kv->hf->desc >> BR_HASHDESC_OUT_OFF)
91600957b409SSimon J. Gerraty & BR_HASHDESC_OUT_MASK;
91610957b409SSimon J. Gerraty if (asn1) {
91620957b409SSimon J. Gerraty sig_len = hextobin(sig, kv->sasn1);
91630957b409SSimon J. Gerraty } else {
91640957b409SSimon J. Gerraty sig_len = hextobin(sig, kv->sraw);
91650957b409SSimon J. Gerraty }
91660957b409SSimon J. Gerraty
91670957b409SSimon J. Gerraty if (vrfy(iec, hash, hash_len,
91680957b409SSimon J. Gerraty kv->pub, sig, sig_len) != 1)
91690957b409SSimon J. Gerraty {
91700957b409SSimon J. Gerraty fprintf(stderr, "ECDSA KAT verify failed (1)\n");
91710957b409SSimon J. Gerraty exit(EXIT_FAILURE);
91720957b409SSimon J. Gerraty }
91730957b409SSimon J. Gerraty hash[0] ^= 0x80;
91740957b409SSimon J. Gerraty if (vrfy(iec, hash, hash_len,
91750957b409SSimon J. Gerraty kv->pub, sig, sig_len) != 0)
91760957b409SSimon J. Gerraty {
91770957b409SSimon J. Gerraty fprintf(stderr, "ECDSA KAT verify shoud have failed\n");
91780957b409SSimon J. Gerraty exit(EXIT_FAILURE);
91790957b409SSimon J. Gerraty }
91800957b409SSimon J. Gerraty hash[0] ^= 0x80;
91810957b409SSimon J. Gerraty if (vrfy(iec, hash, hash_len,
91820957b409SSimon J. Gerraty kv->pub, sig, sig_len) != 1)
91830957b409SSimon J. Gerraty {
91840957b409SSimon J. Gerraty fprintf(stderr, "ECDSA KAT verify failed (2)\n");
91850957b409SSimon J. Gerraty exit(EXIT_FAILURE);
91860957b409SSimon J. Gerraty }
91870957b409SSimon J. Gerraty
91880957b409SSimon J. Gerraty sig2_len = sign(iec, kv->hf, hash, kv->priv, sig2);
91890957b409SSimon J. Gerraty if (sig2_len == 0) {
91900957b409SSimon J. Gerraty fprintf(stderr, "ECDSA KAT sign failed\n");
91910957b409SSimon J. Gerraty exit(EXIT_FAILURE);
91920957b409SSimon J. Gerraty }
91930957b409SSimon J. Gerraty if (sig2_len != sig_len || memcmp(sig, sig2, sig_len) != 0) {
91940957b409SSimon J. Gerraty fprintf(stderr, "ECDSA KAT wrong signature value\n");
91950957b409SSimon J. Gerraty exit(EXIT_FAILURE);
91960957b409SSimon J. Gerraty }
91970957b409SSimon J. Gerraty
91980957b409SSimon J. Gerraty printf(".");
91990957b409SSimon J. Gerraty fflush(stdout);
92000957b409SSimon J. Gerraty }
92010957b409SSimon J. Gerraty }
92020957b409SSimon J. Gerraty
92030957b409SSimon J. Gerraty static void
test_ECDSA_i31(void)92040957b409SSimon J. Gerraty test_ECDSA_i31(void)
92050957b409SSimon J. Gerraty {
92060957b409SSimon J. Gerraty printf("Test ECDSA/i31: ");
92070957b409SSimon J. Gerraty fflush(stdout);
92080957b409SSimon J. Gerraty printf("[raw]");
92090957b409SSimon J. Gerraty fflush(stdout);
92100957b409SSimon J. Gerraty test_ECDSA_KAT(&br_ec_prime_i31,
92110957b409SSimon J. Gerraty &br_ecdsa_i31_sign_raw, &br_ecdsa_i31_vrfy_raw, 0);
92120957b409SSimon J. Gerraty printf(" [asn1]");
92130957b409SSimon J. Gerraty fflush(stdout);
92140957b409SSimon J. Gerraty test_ECDSA_KAT(&br_ec_prime_i31,
92150957b409SSimon J. Gerraty &br_ecdsa_i31_sign_asn1, &br_ecdsa_i31_vrfy_asn1, 1);
92160957b409SSimon J. Gerraty printf(" done.\n");
92170957b409SSimon J. Gerraty fflush(stdout);
92180957b409SSimon J. Gerraty }
92190957b409SSimon J. Gerraty
92200957b409SSimon J. Gerraty static void
test_ECDSA_i15(void)92210957b409SSimon J. Gerraty test_ECDSA_i15(void)
92220957b409SSimon J. Gerraty {
92230957b409SSimon J. Gerraty printf("Test ECDSA/i15: ");
92240957b409SSimon J. Gerraty fflush(stdout);
92250957b409SSimon J. Gerraty printf("[raw]");
92260957b409SSimon J. Gerraty fflush(stdout);
92270957b409SSimon J. Gerraty test_ECDSA_KAT(&br_ec_prime_i15,
92280957b409SSimon J. Gerraty &br_ecdsa_i15_sign_raw, &br_ecdsa_i15_vrfy_raw, 0);
92290957b409SSimon J. Gerraty printf(" [asn1]");
92300957b409SSimon J. Gerraty fflush(stdout);
92310957b409SSimon J. Gerraty test_ECDSA_KAT(&br_ec_prime_i31,
92320957b409SSimon J. Gerraty &br_ecdsa_i15_sign_asn1, &br_ecdsa_i15_vrfy_asn1, 1);
92330957b409SSimon J. Gerraty printf(" done.\n");
92340957b409SSimon J. Gerraty fflush(stdout);
92350957b409SSimon J. Gerraty }
92360957b409SSimon J. Gerraty
92370957b409SSimon J. Gerraty static void
test_modpow_i31(void)92380957b409SSimon J. Gerraty test_modpow_i31(void)
92390957b409SSimon J. Gerraty {
92400957b409SSimon J. Gerraty br_hmac_drbg_context hc;
92410957b409SSimon J. Gerraty int k;
92420957b409SSimon J. Gerraty
92430957b409SSimon J. Gerraty printf("Test ModPow/i31: ");
92440957b409SSimon J. Gerraty
92450957b409SSimon J. Gerraty br_hmac_drbg_init(&hc, &br_sha256_vtable, "seed modpow", 11);
92460957b409SSimon J. Gerraty for (k = 10; k <= 500; k ++) {
92470957b409SSimon J. Gerraty size_t blen;
92480957b409SSimon J. Gerraty unsigned char bm[128], bx[128], bx1[128], bx2[128];
92490957b409SSimon J. Gerraty unsigned char be[128];
92500957b409SSimon J. Gerraty unsigned mask;
92510957b409SSimon J. Gerraty uint32_t x1[35], m1[35];
92520957b409SSimon J. Gerraty uint16_t x2[70], m2[70];
92530957b409SSimon J. Gerraty uint32_t tmp1[1000];
92540957b409SSimon J. Gerraty uint16_t tmp2[2000];
92550957b409SSimon J. Gerraty
92560957b409SSimon J. Gerraty blen = (k + 7) >> 3;
92570957b409SSimon J. Gerraty br_hmac_drbg_generate(&hc, bm, blen);
92580957b409SSimon J. Gerraty br_hmac_drbg_generate(&hc, bx, blen);
92590957b409SSimon J. Gerraty br_hmac_drbg_generate(&hc, be, blen);
92600957b409SSimon J. Gerraty bm[blen - 1] |= 0x01;
92610957b409SSimon J. Gerraty mask = 0xFF >> ((int)(blen << 3) - k);
92620957b409SSimon J. Gerraty bm[0] &= mask;
92630957b409SSimon J. Gerraty bm[0] |= (mask - (mask >> 1));
92640957b409SSimon J. Gerraty bx[0] &= (mask >> 1);
92650957b409SSimon J. Gerraty
92660957b409SSimon J. Gerraty br_i31_decode(m1, bm, blen);
92670957b409SSimon J. Gerraty br_i31_decode_mod(x1, bx, blen, m1);
92680957b409SSimon J. Gerraty br_i31_modpow_opt(x1, be, blen, m1, br_i31_ninv31(m1[1]),
92690957b409SSimon J. Gerraty tmp1, (sizeof tmp1) / (sizeof tmp1[0]));
92700957b409SSimon J. Gerraty br_i31_encode(bx1, blen, x1);
92710957b409SSimon J. Gerraty
92720957b409SSimon J. Gerraty br_i15_decode(m2, bm, blen);
92730957b409SSimon J. Gerraty br_i15_decode_mod(x2, bx, blen, m2);
92740957b409SSimon J. Gerraty br_i15_modpow_opt(x2, be, blen, m2, br_i15_ninv15(m2[1]),
92750957b409SSimon J. Gerraty tmp2, (sizeof tmp2) / (sizeof tmp2[0]));
92760957b409SSimon J. Gerraty br_i15_encode(bx2, blen, x2);
92770957b409SSimon J. Gerraty
92780957b409SSimon J. Gerraty check_equals("ModPow i31/i15", bx1, bx2, blen);
92790957b409SSimon J. Gerraty
92800957b409SSimon J. Gerraty printf(".");
92810957b409SSimon J. Gerraty fflush(stdout);
92820957b409SSimon J. Gerraty }
92830957b409SSimon J. Gerraty
92840957b409SSimon J. Gerraty printf(" done.\n");
92850957b409SSimon J. Gerraty fflush(stdout);
92860957b409SSimon J. Gerraty }
92870957b409SSimon J. Gerraty
92880957b409SSimon J. Gerraty static void
test_modpow_i62(void)92890957b409SSimon J. Gerraty test_modpow_i62(void)
92900957b409SSimon J. Gerraty {
92910957b409SSimon J. Gerraty br_hmac_drbg_context hc;
92920957b409SSimon J. Gerraty int k;
92930957b409SSimon J. Gerraty
92940957b409SSimon J. Gerraty printf("Test ModPow/i62: ");
92950957b409SSimon J. Gerraty
92960957b409SSimon J. Gerraty br_hmac_drbg_init(&hc, &br_sha256_vtable, "seed modpow", 11);
92970957b409SSimon J. Gerraty for (k = 10; k <= 500; k ++) {
92980957b409SSimon J. Gerraty size_t blen;
92990957b409SSimon J. Gerraty unsigned char bm[128], bx[128], bx1[128], bx2[128];
93000957b409SSimon J. Gerraty unsigned char be[128];
93010957b409SSimon J. Gerraty unsigned mask;
93020957b409SSimon J. Gerraty uint32_t x1[35], m1[35];
93030957b409SSimon J. Gerraty uint16_t x2[70], m2[70];
93040957b409SSimon J. Gerraty uint64_t tmp1[500];
93050957b409SSimon J. Gerraty uint16_t tmp2[2000];
93060957b409SSimon J. Gerraty
93070957b409SSimon J. Gerraty blen = (k + 7) >> 3;
93080957b409SSimon J. Gerraty br_hmac_drbg_generate(&hc, bm, blen);
93090957b409SSimon J. Gerraty br_hmac_drbg_generate(&hc, bx, blen);
93100957b409SSimon J. Gerraty br_hmac_drbg_generate(&hc, be, blen);
93110957b409SSimon J. Gerraty bm[blen - 1] |= 0x01;
93120957b409SSimon J. Gerraty mask = 0xFF >> ((int)(blen << 3) - k);
93130957b409SSimon J. Gerraty bm[0] &= mask;
93140957b409SSimon J. Gerraty bm[0] |= (mask - (mask >> 1));
93150957b409SSimon J. Gerraty bx[0] &= (mask >> 1);
93160957b409SSimon J. Gerraty
93170957b409SSimon J. Gerraty br_i31_decode(m1, bm, blen);
93180957b409SSimon J. Gerraty br_i31_decode_mod(x1, bx, blen, m1);
93190957b409SSimon J. Gerraty br_i62_modpow_opt(x1, be, blen, m1, br_i31_ninv31(m1[1]),
93200957b409SSimon J. Gerraty tmp1, (sizeof tmp1) / (sizeof tmp1[0]));
93210957b409SSimon J. Gerraty br_i31_encode(bx1, blen, x1);
93220957b409SSimon J. Gerraty
93230957b409SSimon J. Gerraty br_i15_decode(m2, bm, blen);
93240957b409SSimon J. Gerraty br_i15_decode_mod(x2, bx, blen, m2);
93250957b409SSimon J. Gerraty br_i15_modpow_opt(x2, be, blen, m2, br_i15_ninv15(m2[1]),
93260957b409SSimon J. Gerraty tmp2, (sizeof tmp2) / (sizeof tmp2[0]));
93270957b409SSimon J. Gerraty br_i15_encode(bx2, blen, x2);
93280957b409SSimon J. Gerraty
93290957b409SSimon J. Gerraty check_equals("ModPow i62/i15", bx1, bx2, blen);
93300957b409SSimon J. Gerraty
93310957b409SSimon J. Gerraty printf(".");
93320957b409SSimon J. Gerraty fflush(stdout);
93330957b409SSimon J. Gerraty }
93340957b409SSimon J. Gerraty
93350957b409SSimon J. Gerraty printf(" done.\n");
93360957b409SSimon J. Gerraty fflush(stdout);
93370957b409SSimon J. Gerraty }
93380957b409SSimon J. Gerraty
93390957b409SSimon J. Gerraty static int
eq_name(const char * s1,const char * s2)93400957b409SSimon J. Gerraty eq_name(const char *s1, const char *s2)
93410957b409SSimon J. Gerraty {
93420957b409SSimon J. Gerraty for (;;) {
93430957b409SSimon J. Gerraty int c1, c2;
93440957b409SSimon J. Gerraty
93450957b409SSimon J. Gerraty for (;;) {
93460957b409SSimon J. Gerraty c1 = *s1 ++;
93470957b409SSimon J. Gerraty if (c1 >= 'A' && c1 <= 'Z') {
93480957b409SSimon J. Gerraty c1 += 'a' - 'A';
93490957b409SSimon J. Gerraty } else {
93500957b409SSimon J. Gerraty switch (c1) {
93510957b409SSimon J. Gerraty case '-': case '_': case '.': case ' ':
93520957b409SSimon J. Gerraty continue;
93530957b409SSimon J. Gerraty }
93540957b409SSimon J. Gerraty }
93550957b409SSimon J. Gerraty break;
93560957b409SSimon J. Gerraty }
93570957b409SSimon J. Gerraty for (;;) {
93580957b409SSimon J. Gerraty c2 = *s2 ++;
93590957b409SSimon J. Gerraty if (c2 >= 'A' && c2 <= 'Z') {
93600957b409SSimon J. Gerraty c2 += 'a' - 'A';
93610957b409SSimon J. Gerraty } else {
93620957b409SSimon J. Gerraty switch (c2) {
93630957b409SSimon J. Gerraty case '-': case '_': case '.': case ' ':
93640957b409SSimon J. Gerraty continue;
93650957b409SSimon J. Gerraty }
93660957b409SSimon J. Gerraty }
93670957b409SSimon J. Gerraty break;
93680957b409SSimon J. Gerraty }
93690957b409SSimon J. Gerraty if (c1 != c2) {
93700957b409SSimon J. Gerraty return 0;
93710957b409SSimon J. Gerraty }
93720957b409SSimon J. Gerraty if (c1 == 0) {
93730957b409SSimon J. Gerraty return 1;
93740957b409SSimon J. Gerraty }
93750957b409SSimon J. Gerraty }
93760957b409SSimon J. Gerraty }
93770957b409SSimon J. Gerraty
93780957b409SSimon J. Gerraty #define STU(x) { &test_ ## x, #x }
93790957b409SSimon J. Gerraty
93800957b409SSimon J. Gerraty static const struct {
93810957b409SSimon J. Gerraty void (*fn)(void);
93820957b409SSimon J. Gerraty const char *name;
93830957b409SSimon J. Gerraty } tfns[] = {
93840957b409SSimon J. Gerraty STU(MD5),
93850957b409SSimon J. Gerraty STU(SHA1),
93860957b409SSimon J. Gerraty STU(SHA224),
93870957b409SSimon J. Gerraty STU(SHA256),
93880957b409SSimon J. Gerraty STU(SHA384),
93890957b409SSimon J. Gerraty STU(SHA512),
93900957b409SSimon J. Gerraty STU(MD5_SHA1),
93910957b409SSimon J. Gerraty STU(multihash),
93920957b409SSimon J. Gerraty STU(HMAC),
93930957b409SSimon J. Gerraty STU(HKDF),
93940957b409SSimon J. Gerraty STU(SHAKE),
93950957b409SSimon J. Gerraty STU(HMAC_DRBG),
93960957b409SSimon J. Gerraty STU(AESCTR_DRBG),
93970957b409SSimon J. Gerraty STU(PRF),
93980957b409SSimon J. Gerraty STU(AES_big),
93990957b409SSimon J. Gerraty STU(AES_small),
94000957b409SSimon J. Gerraty STU(AES_ct),
94010957b409SSimon J. Gerraty STU(AES_ct64),
94020957b409SSimon J. Gerraty STU(AES_pwr8),
94030957b409SSimon J. Gerraty STU(AES_x86ni),
94040957b409SSimon J. Gerraty STU(AES_CTRCBC_big),
94050957b409SSimon J. Gerraty STU(AES_CTRCBC_small),
94060957b409SSimon J. Gerraty STU(AES_CTRCBC_ct),
94070957b409SSimon J. Gerraty STU(AES_CTRCBC_ct64),
94080957b409SSimon J. Gerraty STU(AES_CTRCBC_x86ni),
94090957b409SSimon J. Gerraty STU(AES_CTRCBC_pwr8),
94100957b409SSimon J. Gerraty STU(DES_tab),
94110957b409SSimon J. Gerraty STU(DES_ct),
94120957b409SSimon J. Gerraty STU(ChaCha20_ct),
94130957b409SSimon J. Gerraty STU(ChaCha20_sse2),
94140957b409SSimon J. Gerraty STU(Poly1305_ctmul),
94150957b409SSimon J. Gerraty STU(Poly1305_ctmul32),
94160957b409SSimon J. Gerraty STU(Poly1305_ctmulq),
94170957b409SSimon J. Gerraty STU(Poly1305_i15),
94180957b409SSimon J. Gerraty STU(RSA_i15),
94190957b409SSimon J. Gerraty STU(RSA_i31),
94200957b409SSimon J. Gerraty STU(RSA_i32),
94210957b409SSimon J. Gerraty STU(RSA_i62),
94220957b409SSimon J. Gerraty STU(GHASH_ctmul),
94230957b409SSimon J. Gerraty STU(GHASH_ctmul32),
94240957b409SSimon J. Gerraty STU(GHASH_ctmul64),
94250957b409SSimon J. Gerraty STU(GHASH_pclmul),
94260957b409SSimon J. Gerraty STU(GHASH_pwr8),
94270957b409SSimon J. Gerraty STU(CCM),
94280957b409SSimon J. Gerraty STU(EAX),
94290957b409SSimon J. Gerraty STU(GCM),
94300957b409SSimon J. Gerraty STU(EC_prime_i15),
94310957b409SSimon J. Gerraty STU(EC_prime_i31),
94320957b409SSimon J. Gerraty STU(EC_p256_m15),
94330957b409SSimon J. Gerraty STU(EC_p256_m31),
94340957b409SSimon J. Gerraty STU(EC_p256_m62),
94350957b409SSimon J. Gerraty STU(EC_p256_m64),
94360957b409SSimon J. Gerraty STU(EC_c25519_i15),
94370957b409SSimon J. Gerraty STU(EC_c25519_i31),
94380957b409SSimon J. Gerraty STU(EC_c25519_m15),
94390957b409SSimon J. Gerraty STU(EC_c25519_m31),
94400957b409SSimon J. Gerraty STU(EC_c25519_m62),
94410957b409SSimon J. Gerraty STU(EC_c25519_m64),
94420957b409SSimon J. Gerraty STU(ECDSA_i15),
94430957b409SSimon J. Gerraty STU(ECDSA_i31),
94440957b409SSimon J. Gerraty STU(modpow_i31),
94450957b409SSimon J. Gerraty STU(modpow_i62),
94460957b409SSimon J. Gerraty { 0, 0 }
94470957b409SSimon J. Gerraty };
94480957b409SSimon J. Gerraty
94490957b409SSimon J. Gerraty int
main(int argc,char * argv[])94500957b409SSimon J. Gerraty main(int argc, char *argv[])
94510957b409SSimon J. Gerraty {
94520957b409SSimon J. Gerraty size_t u;
94530957b409SSimon J. Gerraty
94540957b409SSimon J. Gerraty if (argc <= 1) {
94550957b409SSimon J. Gerraty printf("usage: testcrypto all | name...\n");
94560957b409SSimon J. Gerraty printf("individual test names:\n");
94570957b409SSimon J. Gerraty for (u = 0; tfns[u].name; u ++) {
94580957b409SSimon J. Gerraty printf(" %s\n", tfns[u].name);
94590957b409SSimon J. Gerraty }
94600957b409SSimon J. Gerraty } else {
94610957b409SSimon J. Gerraty for (u = 0; tfns[u].name; u ++) {
94620957b409SSimon J. Gerraty int i;
94630957b409SSimon J. Gerraty
94640957b409SSimon J. Gerraty for (i = 1; i < argc; i ++) {
94650957b409SSimon J. Gerraty if (eq_name(argv[i], tfns[u].name)
94660957b409SSimon J. Gerraty || eq_name(argv[i], "all"))
94670957b409SSimon J. Gerraty {
94680957b409SSimon J. Gerraty tfns[u].fn();
94690957b409SSimon J. Gerraty break;
94700957b409SSimon J. Gerraty }
94710957b409SSimon J. Gerraty }
94720957b409SSimon J. Gerraty }
94730957b409SSimon J. Gerraty }
94740957b409SSimon J. Gerraty return 0;
94750957b409SSimon J. Gerraty }
9476