xref: /freebsd/crypto/libecc/src/tests/ecccdh_test_vectors.h (revision f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
1*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
2*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_0
3*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
4*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_0_test_vector_our_priv_key[] = {
5*f0865ec9SKyle Evans 	0xf1, 0x7d, 0x3f, 0xea, 0x36, 0x7b, 0x74, 0xd3, 0x40, 0x85, 0x1c, 0xa4, 0x27, 0x0d, 0xcb, 0x24, 0xc2, 0x71, 0xf4, 0x45, 0xbe, 0xd9, 0xd5, 0x27,
6*f0865ec9SKyle Evans };
7*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_0_test_vector_peer_pub_key[] = {
8*f0865ec9SKyle Evans 	0x42, 0xea, 0x6d, 0xd9, 0x96, 0x9d, 0xd2, 0xa6, 0x1f, 0xea, 0x1a, 0xac, 0x7f, 0x8e, 0x98, 0xed, 0xcc, 0x89, 0x6c, 0x6e, 0x55, 0x85, 0x7c, 0xc0, 0xdf, 0xbe, 0x5d, 0x7c, 0x61, 0xfa, 0xc8, 0x8b, 0x11, 0x81, 0x1b, 0xde, 0x32, 0x8e, 0x8a, 0x0d, 0x12, 0xbf, 0x01, 0xa9, 0xd2, 0x04, 0xb5, 0x23,
9*f0865ec9SKyle Evans };
10*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_0_test_vector_our_pub_key[] = {
11*f0865ec9SKyle Evans 	0xb1, 0x50, 0x53, 0x40, 0x1f, 0x57, 0x28, 0x56, 0x37, 0xec, 0x32, 0x4c, 0x1c, 0xd2, 0x13, 0x9e, 0x3a, 0x67, 0xde, 0x37, 0x39, 0x23, 0x4b, 0x37, 0xf2, 0x69, 0xc1, 0x58, 0x63, 0x74, 0x82, 0xaa, 0xd6, 0x44, 0xcd, 0x69, 0x2d, 0xd1, 0xd3, 0xef, 0x2c, 0x8a, 0x7c, 0x49, 0xe3, 0x89, 0xf7, 0xf6,
12*f0865ec9SKyle Evans };
13*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_0_test_vector_shared_secret[] = {
14*f0865ec9SKyle Evans 	0x80, 0x3d, 0x8a, 0xb2, 0xe5, 0xb6, 0xe6, 0xfc, 0xa7, 0x15, 0x73, 0x7c, 0x3a, 0x82, 0xf7, 0xce, 0x3c, 0x78, 0x31, 0x24, 0xf6, 0xd5, 0x1c, 0xd0,
15*f0865ec9SKyle Evans };
16*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_0_test_case = {
17*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 0",
18*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
19*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
20*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_0_test_vector_our_priv_key,
21*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_our_priv_key),
22*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_0_test_vector_peer_pub_key,
23*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_peer_pub_key),
24*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_0_test_vector_our_pub_key,
25*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_our_pub_key),
26*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_0_test_vector_shared_secret,
27*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_0_test_vector_shared_secret),
28*f0865ec9SKyle Evans };
29*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
30*f0865ec9SKyle Evans 
31*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
32*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_1
33*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
34*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_1_test_vector_our_priv_key[] = {
35*f0865ec9SKyle Evans 	0x56, 0xe8, 0x53, 0x34, 0x9d, 0x96, 0xfe, 0x4c, 0x44, 0x24, 0x48, 0xda, 0xcb, 0x7c, 0xf9, 0x2b, 0xb7, 0xa9, 0x5d, 0xcf, 0x57, 0x4a, 0x9b, 0xd5,
36*f0865ec9SKyle Evans };
37*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_1_test_vector_peer_pub_key[] = {
38*f0865ec9SKyle Evans 	0xde, 0xb5, 0x71, 0x2f, 0xa0, 0x27, 0xac, 0x8d, 0x2f, 0x22, 0xc4, 0x55, 0xcc, 0xb7, 0x3a, 0x91, 0xe1, 0x7b, 0x65, 0x12, 0xb5, 0xe0, 0x30, 0xe7, 0x7e, 0x26, 0x90, 0xa0, 0x2c, 0xc9, 0xb2, 0x87, 0x08, 0x43, 0x1a, 0x29, 0xfb, 0x54, 0xb8, 0x7b, 0x1f, 0x0c, 0x14, 0xe0, 0x11, 0xac, 0x21, 0x25,
39*f0865ec9SKyle Evans };
40*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_1_test_vector_our_pub_key[] = {
41*f0865ec9SKyle Evans 	0xc0, 0x0d, 0x43, 0x57, 0x16, 0xff, 0xea, 0x53, 0xfd, 0x8c, 0x16, 0x27, 0x92, 0x41, 0x4c, 0x37, 0x66, 0x51, 0x87, 0xe5, 0x82, 0x71, 0x65, 0x39, 0xab, 0x71, 0x1c, 0x62, 0xaa, 0x71, 0xa5, 0xa1, 0x8e, 0x8a, 0x3c, 0x48, 0xf8, 0x9d, 0xc6, 0xfa, 0x52, 0xfa, 0xc0, 0x10, 0x8e, 0x52, 0xa8, 0xa0,
42*f0865ec9SKyle Evans };
43*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_1_test_vector_shared_secret[] = {
44*f0865ec9SKyle Evans 	0xc2, 0x08, 0x84, 0x75, 0x68, 0xb9, 0x88, 0x35, 0xd7, 0x31, 0x2c, 0xef, 0x1f, 0x97, 0xf7, 0xaa, 0x29, 0x82, 0x83, 0x15, 0x23, 0x13, 0xc2, 0x9d,
45*f0865ec9SKyle Evans };
46*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_1_test_case = {
47*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 1",
48*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
49*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
50*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_1_test_vector_our_priv_key,
51*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_our_priv_key),
52*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_1_test_vector_peer_pub_key,
53*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_peer_pub_key),
54*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_1_test_vector_our_pub_key,
55*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_our_pub_key),
56*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_1_test_vector_shared_secret,
57*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_1_test_vector_shared_secret),
58*f0865ec9SKyle Evans };
59*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
60*f0865ec9SKyle Evans 
61*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
62*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_2
63*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
64*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_2_test_vector_our_priv_key[] = {
65*f0865ec9SKyle Evans 	0xc6, 0xef, 0x61, 0xfe, 0x12, 0xe8, 0x0b, 0xf5, 0x6f, 0x2d, 0x3f, 0x7d, 0x0b, 0xb7, 0x57, 0x39, 0x45, 0x19, 0x90, 0x6d, 0x55, 0x50, 0x09, 0x49,
66*f0865ec9SKyle Evans };
67*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_2_test_vector_peer_pub_key[] = {
68*f0865ec9SKyle Evans 	0x4e, 0xda, 0xa8, 0xef, 0xc5, 0xa0, 0xf4, 0x0f, 0x84, 0x36, 0x63, 0xec, 0x58, 0x15, 0xe7, 0x76, 0x2d, 0xdd, 0xc0, 0x08, 0xe6, 0x63, 0xc2, 0x0f, 0x0a, 0x9f, 0x8d, 0xc6, 0x7a, 0x3e, 0x60, 0xef, 0x6d, 0x64, 0xb5, 0x22, 0x18, 0x5d, 0x03, 0xdf, 0x1f, 0xc0, 0xad, 0xfd, 0x42, 0x47, 0x82, 0x79,
69*f0865ec9SKyle Evans };
70*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_2_test_vector_our_pub_key[] = {
71*f0865ec9SKyle Evans 	0xe1, 0x84, 0xbc, 0x18, 0x24, 0x82, 0xf3, 0x40, 0x3c, 0x87, 0x87, 0xb8, 0x38, 0x42, 0x47, 0x74, 0x67, 0xfc, 0xd0, 0x11, 0xdb, 0x0f, 0x6c, 0x64, 0xf9, 0xd1, 0xc1, 0x41, 0x42, 0xf4, 0x0d, 0xe8, 0x63, 0x9d, 0xb9, 0x7d, 0x51, 0xa6, 0x3d, 0x2c, 0xce, 0x10, 0x07, 0xcc, 0xf7, 0x73, 0xcd, 0xcb,
72*f0865ec9SKyle Evans };
73*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_2_test_vector_shared_secret[] = {
74*f0865ec9SKyle Evans 	0x87, 0x22, 0x91, 0x07, 0x04, 0x7a, 0x3b, 0x61, 0x19, 0x20, 0xd6, 0xe3, 0xb2, 0xc0, 0xc8, 0x9b, 0xea, 0x4f, 0x49, 0x41, 0x22, 0x60, 0xb8, 0xdd,
75*f0865ec9SKyle Evans };
76*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_2_test_case = {
77*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 2",
78*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
79*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
80*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_2_test_vector_our_priv_key,
81*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_our_priv_key),
82*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_2_test_vector_peer_pub_key,
83*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_peer_pub_key),
84*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_2_test_vector_our_pub_key,
85*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_our_pub_key),
86*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_2_test_vector_shared_secret,
87*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_2_test_vector_shared_secret),
88*f0865ec9SKyle Evans };
89*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
90*f0865ec9SKyle Evans 
91*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
92*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_3
93*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
94*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_3_test_vector_our_priv_key[] = {
95*f0865ec9SKyle Evans 	0xe6, 0x74, 0x7b, 0x9c, 0x23, 0xba, 0x70, 0x44, 0xf3, 0x8f, 0xf7, 0xe6, 0x2c, 0x35, 0xe4, 0x03, 0x89, 0x20, 0xf5, 0xa0, 0x16, 0x3d, 0x3c, 0xda,
96*f0865ec9SKyle Evans };
97*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_3_test_vector_peer_pub_key[] = {
98*f0865ec9SKyle Evans 	0x88, 0x87, 0xc2, 0x76, 0xed, 0xee, 0xd3, 0xe9, 0xe8, 0x66, 0xb4, 0x6d, 0x58, 0xd8, 0x95, 0xc7, 0x3f, 0xbd, 0x80, 0xb6, 0x3e, 0x38, 0x2e, 0x88, 0x04, 0xc5, 0x09, 0x7b, 0xa6, 0x64, 0x5e, 0x16, 0x20, 0x6c, 0xfb, 0x70, 0xf7, 0x05, 0x26, 0x55, 0x94, 0x7d, 0xd4, 0x4a, 0x17, 0xf1, 0xf9, 0xd5,
99*f0865ec9SKyle Evans };
100*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_3_test_vector_our_pub_key[] = {
101*f0865ec9SKyle Evans 	0x2b, 0x83, 0x8d, 0xbe, 0x73, 0x73, 0x5f, 0x37, 0xa3, 0x9a, 0x78, 0xd3, 0x19, 0x57, 0x83, 0xd2, 0x69, 0x91, 0xe8, 0x6f, 0xf4, 0xd9, 0x2d, 0x1a, 0x60, 0xd3, 0x44, 0x94, 0x22, 0x74, 0x48, 0x9f, 0x98, 0x90, 0x3b, 0x2e, 0x7f, 0x93, 0xf8, 0xd1, 0x97, 0xfc, 0x9a, 0xe6, 0x0a, 0x0e, 0xd5, 0x3a,
102*f0865ec9SKyle Evans };
103*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_3_test_vector_shared_secret[] = {
104*f0865ec9SKyle Evans 	0xee, 0xc0, 0xbe, 0xd8, 0xfc, 0x55, 0xe1, 0xfe, 0xdd, 0xc8, 0x21, 0x58, 0xfd, 0x6d, 0xc0, 0xd4, 0x8a, 0x4d, 0x79, 0x6a, 0xaf, 0x47, 0xd4, 0x6c,
105*f0865ec9SKyle Evans };
106*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_3_test_case = {
107*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 3",
108*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
109*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
110*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_3_test_vector_our_priv_key,
111*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_our_priv_key),
112*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_3_test_vector_peer_pub_key,
113*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_peer_pub_key),
114*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_3_test_vector_our_pub_key,
115*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_our_pub_key),
116*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_3_test_vector_shared_secret,
117*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_3_test_vector_shared_secret),
118*f0865ec9SKyle Evans };
119*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
120*f0865ec9SKyle Evans 
121*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
122*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_4
123*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
124*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_4_test_vector_our_priv_key[] = {
125*f0865ec9SKyle Evans 	0xbe, 0xab, 0xed, 0xd0, 0x15, 0x4a, 0x1a, 0xfc, 0xfc, 0x85, 0xd5, 0x21, 0x81, 0xc1, 0x0f, 0x5e, 0xb4, 0x7a, 0xdc, 0x51, 0xf6, 0x55, 0x04, 0x7d,
126*f0865ec9SKyle Evans };
127*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_4_test_vector_peer_pub_key[] = {
128*f0865ec9SKyle Evans 	0x0d, 0x04, 0x5f, 0x30, 0x25, 0x4a, 0xdc, 0x1f, 0xce, 0xfa, 0x8a, 0x5b, 0x1f, 0x31, 0xbf, 0x4e, 0x73, 0x9d, 0xd3, 0x27, 0xcd, 0x18, 0xd5, 0x94, 0x54, 0x2c, 0x31, 0x4e, 0x41, 0x42, 0x7c, 0x08, 0x27, 0x8a, 0x08, 0xce, 0x8d, 0x73, 0x05, 0xf3, 0xb5, 0xb8, 0x49, 0xc7, 0x2d, 0x8a, 0xff, 0x73,
129*f0865ec9SKyle Evans };
130*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_4_test_vector_our_pub_key[] = {
131*f0865ec9SKyle Evans 	0x1f, 0x65, 0xcf, 0x6e, 0x89, 0x78, 0xe1, 0xc1, 0xbc, 0x10, 0xbb, 0x61, 0xa7, 0xdb, 0x31, 0x1d, 0xe3, 0x10, 0x08, 0x8c, 0x8c, 0xf9, 0x76, 0x8b, 0xf7, 0xd4, 0x38, 0x16, 0x8e, 0x7f, 0x42, 0xab, 0x14, 0xb1, 0x6a, 0xf5, 0x3a, 0x7a, 0x2f, 0x64, 0x6f, 0xf4, 0x0b, 0x53, 0xd7, 0x4c, 0xbc, 0xc7,
132*f0865ec9SKyle Evans };
133*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_4_test_vector_shared_secret[] = {
134*f0865ec9SKyle Evans 	0x71, 0x6e, 0x74, 0x3b, 0x1b, 0x37, 0xa2, 0xcd, 0x84, 0x79, 0xf0, 0xa3, 0xd5, 0xa7, 0x4c, 0x10, 0xba, 0x25, 0x99, 0xbe, 0x18, 0xd7, 0xe2, 0xf4,
135*f0865ec9SKyle Evans };
136*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_4_test_case = {
137*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 4",
138*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
139*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
140*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_4_test_vector_our_priv_key,
141*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_our_priv_key),
142*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_4_test_vector_peer_pub_key,
143*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_peer_pub_key),
144*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_4_test_vector_our_pub_key,
145*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_our_pub_key),
146*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_4_test_vector_shared_secret,
147*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_4_test_vector_shared_secret),
148*f0865ec9SKyle Evans };
149*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
150*f0865ec9SKyle Evans 
151*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
152*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_5
153*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
154*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_5_test_vector_our_priv_key[] = {
155*f0865ec9SKyle Evans 	0xcf, 0x70, 0x35, 0x42, 0x26, 0x66, 0x73, 0x21, 0xd6, 0xe2, 0xba, 0xf4, 0x09, 0x99, 0xe2, 0xfd, 0x74, 0xc7, 0xa0, 0xf7, 0x93, 0xfa, 0x86, 0x99,
156*f0865ec9SKyle Evans };
157*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_5_test_vector_peer_pub_key[] = {
158*f0865ec9SKyle Evans 	0xfb, 0x35, 0xca, 0x20, 0xd2, 0xe9, 0x66, 0x65, 0xc5, 0x1b, 0x98, 0xe8, 0xf6, 0xeb, 0x3d, 0x79, 0x11, 0x35, 0x08, 0xd8, 0xbc, 0xcd, 0x45, 0x16, 0x36, 0x8e, 0xec, 0x0d, 0x5b, 0xfb, 0x84, 0x77, 0x21, 0xdf, 0x6a, 0xaf, 0xf0, 0xe5, 0xd4, 0x8c, 0x44, 0x4f, 0x74, 0xbf, 0x9c, 0xd8, 0xa5, 0xa7,
159*f0865ec9SKyle Evans };
160*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_5_test_vector_our_pub_key[] = {
161*f0865ec9SKyle Evans 	0x5f, 0x48, 0x44, 0xff, 0xcc, 0xe6, 0x10, 0x05, 0xd2, 0x4f, 0x73, 0x7d, 0xb9, 0x86, 0x75, 0xe9, 0x2f, 0x7b, 0x65, 0x43, 0xae, 0xb6, 0x10, 0x6c, 0x54, 0x24, 0xf5, 0x98, 0x13, 0x92, 0x15, 0xd3, 0x89, 0xb6, 0xb1, 0x2b, 0x86, 0xd5, 0x80, 0x14, 0x85, 0x7f, 0x2d, 0xda, 0xdb, 0x54, 0x0f, 0x51,
162*f0865ec9SKyle Evans };
163*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_5_test_vector_shared_secret[] = {
164*f0865ec9SKyle Evans 	0xf6, 0x70, 0x53, 0xb9, 0x34, 0x45, 0x99, 0x85, 0xa3, 0x15, 0xcb, 0x01, 0x7b, 0xf0, 0x30, 0x28, 0x91, 0x79, 0x8d, 0x45, 0xd0, 0xe1, 0x95, 0x08,
165*f0865ec9SKyle Evans };
166*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_5_test_case = {
167*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 5",
168*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
169*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
170*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_5_test_vector_our_priv_key,
171*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_our_priv_key),
172*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_5_test_vector_peer_pub_key,
173*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_peer_pub_key),
174*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_5_test_vector_our_pub_key,
175*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_our_pub_key),
176*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_5_test_vector_shared_secret,
177*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_5_test_vector_shared_secret),
178*f0865ec9SKyle Evans };
179*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
180*f0865ec9SKyle Evans 
181*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
182*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_6
183*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
184*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_6_test_vector_our_priv_key[] = {
185*f0865ec9SKyle Evans 	0xfe, 0x94, 0x25, 0x15, 0x23, 0x7f, 0xff, 0xdd, 0x7b, 0x4e, 0xb5, 0xc6, 0x49, 0x09, 0xee, 0xe4, 0x85, 0x6a, 0x07, 0x6c, 0xdf, 0x12, 0xba, 0xe2,
186*f0865ec9SKyle Evans };
187*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_6_test_vector_peer_pub_key[] = {
188*f0865ec9SKyle Evans 	0x82, 0x47, 0x52, 0x96, 0x0c, 0x13, 0x07, 0xe5, 0xf1, 0x3a, 0x83, 0xda, 0x21, 0xc7, 0x99, 0x8c, 0xa8, 0xb5, 0xb0, 0x0b, 0x95, 0x49, 0xf6, 0xd0, 0xbc, 0x52, 0xd9, 0x1e, 0x23, 0x43, 0x63, 0xbc, 0x32, 0xee, 0x0b, 0x67, 0x78, 0xf2, 0x5c, 0xd8, 0xc1, 0x84, 0x75, 0x10, 0xf4, 0x34, 0x8b, 0x94,
189*f0865ec9SKyle Evans };
190*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_6_test_vector_our_pub_key[] = {
191*f0865ec9SKyle Evans 	0xe6, 0x36, 0x9d, 0xf7, 0x9b, 0x20, 0x7b, 0x8b, 0x86, 0x79, 0xf7, 0xc8, 0x69, 0xcf, 0xc2, 0x64, 0x85, 0x9d, 0x1a, 0xb5, 0x5a, 0xa4, 0x01, 0xe8, 0x1f, 0x99, 0xc7, 0x1f, 0x80, 0x1a, 0x30, 0xb5, 0x2f, 0x74, 0xda, 0x6e, 0x5e, 0x6d, 0xbb, 0x62, 0xee, 0x4c, 0x5d, 0xa1, 0x09, 0x0c, 0xc0, 0x20,
192*f0865ec9SKyle Evans };
193*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_6_test_vector_shared_secret[] = {
194*f0865ec9SKyle Evans 	0x75, 0x82, 0x29, 0x71, 0x19, 0x3e, 0xdd, 0x47, 0x2b, 0xf3, 0x01, 0x51, 0xa7, 0x82, 0x61, 0x9c, 0x55, 0xad, 0x0b, 0x27, 0x9c, 0x93, 0x03, 0xdd,
195*f0865ec9SKyle Evans };
196*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_6_test_case = {
197*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 6",
198*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
199*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
200*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_6_test_vector_our_priv_key,
201*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_our_priv_key),
202*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_6_test_vector_peer_pub_key,
203*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_peer_pub_key),
204*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_6_test_vector_our_pub_key,
205*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_our_pub_key),
206*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_6_test_vector_shared_secret,
207*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_6_test_vector_shared_secret),
208*f0865ec9SKyle Evans };
209*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
210*f0865ec9SKyle Evans 
211*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
212*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_7
213*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
214*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_7_test_vector_our_priv_key[] = {
215*f0865ec9SKyle Evans 	0x33, 0xfe, 0xd1, 0x04, 0x92, 0xaf, 0xa5, 0xbe, 0xa0, 0x33, 0x3c, 0x0a, 0xf1, 0x2c, 0xac, 0x94, 0x0c, 0x4d, 0x22, 0x24, 0x55, 0xbc, 0xd0, 0xfe,
216*f0865ec9SKyle Evans };
217*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_7_test_vector_peer_pub_key[] = {
218*f0865ec9SKyle Evans 	0x10, 0xbb, 0x57, 0x02, 0x02, 0x91, 0x14, 0x19, 0x81, 0xf8, 0x33, 0xb4, 0x74, 0x9e, 0x56, 0x11, 0x03, 0x4b, 0x30, 0x8e, 0x84, 0x01, 0x1d, 0x21, 0xe1, 0xca, 0xcd, 0x6b, 0x7b, 0xd1, 0x7e, 0xd8, 0xdd, 0xb5, 0x0b, 0x6a, 0xee, 0x06, 0x54, 0xc3, 0x5f, 0x2d, 0x0e, 0xdd, 0xc1, 0xcf, 0xfc, 0xf6,
219*f0865ec9SKyle Evans };
220*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_7_test_vector_our_pub_key[] = {
221*f0865ec9SKyle Evans 	0xef, 0x0b, 0x28, 0xaf, 0xc4, 0x16, 0x37, 0xd7, 0x37, 0xf4, 0x2e, 0x4c, 0x8a, 0xac, 0xea, 0xdc, 0x84, 0xba, 0x2e, 0x0b, 0x84, 0x9c, 0xa1, 0x8c, 0x57, 0x79, 0x79, 0x42, 0xe5, 0x52, 0x17, 0x3b, 0xba, 0x17, 0xf7, 0x32, 0x78, 0xe0, 0x29, 0xf4, 0x23, 0x35, 0x06, 0x8b, 0xd7, 0x70, 0xdd, 0xf2,
222*f0865ec9SKyle Evans };
223*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_7_test_vector_shared_secret[] = {
224*f0865ec9SKyle Evans 	0x67, 0xcb, 0xa2, 0xcb, 0xb6, 0x9e, 0xe7, 0x8b, 0xf1, 0xab, 0xaf, 0xb0, 0xe6, 0xfb, 0xe3, 0x3f, 0xa2, 0x09, 0x4c, 0x12, 0x8d, 0x59, 0x65, 0x2d,
225*f0865ec9SKyle Evans };
226*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_7_test_case = {
227*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 7",
228*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
229*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
230*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_7_test_vector_our_priv_key,
231*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_our_priv_key),
232*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_7_test_vector_peer_pub_key,
233*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_peer_pub_key),
234*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_7_test_vector_our_pub_key,
235*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_our_pub_key),
236*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_7_test_vector_shared_secret,
237*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_7_test_vector_shared_secret),
238*f0865ec9SKyle Evans };
239*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
240*f0865ec9SKyle Evans 
241*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
242*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_8
243*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
244*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_8_test_vector_our_priv_key[] = {
245*f0865ec9SKyle Evans 	0xf3, 0x55, 0x7c, 0x5d, 0x70, 0xb4, 0xc7, 0x95, 0x49, 0x60, 0xc3, 0x35, 0x68, 0x77, 0x6a, 0xdb, 0xe8, 0xe4, 0x36, 0x19, 0xab, 0xe2, 0x6b, 0x13,
246*f0865ec9SKyle Evans };
247*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_8_test_vector_peer_pub_key[] = {
248*f0865ec9SKyle Evans 	0x51, 0x92, 0xfc, 0xe4, 0x18, 0x5a, 0x77, 0x58, 0xea, 0x1b, 0xc5, 0x6e, 0x0e, 0x4f, 0x4e, 0x8b, 0x2d, 0xce, 0x32, 0x34, 0x8d, 0x0d, 0xce, 0xd1, 0x20, 0x98, 0x99, 0x81, 0xbe, 0xaa, 0xf0, 0x00, 0x6d, 0x88, 0xa9, 0x6e, 0x79, 0x71, 0xa2, 0xfa, 0x3a, 0x33, 0xba, 0x46, 0x04, 0x7f, 0xc7, 0xba,
249*f0865ec9SKyle Evans };
250*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_8_test_vector_our_pub_key[] = {
251*f0865ec9SKyle Evans 	0xd7, 0x01, 0x12, 0xc5, 0xf0, 0xf0, 0x84, 0x43, 0x86, 0x49, 0x4a, 0xc1, 0xad, 0x99, 0xdc, 0xe2, 0x21, 0x41, 0x34, 0x17, 0x6e, 0xbf, 0xb9, 0xaf, 0xd3, 0xc1, 0x87, 0xa0, 0x38, 0x51, 0x0a, 0xb3, 0x1d, 0x45, 0x9e, 0x2b, 0x7a, 0xf1, 0xa3, 0x80, 0xdd, 0x75, 0x76, 0xaf, 0x06, 0x26, 0x75, 0x48,
252*f0865ec9SKyle Evans };
253*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_8_test_vector_shared_secret[] = {
254*f0865ec9SKyle Evans 	0xcf, 0x99, 0xa2, 0x77, 0x0a, 0x38, 0x6c, 0xa0, 0x13, 0x7d, 0x1e, 0xca, 0x0a, 0x22, 0x6e, 0x48, 0x42, 0x97, 0xac, 0x3c, 0x51, 0x3f, 0x36, 0x31,
255*f0865ec9SKyle Evans };
256*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_8_test_case = {
257*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 8",
258*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
259*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
260*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_8_test_vector_our_priv_key,
261*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_our_priv_key),
262*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_8_test_vector_peer_pub_key,
263*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_peer_pub_key),
264*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_8_test_vector_our_pub_key,
265*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_our_pub_key),
266*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_8_test_vector_shared_secret,
267*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_8_test_vector_shared_secret),
268*f0865ec9SKyle Evans };
269*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
270*f0865ec9SKyle Evans 
271*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
272*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_9
273*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
274*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_9_test_vector_our_priv_key[] = {
275*f0865ec9SKyle Evans 	0x58, 0x6c, 0xfb, 0xa1, 0xc6, 0xe8, 0x17, 0x66, 0xed, 0x52, 0x82, 0x8f, 0x17, 0x7b, 0x1b, 0xe1, 0x4e, 0xbb, 0xc5, 0xb8, 0x33, 0x48, 0xc3, 0x11,
276*f0865ec9SKyle Evans };
277*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_9_test_vector_peer_pub_key[] = {
278*f0865ec9SKyle Evans 	0x26, 0xd0, 0x19, 0xdb, 0xe2, 0x79, 0xea, 0xd0, 0x1e, 0xed, 0x14, 0x3a, 0x91, 0x60, 0x1a, 0xda, 0x26, 0xe2, 0xf4, 0x22, 0x25, 0xb1, 0xc6, 0x2b, 0x6c, 0xa6, 0x53, 0xf0, 0x82, 0x72, 0xe0, 0x38, 0x6f, 0xc9, 0x42, 0x1f, 0xbd, 0x58, 0x00, 0x93, 0xd7, 0xae, 0x63, 0x01, 0xbc, 0xa9, 0x44, 0x76,
279*f0865ec9SKyle Evans };
280*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_9_test_vector_our_pub_key[] = {
281*f0865ec9SKyle Evans 	0x58, 0xb3, 0xc6, 0x3e, 0x56, 0xbe, 0xc9, 0xd6, 0x96, 0xbf, 0x9a, 0x88, 0xdf, 0x28, 0x73, 0x73, 0x83, 0x91, 0xf7, 0x63, 0x68, 0xaa, 0x2b, 0x49, 0x57, 0x76, 0x77, 0x3b, 0x26, 0x1f, 0xaf, 0x7b, 0xa2, 0xfd, 0xc4, 0xfe, 0x43, 0xb9, 0x2c, 0x0b, 0x1c, 0x7a, 0x2f, 0xd0, 0x54, 0xa4, 0x36, 0x50,
282*f0865ec9SKyle Evans };
283*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_9_test_vector_shared_secret[] = {
284*f0865ec9SKyle Evans 	0x57, 0x63, 0x31, 0xe2, 0xb4, 0xfb, 0x38, 0xa1, 0x12, 0x81, 0x0e, 0x15, 0x29, 0x83, 0x4d, 0xe8, 0x30, 0x7f, 0xb0, 0xa0, 0xd2, 0x75, 0x68, 0x77,
285*f0865ec9SKyle Evans };
286*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_9_test_case = {
287*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 9",
288*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
289*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
290*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_9_test_vector_our_priv_key,
291*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_our_priv_key),
292*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_9_test_vector_peer_pub_key,
293*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_peer_pub_key),
294*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_9_test_vector_our_pub_key,
295*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_our_pub_key),
296*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_9_test_vector_shared_secret,
297*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_9_test_vector_shared_secret),
298*f0865ec9SKyle Evans };
299*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
300*f0865ec9SKyle Evans 
301*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
302*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_10
303*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
304*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_10_test_vector_our_priv_key[] = {
305*f0865ec9SKyle Evans 	0xca, 0xd8, 0x10, 0x06, 0x03, 0xa4, 0xf6, 0x5b, 0xe0, 0x8d, 0x8f, 0xc8, 0xa1, 0xb7, 0xe8, 0x84, 0xc5, 0xff, 0x65, 0xde, 0xb3, 0xc9, 0x6d, 0x99,
306*f0865ec9SKyle Evans };
307*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_10_test_vector_peer_pub_key[] = {
308*f0865ec9SKyle Evans 	0x53, 0x9b, 0xc4, 0x0f, 0xe2, 0x0a, 0x0f, 0xb2, 0x67, 0x88, 0x8b, 0x64, 0x7b, 0x03, 0xea, 0xaf, 0x6e, 0xc2, 0x0c, 0x02, 0xa1, 0xe1, 0xf8, 0xc8, 0x69, 0x09, 0x5e, 0x5b, 0xb7, 0xb4, 0xd4, 0x4c, 0x32, 0x78, 0xa7, 0xee, 0x6b, 0xec, 0xa3, 0x97, 0xc4, 0x52, 0x46, 0xda, 0x9a, 0x34, 0xc8, 0xbe,
309*f0865ec9SKyle Evans };
310*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_10_test_vector_our_pub_key[] = {
311*f0865ec9SKyle Evans 	0xb7, 0xfc, 0xc0, 0xf5, 0x2c, 0x7a, 0x41, 0x1e, 0xdb, 0xed, 0x39, 0xe1, 0x0b, 0xf0, 0x2b, 0x6a, 0xe0, 0xf2, 0x66, 0x14, 0xc6, 0xb3, 0x25, 0xa2, 0x47, 0x48, 0x3b, 0x26, 0xeb, 0x67, 0x77, 0x6d, 0xe2, 0xb9, 0x3a, 0xb7, 0x11, 0x9d, 0x54, 0x47, 0x57, 0x37, 0x39, 0xe3, 0xd5, 0x5e, 0x72, 0xfb,
312*f0865ec9SKyle Evans };
313*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_10_test_vector_shared_secret[] = {
314*f0865ec9SKyle Evans 	0x90, 0x2f, 0x45, 0x01, 0x91, 0x6a, 0x0d, 0xd9, 0x45, 0x55, 0x4c, 0x3a, 0x37, 0xb3, 0xd7, 0x80, 0xd3, 0x75, 0xa6, 0xda, 0x71, 0x31, 0x97, 0xc4,
315*f0865ec9SKyle Evans };
316*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_10_test_case = {
317*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 10",
318*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
319*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
320*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_10_test_vector_our_priv_key,
321*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_our_priv_key),
322*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_10_test_vector_peer_pub_key,
323*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_peer_pub_key),
324*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_10_test_vector_our_pub_key,
325*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_our_pub_key),
326*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_10_test_vector_shared_secret,
327*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_10_test_vector_shared_secret),
328*f0865ec9SKyle Evans };
329*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
330*f0865ec9SKyle Evans 
331*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
332*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_11
333*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
334*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_11_test_vector_our_priv_key[] = {
335*f0865ec9SKyle Evans 	0x1e, 0xdd, 0x87, 0x9c, 0xc5, 0xc7, 0x96, 0x19, 0xca, 0xe6, 0xc7, 0x3a, 0x69, 0x1b, 0xd5, 0xa0, 0x39, 0x5c, 0x0e, 0xf3, 0xb3, 0x56, 0xfc, 0xd2,
336*f0865ec9SKyle Evans };
337*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_11_test_vector_peer_pub_key[] = {
338*f0865ec9SKyle Evans 	0x5d, 0x34, 0x3d, 0xdb, 0x96, 0x31, 0x8f, 0xb4, 0x79, 0x4d, 0x10, 0xf6, 0xc5, 0x73, 0xf9, 0x9f, 0xee, 0x5d, 0x0d, 0x57, 0xb9, 0x96, 0x25, 0x0f, 0x99, 0xfb, 0xdf, 0x9d, 0x97, 0xdd, 0x88, 0xad, 0x41, 0x02, 0x35, 0xda, 0xc3, 0x6e, 0x5b, 0x92, 0xce, 0x28, 0x24, 0xb8, 0xe5, 0x87, 0xa8, 0x2c,
339*f0865ec9SKyle Evans };
340*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_11_test_vector_our_pub_key[] = {
341*f0865ec9SKyle Evans 	0x6c, 0xe6, 0xad, 0xb2, 0xc3, 0x08, 0x08, 0xf5, 0x90, 0x04, 0x8c, 0x33, 0xdf, 0xfa, 0xd4, 0x52, 0x4e, 0xbf, 0x7a, 0x5f, 0xd3, 0x9b, 0x74, 0x7b, 0x49, 0x66, 0xbd, 0x2f, 0x3d, 0x00, 0x56, 0x9b, 0x4d, 0x4c, 0x04, 0x09, 0xfb, 0xd7, 0xa2, 0xdb, 0x75, 0x2f, 0x6d, 0x09, 0xbc, 0xa8, 0xc2, 0x5f,
342*f0865ec9SKyle Evans };
343*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_11_test_vector_shared_secret[] = {
344*f0865ec9SKyle Evans 	0x46, 0xe4, 0xde, 0x33, 0x50, 0x54, 0xd4, 0x29, 0x86, 0x32, 0x18, 0xae, 0x33, 0x63, 0x6f, 0xc9, 0xb8, 0x9c, 0x62, 0x8b, 0x64, 0xb5, 0x06, 0xc7,
345*f0865ec9SKyle Evans };
346*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_11_test_case = {
347*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 11",
348*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
349*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
350*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_11_test_vector_our_priv_key,
351*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_our_priv_key),
352*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_11_test_vector_peer_pub_key,
353*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_peer_pub_key),
354*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_11_test_vector_our_pub_key,
355*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_our_pub_key),
356*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_11_test_vector_shared_secret,
357*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_11_test_vector_shared_secret),
358*f0865ec9SKyle Evans };
359*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
360*f0865ec9SKyle Evans 
361*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
362*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_12
363*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
364*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_12_test_vector_our_priv_key[] = {
365*f0865ec9SKyle Evans 	0x46, 0x0e, 0x45, 0x22, 0x73, 0xfe, 0x18, 0x27, 0x60, 0x21, 0x87, 0xad, 0x3b, 0xeb, 0xee, 0x65, 0xcb, 0x84, 0x42, 0x3b, 0xb4, 0xf4, 0x75, 0x37,
366*f0865ec9SKyle Evans };
367*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_12_test_vector_peer_pub_key[] = {
368*f0865ec9SKyle Evans 	0x8d, 0x3d, 0xb9, 0xbd, 0xce, 0x13, 0x7f, 0xfb, 0xfb, 0x89, 0x13, 0x88, 0xc3, 0x7d, 0xf6, 0xc0, 0xcb, 0xc9, 0x0a, 0xa5, 0xe5, 0x37, 0x62, 0x20, 0x13, 0x5d, 0x30, 0xb5, 0xcb, 0x66, 0x0e, 0xef, 0x87, 0x64, 0xff, 0xc7, 0x44, 0xf1, 0x5c, 0x1b, 0x5d, 0x6d, 0xc0, 0x6b, 0xa4, 0x41, 0x6d, 0x37,
369*f0865ec9SKyle Evans };
370*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_12_test_vector_our_pub_key[] = {
371*f0865ec9SKyle Evans 	0xd1, 0xbd, 0x3a, 0x3e, 0xfa, 0xbf, 0x47, 0x67, 0xfe, 0x63, 0x80, 0xbd, 0xf0, 0xdb, 0xf4, 0x9d, 0x52, 0xd4, 0xcf, 0x0c, 0xbb, 0x89, 0x40, 0x4c, 0xc1, 0x50, 0xc2, 0xb4, 0xc8, 0xb3, 0xaa, 0x35, 0xf7, 0x65, 0xf8, 0x47, 0xe4, 0xf7, 0xf8, 0xfd, 0x87, 0x04, 0xd2, 0x41, 0xa1, 0x81, 0xee, 0x99,
372*f0865ec9SKyle Evans };
373*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_12_test_vector_shared_secret[] = {
374*f0865ec9SKyle Evans 	0x1b, 0xfe, 0x9e, 0x5a, 0x20, 0xac, 0x7a, 0x38, 0xd8, 0xf6, 0x05, 0xb4, 0x25, 0xbb, 0x90, 0x30, 0xbe, 0x31, 0xef, 0x97, 0xc1, 0x01, 0xc7, 0x6c,
375*f0865ec9SKyle Evans };
376*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_12_test_case = {
377*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 12",
378*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
379*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
380*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_12_test_vector_our_priv_key,
381*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_our_priv_key),
382*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_12_test_vector_peer_pub_key,
383*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_peer_pub_key),
384*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_12_test_vector_our_pub_key,
385*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_our_pub_key),
386*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_12_test_vector_shared_secret,
387*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_12_test_vector_shared_secret),
388*f0865ec9SKyle Evans };
389*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
390*f0865ec9SKyle Evans 
391*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
392*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_13
393*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
394*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_13_test_vector_our_priv_key[] = {
395*f0865ec9SKyle Evans 	0xb9, 0x70, 0x36, 0x50, 0x08, 0x45, 0x6f, 0x87, 0x58, 0xec, 0xc5, 0xa3, 0xb3, 0x3c, 0xf3, 0xae, 0x6a, 0x8d, 0x56, 0x81, 0x07, 0xa5, 0x21, 0x67,
396*f0865ec9SKyle Evans };
397*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_13_test_vector_peer_pub_key[] = {
398*f0865ec9SKyle Evans 	0x9e, 0x0a, 0x69, 0x49, 0x51, 0x9c, 0x7f, 0x5b, 0xe6, 0x8c, 0x04, 0x33, 0xc5, 0xfd, 0xf1, 0x30, 0x64, 0xaa, 0x13, 0xfb, 0x29, 0x48, 0x3d, 0xc3, 0xe1, 0xc8, 0xba, 0x63, 0xe1, 0xf4, 0x71, 0xdb, 0x23, 0x18, 0x5f, 0x50, 0xd9, 0xc8, 0x71, 0xed, 0xea, 0x21, 0x25, 0x5b, 0x3a, 0x63, 0xb4, 0xb7,
399*f0865ec9SKyle Evans };
400*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_13_test_vector_our_pub_key[] = {
401*f0865ec9SKyle Evans 	0xc1, 0xb8, 0x61, 0x0c, 0x8c, 0x63, 0xf8, 0xd4, 0xab, 0xda, 0x09, 0x3b, 0x9a, 0x11, 0xa5, 0x66, 0x04, 0x4b, 0xf6, 0x5c, 0x6f, 0xaa, 0x89, 0x99, 0xa5, 0xbc, 0x4b, 0x3c, 0xa0, 0x95, 0x38, 0x2e, 0x97, 0x38, 0xae, 0xe9, 0x5f, 0xe9, 0x47, 0x9b, 0x17, 0x87, 0x9b, 0x3a, 0xd5, 0x29, 0x55, 0x59,
402*f0865ec9SKyle Evans };
403*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_13_test_vector_shared_secret[] = {
404*f0865ec9SKyle Evans 	0x0e, 0x8c, 0x49, 0x3a, 0x4a, 0xdc, 0x44, 0x5d, 0xc9, 0x28, 0x8a, 0x3b, 0x9b, 0x27, 0x25, 0x99, 0x22, 0x40, 0x54, 0x59, 0x2d, 0x72, 0x65, 0xb3,
405*f0865ec9SKyle Evans };
406*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_13_test_case = {
407*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 13",
408*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
409*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
410*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_13_test_vector_our_priv_key,
411*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_our_priv_key),
412*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_13_test_vector_peer_pub_key,
413*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_peer_pub_key),
414*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_13_test_vector_our_pub_key,
415*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_our_pub_key),
416*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_13_test_vector_shared_secret,
417*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_13_test_vector_shared_secret),
418*f0865ec9SKyle Evans };
419*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
420*f0865ec9SKyle Evans 
421*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
422*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_14
423*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
424*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_14_test_vector_our_priv_key[] = {
425*f0865ec9SKyle Evans 	0x59, 0xc1, 0x5b, 0x8a, 0x24, 0x64, 0xe4, 0x1d, 0xfe, 0x43, 0x71, 0xc7, 0xf7, 0xda, 0xdf, 0x47, 0x0a, 0xe4, 0x25, 0x54, 0x4f, 0x81, 0x13, 0xbd,
426*f0865ec9SKyle Evans };
427*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_14_test_vector_peer_pub_key[] = {
428*f0865ec9SKyle Evans 	0xbe, 0x08, 0x82, 0x38, 0x90, 0x2e, 0x99, 0x39, 0xb3, 0xd0, 0x54, 0xee, 0xeb, 0x84, 0x92, 0xda, 0xf4, 0xbd, 0xcf, 0x09, 0xa2, 0xab, 0x77, 0xf1, 0x58, 0xd6, 0x74, 0x9a, 0x3a, 0x92, 0x3d, 0xc8, 0x04, 0x40, 0xf2, 0x66, 0x1f, 0xd3, 0x5b, 0x65, 0x16, 0x17, 0xe6, 0x52, 0x94, 0xb4, 0x63, 0x75,
429*f0865ec9SKyle Evans };
430*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_14_test_vector_our_pub_key[] = {
431*f0865ec9SKyle Evans 	0x1f, 0xe7, 0x76, 0xf7, 0x35, 0x67, 0xb6, 0xac, 0x0b, 0x0d, 0x67, 0x64, 0x16, 0x4d, 0xe6, 0xc5, 0xbe, 0x75, 0x1b, 0xa8, 0xd1, 0xff, 0x45, 0x5e, 0x4c, 0x16, 0x0b, 0xf3, 0x8a, 0xfb, 0x2b, 0x71, 0xf6, 0x84, 0x26, 0x16, 0x64, 0x11, 0x5c, 0xe8, 0x74, 0x55, 0x3e, 0x8b, 0x05, 0x94, 0x32, 0xd2,
432*f0865ec9SKyle Evans };
433*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_14_test_vector_shared_secret[] = {
434*f0865ec9SKyle Evans 	0x0f, 0x19, 0x91, 0x08, 0x6b, 0x45, 0x5d, 0xed, 0x6a, 0x1c, 0x41, 0x46, 0xf7, 0xbf, 0x59, 0xfe, 0x9b, 0x49, 0x5d, 0xe5, 0x66, 0xeb, 0xc6, 0xbf,
435*f0865ec9SKyle Evans };
436*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_14_test_case = {
437*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 14",
438*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
439*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
440*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_14_test_vector_our_priv_key,
441*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_our_priv_key),
442*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_14_test_vector_peer_pub_key,
443*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_peer_pub_key),
444*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_14_test_vector_our_pub_key,
445*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_our_pub_key),
446*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_14_test_vector_shared_secret,
447*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_14_test_vector_shared_secret),
448*f0865ec9SKyle Evans };
449*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
450*f0865ec9SKyle Evans 
451*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
452*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_15
453*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
454*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_15_test_vector_our_priv_key[] = {
455*f0865ec9SKyle Evans 	0xa6, 0xe9, 0xb8, 0x85, 0xc6, 0x6b, 0x95, 0x9d, 0x1f, 0xc2, 0x70, 0x8d, 0x59, 0x1b, 0x6d, 0x32, 0x28, 0xe4, 0x9e, 0xb9, 0x8f, 0x72, 0x6d, 0x61,
456*f0865ec9SKyle Evans };
457*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_15_test_vector_peer_pub_key[] = {
458*f0865ec9SKyle Evans 	0xbf, 0x5a, 0xe0, 0x50, 0x25, 0xe1, 0xbe, 0x61, 0x7e, 0x66, 0x6d, 0x87, 0xa4, 0x16, 0x83, 0x63, 0x87, 0x3d, 0x57, 0x61, 0xb3, 0x76, 0xb5, 0x03, 0xe1, 0xe6, 0xe3, 0x8b, 0x37, 0x2b, 0x6b, 0xee, 0x0f, 0xf5, 0xb3, 0x50, 0x2d, 0x83, 0x73, 0x5e, 0x3b, 0x2c, 0x26, 0x82, 0x5e, 0x4f, 0x0f, 0xcc,
459*f0865ec9SKyle Evans };
460*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_15_test_vector_our_pub_key[] = {
461*f0865ec9SKyle Evans 	0x63, 0x2b, 0xb7, 0x65, 0x1d, 0xbf, 0x49, 0xdd, 0xe9, 0xdd, 0x12, 0x5d, 0x13, 0xfb, 0x23, 0x4e, 0x06, 0x61, 0x77, 0x23, 0xbe, 0xed, 0x3d, 0x1b, 0xf4, 0xad, 0x52, 0x09, 0x63, 0x84, 0x88, 0x39, 0x7c, 0x5f, 0x44, 0xf9, 0x94, 0xdd, 0x74, 0x79, 0x80, 0x7e, 0x79, 0xf4, 0x88, 0x7d, 0x2e, 0x71,
462*f0865ec9SKyle Evans };
463*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_15_test_vector_shared_secret[] = {
464*f0865ec9SKyle Evans 	0xb3, 0x0f, 0x21, 0x27, 0xc3, 0x4d, 0xf3, 0x5a, 0xaa, 0x91, 0xdb, 0xf0, 0xbb, 0xe1, 0x57, 0x98, 0xe7, 0x99, 0xa0, 0x3e, 0xd1, 0x16, 0x98, 0xc1,
465*f0865ec9SKyle Evans };
466*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_15_test_case = {
467*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 15",
468*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
469*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
470*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_15_test_vector_our_priv_key,
471*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_our_priv_key),
472*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_15_test_vector_peer_pub_key,
473*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_peer_pub_key),
474*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_15_test_vector_our_pub_key,
475*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_our_pub_key),
476*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_15_test_vector_shared_secret,
477*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_15_test_vector_shared_secret),
478*f0865ec9SKyle Evans };
479*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
480*f0865ec9SKyle Evans 
481*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
482*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_16
483*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
484*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_16_test_vector_our_priv_key[] = {
485*f0865ec9SKyle Evans 	0xbd, 0xb7, 0x54, 0x09, 0x6f, 0xfb, 0xfb, 0xd8, 0xb0, 0xf3, 0xcb, 0x04, 0x6c, 0xcb, 0x7c, 0xa1, 0x49, 0xc4, 0xe7, 0x19, 0x20, 0x67, 0xa3, 0xee,
486*f0865ec9SKyle Evans };
487*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_16_test_vector_peer_pub_key[] = {
488*f0865ec9SKyle Evans 	0x6c, 0xc4, 0xfe, 0xed, 0x84, 0xc7, 0xab, 0x0d, 0x09, 0x00, 0x5d, 0x66, 0x0e, 0xd3, 0x4d, 0xe6, 0x95, 0x5a, 0x94, 0x61, 0xc4, 0x13, 0x8d, 0x11, 0x31, 0x22, 0x5f, 0x33, 0x86, 0x4e, 0xd4, 0x8d, 0xa0, 0x6f, 0xa4, 0x5a, 0x91, 0x3b, 0x46, 0xcf, 0x42, 0x55, 0x77, 0x42, 0xe3, 0x50, 0x85, 0xe6,
489*f0865ec9SKyle Evans };
490*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_16_test_vector_our_pub_key[] = {
491*f0865ec9SKyle Evans 	0xd9, 0xc0, 0x98, 0xd4, 0x21, 0xd7, 0x41, 0xf6, 0xfa, 0xab, 0x11, 0x6f, 0x3e, 0x47, 0x31, 0xd2, 0x8c, 0x55, 0x58, 0xe1, 0x9f, 0xe1, 0x12, 0xa1, 0x38, 0xd4, 0xdc, 0x48, 0xcc, 0xdb, 0x1d, 0x3e, 0xd8, 0xd3, 0x1f, 0xd0, 0x67, 0x84, 0xa4, 0xf8, 0x7a, 0x68, 0xae, 0xc1, 0xcb, 0xd5, 0xb0, 0x8f,
492*f0865ec9SKyle Evans };
493*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_16_test_vector_shared_secret[] = {
494*f0865ec9SKyle Evans 	0x64, 0xa5, 0xc2, 0x46, 0x59, 0x9d, 0x3e, 0x81, 0x77, 0xa2, 0x40, 0x2a, 0x11, 0x10, 0xeb, 0x81, 0xe6, 0xc4, 0x56, 0xab, 0x4e, 0xdb, 0x51, 0x27,
495*f0865ec9SKyle Evans };
496*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_16_test_case = {
497*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 16",
498*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
499*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
500*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_16_test_vector_our_priv_key,
501*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_our_priv_key),
502*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_16_test_vector_peer_pub_key,
503*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_peer_pub_key),
504*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_16_test_vector_our_pub_key,
505*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_our_pub_key),
506*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_16_test_vector_shared_secret,
507*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_16_test_vector_shared_secret),
508*f0865ec9SKyle Evans };
509*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
510*f0865ec9SKyle Evans 
511*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
512*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_17
513*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
514*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_17_test_vector_our_priv_key[] = {
515*f0865ec9SKyle Evans 	0xd5, 0xbc, 0xf2, 0x53, 0x4d, 0xaf, 0xc3, 0xd9, 0x99, 0x64, 0xc7, 0xbd, 0x63, 0xab, 0x7b, 0xd1, 0x59, 0x99, 0xfe, 0x56, 0xdd, 0x96, 0x9c, 0x42,
516*f0865ec9SKyle Evans };
517*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_17_test_vector_peer_pub_key[] = {
518*f0865ec9SKyle Evans 	0x36, 0x15, 0x73, 0x15, 0xbe, 0xe7, 0xaf, 0xed, 0xde, 0xd5, 0x8c, 0x4e, 0x8b, 0xa1, 0x4d, 0x34, 0x21, 0xc4, 0x01, 0xe5, 0x11, 0x35, 0xbc, 0xc9, 0x37, 0xc2, 0x97, 0xca, 0x70, 0x3f, 0x77, 0xc5, 0x2b, 0xb0, 0x62, 0xd8, 0xce, 0x97, 0x1d, 0xb8, 0x40, 0x97, 0xba, 0x0c, 0x75, 0x3a, 0x41, 0x8f,
519*f0865ec9SKyle Evans };
520*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_17_test_vector_our_pub_key[] = {
521*f0865ec9SKyle Evans 	0xfd, 0xa1, 0xd5, 0xd2, 0x8d, 0x6f, 0xe0, 0xe7, 0x90, 0x9d, 0x6a, 0x8b, 0xaf, 0xa7, 0x82, 0x4d, 0xb5, 0x57, 0x2a, 0xb9, 0x2f, 0xfe, 0x7d, 0xe6, 0x13, 0x4a, 0x29, 0x7c, 0x1d, 0x9c, 0x8b, 0xba, 0xb2, 0x49, 0xab, 0xac, 0xd9, 0x51, 0xed, 0x11, 0xe5, 0xa9, 0x9f, 0x92, 0xe7, 0x99, 0x15, 0x72,
522*f0865ec9SKyle Evans };
523*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_17_test_vector_shared_secret[] = {
524*f0865ec9SKyle Evans 	0x01, 0x7b, 0x8c, 0xa5, 0x3c, 0x82, 0xfa, 0xb1, 0x63, 0xda, 0x2a, 0xb7, 0x83, 0x96, 0x6a, 0x39, 0xe0, 0x61, 0xb3, 0x2c, 0x8c, 0xfa, 0x33, 0x4d,
525*f0865ec9SKyle Evans };
526*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_17_test_case = {
527*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 17",
528*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
529*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
530*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_17_test_vector_our_priv_key,
531*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_our_priv_key),
532*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_17_test_vector_peer_pub_key,
533*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_peer_pub_key),
534*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_17_test_vector_our_pub_key,
535*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_our_pub_key),
536*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_17_test_vector_shared_secret,
537*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_17_test_vector_shared_secret),
538*f0865ec9SKyle Evans };
539*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
540*f0865ec9SKyle Evans 
541*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
542*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_18
543*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
544*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_18_test_vector_our_priv_key[] = {
545*f0865ec9SKyle Evans 	0x43, 0xd4, 0xb9, 0xdf, 0x10, 0x53, 0xbe, 0x5b, 0x42, 0x68, 0x10, 0x4c, 0x02, 0x24, 0x4d, 0x3b, 0xf9, 0x59, 0x4b, 0x01, 0x0b, 0x46, 0xa8, 0xb2,
546*f0865ec9SKyle Evans };
547*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_18_test_vector_peer_pub_key[] = {
548*f0865ec9SKyle Evans 	0x98, 0x46, 0x4d, 0x47, 0xf0, 0x25, 0x6f, 0x82, 0x92, 0xe0, 0x27, 0xe8, 0xc9, 0x25, 0x82, 0xea, 0x77, 0xcf, 0x90, 0x51, 0xf5, 0xce, 0x8e, 0x5d, 0x44, 0x95, 0x52, 0xef, 0x75, 0x78, 0xbe, 0x96, 0x23, 0x6f, 0xe5, 0xed, 0x9d, 0x06, 0x43, 0xc0, 0xbb, 0x6c, 0x5a, 0x91, 0x34, 0xb0, 0x10, 0x8d,
549*f0865ec9SKyle Evans };
550*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_18_test_vector_our_pub_key[] = {
551*f0865ec9SKyle Evans 	0xc3, 0x02, 0x0b, 0x70, 0x91, 0x46, 0x3d, 0x78, 0x8f, 0x1f, 0x1d, 0x76, 0xf7, 0xcf, 0xee, 0xc8, 0x2e, 0xcd, 0xb3, 0xb7, 0xd9, 0x9c, 0x34, 0x5c, 0x9a, 0x77, 0x10, 0xd5, 0x17, 0x95, 0x91, 0xd8, 0xf3, 0xdf, 0x0a, 0xa1, 0x22, 0x30, 0x17, 0x68, 0xae, 0x7d, 0xb7, 0xee, 0xe2, 0xd7, 0xf5, 0x83,
552*f0865ec9SKyle Evans };
553*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_18_test_vector_shared_secret[] = {
554*f0865ec9SKyle Evans 	0x34, 0x0e, 0xf3, 0xdb, 0x3d, 0xbe, 0xbd, 0xd9, 0x1c, 0x62, 0xc3, 0xd4, 0xe1, 0xa3, 0xda, 0x2c, 0x7c, 0x52, 0xa3, 0x33, 0x8b, 0x86, 0x52, 0x59,
555*f0865ec9SKyle Evans };
556*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_18_test_case = {
557*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 18",
558*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
559*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
560*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_18_test_vector_our_priv_key,
561*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_our_priv_key),
562*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_18_test_vector_peer_pub_key,
563*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_peer_pub_key),
564*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_18_test_vector_our_pub_key,
565*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_our_pub_key),
566*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_18_test_vector_shared_secret,
567*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_18_test_vector_shared_secret),
568*f0865ec9SKyle Evans };
569*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
570*f0865ec9SKyle Evans 
571*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
572*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_19
573*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
574*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_19_test_vector_our_priv_key[] = {
575*f0865ec9SKyle Evans 	0x94, 0xca, 0xc2, 0xc2, 0xca, 0x71, 0x47, 0x46, 0x40, 0x16, 0x70, 0xd9, 0x4e, 0xdb, 0xf3, 0xf6, 0x77, 0x86, 0x7b, 0x5a, 0x03, 0xbe, 0xe7, 0xad,
576*f0865ec9SKyle Evans };
577*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_19_test_vector_peer_pub_key[] = {
578*f0865ec9SKyle Evans 	0x56, 0x3e, 0xb6, 0x6c, 0x33, 0x4c, 0xf6, 0xf1, 0x23, 0xbf, 0x04, 0xc7, 0x80, 0x3b, 0x48, 0xa3, 0x11, 0x02, 0x14, 0x23, 0x7e, 0x98, 0x3b, 0xf5, 0x0f, 0x35, 0x11, 0x04, 0x81, 0x91, 0x99, 0xef, 0x07, 0xc9, 0xa6, 0x05, 0x1d, 0x20, 0x75, 0x8f, 0x3a, 0xf7, 0x90, 0x27, 0xea, 0x66, 0xa5, 0x3f,
579*f0865ec9SKyle Evans };
580*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_19_test_vector_our_pub_key[] = {
581*f0865ec9SKyle Evans 	0xb1, 0x85, 0x54, 0xa2, 0xe7, 0x43, 0xef, 0x0a, 0xa2, 0xf0, 0x40, 0x98, 0x7c, 0x4c, 0x45, 0x10, 0x04, 0xe0, 0x96, 0xdf, 0x3d, 0x80, 0xdd, 0xae, 0x6e, 0x3e, 0x2c, 0x61, 0x8f, 0x89, 0x6e, 0x36, 0xba, 0x62, 0x00, 0x77, 0x68, 0x4b, 0x70, 0xa0, 0x5f, 0xfb, 0x79, 0xbf, 0x5e, 0x6c, 0x76, 0x40,
582*f0865ec9SKyle Evans };
583*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_19_test_vector_shared_secret[] = {
584*f0865ec9SKyle Evans 	0x21, 0x62, 0x14, 0x49, 0x21, 0xdf, 0x51, 0x03, 0xd0, 0xe6, 0xa6, 0x50, 0xfb, 0x13, 0xfd, 0x24, 0x6f, 0x47, 0x38, 0xd0, 0x89, 0x6c, 0xe9, 0x2f,
585*f0865ec9SKyle Evans };
586*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_19_test_case = {
587*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 19",
588*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
589*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
590*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_19_test_vector_our_priv_key,
591*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_our_priv_key),
592*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_19_test_vector_peer_pub_key,
593*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_peer_pub_key),
594*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_19_test_vector_our_pub_key,
595*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_our_pub_key),
596*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_19_test_vector_shared_secret,
597*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_19_test_vector_shared_secret),
598*f0865ec9SKyle Evans };
599*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
600*f0865ec9SKyle Evans 
601*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
602*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_20
603*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
604*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_20_test_vector_our_priv_key[] = {
605*f0865ec9SKyle Evans 	0x2a, 0x3a, 0x9e, 0x33, 0xc8, 0xcc, 0x31, 0x07, 0xa9, 0xf9, 0x26, 0x5c, 0x3b, 0xde, 0xa1, 0x20, 0x65, 0x70, 0xe8, 0x6f, 0x92, 0xac, 0x70, 0x14,
606*f0865ec9SKyle Evans };
607*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_20_test_vector_peer_pub_key[] = {
608*f0865ec9SKyle Evans 	0x86, 0x82, 0x8c, 0x4a, 0xc9, 0x2b, 0x55, 0x07, 0x61, 0x8a, 0xec, 0x78, 0x73, 0xa1, 0xd4, 0xfc, 0x65, 0x43, 0xc5, 0xbe, 0x33, 0xcf, 0x30, 0x78, 0xb2, 0x2c, 0xa7, 0x24, 0x37, 0x54, 0x5e, 0x10, 0xd6, 0xd4, 0xf0, 0x52, 0x42, 0x2e, 0xb8, 0x98, 0xb7, 0x37, 0xa4, 0xb8, 0x54, 0x3e, 0xe5, 0x50,
609*f0865ec9SKyle Evans };
610*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_20_test_vector_our_pub_key[] = {
611*f0865ec9SKyle Evans 	0xa7, 0xba, 0x38, 0xbe, 0x1b, 0xc6, 0x69, 0xdd, 0x23, 0xcc, 0xfc, 0xee, 0x06, 0x45, 0xb1, 0xf0, 0xdb, 0x8c, 0xf9, 0x42, 0xde, 0xaf, 0xae, 0xb6, 0xb8, 0x2d, 0xb7, 0x9d, 0x80, 0xcd, 0x0e, 0x37, 0xf2, 0x8d, 0x41, 0x63, 0xad, 0xc3, 0x89, 0xde, 0xe8, 0xfc, 0x77, 0x97, 0xb5, 0xc9, 0x83, 0x1b,
612*f0865ec9SKyle Evans };
613*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_20_test_vector_shared_secret[] = {
614*f0865ec9SKyle Evans 	0x4c, 0x69, 0xe7, 0xfe, 0xed, 0x4b, 0x11, 0x15, 0x9a, 0xdf, 0xc1, 0x6a, 0x60, 0x47, 0xa9, 0x25, 0x72, 0xea, 0x44, 0xe0, 0x74, 0x0b, 0x23, 0xaf,
615*f0865ec9SKyle Evans };
616*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_20_test_case = {
617*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 20",
618*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
619*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
620*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_20_test_vector_our_priv_key,
621*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_our_priv_key),
622*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_20_test_vector_peer_pub_key,
623*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_peer_pub_key),
624*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_20_test_vector_our_pub_key,
625*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_our_pub_key),
626*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_20_test_vector_shared_secret,
627*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_20_test_vector_shared_secret),
628*f0865ec9SKyle Evans };
629*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
630*f0865ec9SKyle Evans 
631*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
632*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_21
633*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
634*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_21_test_vector_our_priv_key[] = {
635*f0865ec9SKyle Evans 	0x4a, 0x6b, 0x78, 0xa9, 0x8a, 0xc9, 0x8f, 0xa8, 0xe9, 0x9a, 0x8e, 0xce, 0x08, 0xec, 0x02, 0x51, 0x12, 0x5f, 0x85, 0xc6, 0xfd, 0x0e, 0x28, 0x9b,
636*f0865ec9SKyle Evans };
637*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_21_test_vector_peer_pub_key[] = {
638*f0865ec9SKyle Evans 	0x67, 0x00, 0xa1, 0x02, 0x43, 0x77, 0x81, 0xa9, 0x58, 0x1d, 0xa2, 0xbc, 0x25, 0xce, 0xd5, 0xab, 0xf4, 0x19, 0xda, 0x91, 0xd3, 0xc8, 0x03, 0xdf, 0x71, 0x39, 0x6c, 0x9c, 0xf0, 0x8b, 0xcd, 0x91, 0x85, 0x4e, 0x3e, 0x6e, 0x42, 0xd8, 0xc6, 0x57, 0xce, 0x0f, 0x27, 0xab, 0x77, 0xa9, 0xdc, 0x4b,
639*f0865ec9SKyle Evans };
640*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_21_test_vector_our_pub_key[] = {
641*f0865ec9SKyle Evans 	0xe7, 0x69, 0xdb, 0xbc, 0xd5, 0xce, 0x2d, 0x83, 0x51, 0x4b, 0x76, 0x8d, 0x3d, 0x2d, 0x5a, 0xa0, 0xbc, 0xd8, 0xf6, 0x6a, 0xf1, 0x5f, 0x55, 0x00, 0x2f, 0xc6, 0xd0, 0xb0, 0x39, 0xe0, 0xf2, 0x8f, 0x74, 0xfb, 0xef, 0xfe, 0x9e, 0x88, 0x3d, 0x4d, 0xd7, 0x22, 0x96, 0xe4, 0xe9, 0x5c, 0xae, 0x71,
642*f0865ec9SKyle Evans };
643*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_21_test_vector_shared_secret[] = {
644*f0865ec9SKyle Evans 	0x46, 0x07, 0x2a, 0xce, 0xfd, 0x67, 0xbf, 0xf5, 0x0d, 0xe3, 0x55, 0xca, 0x7a, 0x31, 0xfa, 0x6b, 0xe5, 0x9f, 0x26, 0xe4, 0x67, 0x58, 0x72, 0x59,
645*f0865ec9SKyle Evans };
646*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_21_test_case = {
647*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 21",
648*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
649*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
650*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_21_test_vector_our_priv_key,
651*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_our_priv_key),
652*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_21_test_vector_peer_pub_key,
653*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_peer_pub_key),
654*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_21_test_vector_our_pub_key,
655*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_our_pub_key),
656*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_21_test_vector_shared_secret,
657*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_21_test_vector_shared_secret),
658*f0865ec9SKyle Evans };
659*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
660*f0865ec9SKyle Evans 
661*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
662*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_22
663*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
664*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_22_test_vector_our_priv_key[] = {
665*f0865ec9SKyle Evans 	0xc5, 0xa6, 0x49, 0x1d, 0x78, 0x84, 0x4d, 0x66, 0x17, 0xef, 0x33, 0xbe, 0x6b, 0x8b, 0xd5, 0x4d, 0xa2, 0x21, 0x45, 0x08, 0x85, 0xd5, 0x95, 0x0f,
666*f0865ec9SKyle Evans };
667*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_22_test_vector_peer_pub_key[] = {
668*f0865ec9SKyle Evans 	0xa8, 0x2f, 0x35, 0x4c, 0xf9, 0x7b, 0xee, 0x5d, 0x22, 0xdc, 0x6c, 0x07, 0x9f, 0x29, 0x02, 0xea, 0xd4, 0x4d, 0x96, 0xa8, 0xf6, 0x14, 0xf1, 0x78, 0xa6, 0x54, 0xa9, 0xaa, 0x8a, 0x1a, 0x08, 0x02, 0xf2, 0xce, 0x0e, 0xe8, 0xa0, 0xf4, 0xeb, 0xe9, 0x6d, 0xee, 0x1b, 0x37, 0x46, 0x4b, 0x1f, 0xf2,
669*f0865ec9SKyle Evans };
670*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_22_test_vector_our_pub_key[] = {
671*f0865ec9SKyle Evans 	0xdb, 0x1b, 0x24, 0xf7, 0x46, 0x6b, 0xc1, 0x54, 0xe9, 0xd7, 0xd2, 0xc3, 0xca, 0x52, 0xdc, 0xfe, 0x0b, 0xfc, 0x95, 0x63, 0xc5, 0xfd, 0xb6, 0xf3, 0x1c, 0x74, 0xfb, 0xbf, 0x5b, 0xd9, 0x99, 0x21, 0xf1, 0xa9, 0xa7, 0x44, 0xf8, 0xe1, 0xcf, 0x77, 0x0b, 0xd6, 0xa7, 0x6a, 0x77, 0x2b, 0x30, 0x03,
672*f0865ec9SKyle Evans };
673*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_22_test_vector_shared_secret[] = {
674*f0865ec9SKyle Evans 	0xec, 0x55, 0x80, 0xea, 0xbc, 0xa9, 0xf3, 0x38, 0x9d, 0x2b, 0x42, 0x7d, 0xdf, 0x6e, 0x49, 0xe2, 0x6d, 0x62, 0x9a, 0xfd, 0x03, 0xfa, 0x76, 0x6e,
675*f0865ec9SKyle Evans };
676*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_22_test_case = {
677*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 22",
678*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
679*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
680*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_22_test_vector_our_priv_key,
681*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_our_priv_key),
682*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_22_test_vector_peer_pub_key,
683*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_peer_pub_key),
684*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_22_test_vector_our_pub_key,
685*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_our_pub_key),
686*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_22_test_vector_shared_secret,
687*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_22_test_vector_shared_secret),
688*f0865ec9SKyle Evans };
689*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
690*f0865ec9SKyle Evans 
691*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
692*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_23
693*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
694*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_23_test_vector_our_priv_key[] = {
695*f0865ec9SKyle Evans 	0x2b, 0xa2, 0x70, 0x3c, 0x5e, 0x23, 0xf6, 0x46, 0x3c, 0x5b, 0x88, 0xdc, 0x37, 0x29, 0x2f, 0xab, 0xd3, 0x39, 0x9b, 0x5e, 0x1f, 0xb6, 0x7c, 0x05,
696*f0865ec9SKyle Evans };
697*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_23_test_vector_peer_pub_key[] = {
698*f0865ec9SKyle Evans 	0x3c, 0xec, 0x21, 0xb2, 0x86, 0x68, 0xa1, 0x2a, 0x2c, 0xf7, 0x8e, 0x1a, 0x8e, 0x55, 0xd0, 0xef, 0xe0, 0x65, 0x15, 0x2f, 0xff, 0xc3, 0x47, 0x18, 0x10, 0x29, 0x55, 0x7b, 0xeb, 0xa4, 0xff, 0x19, 0x92, 0xbd, 0x21, 0xc2, 0x3c, 0xb4, 0x82, 0x5f, 0x6d, 0xae, 0x70, 0xe3, 0x31, 0x8f, 0xd1, 0xca,
699*f0865ec9SKyle Evans };
700*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_23_test_vector_our_pub_key[] = {
701*f0865ec9SKyle Evans 	0x75, 0x43, 0x14, 0x89, 0x06, 0xce, 0xf9, 0xb3, 0x7a, 0x71, 0xa7, 0xc0, 0x83, 0x63, 0xcd, 0xd3, 0xbb, 0xa5, 0x01, 0x42, 0xd6, 0x52, 0x41, 0xaa, 0x8b, 0x3a, 0x69, 0x73, 0xde, 0x8d, 0xc2, 0x71, 0xe2, 0x7c, 0x1e, 0xad, 0x1e, 0x96, 0x2f, 0xda, 0xae, 0x37, 0x10, 0xc7, 0x24, 0xda, 0xac, 0x38,
702*f0865ec9SKyle Evans };
703*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_23_test_vector_shared_secret[] = {
704*f0865ec9SKyle Evans 	0x7f, 0x39, 0x29, 0xdd, 0x3c, 0xbf, 0x76, 0x73, 0xbc, 0x30, 0xd8, 0x59, 0xd9, 0x0b, 0x88, 0x03, 0x07, 0x47, 0x5f, 0x80, 0x06, 0x60, 0xea, 0x32,
705*f0865ec9SKyle Evans };
706*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_23_test_case = {
707*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 23",
708*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
709*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
710*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_23_test_vector_our_priv_key,
711*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_our_priv_key),
712*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_23_test_vector_peer_pub_key,
713*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_peer_pub_key),
714*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_23_test_vector_our_pub_key,
715*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_our_pub_key),
716*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_23_test_vector_shared_secret,
717*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_23_test_vector_shared_secret),
718*f0865ec9SKyle Evans };
719*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
720*f0865ec9SKyle Evans 
721*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP192R1
722*f0865ec9SKyle Evans #define ECCCDH_SECP192R1_SELF_TEST_24
723*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP192R1 ***/
724*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_24_test_vector_our_priv_key[] = {
725*f0865ec9SKyle Evans 	0x83, 0x61, 0x18, 0xc6, 0x24, 0x8f, 0x88, 0x2e, 0x91, 0x47, 0x97, 0x6f, 0x76, 0x48, 0x26, 0xc1, 0xa2, 0x87, 0x55, 0xa6, 0x10, 0x29, 0x77, 0xd5,
726*f0865ec9SKyle Evans };
727*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_24_test_vector_peer_pub_key[] = {
728*f0865ec9SKyle Evans 	0x70, 0x82, 0x64, 0x47, 0x15, 0xb8, 0xb7, 0x31, 0xf8, 0x22, 0x8b, 0x51, 0x18, 0xe7, 0x27, 0x0d, 0x34, 0xd1, 0x81, 0xf3, 0x61, 0xa2, 0x21, 0xfc, 0x46, 0x46, 0x49, 0xd6, 0xc8, 0x8c, 0xa8, 0x96, 0x14, 0x48, 0x8a, 0x1c, 0xc7, 0xb8, 0x44, 0x2b, 0xb4, 0x2f, 0x9f, 0xb3, 0x02, 0x0a, 0x3d, 0x76,
729*f0865ec9SKyle Evans };
730*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_24_test_vector_our_pub_key[] = {
731*f0865ec9SKyle Evans 	0xfc, 0xd3, 0x45, 0xa9, 0x76, 0xc7, 0x20, 0xca, 0xaa, 0x97, 0xde, 0x66, 0x97, 0x22, 0x68, 0x25, 0x61, 0x5e, 0x12, 0x87, 0xa9, 0xef, 0xf6, 0x7e, 0x58, 0xea, 0x42, 0xed, 0xbe, 0xea, 0xfc, 0xa9, 0xff, 0x44, 0xcf, 0xd7, 0xf2, 0x9a, 0xbd, 0x2c, 0xbd, 0xe7, 0x62, 0x6d, 0x79, 0xe4, 0x22, 0xc9,
732*f0865ec9SKyle Evans };
733*f0865ec9SKyle Evans static const u8 ecccdh_SECP192R1_24_test_vector_shared_secret[] = {
734*f0865ec9SKyle Evans 	0x72, 0xe8, 0x8f, 0x3e, 0xa6, 0x7d, 0x46, 0xd4, 0x6d, 0xbf, 0x83, 0x92, 0x6e, 0x7e, 0x2a, 0x6b, 0x85, 0xb5, 0x45, 0x36, 0x74, 0x1e, 0x6d, 0x2c,
735*f0865ec9SKyle Evans };
736*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP192R1_24_test_case = {
737*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP192R1 24",
738*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
739*f0865ec9SKyle Evans 	.ec_str_p = &secp192r1_str_params,
740*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP192R1_24_test_vector_our_priv_key,
741*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_our_priv_key),
742*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP192R1_24_test_vector_peer_pub_key,
743*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_peer_pub_key),
744*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP192R1_24_test_vector_our_pub_key,
745*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_our_pub_key),
746*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP192R1_24_test_vector_shared_secret,
747*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_24_test_vector_shared_secret),
748*f0865ec9SKyle Evans };
749*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP192R1 */
750*f0865ec9SKyle Evans 
751*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
752*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_0
753*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
754*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_0_test_vector_our_priv_key[] = {
755*f0865ec9SKyle Evans 	0x83, 0x46, 0xa6, 0x0f, 0xc6, 0xf2, 0x93, 0xca, 0x5a, 0x0d, 0x2a, 0xf6, 0x8b, 0xa7, 0x1d, 0x1d, 0xd3, 0x89, 0xe5, 0xe4, 0x08, 0x37, 0x94, 0x2d, 0xf3, 0xe4, 0x3c, 0xbd,
756*f0865ec9SKyle Evans };
757*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_0_test_vector_peer_pub_key[] = {
758*f0865ec9SKyle Evans 	0xaf, 0x33, 0xcd, 0x06, 0x29, 0xbc, 0x7e, 0x99, 0x63, 0x20, 0xa3, 0xf4, 0x03, 0x68, 0xf7, 0x4d, 0xe8, 0x70, 0x4f, 0xa3, 0x7b, 0x8f, 0xab, 0x69, 0xab, 0xaa, 0xe2, 0x80, 0x88, 0x20, 0x92, 0xcc, 0xbb, 0xa7, 0x93, 0x0f, 0x41, 0x9a, 0x8a, 0x4f, 0x9b, 0xb1, 0x69, 0x78, 0xbb, 0xc3, 0x83, 0x87, 0x29, 0x99, 0x25, 0x59, 0xa6, 0xf2, 0xe2, 0xd7,
759*f0865ec9SKyle Evans };
760*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_0_test_vector_our_pub_key[] = {
761*f0865ec9SKyle Evans 	0x8d, 0xe2, 0xe2, 0x6a, 0xdf, 0x72, 0xc5, 0x82, 0xd6, 0x56, 0x8e, 0xf6, 0x38, 0xc4, 0xfd, 0x59, 0xb1, 0x8d, 0xa1, 0x71, 0xbd, 0xf5, 0x01, 0xf1, 0xd9, 0x29, 0xe0, 0x48, 0x4a, 0x68, 0xa1, 0xc2, 0xb0, 0xfb, 0x22, 0x93, 0x0d, 0x12, 0x05, 0x55, 0xc1, 0xec, 0xe5, 0x0e, 0xa9, 0x8d, 0xea, 0x84, 0x07, 0xf7, 0x1b, 0xe3, 0x6e, 0xfa, 0xc0, 0xde,
762*f0865ec9SKyle Evans };
763*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_0_test_vector_shared_secret[] = {
764*f0865ec9SKyle Evans 	0x7d, 0x96, 0xf9, 0xa3, 0xbd, 0x3c, 0x05, 0xcf, 0x5c, 0xc3, 0x7f, 0xeb, 0x8b, 0x9d, 0x52, 0x09, 0xd5, 0xc2, 0x59, 0x74, 0x64, 0xde, 0xc3, 0xe9, 0x98, 0x37, 0x43, 0xe8,
765*f0865ec9SKyle Evans };
766*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_0_test_case = {
767*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 0",
768*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
769*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
770*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_0_test_vector_our_priv_key,
771*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_our_priv_key),
772*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_0_test_vector_peer_pub_key,
773*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_peer_pub_key),
774*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_0_test_vector_our_pub_key,
775*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_our_pub_key),
776*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_0_test_vector_shared_secret,
777*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_0_test_vector_shared_secret),
778*f0865ec9SKyle Evans };
779*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
780*f0865ec9SKyle Evans 
781*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
782*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_1
783*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
784*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_1_test_vector_our_priv_key[] = {
785*f0865ec9SKyle Evans 	0x04, 0x3c, 0xb2, 0x16, 0xf4, 0xb7, 0x2c, 0xdf, 0x76, 0x29, 0xd6, 0x37, 0x20, 0xa5, 0x4a, 0xee, 0x0c, 0x99, 0xeb, 0x32, 0xd7, 0x44, 0x77, 0xda, 0xc0, 0xc2, 0xf7, 0x3d,
786*f0865ec9SKyle Evans };
787*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_1_test_vector_peer_pub_key[] = {
788*f0865ec9SKyle Evans 	0x13, 0xbf, 0xcd, 0x4f, 0x8e, 0x94, 0x42, 0x39, 0x3c, 0xab, 0x8f, 0xb4, 0x6b, 0x9f, 0x05, 0x66, 0xc2, 0x26, 0xb2, 0x2b, 0x37, 0x07, 0x69, 0x76, 0xf0, 0x61, 0x7a, 0x46, 0xee, 0xb2, 0x42, 0x75, 0x29, 0xb2, 0x88, 0xc6, 0x3c, 0x2f, 0x89, 0x63, 0xc1, 0xe4, 0x73, 0xdf, 0x2f, 0xca, 0x6c, 0xaa, 0x90, 0xd5, 0x2e, 0x2f, 0x8d, 0xb5, 0x6d, 0xd4,
789*f0865ec9SKyle Evans };
790*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_1_test_vector_our_pub_key[] = {
791*f0865ec9SKyle Evans 	0x2f, 0x90, 0xf5, 0xc8, 0xea, 0xc9, 0xc7, 0xde, 0xcd, 0xbb, 0x97, 0xb6, 0xc2, 0xf7, 0x15, 0xab, 0x72, 0x5e, 0x4f, 0xe4, 0x0f, 0xe6, 0xd7, 0x46, 0xef, 0xbf, 0x4e, 0x1b, 0x66, 0x89, 0x73, 0x51, 0x45, 0x4f, 0x92, 0x7a, 0x30, 0x9b, 0x26, 0x9c, 0x5a, 0x6d, 0x31, 0x33, 0x8b, 0xe4, 0xc1, 0x9a, 0x5a, 0xcf, 0xc3, 0x2c, 0xf6, 0x56, 0xf4, 0x5c,
792*f0865ec9SKyle Evans };
793*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_1_test_vector_shared_secret[] = {
794*f0865ec9SKyle Evans 	0xee, 0x93, 0xce, 0x06, 0xb8, 0x9f, 0xf7, 0x20, 0x09, 0xe8, 0x58, 0xc6, 0x8e, 0xb7, 0x08, 0xe7, 0xbc, 0x79, 0xee, 0x03, 0x00, 0xf7, 0x3b, 0xed, 0x69, 0xbb, 0xca, 0x09,
795*f0865ec9SKyle Evans };
796*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_1_test_case = {
797*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 1",
798*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
799*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
800*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_1_test_vector_our_priv_key,
801*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_our_priv_key),
802*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_1_test_vector_peer_pub_key,
803*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_peer_pub_key),
804*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_1_test_vector_our_pub_key,
805*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_our_pub_key),
806*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_1_test_vector_shared_secret,
807*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_1_test_vector_shared_secret),
808*f0865ec9SKyle Evans };
809*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
810*f0865ec9SKyle Evans 
811*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
812*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_2
813*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
814*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_2_test_vector_our_priv_key[] = {
815*f0865ec9SKyle Evans 	0x5a, 0xd0, 0xdd, 0x6d, 0xba, 0xbb, 0x4f, 0x3c, 0x2e, 0xa5, 0xfe, 0x32, 0xe5, 0x61, 0xb2, 0xca, 0x55, 0x08, 0x14, 0x86, 0xdf, 0x2c, 0x7c, 0x15, 0xc9, 0x62, 0x2b, 0x08,
816*f0865ec9SKyle Evans };
817*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_2_test_vector_peer_pub_key[] = {
818*f0865ec9SKyle Evans 	0x75, 0x6d, 0xd8, 0x06, 0xb9, 0xd9, 0xc3, 0x4d, 0x89, 0x96, 0x91, 0xec, 0xb4, 0x5b, 0x77, 0x1a, 0xf4, 0x68, 0xec, 0x00, 0x44, 0x86, 0xa0, 0xfd, 0xd2, 0x83, 0x41, 0x1e, 0x4d, 0x02, 0xc2, 0xca, 0x61, 0x7b, 0xb2, 0xc5, 0xd9, 0x61, 0x3f, 0x25, 0xdd, 0x72, 0x41, 0x3d, 0x22, 0x9f, 0xd2, 0x90, 0x15, 0x13, 0xaa, 0x29, 0x50, 0x4e, 0xee, 0xfb,
819*f0865ec9SKyle Evans };
820*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_2_test_vector_our_pub_key[] = {
821*f0865ec9SKyle Evans 	0x00, 0x5b, 0xca, 0x45, 0xd7, 0x93, 0xe7, 0xfe, 0x99, 0xa8, 0x43, 0x70, 0x4e, 0xd8, 0x38, 0x31, 0x5a, 0xb1, 0x4a, 0x5f, 0x62, 0x77, 0x50, 0x7e, 0x9b, 0xc3, 0x75, 0x31, 0x43, 0xe9, 0xd4, 0x21, 0xe1, 0x48, 0x6a, 0xe5, 0x89, 0x3b, 0xfd, 0x23, 0xc2, 0x10, 0xe5, 0xc1, 0x40, 0xd7, 0xc6, 0xb1, 0xad, 0xa5, 0x9d, 0x84, 0x2c, 0x9a, 0x98, 0xde,
822*f0865ec9SKyle Evans };
823*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_2_test_vector_shared_secret[] = {
824*f0865ec9SKyle Evans 	0x3f, 0xcc, 0x01, 0xe3, 0x4d, 0x44, 0x49, 0xda, 0x2a, 0x97, 0x4b, 0x23, 0xfc, 0x36, 0xf9, 0x56, 0x67, 0x54, 0x25, 0x9d, 0x39, 0x14, 0x97, 0x90, 0xcf, 0xa1, 0xeb, 0xd3,
825*f0865ec9SKyle Evans };
826*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_2_test_case = {
827*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 2",
828*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
829*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
830*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_2_test_vector_our_priv_key,
831*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_our_priv_key),
832*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_2_test_vector_peer_pub_key,
833*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_peer_pub_key),
834*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_2_test_vector_our_pub_key,
835*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_our_pub_key),
836*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_2_test_vector_shared_secret,
837*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_2_test_vector_shared_secret),
838*f0865ec9SKyle Evans };
839*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
840*f0865ec9SKyle Evans 
841*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
842*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_3
843*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
844*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_3_test_vector_our_priv_key[] = {
845*f0865ec9SKyle Evans 	0x0a, 0xa6, 0xff, 0x55, 0xa5, 0xd8, 0x20, 0xef, 0xcb, 0x4e, 0x7d, 0x10, 0xb8, 0x45, 0xea, 0x3c, 0x9f, 0x9b, 0xc5, 0xdf, 0xf8, 0x61, 0x06, 0xdb, 0x85, 0x31, 0x8e, 0x22,
846*f0865ec9SKyle Evans };
847*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_3_test_vector_peer_pub_key[] = {
848*f0865ec9SKyle Evans 	0x0f, 0x53, 0x7b, 0xf1, 0xc1, 0x12, 0x2c, 0x55, 0x65, 0x6d, 0x25, 0xe8, 0xaa, 0x84, 0x17, 0xe0, 0xb4, 0x4b, 0x15, 0x26, 0xae, 0x05, 0x23, 0x14, 0x4f, 0x99, 0x21, 0xc4, 0xf7, 0x9b, 0x26, 0xd3, 0x0e, 0x49, 0x1a, 0x77, 0x36, 0x96, 0xcc, 0x2c, 0x79, 0xb4, 0xf0, 0x59, 0x6b, 0xc5, 0xb9, 0xee, 0xba, 0xf3, 0x94, 0xd1, 0x62, 0xfb, 0x86, 0x84,
849*f0865ec9SKyle Evans };
850*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_3_test_vector_our_pub_key[] = {
851*f0865ec9SKyle Evans 	0x2f, 0x96, 0x75, 0x41, 0x31, 0xe0, 0x96, 0x81, 0x98, 0xaa, 0x78, 0xfb, 0xe8, 0xc2, 0x01, 0xdc, 0x5f, 0x35, 0x81, 0xc7, 0x92, 0xde, 0x48, 0x73, 0x40, 0xd3, 0x24, 0x48, 0x61, 0xe8, 0xa5, 0xcd, 0x79, 0x61, 0x52, 0x03, 0xb6, 0xd8, 0x9e, 0x94, 0x96, 0xf9, 0xe2, 0x36, 0xfe, 0x3b, 0x6b, 0xe8, 0x73, 0x1e, 0x74, 0x3d, 0x61, 0x55, 0x19, 0xc6,
852*f0865ec9SKyle Evans };
853*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_3_test_vector_shared_secret[] = {
854*f0865ec9SKyle Evans 	0x49, 0x12, 0x96, 0x28, 0xb2, 0x3a, 0xfc, 0xef, 0x48, 0x13, 0x9a, 0x3f, 0x6f, 0x59, 0xff, 0x5e, 0x98, 0x11, 0xaa, 0x74, 0x6a, 0xa4, 0xff, 0x33, 0xc2, 0x4b, 0xb9, 0x40,
855*f0865ec9SKyle Evans };
856*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_3_test_case = {
857*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 3",
858*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
859*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
860*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_3_test_vector_our_priv_key,
861*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_our_priv_key),
862*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_3_test_vector_peer_pub_key,
863*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_peer_pub_key),
864*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_3_test_vector_our_pub_key,
865*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_our_pub_key),
866*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_3_test_vector_shared_secret,
867*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_3_test_vector_shared_secret),
868*f0865ec9SKyle Evans };
869*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
870*f0865ec9SKyle Evans 
871*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
872*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_4
873*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
874*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_4_test_vector_our_priv_key[] = {
875*f0865ec9SKyle Evans 	0xef, 0xe6, 0xe6, 0xe2, 0x5a, 0xff, 0xaf, 0x54, 0xc9, 0x8d, 0x00, 0x2a, 0xbb, 0xc6, 0x32, 0x8d, 0xa1, 0x59, 0x40, 0x5a, 0x1b, 0x75, 0x2e, 0x32, 0xdc, 0x23, 0x95, 0x0a,
876*f0865ec9SKyle Evans };
877*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_4_test_vector_peer_pub_key[] = {
878*f0865ec9SKyle Evans 	0x2b, 0x36, 0x31, 0xd2, 0xb0, 0x61, 0x79, 0xb3, 0x17, 0x4a, 0x10, 0x0f, 0x7f, 0x57, 0x13, 0x1e, 0xee, 0xa8, 0x94, 0x7b, 0xe0, 0x78, 0x6c, 0x3d, 0xc6, 0x4b, 0x22, 0x39, 0x83, 0xde, 0x29, 0xae, 0x3d, 0xad, 0x31, 0xad, 0xc0, 0x23, 0x6c, 0x6d, 0xe7, 0xf1, 0x45, 0x61, 0xca, 0x2e, 0xa0, 0x83, 0xc5, 0x27, 0x0c, 0x78, 0xa2, 0xe6, 0xcb, 0xc0,
879*f0865ec9SKyle Evans };
880*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_4_test_vector_our_pub_key[] = {
881*f0865ec9SKyle Evans 	0x35, 0x5e, 0x96, 0x29, 0x20, 0xbd, 0xe0, 0x43, 0x69, 0x5f, 0x6b, 0xff, 0xb4, 0xb3, 0x55, 0xc6, 0x3d, 0xa6, 0xf5, 0xde, 0x66, 0x5e, 0xd4, 0x6f, 0x2e, 0xc8, 0x17, 0xe2, 0x74, 0x8e, 0x09, 0x53, 0x68, 0xf6, 0x2e, 0x1d, 0x36, 0x4e, 0xdd, 0x46, 0x17, 0x19, 0x79, 0x3b, 0x40, 0x4a, 0xdb, 0xda, 0xac, 0xbc, 0xad, 0xd8, 0x89, 0x22, 0xff, 0x37,
882*f0865ec9SKyle Evans };
883*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_4_test_vector_shared_secret[] = {
884*f0865ec9SKyle Evans 	0xfc, 0xdc, 0x69, 0xa4, 0x05, 0x01, 0xd3, 0x08, 0xa6, 0x83, 0x96, 0x53, 0xa8, 0xf0, 0x43, 0x09, 0xec, 0x00, 0x23, 0x39, 0x49, 0x52, 0x29, 0x02, 0xff, 0xa5, 0xea, 0xc6,
885*f0865ec9SKyle Evans };
886*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_4_test_case = {
887*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 4",
888*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
889*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
890*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_4_test_vector_our_priv_key,
891*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_our_priv_key),
892*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_4_test_vector_peer_pub_key,
893*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_peer_pub_key),
894*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_4_test_vector_our_pub_key,
895*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_our_pub_key),
896*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_4_test_vector_shared_secret,
897*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_4_test_vector_shared_secret),
898*f0865ec9SKyle Evans };
899*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
900*f0865ec9SKyle Evans 
901*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
902*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_5
903*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
904*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_5_test_vector_our_priv_key[] = {
905*f0865ec9SKyle Evans 	0x61, 0xcb, 0x29, 0x32, 0x52, 0x40, 0x01, 0xe5, 0xe9, 0xee, 0xed, 0x6d, 0xf7, 0xd9, 0xc8, 0x93, 0x5e, 0xe3, 0x32, 0x20, 0x29, 0xed, 0xd7, 0xaa, 0x8a, 0xcb, 0xfd, 0x51,
906*f0865ec9SKyle Evans };
907*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_5_test_vector_peer_pub_key[] = {
908*f0865ec9SKyle Evans 	0x45, 0x11, 0x40, 0x3d, 0xe2, 0x90, 0x59, 0xf6, 0x9a, 0x47, 0x5c, 0x5a, 0x6a, 0x5f, 0x6c, 0xab, 0xed, 0x5d, 0x9f, 0x01, 0x44, 0x36, 0xa8, 0xcb, 0x70, 0xa0, 0x23, 0x38, 0x7d, 0x2d, 0x1b, 0x62, 0xaa, 0x04, 0x6d, 0xf9, 0x34, 0x0f, 0x9c, 0x37, 0xa0, 0x87, 0xa0, 0x6b, 0x32, 0xcf, 0x7f, 0x08, 0xa2, 0x23, 0xf9, 0x92, 0x81, 0x2a, 0x82, 0x8b,
909*f0865ec9SKyle Evans };
910*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_5_test_vector_our_pub_key[] = {
911*f0865ec9SKyle Evans 	0xd5, 0x0e, 0x4a, 0xda, 0xbf, 0xd9, 0x89, 0xd7, 0xdb, 0xc7, 0xcf, 0x40, 0x52, 0x54, 0x6c, 0xc7, 0xc4, 0x47, 0xa9, 0x76, 0x30, 0x43, 0x69, 0x97, 0xad, 0x4b, 0x95, 0x36, 0x5b, 0xea, 0x50, 0x34, 0x73, 0xc5, 0xea, 0xef, 0x95, 0x52, 0xd4, 0x2c, 0x40, 0xb1, 0xf2, 0xf7, 0xca, 0x29, 0x27, 0x33, 0xb2, 0x55, 0xb9, 0xbb, 0xe1, 0xb1, 0x23, 0x37,
912*f0865ec9SKyle Evans };
913*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_5_test_vector_shared_secret[] = {
914*f0865ec9SKyle Evans 	0x82, 0x7e, 0x90, 0x25, 0xcb, 0x62, 0xe0, 0xe8, 0x37, 0xc5, 0x96, 0x06, 0x3f, 0x3b, 0x9b, 0x5a, 0x0f, 0x7a, 0xfd, 0x8d, 0x87, 0x83, 0x20, 0x00, 0x86, 0xd6, 0x1e, 0xc1,
915*f0865ec9SKyle Evans };
916*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_5_test_case = {
917*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 5",
918*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
919*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
920*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_5_test_vector_our_priv_key,
921*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_our_priv_key),
922*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_5_test_vector_peer_pub_key,
923*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_peer_pub_key),
924*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_5_test_vector_our_pub_key,
925*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_our_pub_key),
926*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_5_test_vector_shared_secret,
927*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_5_test_vector_shared_secret),
928*f0865ec9SKyle Evans };
929*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
930*f0865ec9SKyle Evans 
931*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
932*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_6
933*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
934*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_6_test_vector_our_priv_key[] = {
935*f0865ec9SKyle Evans 	0x8c, 0x7a, 0xce, 0x34, 0x71, 0x71, 0xf9, 0x2d, 0xef, 0x98, 0xd8, 0x45, 0x47, 0x5f, 0xc8, 0x2e, 0x1d, 0x14, 0x96, 0xda, 0x81, 0xee, 0x58, 0xf5, 0x05, 0xb9, 0x85, 0xfa,
936*f0865ec9SKyle Evans };
937*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_6_test_vector_peer_pub_key[] = {
938*f0865ec9SKyle Evans 	0x31, 0x4a, 0x0b, 0x26, 0xdd, 0x31, 0xc2, 0x48, 0x84, 0x5d, 0x7c, 0xc1, 0x7b, 0x61, 0xca, 0xd4, 0x60, 0x82, 0x59, 0xbe, 0xd8, 0x5a, 0x58, 0xd1, 0xf1, 0xff, 0xd3, 0x78, 0x66, 0xe4, 0xb3, 0x50, 0x35, 0x2e, 0x11, 0x9e, 0xec, 0xad, 0xa3, 0x82, 0x90, 0x7f, 0x36, 0x19, 0xfd, 0x74, 0x8e, 0xa7, 0x3a, 0xe4, 0x89, 0x9d, 0xfd, 0x49, 0x63, 0x02,
939*f0865ec9SKyle Evans };
940*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_6_test_vector_our_pub_key[] = {
941*f0865ec9SKyle Evans 	0xb1, 0xa8, 0xdc, 0xac, 0x89, 0xac, 0xa2, 0x79, 0x93, 0x20, 0xb4, 0x51, 0xdf, 0x1c, 0x7f, 0xf4, 0xd9, 0x75, 0x67, 0xab, 0xb6, 0x81, 0x41, 0xc0, 0xd9, 0x5f, 0xc2, 0xaa, 0x35, 0x24, 0x95, 0x09, 0x02, 0xb1, 0x51, 0x0b, 0xdc, 0x98, 0x7d, 0x86, 0x0a, 0xfc, 0x27, 0xad, 0x87, 0x1c, 0xea, 0xea, 0x66, 0x93, 0x5a, 0xbd, 0x3c, 0x0a, 0x99, 0xa8,
942*f0865ec9SKyle Evans };
943*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_6_test_vector_shared_secret[] = {
944*f0865ec9SKyle Evans 	0x33, 0x5b, 0xa5, 0x12, 0x28, 0xd9, 0x4a, 0xcb, 0xed, 0x85, 0x1c, 0xa7, 0x82, 0x1c, 0x80, 0x1d, 0x5c, 0xb1, 0xc7, 0x97, 0x5d, 0x7a, 0xa9, 0x0a, 0x71, 0x59, 0xf8, 0xfa,
945*f0865ec9SKyle Evans };
946*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_6_test_case = {
947*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 6",
948*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
949*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
950*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_6_test_vector_our_priv_key,
951*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_our_priv_key),
952*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_6_test_vector_peer_pub_key,
953*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_peer_pub_key),
954*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_6_test_vector_our_pub_key,
955*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_our_pub_key),
956*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_6_test_vector_shared_secret,
957*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_6_test_vector_shared_secret),
958*f0865ec9SKyle Evans };
959*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
960*f0865ec9SKyle Evans 
961*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
962*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_7
963*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
964*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_7_test_vector_our_priv_key[] = {
965*f0865ec9SKyle Evans 	0x38, 0x2f, 0xeb, 0x9b, 0x9b, 0xa1, 0x0f, 0x18, 0x9d, 0x99, 0xe7, 0x1a, 0x89, 0xcd, 0xfe, 0x44, 0xcb, 0x55, 0x4c, 0xec, 0x13, 0xa2, 0x12, 0x84, 0x09, 0x77, 0xfb, 0x68,
966*f0865ec9SKyle Evans };
967*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_7_test_vector_peer_pub_key[] = {
968*f0865ec9SKyle Evans 	0xab, 0xe6, 0x84, 0x3b, 0xee, 0xc2, 0xfd, 0x9e, 0x5f, 0xb6, 0x47, 0x30, 0xd0, 0xbe, 0x4d, 0x16, 0x54, 0x38, 0xce, 0x92, 0x2e, 0xd7, 0x5d, 0xd8, 0x0b, 0x46, 0x03, 0xe5, 0x6a, 0xfe, 0x86, 0x73, 0xa9, 0x6c, 0x4b, 0xa9, 0x90, 0x0a, 0xd8, 0x59, 0x95, 0xe6, 0x31, 0xe4, 0x36, 0xc6, 0xcc, 0x88, 0xa2, 0xc2, 0xb4, 0x7b, 0x7c, 0x48, 0x86, 0xb8,
969*f0865ec9SKyle Evans };
970*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_7_test_vector_our_pub_key[] = {
971*f0865ec9SKyle Evans 	0xab, 0xb6, 0xf1, 0xe3, 0x77, 0x3f, 0xf8, 0xfc, 0x73, 0xae, 0xa2, 0xa0, 0xb1, 0x07, 0x80, 0x9c, 0xe7, 0x0a, 0xdc, 0xef, 0xed, 0x6e, 0x41, 0xfc, 0x5c, 0xb4, 0x30, 0x45, 0xa9, 0x63, 0x89, 0x7a, 0xe9, 0x06, 0xc1, 0x0a, 0x05, 0x5e, 0xea, 0xdb, 0x97, 0xff, 0xdd, 0x6f, 0x74, 0x8d, 0x3e, 0x56, 0x21, 0xe5, 0xff, 0xf3, 0x04, 0xe4, 0x8b, 0xa7,
972*f0865ec9SKyle Evans };
973*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_7_test_vector_shared_secret[] = {
974*f0865ec9SKyle Evans 	0x8c, 0x2e, 0x62, 0x75, 0x94, 0x20, 0x6b, 0x34, 0xf7, 0x35, 0x6d, 0x34, 0x26, 0xeb, 0x3d, 0x79, 0xf5, 0x18, 0xef, 0x84, 0x3f, 0xbe, 0x94, 0x01, 0x4c, 0xce, 0xac, 0xe3,
975*f0865ec9SKyle Evans };
976*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_7_test_case = {
977*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 7",
978*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
979*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
980*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_7_test_vector_our_priv_key,
981*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_our_priv_key),
982*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_7_test_vector_peer_pub_key,
983*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_peer_pub_key),
984*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_7_test_vector_our_pub_key,
985*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_our_pub_key),
986*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_7_test_vector_shared_secret,
987*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_7_test_vector_shared_secret),
988*f0865ec9SKyle Evans };
989*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
990*f0865ec9SKyle Evans 
991*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
992*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_8
993*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
994*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_8_test_vector_our_priv_key[] = {
995*f0865ec9SKyle Evans 	0xe0, 0xd6, 0x20, 0x35, 0x10, 0x1e, 0xf4, 0x87, 0xc4, 0x85, 0xc6, 0x0f, 0xb4, 0x50, 0x0e, 0xeb, 0xe6, 0xa3, 0x2e, 0xc6, 0x4d, 0xbe, 0x97, 0xdb, 0xe0, 0x23, 0x2c, 0x46,
996*f0865ec9SKyle Evans };
997*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_8_test_vector_peer_pub_key[] = {
998*f0865ec9SKyle Evans 	0x13, 0xcf, 0x9d, 0x6d, 0x2c, 0x9a, 0xae, 0x82, 0x74, 0xc2, 0x7d, 0x44, 0x6a, 0xfd, 0x0c, 0x88, 0x8f, 0xfd, 0xd5, 0x2a, 0xe2, 0x99, 0xa3, 0x59, 0x84, 0xd4, 0xf5, 0x27, 0xdc, 0xbe, 0xe7, 0x5b, 0x51, 0x57, 0x51, 0xf8, 0xee, 0x2a, 0xe3, 0x55, 0xe8, 0xaf, 0xd5, 0xde, 0x21, 0xc6, 0x2a, 0x93, 0x9a, 0x65, 0x07, 0xb5, 0x38, 0xcb, 0xc4, 0xaf,
999*f0865ec9SKyle Evans };
1000*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_8_test_vector_our_pub_key[] = {
1001*f0865ec9SKyle Evans 	0x88, 0x53, 0x77, 0x35, 0xe9, 0xb2, 0x3e, 0x3e, 0x0e, 0x07, 0x6f, 0x13, 0x5a, 0x82, 0xd3, 0x3f, 0x9b, 0xff, 0xb4, 0x65, 0xf3, 0xab, 0xce, 0x83, 0x22, 0xa6, 0x2a, 0x62, 0xb4, 0xc8, 0xc1, 0x23, 0x67, 0x31, 0x97, 0x87, 0x5c, 0x0b, 0xd1, 0x4e, 0xd0, 0x97, 0x60, 0x6d, 0x33, 0x0f, 0xba, 0x2b, 0x92, 0x00, 0xef, 0x65, 0xa4, 0x47, 0x64, 0xd3,
1002*f0865ec9SKyle Evans };
1003*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_8_test_vector_shared_secret[] = {
1004*f0865ec9SKyle Evans 	0x63, 0x2a, 0xbb, 0x66, 0x27, 0x28, 0xdb, 0xc9, 0x94, 0x50, 0x88, 0x73, 0xd5, 0xc5, 0x27, 0xca, 0x5e, 0xf9, 0x23, 0xc0, 0xd3, 0x1f, 0xa6, 0xc4, 0x7e, 0xf4, 0xc8, 0x25,
1005*f0865ec9SKyle Evans };
1006*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_8_test_case = {
1007*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 8",
1008*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1009*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1010*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_8_test_vector_our_priv_key,
1011*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_our_priv_key),
1012*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_8_test_vector_peer_pub_key,
1013*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_peer_pub_key),
1014*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_8_test_vector_our_pub_key,
1015*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_our_pub_key),
1016*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_8_test_vector_shared_secret,
1017*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_8_test_vector_shared_secret),
1018*f0865ec9SKyle Evans };
1019*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1020*f0865ec9SKyle Evans 
1021*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1022*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_9
1023*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1024*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_9_test_vector_our_priv_key[] = {
1025*f0865ec9SKyle Evans 	0xb9, 0x6a, 0xde, 0x5b, 0x73, 0xba, 0x72, 0xaa, 0x8b, 0x6e, 0x4d, 0x74, 0xd7, 0xbf, 0x9c, 0x58, 0xe9, 0x62, 0xff, 0x78, 0xeb, 0x54, 0x22, 0x87, 0xc7, 0xb4, 0x4b, 0xa2,
1026*f0865ec9SKyle Evans };
1027*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_9_test_vector_peer_pub_key[] = {
1028*f0865ec9SKyle Evans 	0x96, 0x5b, 0x63, 0x7c, 0x0d, 0xfb, 0xc0, 0xcf, 0x95, 0x40, 0x35, 0x68, 0x6d, 0x70, 0xf7, 0xec, 0x30, 0x92, 0x9e, 0x66, 0x4e, 0x52, 0x1d, 0xba, 0xa2, 0x28, 0x06, 0x59, 0x82, 0xa5, 0x8f, 0xf6, 0x1b, 0xc9, 0x00, 0x19, 0xbb, 0xcb, 0xb5, 0x87, 0x5d, 0x38, 0x63, 0xdb, 0x0b, 0xc2, 0xa1, 0xfa, 0x34, 0xb0, 0xad, 0x4d, 0xe1, 0xa8, 0x3f, 0x99,
1029*f0865ec9SKyle Evans };
1030*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_9_test_vector_our_pub_key[] = {
1031*f0865ec9SKyle Evans 	0x37, 0x68, 0x29, 0x26, 0xa5, 0x4f, 0x70, 0xa4, 0xc1, 0x74, 0x8f, 0x54, 0xd5, 0x0d, 0x5b, 0x00, 0x13, 0x8a, 0x05, 0x5f, 0x92, 0x4f, 0x2c, 0x65, 0xe5, 0xb0, 0xbb, 0xe4, 0x59, 0x6a, 0xfe, 0xfc, 0xdd, 0x64, 0x0d, 0x29, 0x63, 0x50, 0x15, 0xb8, 0x9b, 0xdd, 0xdd, 0x1f, 0x8c, 0x27, 0x23, 0x68, 0x6d, 0x33, 0x2e, 0x7a, 0x06, 0xca, 0x87, 0x99,
1032*f0865ec9SKyle Evans };
1033*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_9_test_vector_shared_secret[] = {
1034*f0865ec9SKyle Evans 	0x34, 0x64, 0x11, 0x41, 0xaa, 0xb0, 0x5e, 0xf5, 0x8b, 0xd3, 0x76, 0xd6, 0x09, 0x34, 0x59, 0x01, 0xfb, 0x8f, 0x63, 0x47, 0x7c, 0x6b, 0xe9, 0x09, 0x7f, 0x03, 0x7f, 0x1f,
1035*f0865ec9SKyle Evans };
1036*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_9_test_case = {
1037*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 9",
1038*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1039*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1040*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_9_test_vector_our_priv_key,
1041*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_our_priv_key),
1042*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_9_test_vector_peer_pub_key,
1043*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_peer_pub_key),
1044*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_9_test_vector_our_pub_key,
1045*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_our_pub_key),
1046*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_9_test_vector_shared_secret,
1047*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_9_test_vector_shared_secret),
1048*f0865ec9SKyle Evans };
1049*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1050*f0865ec9SKyle Evans 
1051*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1052*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_10
1053*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1054*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_10_test_vector_our_priv_key[] = {
1055*f0865ec9SKyle Evans 	0xa4, 0x0d, 0x7e, 0x12, 0x04, 0x9c, 0x71, 0xe6, 0x52, 0x2c, 0x7f, 0xf2, 0x38, 0x42, 0x24, 0x06, 0x1c, 0x3a, 0x45, 0x70, 0x58, 0xb3, 0x10, 0x55, 0x76, 0x55, 0xb8, 0x54,
1056*f0865ec9SKyle Evans };
1057*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_10_test_vector_peer_pub_key[] = {
1058*f0865ec9SKyle Evans 	0x73, 0xcc, 0x64, 0x53, 0x72, 0xca, 0x2e, 0x71, 0x63, 0x7c, 0xda, 0x94, 0x3d, 0x81, 0x48, 0xf3, 0x38, 0x2a, 0xb6, 0xdd, 0x0f, 0x2e, 0x1a, 0x49, 0xda, 0x94, 0xe1, 0x34, 0xdf, 0x5c, 0x35, 0x5c, 0x23, 0xe6, 0xe2, 0x32, 0xeb, 0xc3, 0xbe, 0xe2, 0xab, 0x18, 0x73, 0xee, 0x0d, 0x83, 0xe3, 0x38, 0x2f, 0x8e, 0x6f, 0xe6, 0x13, 0xf6, 0x34, 0x3c,
1059*f0865ec9SKyle Evans };
1060*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_10_test_vector_our_pub_key[] = {
1061*f0865ec9SKyle Evans 	0x39, 0x98, 0x01, 0x24, 0x3b, 0xfe, 0x0c, 0x2d, 0xa9, 0xb0, 0xa5, 0x3c, 0x8c, 0xa5, 0x7f, 0x2e, 0xee, 0x87, 0xaa, 0xa9, 0x4a, 0x8e, 0x4d, 0x5e, 0x02, 0x9f, 0x42, 0xca, 0xaa, 0x49, 0xe6, 0xd4, 0xb4, 0x7c, 0xee, 0x7a, 0x5c, 0x4a, 0xb7, 0x1d, 0x5a, 0x67, 0xda, 0x84, 0xe0, 0xb9, 0xb4, 0x25, 0xce, 0x3e, 0x70, 0xda, 0x68, 0xc8, 0x89, 0xe7,
1062*f0865ec9SKyle Evans };
1063*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_10_test_vector_shared_secret[] = {
1064*f0865ec9SKyle Evans 	0x4f, 0x74, 0xac, 0x85, 0x07, 0x50, 0x1a, 0x32, 0xbf, 0xc5, 0xa7, 0x8d, 0x82, 0x71, 0xc2, 0x00, 0xe8, 0x35, 0x96, 0x6e, 0x18, 0x7e, 0x8d, 0x00, 0x01, 0x1a, 0x8c, 0x75,
1065*f0865ec9SKyle Evans };
1066*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_10_test_case = {
1067*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 10",
1068*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1069*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1070*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_10_test_vector_our_priv_key,
1071*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_our_priv_key),
1072*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_10_test_vector_peer_pub_key,
1073*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_peer_pub_key),
1074*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_10_test_vector_our_pub_key,
1075*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_our_pub_key),
1076*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_10_test_vector_shared_secret,
1077*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_10_test_vector_shared_secret),
1078*f0865ec9SKyle Evans };
1079*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1080*f0865ec9SKyle Evans 
1081*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1082*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_11
1083*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1084*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_11_test_vector_our_priv_key[] = {
1085*f0865ec9SKyle Evans 	0xad, 0x25, 0x19, 0xbc, 0x72, 0x4d, 0x48, 0x4e, 0x02, 0xa6, 0x9f, 0x05, 0x14, 0x9b, 0xb0, 0x47, 0x71, 0x4b, 0xf0, 0xf5, 0x98, 0x6f, 0xac, 0x2e, 0x22, 0x2c, 0xd9, 0x46,
1086*f0865ec9SKyle Evans };
1087*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_11_test_vector_peer_pub_key[] = {
1088*f0865ec9SKyle Evans 	0x54, 0x65, 0x78, 0x21, 0x62, 0x50, 0x35, 0x4e, 0x44, 0x9e, 0x21, 0x54, 0x6d, 0xd1, 0x1c, 0xd1, 0xc5, 0x17, 0x42, 0x36, 0x73, 0x9a, 0xca, 0xd9, 0xce, 0x0f, 0x45, 0x12, 0xd2, 0xa2, 0x2f, 0xcd, 0x66, 0xd1, 0xab, 0xed, 0xc7, 0x67, 0x66, 0x83, 0x27, 0xc5, 0xcb, 0x9c, 0x59, 0x90, 0x43, 0x27, 0x62, 0x39, 0xcf, 0x3c, 0x85, 0x16, 0xaf, 0x24,
1089*f0865ec9SKyle Evans };
1090*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_11_test_vector_our_pub_key[] = {
1091*f0865ec9SKyle Evans 	0xdf, 0x9c, 0x1e, 0x0e, 0xf1, 0x5e, 0x53, 0xb9, 0xf6, 0x26, 0xe2, 0xbe, 0x1c, 0xbe, 0x89, 0x36, 0x39, 0xc0, 0x6f, 0x3e, 0x04, 0x39, 0xee, 0x95, 0xd7, 0xd4, 0xb1, 0xe3, 0x7a, 0x52, 0xa7, 0x38, 0x6a, 0xdd, 0xa2, 0x43, 0xef, 0xdf, 0x89, 0x41, 0x08, 0x5c, 0x84, 0xe3, 0x12, 0x39, 0xca, 0xb9, 0x2b, 0x80, 0x17, 0x33, 0x67, 0x48, 0x96, 0x5e,
1092*f0865ec9SKyle Evans };
1093*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_11_test_vector_shared_secret[] = {
1094*f0865ec9SKyle Evans 	0xad, 0x09, 0xc9, 0xae, 0x4d, 0x23, 0x24, 0xea, 0x81, 0xbb, 0x55, 0x5b, 0x20, 0x0d, 0x3c, 0x00, 0x3e, 0x22, 0xa6, 0x87, 0x0e, 0xe0, 0x3b, 0x52, 0xdf, 0x49, 0xe4, 0xde,
1095*f0865ec9SKyle Evans };
1096*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_11_test_case = {
1097*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 11",
1098*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1099*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1100*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_11_test_vector_our_priv_key,
1101*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_our_priv_key),
1102*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_11_test_vector_peer_pub_key,
1103*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_peer_pub_key),
1104*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_11_test_vector_our_pub_key,
1105*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_our_pub_key),
1106*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_11_test_vector_shared_secret,
1107*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_11_test_vector_shared_secret),
1108*f0865ec9SKyle Evans };
1109*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1110*f0865ec9SKyle Evans 
1111*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1112*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_12
1113*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1114*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_12_test_vector_our_priv_key[] = {
1115*f0865ec9SKyle Evans 	0x3d, 0x31, 0x2a, 0x9b, 0x9d, 0x8e, 0xd0, 0x91, 0x40, 0x90, 0x0b, 0xba, 0xc1, 0xe0, 0x95, 0x52, 0x7e, 0xbc, 0x9e, 0x3c, 0x64, 0x93, 0xbc, 0xf3, 0x66, 0x6e, 0x3a, 0x29,
1116*f0865ec9SKyle Evans };
1117*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_12_test_vector_peer_pub_key[] = {
1118*f0865ec9SKyle Evans 	0x1d, 0x46, 0xb1, 0xdc, 0x3a, 0x28, 0x12, 0x3c, 0xb5, 0x13, 0x46, 0xe6, 0x7b, 0xae, 0xc5, 0x64, 0x04, 0x86, 0x86, 0x78, 0xfa, 0xf7, 0xd0, 0xe8, 0xb2, 0xaf, 0xa2, 0x2a, 0x0e, 0xc9, 0xe6, 0x5e, 0xc9, 0x7e, 0x21, 0x83, 0x73, 0xe7, 0xfc, 0x11, 0x5c, 0x22, 0x74, 0xd5, 0xb8, 0x29, 0xa6, 0x0d, 0x93, 0xf7, 0x1e, 0x01, 0xd5, 0x81, 0x36, 0xc3,
1119*f0865ec9SKyle Evans };
1120*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_12_test_vector_our_pub_key[] = {
1121*f0865ec9SKyle Evans 	0xb4, 0xa0, 0x19, 0x8d, 0xc8, 0x81, 0x0e, 0x88, 0x44, 0x25, 0xb7, 0x50, 0x92, 0x8b, 0x0c, 0x96, 0x0c, 0x31, 0xf7, 0xa9, 0x96, 0x63, 0x40, 0x0b, 0x01, 0xa1, 0x79, 0xdf, 0x81, 0x2b, 0x60, 0x1b, 0xfc, 0x07, 0x38, 0x24, 0x2c, 0x6f, 0x86, 0xf8, 0x30, 0xf2, 0x7a, 0xcd, 0x63, 0x2c, 0xa6, 0x18, 0xa0, 0xb5, 0x28, 0x0c, 0x9d, 0x57, 0x69, 0xf7,
1122*f0865ec9SKyle Evans };
1123*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_12_test_vector_shared_secret[] = {
1124*f0865ec9SKyle Evans 	0xef, 0x02, 0x9c, 0x28, 0xc6, 0x80, 0x64, 0xb8, 0xab, 0xd2, 0x96, 0x5a, 0x38, 0xc4, 0x04, 0xfb, 0x5e, 0x94, 0x4a, 0xce, 0x57, 0xe8, 0x63, 0x8d, 0xab, 0xa9, 0xd3, 0xcd,
1125*f0865ec9SKyle Evans };
1126*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_12_test_case = {
1127*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 12",
1128*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1129*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1130*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_12_test_vector_our_priv_key,
1131*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_our_priv_key),
1132*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_12_test_vector_peer_pub_key,
1133*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_peer_pub_key),
1134*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_12_test_vector_our_pub_key,
1135*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_our_pub_key),
1136*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_12_test_vector_shared_secret,
1137*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_12_test_vector_shared_secret),
1138*f0865ec9SKyle Evans };
1139*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1140*f0865ec9SKyle Evans 
1141*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1142*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_13
1143*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1144*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_13_test_vector_our_priv_key[] = {
1145*f0865ec9SKyle Evans 	0x8c, 0xe0, 0x82, 0x2d, 0xc2, 0x4c, 0x15, 0x39, 0x95, 0x75, 0x5a, 0xc3, 0x50, 0x73, 0x7e, 0xf5, 0x06, 0x64, 0x1c, 0x7d, 0x75, 0x2b, 0x4f, 0x93, 0x00, 0xc6, 0x12, 0xed,
1146*f0865ec9SKyle Evans };
1147*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_13_test_vector_peer_pub_key[] = {
1148*f0865ec9SKyle Evans 	0x26, 0x6d, 0x03, 0x8c, 0xc7, 0xa4, 0xfe, 0x21, 0xf6, 0xc9, 0x76, 0x31, 0x8e, 0x82, 0x7b, 0x82, 0xbb, 0x5b, 0x8f, 0x74, 0x43, 0xa5, 0x52, 0x98, 0x13, 0x65, 0x06, 0xe0, 0xdf, 0x12, 0x3d, 0x98, 0xa7, 0xa2, 0x0b, 0xbd, 0xf3, 0x94, 0x3d, 0xf2, 0xe3, 0x56, 0x34, 0x22, 0xf8, 0xc0, 0xcf, 0x74, 0xd5, 0x3a, 0xaa, 0xbd, 0xd7, 0xc9, 0x73, 0xba,
1149*f0865ec9SKyle Evans };
1150*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_13_test_vector_our_pub_key[] = {
1151*f0865ec9SKyle Evans 	0x00, 0xdf, 0xc7, 0xec, 0x13, 0x76, 0x90, 0xcd, 0x6d, 0x12, 0xfd, 0xb2, 0xfd, 0x0b, 0x8c, 0x53, 0x14, 0x58, 0x21, 0x08, 0x76, 0x9c, 0x2b, 0x72, 0x2f, 0xfb, 0x39, 0x58, 0x5e, 0xef, 0x3d, 0xa4, 0xba, 0x45, 0x81, 0x27, 0x34, 0x6b, 0xb6, 0x40, 0x23, 0x86, 0x8b, 0xdd, 0xb7, 0x55, 0x8a, 0x2e, 0xcf, 0xc8, 0x13, 0x64, 0x5f, 0x4c, 0xe9, 0xfe,
1152*f0865ec9SKyle Evans };
1153*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_13_test_vector_shared_secret[] = {
1154*f0865ec9SKyle Evans 	0xf8, 0x3c, 0x16, 0x66, 0x1d, 0xfc, 0xba, 0xd0, 0x21, 0xcc, 0x3b, 0x5a, 0x5a, 0xf5, 0x1d, 0x9a, 0x18, 0xdb, 0x46, 0x53, 0x86, 0x6b, 0x3f, 0xf9, 0x07, 0x87, 0xce, 0x3e,
1155*f0865ec9SKyle Evans };
1156*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_13_test_case = {
1157*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 13",
1158*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1159*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1160*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_13_test_vector_our_priv_key,
1161*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_our_priv_key),
1162*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_13_test_vector_peer_pub_key,
1163*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_peer_pub_key),
1164*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_13_test_vector_our_pub_key,
1165*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_our_pub_key),
1166*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_13_test_vector_shared_secret,
1167*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_13_test_vector_shared_secret),
1168*f0865ec9SKyle Evans };
1169*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1170*f0865ec9SKyle Evans 
1171*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1172*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_14
1173*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1174*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_14_test_vector_our_priv_key[] = {
1175*f0865ec9SKyle Evans 	0x0f, 0xf9, 0xb4, 0x85, 0x32, 0x5a, 0xb7, 0x7f, 0x29, 0xe7, 0xbc, 0x37, 0x9f, 0xed, 0x74, 0xbf, 0xac, 0x85, 0x94, 0x82, 0xda, 0x0d, 0xee, 0x75, 0x28, 0xc1, 0x9d, 0xb2,
1176*f0865ec9SKyle Evans };
1177*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_14_test_vector_peer_pub_key[] = {
1178*f0865ec9SKyle Evans 	0xeb, 0x0a, 0x09, 0xf7, 0xa1, 0xc2, 0x36, 0xa6, 0x1f, 0x59, 0x58, 0x09, 0xec, 0x56, 0x70, 0xef, 0xd9, 0x2e, 0x45, 0x98, 0xd5, 0xe6, 0x13, 0xe0, 0x92, 0xcd, 0xfd, 0xca, 0x50, 0x78, 0x7a, 0xe2, 0xf2, 0xf1, 0x5b, 0x88, 0xbc, 0x10, 0xf7, 0xb5, 0xf0, 0xae, 0xe1, 0x41, 0x83, 0x73, 0xf1, 0x61, 0x53, 0xae, 0xbd, 0x1f, 0xba, 0x54, 0x28, 0x8d,
1179*f0865ec9SKyle Evans };
1180*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_14_test_vector_our_pub_key[] = {
1181*f0865ec9SKyle Evans 	0x7e, 0x60, 0x3e, 0x69, 0x76, 0xdb, 0x83, 0xc3, 0x60, 0x11, 0x50, 0x8f, 0xa6, 0x95, 0xd1, 0xb5, 0x15, 0x24, 0x9e, 0x2e, 0x54, 0xb4, 0x8f, 0xcb, 0xcf, 0xb9, 0x02, 0x47, 0x01, 0x79, 0xa6, 0x00, 0xce, 0x86, 0xad, 0xfc, 0xa9, 0xb1, 0xb9, 0x31, 0xfa, 0x51, 0x73, 0xd6, 0x18, 0xda, 0x09, 0xe8, 0x41, 0x80, 0x3d, 0x19, 0xb0, 0x26, 0x42, 0x86,
1182*f0865ec9SKyle Evans };
1183*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_14_test_vector_shared_secret[] = {
1184*f0865ec9SKyle Evans 	0xf5, 0x12, 0x58, 0xc6, 0x3f, 0x23, 0x2e, 0x55, 0xa6, 0x6a, 0xa2, 0x5e, 0xbd, 0x59, 0x7b, 0x20, 0x18, 0xd1, 0x05, 0x2c, 0x02, 0xee, 0xb6, 0x38, 0x66, 0x75, 0x80, 0x05,
1185*f0865ec9SKyle Evans };
1186*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_14_test_case = {
1187*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 14",
1188*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1189*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1190*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_14_test_vector_our_priv_key,
1191*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_our_priv_key),
1192*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_14_test_vector_peer_pub_key,
1193*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_peer_pub_key),
1194*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_14_test_vector_our_pub_key,
1195*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_our_pub_key),
1196*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_14_test_vector_shared_secret,
1197*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_14_test_vector_shared_secret),
1198*f0865ec9SKyle Evans };
1199*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1200*f0865ec9SKyle Evans 
1201*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1202*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_15
1203*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1204*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_15_test_vector_our_priv_key[] = {
1205*f0865ec9SKyle Evans 	0x19, 0xcf, 0x5f, 0xf6, 0x30, 0x64, 0x67, 0xf2, 0x8b, 0x9f, 0xe0, 0x67, 0x5a, 0x43, 0xc0, 0x58, 0x25, 0x52, 0xc8, 0xc1, 0x2e, 0x59, 0xce, 0x7c, 0x38, 0xf2, 0x92, 0xb1,
1206*f0865ec9SKyle Evans };
1207*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_15_test_vector_peer_pub_key[] = {
1208*f0865ec9SKyle Evans 	0x6b, 0x2f, 0x6b, 0x18, 0xa5, 0x87, 0xf5, 0x62, 0xff, 0xc6, 0x1b, 0xd9, 0xb0, 0x04, 0x73, 0x22, 0x28, 0x69, 0x86, 0xa7, 0x8f, 0x1f, 0xd1, 0x39, 0xb8, 0x4f, 0x7c, 0x24, 0x70, 0x96, 0x90, 0x8e, 0x46, 0x15, 0x26, 0x6b, 0xe5, 0x9a, 0x53, 0xcd, 0x65, 0x55, 0x15, 0x05, 0x6f, 0xf9, 0x23, 0x70, 0xa6, 0x27, 0x1a, 0x5d, 0x38, 0x23, 0xd7, 0x04,
1209*f0865ec9SKyle Evans };
1210*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_15_test_vector_our_pub_key[] = {
1211*f0865ec9SKyle Evans 	0xfc, 0x20, 0xe9, 0x06, 0xe6, 0x09, 0xc1, 0x12, 0xcf, 0xc2, 0xe0, 0xfe, 0xa6, 0x30, 0x38, 0x82, 0xc5, 0xdb, 0x94, 0xe8, 0x7e, 0x02, 0x23, 0x73, 0xab, 0x2c, 0x08, 0x2a, 0xae, 0xcd, 0xf1, 0xda, 0xa7, 0x17, 0x82, 0xbc, 0x5a, 0x26, 0xbb, 0xbd, 0x8d, 0x7e, 0x8a, 0x76, 0x49, 0x0e, 0x26, 0xab, 0xc1, 0x7d, 0xff, 0xc7, 0x74, 0xbd, 0x73, 0x41,
1212*f0865ec9SKyle Evans };
1213*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_15_test_vector_shared_secret[] = {
1214*f0865ec9SKyle Evans 	0x7f, 0xdc, 0x96, 0x9a, 0x18, 0x6f, 0xf1, 0x84, 0x29, 0xf2, 0xa2, 0x76, 0xda, 0xc4, 0x3b, 0xee, 0xa2, 0x11, 0x82, 0xd8, 0x2c, 0xe2, 0xe5, 0xa0, 0x87, 0x65, 0x52, 0xb1,
1215*f0865ec9SKyle Evans };
1216*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_15_test_case = {
1217*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 15",
1218*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1219*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1220*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_15_test_vector_our_priv_key,
1221*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_our_priv_key),
1222*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_15_test_vector_peer_pub_key,
1223*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_peer_pub_key),
1224*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_15_test_vector_our_pub_key,
1225*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_our_pub_key),
1226*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_15_test_vector_shared_secret,
1227*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_15_test_vector_shared_secret),
1228*f0865ec9SKyle Evans };
1229*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1230*f0865ec9SKyle Evans 
1231*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1232*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_16
1233*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1234*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_16_test_vector_our_priv_key[] = {
1235*f0865ec9SKyle Evans 	0x90, 0xa1, 0x53, 0x68, 0xe3, 0x53, 0x2c, 0x0b, 0x1e, 0x51, 0xe5, 0x5d, 0x13, 0x94, 0x47, 0xc2, 0xc8, 0x9b, 0xc1, 0x60, 0x71, 0x9d, 0x69, 0x72, 0x91, 0xea, 0x7c, 0x14,
1236*f0865ec9SKyle Evans };
1237*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_16_test_vector_peer_pub_key[] = {
1238*f0865ec9SKyle Evans 	0x32, 0x81, 0x01, 0xba, 0x82, 0x6a, 0xcd, 0x75, 0xff, 0x9f, 0x34, 0xd5, 0x57, 0x4c, 0xe0, 0xdb, 0xc9, 0x2f, 0x70, 0x9b, 0xad, 0x8d, 0x7a, 0x33, 0xc4, 0x79, 0x40, 0xc1, 0xdf, 0x39, 0xf1, 0xea, 0x88, 0x48, 0x8c, 0x55, 0xd5, 0x53, 0x81, 0x60, 0x87, 0x8b, 0x9c, 0xed, 0x18, 0xa8, 0x87, 0xea, 0x26, 0x1d, 0xd7, 0x12, 0xd1, 0x40, 0x24, 0xff,
1239*f0865ec9SKyle Evans };
1240*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_16_test_vector_our_pub_key[] = {
1241*f0865ec9SKyle Evans 	0xc6, 0x83, 0x7d, 0x50, 0x6e, 0x97, 0x6d, 0xa7, 0xdb, 0x3a, 0xd1, 0x26, 0x7c, 0x35, 0x9d, 0xff, 0x2e, 0xa6, 0xfb, 0x0b, 0x7f, 0x7f, 0x8e, 0x77, 0x02, 0x4c, 0x59, 0xe9, 0x67, 0xeb, 0x49, 0x1d, 0x2f, 0xc8, 0xa5, 0x30, 0xc4, 0x65, 0x25, 0xd2, 0xa8, 0xb2, 0xd7, 0xc1, 0xdf, 0x5f, 0xba, 0x1a, 0xe7, 0x40, 0xa4, 0x64, 0x9c, 0x68, 0x3e, 0xe6,
1242*f0865ec9SKyle Evans };
1243*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_16_test_vector_shared_secret[] = {
1244*f0865ec9SKyle Evans 	0x3d, 0x60, 0xab, 0x6d, 0xb2, 0xb3, 0xff, 0xe2, 0xd2, 0x9c, 0xcf, 0xf4, 0x6d, 0x05, 0x6e, 0x54, 0x23, 0x0c, 0xf3, 0x49, 0x82, 0xe2, 0x41, 0x55, 0x6e, 0xd2, 0x92, 0x0c,
1245*f0865ec9SKyle Evans };
1246*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_16_test_case = {
1247*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 16",
1248*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1249*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1250*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_16_test_vector_our_priv_key,
1251*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_our_priv_key),
1252*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_16_test_vector_peer_pub_key,
1253*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_peer_pub_key),
1254*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_16_test_vector_our_pub_key,
1255*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_our_pub_key),
1256*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_16_test_vector_shared_secret,
1257*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_16_test_vector_shared_secret),
1258*f0865ec9SKyle Evans };
1259*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1260*f0865ec9SKyle Evans 
1261*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1262*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_17
1263*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1264*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_17_test_vector_our_priv_key[] = {
1265*f0865ec9SKyle Evans 	0x8e, 0x08, 0x38, 0xe0, 0x5e, 0x17, 0x21, 0x49, 0x10, 0x67, 0xe1, 0xca, 0xbc, 0x2e, 0x80, 0x51, 0xb2, 0x90, 0xe2, 0x61, 0x6e, 0xec, 0x42, 0x7b, 0x71, 0x21, 0x89, 0x7d,
1266*f0865ec9SKyle Evans };
1267*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_17_test_vector_peer_pub_key[] = {
1268*f0865ec9SKyle Evans 	0x00, 0x81, 0xe3, 0x42, 0x70, 0x87, 0x1e, 0x2e, 0xbb, 0xd9, 0x41, 0x83, 0xf6, 0x17, 0xb4, 0xae, 0x15, 0xf0, 0x41, 0x6d, 0xd6, 0x34, 0xfe, 0x6e, 0x93, 0x4c, 0xf3, 0xc0, 0x3a, 0x1e, 0x9f, 0x38, 0xa7, 0xb9, 0x0b, 0x73, 0x17, 0xd2, 0x6b, 0x9f, 0x63, 0x11, 0x06, 0x3a, 0xb5, 0x8b, 0x26, 0x8c, 0xf4, 0x89, 0xb2, 0xe5, 0x03, 0x86, 0xd5, 0xd6,
1269*f0865ec9SKyle Evans };
1270*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_17_test_vector_our_pub_key[] = {
1271*f0865ec9SKyle Evans 	0xe9, 0x15, 0x0f, 0x77, 0x00, 0x75, 0x62, 0x60, 0x19, 0xe1, 0x8f, 0x95, 0x47, 0x3b, 0x71, 0xe6, 0x82, 0x80, 0x41, 0x79, 0x1d, 0x3f, 0x08, 0xd3, 0xfa, 0xee, 0xaa, 0x2b, 0x47, 0x5f, 0x70, 0x73, 0x5e, 0xaa, 0xe5, 0x23, 0x08, 0xa3, 0xb7, 0x63, 0xdc, 0x88, 0xef, 0xe1, 0x8a, 0xb5, 0x90, 0xeb, 0xaf, 0xa0, 0x35, 0xf6, 0xe0, 0x8b, 0x00, 0x1c,
1272*f0865ec9SKyle Evans };
1273*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_17_test_vector_shared_secret[] = {
1274*f0865ec9SKyle Evans 	0x91, 0x16, 0xd7, 0x27, 0x86, 0xf4, 0xdb, 0x5d, 0xf7, 0xa8, 0xb4, 0x30, 0x78, 0xc6, 0xab, 0x91, 0x60, 0xd4, 0x23, 0x51, 0x3d, 0x35, 0xea, 0x5e, 0x25, 0x59, 0x30, 0x6d,
1275*f0865ec9SKyle Evans };
1276*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_17_test_case = {
1277*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 17",
1278*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1279*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1280*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_17_test_vector_our_priv_key,
1281*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_our_priv_key),
1282*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_17_test_vector_peer_pub_key,
1283*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_peer_pub_key),
1284*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_17_test_vector_our_pub_key,
1285*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_our_pub_key),
1286*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_17_test_vector_shared_secret,
1287*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_17_test_vector_shared_secret),
1288*f0865ec9SKyle Evans };
1289*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1290*f0865ec9SKyle Evans 
1291*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1292*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_18
1293*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1294*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_18_test_vector_our_priv_key[] = {
1295*f0865ec9SKyle Evans 	0x38, 0x10, 0x6e, 0x93, 0xf1, 0x6a, 0x38, 0x1a, 0xdb, 0x1d, 0x72, 0xce, 0xe3, 0xda, 0x66, 0xae, 0x46, 0x2a, 0xd4, 0xbb, 0xfe, 0xa9, 0xec, 0xdf, 0x35, 0xd0, 0x81, 0x4e,
1296*f0865ec9SKyle Evans };
1297*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_18_test_vector_peer_pub_key[] = {
1298*f0865ec9SKyle Evans 	0x26, 0x23, 0x63, 0x2f, 0xdf, 0x0b, 0xd8, 0x56, 0x80, 0x5a, 0x69, 0xaa, 0x18, 0x6d, 0x41, 0x33, 0xef, 0x59, 0x04, 0xe1, 0xf6, 0x55, 0xa9, 0x72, 0xd6, 0x6c, 0xce, 0x07, 0x2c, 0xef, 0x97, 0x28, 0xdd, 0x06, 0xfb, 0x8b, 0x50, 0x15, 0x0f, 0x52, 0x9b, 0x69, 0x50, 0x76, 0xd4, 0x50, 0x79, 0x83, 0x91, 0x25, 0x85, 0xc8, 0x9b, 0xd0, 0x68, 0x2e,
1299*f0865ec9SKyle Evans };
1300*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_18_test_vector_our_pub_key[] = {
1301*f0865ec9SKyle Evans 	0x7b, 0xe6, 0xc4, 0xc9, 0x17, 0x82, 0x9a, 0xb6, 0x57, 0xdd, 0x79, 0xe8, 0x63, 0x7d, 0x7a, 0xef, 0xd2, 0xf8, 0x1f, 0x0d, 0xe7, 0x65, 0x4d, 0x95, 0x7e, 0x97, 0x65, 0x8d, 0x43, 0x0d, 0x22, 0xd9, 0xe8, 0x43, 0x83, 0x10, 0xf6, 0x1e, 0x0d, 0x43, 0xf2, 0x5f, 0xa3, 0xe3, 0x45, 0x85, 0xf4, 0x32, 0xba, 0xad, 0x27, 0xdb, 0x30, 0x21, 0xbf, 0x0d,
1302*f0865ec9SKyle Evans };
1303*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_18_test_vector_shared_secret[] = {
1304*f0865ec9SKyle Evans 	0x20, 0x7c, 0x53, 0xdc, 0xef, 0xac, 0x78, 0x9a, 0xaa, 0x02, 0x76, 0xd9, 0x20, 0x0b, 0x3a, 0x94, 0x0c, 0xe5, 0xf2, 0x29, 0x6f, 0x4c, 0xb2, 0xe8, 0x1a, 0x18, 0x5d, 0x3d,
1305*f0865ec9SKyle Evans };
1306*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_18_test_case = {
1307*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 18",
1308*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1309*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1310*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_18_test_vector_our_priv_key,
1311*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_our_priv_key),
1312*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_18_test_vector_peer_pub_key,
1313*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_peer_pub_key),
1314*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_18_test_vector_our_pub_key,
1315*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_our_pub_key),
1316*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_18_test_vector_shared_secret,
1317*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_18_test_vector_shared_secret),
1318*f0865ec9SKyle Evans };
1319*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1320*f0865ec9SKyle Evans 
1321*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1322*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_19
1323*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1324*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_19_test_vector_our_priv_key[] = {
1325*f0865ec9SKyle Evans 	0xe5, 0xd1, 0x71, 0x84, 0x31, 0xcf, 0x50, 0xf6, 0xcb, 0xd1, 0xbc, 0x80, 0x19, 0xfa, 0x16, 0x76, 0x2d, 0xfa, 0x12, 0xc9, 0x89, 0xe5, 0x99, 0x99, 0x77, 0xfb, 0x4e, 0xa2,
1326*f0865ec9SKyle Evans };
1327*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_19_test_vector_peer_pub_key[] = {
1328*f0865ec9SKyle Evans 	0x8e, 0xe4, 0xd1, 0xdc, 0xc3, 0x1d, 0xee, 0x4b, 0xf6, 0xfe, 0x21, 0xca, 0x8a, 0x58, 0x77, 0x21, 0xd9, 0x10, 0xac, 0xfb, 0x12, 0x2c, 0x16, 0xc2, 0xa7, 0x7a, 0x81, 0x52, 0x4e, 0xbf, 0x32, 0x3f, 0xff, 0x04, 0xeb, 0x47, 0x70, 0x69, 0xa0, 0xac, 0x68, 0xb3, 0x45, 0xf6, 0xb1, 0xae, 0x13, 0x4e, 0xfc, 0x31, 0x94, 0x0e, 0x51, 0x3c, 0xb9, 0x9f,
1329*f0865ec9SKyle Evans };
1330*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_19_test_vector_our_pub_key[] = {
1331*f0865ec9SKyle Evans 	0x2e, 0xa4, 0x96, 0x6e, 0x7f, 0x92, 0xed, 0x7f, 0x5c, 0xc6, 0x1f, 0xde, 0x79, 0x20, 0x45, 0xf6, 0x3b, 0x73, 0x1d, 0x6e, 0x7d, 0x0d, 0xe2, 0x57, 0x7f, 0x2d, 0x8e, 0xce, 0x1c, 0x4a, 0x7b, 0x1e, 0xde, 0x6f, 0x83, 0x91, 0x62, 0x29, 0x2d, 0xf4, 0x24, 0xbe, 0x78, 0xe8, 0x17, 0x6f, 0xb6, 0xf9, 0x42, 0xa3, 0xc0, 0x23, 0x91, 0x70, 0x0f, 0x31,
1332*f0865ec9SKyle Evans };
1333*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_19_test_vector_shared_secret[] = {
1334*f0865ec9SKyle Evans 	0x10, 0xe4, 0x67, 0xda, 0x34, 0xf4, 0x8a, 0xd7, 0x07, 0x20, 0x05, 0xbc, 0xcd, 0x6d, 0xa1, 0xb2, 0xba, 0x3f, 0x71, 0xea, 0xfa, 0x1c, 0x39, 0x38, 0x42, 0xf9, 0x1d, 0x74,
1335*f0865ec9SKyle Evans };
1336*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_19_test_case = {
1337*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 19",
1338*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1339*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1340*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_19_test_vector_our_priv_key,
1341*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_our_priv_key),
1342*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_19_test_vector_peer_pub_key,
1343*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_peer_pub_key),
1344*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_19_test_vector_our_pub_key,
1345*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_our_pub_key),
1346*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_19_test_vector_shared_secret,
1347*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_19_test_vector_shared_secret),
1348*f0865ec9SKyle Evans };
1349*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1350*f0865ec9SKyle Evans 
1351*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1352*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_20
1353*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1354*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_20_test_vector_our_priv_key[] = {
1355*f0865ec9SKyle Evans 	0x3d, 0x63, 0x56, 0x91, 0xb6, 0x2a, 0x9a, 0x92, 0x7c, 0x63, 0x39, 0x51, 0xc9, 0x36, 0x9c, 0x88, 0x62, 0xbd, 0x21, 0x19, 0xd3, 0x09, 0x70, 0xc2, 0x64, 0x47, 0x27, 0xd6,
1356*f0865ec9SKyle Evans };
1357*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_20_test_vector_peer_pub_key[] = {
1358*f0865ec9SKyle Evans 	0x97, 0xdc, 0xbe, 0x6d, 0x28, 0x33, 0x58, 0x82, 0xa6, 0xd1, 0x93, 0xcc, 0x54, 0xa1, 0x06, 0x3d, 0xd0, 0x77, 0x5d, 0xc3, 0x28, 0x56, 0x53, 0x00, 0xbb, 0x99, 0xe6, 0x91, 0xda, 0xd1, 0x1d, 0xd5, 0xec, 0xe8, 0xcf, 0xd9, 0xf9, 0x7c, 0x9a, 0x52, 0x6e, 0x4a, 0x15, 0x06, 0xe6, 0x35, 0x59, 0x69, 0xee, 0x87, 0x82, 0x6f, 0xc3, 0x8b, 0xcd, 0x24,
1359*f0865ec9SKyle Evans };
1360*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_20_test_vector_our_pub_key[] = {
1361*f0865ec9SKyle Evans 	0x43, 0x8b, 0xbb, 0x98, 0x05, 0x17, 0xaf, 0xb2, 0x0b, 0xe1, 0xd6, 0x74, 0xe3, 0xac, 0x2b, 0x31, 0xce, 0xf0, 0x7a, 0x9b, 0x23, 0xfb, 0x8f, 0x6e, 0x38, 0xe0, 0xd6, 0xc0, 0x0b, 0xe5, 0xf1, 0xc4, 0x7d, 0x58, 0xd2, 0x1b, 0x6e, 0xd2, 0x84, 0x23, 0xb3, 0x2f, 0x5a, 0x94, 0x75, 0x0d, 0xa4, 0x7e, 0xdc, 0xef, 0x33, 0xea, 0x79, 0x94, 0x2a, 0xfd,
1362*f0865ec9SKyle Evans };
1363*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_20_test_vector_shared_secret[] = {
1364*f0865ec9SKyle Evans 	0x82, 0xfd, 0x2f, 0x9c, 0x60, 0xc4, 0xf9, 0x99, 0xac, 0x00, 0xbb, 0xe6, 0x4b, 0xfc, 0x11, 0xda, 0x8f, 0xf8, 0xcd, 0xa2, 0xe4, 0x99, 0xfc, 0xed, 0x65, 0x23, 0x0b, 0xb1,
1365*f0865ec9SKyle Evans };
1366*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_20_test_case = {
1367*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 20",
1368*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1369*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1370*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_20_test_vector_our_priv_key,
1371*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_our_priv_key),
1372*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_20_test_vector_peer_pub_key,
1373*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_peer_pub_key),
1374*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_20_test_vector_our_pub_key,
1375*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_our_pub_key),
1376*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_20_test_vector_shared_secret,
1377*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_20_test_vector_shared_secret),
1378*f0865ec9SKyle Evans };
1379*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1380*f0865ec9SKyle Evans 
1381*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1382*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_21
1383*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1384*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_21_test_vector_our_priv_key[] = {
1385*f0865ec9SKyle Evans 	0xac, 0xf3, 0xc8, 0x5b, 0xbd, 0xc3, 0x79, 0xf0, 0x2f, 0x5e, 0xa3, 0x6e, 0x7f, 0x0f, 0x53, 0x09, 0x5a, 0x9e, 0x70, 0x46, 0xa2, 0x86, 0x85, 0xa8, 0x65, 0x9b, 0xf7, 0x98,
1386*f0865ec9SKyle Evans };
1387*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_21_test_vector_peer_pub_key[] = {
1388*f0865ec9SKyle Evans 	0xce, 0x91, 0x26, 0xdd, 0x53, 0x97, 0x2d, 0xea, 0x1d, 0xe1, 0xd1, 0x1e, 0xfe, 0xf9, 0x00, 0xde, 0x34, 0xb6, 0x61, 0x85, 0x9c, 0x46, 0x48, 0xc5, 0xc0, 0xe5, 0x34, 0xf7, 0xe1, 0x13, 0xb6, 0xf2, 0xc1, 0x65, 0x9d, 0x07, 0xf2, 0x71, 0x6e, 0x64, 0xa8, 0x3c, 0x18, 0xbb, 0xce, 0x34, 0x4d, 0xd2, 0x12, 0x1f, 0xe8, 0x51, 0x68, 0xea, 0xe0, 0x85,
1389*f0865ec9SKyle Evans };
1390*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_21_test_vector_our_pub_key[] = {
1391*f0865ec9SKyle Evans 	0xff, 0x75, 0x11, 0x21, 0x5c, 0x71, 0xd7, 0x96, 0xbd, 0x64, 0x6e, 0x84, 0x74, 0xbe, 0x44, 0x16, 0xb9, 0x16, 0x84, 0xce, 0x0d, 0x26, 0x9e, 0xf6, 0xf4, 0x22, 0x01, 0x3b, 0xb7, 0xbf, 0x5e, 0x79, 0xb5, 0xa9, 0x39, 0x3b, 0xb9, 0xea, 0x42, 0xc0, 0xbd, 0xb2, 0xd3, 0xc2, 0xdc, 0x80, 0x6e, 0x1a, 0x73, 0x06, 0xaa, 0x58, 0xe4, 0xfd, 0xbe, 0xa5,
1392*f0865ec9SKyle Evans };
1393*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_21_test_vector_shared_secret[] = {
1394*f0865ec9SKyle Evans 	0x53, 0x0f, 0x7e, 0x7f, 0xc9, 0x32, 0x61, 0x3b, 0x29, 0xc9, 0x81, 0xf2, 0x61, 0xcb, 0x03, 0x6c, 0xba, 0x3f, 0x1d, 0xf3, 0x86, 0x4e, 0x0e, 0x1c, 0xba, 0x26, 0x85, 0xa2,
1395*f0865ec9SKyle Evans };
1396*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_21_test_case = {
1397*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 21",
1398*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1399*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1400*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_21_test_vector_our_priv_key,
1401*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_our_priv_key),
1402*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_21_test_vector_peer_pub_key,
1403*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_peer_pub_key),
1404*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_21_test_vector_our_pub_key,
1405*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_our_pub_key),
1406*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_21_test_vector_shared_secret,
1407*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_21_test_vector_shared_secret),
1408*f0865ec9SKyle Evans };
1409*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1410*f0865ec9SKyle Evans 
1411*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1412*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_22
1413*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1414*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_22_test_vector_our_priv_key[] = {
1415*f0865ec9SKyle Evans 	0xcf, 0xfd, 0x62, 0xcb, 0x00, 0xa0, 0xe3, 0x16, 0x3f, 0xbf, 0x2c, 0x39, 0x7f, 0xad, 0xc9, 0x61, 0x82, 0x10, 0xf8, 0x6b, 0x4f, 0x54, 0xa6, 0x75, 0x28, 0x73, 0x05, 0xf0,
1416*f0865ec9SKyle Evans };
1417*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_22_test_vector_peer_pub_key[] = {
1418*f0865ec9SKyle Evans 	0x84, 0x41, 0x99, 0x67, 0xd6, 0xcf, 0xad, 0x41, 0xe7, 0x5a, 0x02, 0xb6, 0xda, 0x60, 0x5a, 0x97, 0x94, 0x9a, 0x18, 0x3a, 0x97, 0xc3, 0x06, 0xc4, 0xb4, 0x6e, 0x66, 0xa5, 0x5c, 0xc9, 0xb2, 0x59, 0x71, 0x8b, 0x1b, 0xc8, 0xb1, 0x44, 0xfd, 0xe6, 0x33, 0xa8, 0x94, 0x61, 0x6f, 0xfd, 0x59, 0xa3, 0xa6, 0xd5, 0xd8, 0xe9, 0x42, 0xc7, 0xcb, 0xb7,
1419*f0865ec9SKyle Evans };
1420*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_22_test_vector_our_pub_key[] = {
1421*f0865ec9SKyle Evans 	0x04, 0xbf, 0x4d, 0x94, 0x8f, 0x44, 0x30, 0xd1, 0x8b, 0x4e, 0xd6, 0xc9, 0x6d, 0xba, 0xf9, 0x81, 0xfa, 0x11, 0xa4, 0x03, 0xed, 0x16, 0x88, 0x7f, 0x06, 0x75, 0x49, 0x81, 0x7c, 0x13, 0x26, 0xa9, 0xce, 0xf5, 0x1f, 0x79, 0xd4, 0xe7, 0x83, 0x03, 0xd6, 0x06, 0x4b, 0x45, 0x9f, 0x61, 0x25, 0x84, 0xac, 0x2f, 0xdf, 0x59, 0x3d, 0x7d, 0x5d, 0x84,
1422*f0865ec9SKyle Evans };
1423*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_22_test_vector_shared_secret[] = {
1424*f0865ec9SKyle Evans 	0x49, 0xf6, 0xfd, 0x01, 0x39, 0x24, 0x8e, 0xf4, 0xdf, 0x2d, 0xb0, 0x5d, 0x13, 0x19, 0xbd, 0x5b, 0x14, 0x89, 0xe2, 0x49, 0x82, 0x7a, 0x45, 0xa8, 0xa5, 0xf1, 0x24, 0x27,
1425*f0865ec9SKyle Evans };
1426*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_22_test_case = {
1427*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 22",
1428*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1429*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1430*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_22_test_vector_our_priv_key,
1431*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_our_priv_key),
1432*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_22_test_vector_peer_pub_key,
1433*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_peer_pub_key),
1434*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_22_test_vector_our_pub_key,
1435*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_our_pub_key),
1436*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_22_test_vector_shared_secret,
1437*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_22_test_vector_shared_secret),
1438*f0865ec9SKyle Evans };
1439*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1440*f0865ec9SKyle Evans 
1441*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1442*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_23
1443*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1444*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_23_test_vector_our_priv_key[] = {
1445*f0865ec9SKyle Evans 	0x85, 0xf9, 0x03, 0xe4, 0x39, 0x43, 0xd1, 0x3c, 0x68, 0x93, 0x2e, 0x71, 0x0e, 0x80, 0xde, 0x52, 0xcb, 0xc0, 0xb8, 0xf1, 0xa1, 0x41, 0x8e, 0xa4, 0xda, 0x07, 0x92, 0x99,
1446*f0865ec9SKyle Evans };
1447*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_23_test_vector_peer_pub_key[] = {
1448*f0865ec9SKyle Evans 	0x7c, 0x9c, 0xac, 0x35, 0x76, 0x80, 0x63, 0xc2, 0x82, 0x7f, 0x60, 0xa7, 0xf5, 0x13, 0x88, 0xf2, 0xa8, 0xf4, 0xb7, 0xf8, 0xcd, 0x73, 0x6b, 0xd6, 0xbc, 0x33, 0x74, 0x77, 0x29, 0xee, 0x6b, 0x84, 0x9c, 0x60, 0x25, 0xd5, 0x77, 0xdb, 0xcc, 0x55, 0xfb, 0xd1, 0x70, 0x18, 0xf4, 0xed, 0xbc, 0x2e, 0xf1, 0x05, 0xb0, 0x04, 0xd6, 0x25, 0x7b, 0xcd,
1449*f0865ec9SKyle Evans };
1450*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_23_test_vector_our_pub_key[] = {
1451*f0865ec9SKyle Evans 	0x97, 0x0a, 0x4a, 0x7e, 0x01, 0xd4, 0x18, 0x84, 0x97, 0xce, 0xb4, 0x69, 0x55, 0xeb, 0x1b, 0x84, 0x2d, 0x90, 0x85, 0x81, 0x9a, 0x9b, 0x92, 0x5c, 0x84, 0x52, 0x9d, 0x3d, 0xdf, 0xa2, 0x52, 0x64, 0x80, 0xf8, 0x33, 0xea, 0x0e, 0xdb, 0xd2, 0x04, 0xe4, 0xe3, 0x65, 0xfe, 0xf3, 0x47, 0x28, 0x88, 0xfe, 0x7d, 0x96, 0x91, 0xc3, 0xeb, 0xc0, 0x9f,
1452*f0865ec9SKyle Evans };
1453*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_23_test_vector_shared_secret[] = {
1454*f0865ec9SKyle Evans 	0x8f, 0x7e, 0x34, 0xe5, 0x97, 0xae, 0x80, 0x93, 0xb9, 0x82, 0x70, 0xa7, 0x4a, 0x8d, 0xfc, 0xdb, 0xed, 0x45, 0x7f, 0x42, 0xf4, 0x3d, 0xf4, 0x87, 0xc5, 0x48, 0x71, 0x61,
1455*f0865ec9SKyle Evans };
1456*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_23_test_case = {
1457*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 23",
1458*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1459*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1460*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_23_test_vector_our_priv_key,
1461*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_our_priv_key),
1462*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_23_test_vector_peer_pub_key,
1463*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_peer_pub_key),
1464*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_23_test_vector_our_pub_key,
1465*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_our_pub_key),
1466*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_23_test_vector_shared_secret,
1467*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_23_test_vector_shared_secret),
1468*f0865ec9SKyle Evans };
1469*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1470*f0865ec9SKyle Evans 
1471*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP224R1
1472*f0865ec9SKyle Evans #define ECCCDH_SECP224R1_SELF_TEST_24
1473*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP224R1 ***/
1474*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_24_test_vector_our_priv_key[] = {
1475*f0865ec9SKyle Evans 	0xcc, 0xe6, 0x48, 0x91, 0xa3, 0xd0, 0x12, 0x9f, 0xee, 0x0d, 0x4a, 0x96, 0xcf, 0xbe, 0x7a, 0xc4, 0x70, 0xb8, 0x5e, 0x96, 0x75, 0x29, 0x05, 0x7c, 0xfa, 0x31, 0xa1, 0xd9,
1476*f0865ec9SKyle Evans };
1477*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_24_test_vector_peer_pub_key[] = {
1478*f0865ec9SKyle Evans 	0x08, 0x5a, 0x76, 0x42, 0xad, 0x8e, 0x59, 0xb1, 0xa3, 0xe8, 0x72, 0x6a, 0x75, 0x47, 0xaf, 0xbe, 0xcf, 0xfd, 0xac, 0x1d, 0xab, 0x7e, 0x57, 0x23, 0x0c, 0x6a, 0x9d, 0xf4, 0xf9, 0x1c, 0x36, 0xd8, 0x81, 0xfe, 0x9b, 0x80, 0x47, 0xa3, 0x53, 0x07, 0x13, 0x55, 0x4a, 0x1a, 0xf4, 0xc2, 0x5c, 0x5a, 0x8e, 0x65, 0x4d, 0xcd, 0xcf, 0x68, 0x9f, 0x2e,
1479*f0865ec9SKyle Evans };
1480*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_24_test_vector_our_pub_key[] = {
1481*f0865ec9SKyle Evans 	0xa6, 0xb2, 0x96, 0x32, 0xdb, 0x94, 0xda, 0x21, 0x25, 0xdc, 0x1c, 0xf8, 0x0e, 0x03, 0x70, 0x26, 0x87, 0xb2, 0xac, 0xc1, 0x12, 0x20, 0x22, 0xfa, 0x21, 0x74, 0x76, 0x5a, 0x61, 0x72, 0x3e, 0xdd, 0x73, 0xe1, 0x0d, 0xae, 0xd7, 0x37, 0x75, 0x27, 0x8f, 0x19, 0x58, 0xba, 0x56, 0xf1, 0xfc, 0x9d, 0x08, 0x5e, 0xbc, 0x2b, 0x64, 0xc8, 0x4f, 0xe5,
1482*f0865ec9SKyle Evans };
1483*f0865ec9SKyle Evans static const u8 ecccdh_SECP224R1_24_test_vector_shared_secret[] = {
1484*f0865ec9SKyle Evans 	0x71, 0x95, 0x4e, 0x22, 0x61, 0xe8, 0x51, 0x0b, 0xe1, 0xa0, 0x60, 0x73, 0x36, 0x71, 0xd2, 0xe9, 0xd0, 0xa2, 0xd0, 0x12, 0xeb, 0x4e, 0x09, 0x55, 0x6d, 0x69, 0x7d, 0x2a,
1485*f0865ec9SKyle Evans };
1486*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP224R1_24_test_case = {
1487*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP224R1 24",
1488*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1489*f0865ec9SKyle Evans 	.ec_str_p = &secp224r1_str_params,
1490*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP224R1_24_test_vector_our_priv_key,
1491*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_our_priv_key),
1492*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP224R1_24_test_vector_peer_pub_key,
1493*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_peer_pub_key),
1494*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP224R1_24_test_vector_our_pub_key,
1495*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_our_pub_key),
1496*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP224R1_24_test_vector_shared_secret,
1497*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_24_test_vector_shared_secret),
1498*f0865ec9SKyle Evans };
1499*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP224R1 */
1500*f0865ec9SKyle Evans 
1501*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1502*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_0
1503*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1504*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_0_test_vector_our_priv_key[] = {
1505*f0865ec9SKyle Evans 	0x7d, 0x7d, 0xc5, 0xf7, 0x1e, 0xb2, 0x9d, 0xda, 0xf8, 0x0d, 0x62, 0x14, 0x63, 0x2e, 0xea, 0xe0, 0x3d, 0x90, 0x58, 0xaf, 0x1f, 0xb6, 0xd2, 0x2e, 0xd8, 0x0b, 0xad, 0xb6, 0x2b, 0xc1, 0xa5, 0x34,
1506*f0865ec9SKyle Evans };
1507*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_0_test_vector_peer_pub_key[] = {
1508*f0865ec9SKyle Evans 	0x70, 0x0c, 0x48, 0xf7, 0x7f, 0x56, 0x58, 0x4c, 0x5c, 0xc6, 0x32, 0xca, 0x65, 0x64, 0x0d, 0xb9, 0x1b, 0x6b, 0xac, 0xce, 0x3a, 0x4d, 0xf6, 0xb4, 0x2c, 0xe7, 0xcc, 0x83, 0x88, 0x33, 0xd2, 0x87, 0xdb, 0x71, 0xe5, 0x09, 0xe3, 0xfd, 0x9b, 0x06, 0x0d, 0xdb, 0x20, 0xba, 0x5c, 0x51, 0xdc, 0xc5, 0x94, 0x8d, 0x46, 0xfb, 0xf6, 0x40, 0xdf, 0xe0, 0x44, 0x17, 0x82, 0xca, 0xb8, 0x5f, 0xa4, 0xac,
1509*f0865ec9SKyle Evans };
1510*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_0_test_vector_our_pub_key[] = {
1511*f0865ec9SKyle Evans 	0xea, 0xd2, 0x18, 0x59, 0x01, 0x19, 0xe8, 0x87, 0x6b, 0x29, 0x14, 0x6f, 0xf8, 0x9c, 0xa6, 0x17, 0x70, 0xc4, 0xed, 0xbb, 0xf9, 0x7d, 0x38, 0xce, 0x38, 0x5e, 0xd2, 0x81, 0xd8, 0xa6, 0xb2, 0x30, 0x28, 0xaf, 0x61, 0x28, 0x1f, 0xd3, 0x5e, 0x2f, 0xa7, 0x00, 0x25, 0x23, 0xac, 0xc8, 0x5a, 0x42, 0x9c, 0xb0, 0x6e, 0xe6, 0x64, 0x83, 0x25, 0x38, 0x9f, 0x59, 0xed, 0xfc, 0xe1, 0x40, 0x51, 0x41,
1512*f0865ec9SKyle Evans };
1513*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_0_test_vector_shared_secret[] = {
1514*f0865ec9SKyle Evans 	0x46, 0xfc, 0x62, 0x10, 0x64, 0x20, 0xff, 0x01, 0x2e, 0x54, 0xa4, 0x34, 0xfb, 0xdd, 0x2d, 0x25, 0xcc, 0xc5, 0x85, 0x20, 0x60, 0x56, 0x1e, 0x68, 0x04, 0x0d, 0xd7, 0x77, 0x89, 0x97, 0xbd, 0x7b,
1515*f0865ec9SKyle Evans };
1516*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_0_test_case = {
1517*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 0",
1518*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1519*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1520*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_0_test_vector_our_priv_key,
1521*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_our_priv_key),
1522*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_0_test_vector_peer_pub_key,
1523*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_peer_pub_key),
1524*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_0_test_vector_our_pub_key,
1525*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_our_pub_key),
1526*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_0_test_vector_shared_secret,
1527*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_0_test_vector_shared_secret),
1528*f0865ec9SKyle Evans };
1529*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1530*f0865ec9SKyle Evans 
1531*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1532*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_1
1533*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1534*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_1_test_vector_our_priv_key[] = {
1535*f0865ec9SKyle Evans 	0x38, 0xf6, 0x5d, 0x6d, 0xce, 0x47, 0x67, 0x60, 0x44, 0xd5, 0x8c, 0xe5, 0x13, 0x95, 0x82, 0xd5, 0x68, 0xf6, 0x4b, 0xb1, 0x60, 0x98, 0xd1, 0x79, 0xdb, 0xab, 0x07, 0x74, 0x1d, 0xd5, 0xca, 0xf5,
1536*f0865ec9SKyle Evans };
1537*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_1_test_vector_peer_pub_key[] = {
1538*f0865ec9SKyle Evans 	0x80, 0x9f, 0x04, 0x28, 0x9c, 0x64, 0x34, 0x8c, 0x01, 0x51, 0x5e, 0xb0, 0x3d, 0x5c, 0xe7, 0xac, 0x1a, 0x8c, 0xb9, 0x49, 0x8f, 0x5c, 0xaa, 0x50, 0x19, 0x7e, 0x58, 0xd4, 0x3a, 0x86, 0xa7, 0xae, 0xb2, 0x9d, 0x84, 0xe8, 0x11, 0x19, 0x7f, 0x25, 0xeb, 0xa8, 0xf5, 0x19, 0x40, 0x92, 0xcb, 0x6f, 0xf4, 0x40, 0xe2, 0x6d, 0x44, 0x21, 0x01, 0x13, 0x72, 0x46, 0x1f, 0x57, 0x92, 0x71, 0xcd, 0xa3,
1539*f0865ec9SKyle Evans };
1540*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_1_test_vector_our_pub_key[] = {
1541*f0865ec9SKyle Evans 	0x11, 0x9f, 0x2f, 0x04, 0x79, 0x02, 0x78, 0x2a, 0xb0, 0xc9, 0xe2, 0x7a, 0x54, 0xaf, 0xf5, 0xeb, 0x9b, 0x96, 0x48, 0x29, 0xca, 0x99, 0xc0, 0x6b, 0x02, 0xdd, 0xba, 0x95, 0xb0, 0xa3, 0xf6, 0xd0, 0x8f, 0x52, 0xb7, 0x26, 0x66, 0x4c, 0xac, 0x36, 0x6f, 0xc9, 0x8a, 0xc7, 0xa0, 0x12, 0xb2, 0x68, 0x2c, 0xbd, 0x96, 0x2e, 0x5a, 0xcb, 0x54, 0x46, 0x71, 0xd4, 0x1b, 0x94, 0x45, 0x70, 0x4d, 0x1d,
1542*f0865ec9SKyle Evans };
1543*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_1_test_vector_shared_secret[] = {
1544*f0865ec9SKyle Evans 	0x05, 0x7d, 0x63, 0x60, 0x96, 0xcb, 0x80, 0xb6, 0x7a, 0x8c, 0x03, 0x8c, 0x89, 0x0e, 0x88, 0x7d, 0x1a, 0xdf, 0xa4, 0x19, 0x5e, 0x9b, 0x3c, 0xe2, 0x41, 0xc8, 0xa7, 0x78, 0xc5, 0x9c, 0xda, 0x67,
1545*f0865ec9SKyle Evans };
1546*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_1_test_case = {
1547*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 1",
1548*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1549*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1550*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_1_test_vector_our_priv_key,
1551*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_our_priv_key),
1552*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_1_test_vector_peer_pub_key,
1553*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_peer_pub_key),
1554*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_1_test_vector_our_pub_key,
1555*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_our_pub_key),
1556*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_1_test_vector_shared_secret,
1557*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_1_test_vector_shared_secret),
1558*f0865ec9SKyle Evans };
1559*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1560*f0865ec9SKyle Evans 
1561*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1562*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_2
1563*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1564*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_2_test_vector_our_priv_key[] = {
1565*f0865ec9SKyle Evans 	0x1a, 0xcc, 0xfa, 0xf1, 0xb9, 0x77, 0x12, 0xb8, 0x5a, 0x6f, 0x54, 0xb1, 0x48, 0x98, 0x5a, 0x1b, 0xdc, 0x4c, 0x9b, 0xec, 0x0b, 0xd2, 0x58, 0xca, 0xd4, 0xb3, 0xd6, 0x03, 0xf4, 0x9f, 0x32, 0xc8,
1566*f0865ec9SKyle Evans };
1567*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_2_test_vector_peer_pub_key[] = {
1568*f0865ec9SKyle Evans 	0xa2, 0x33, 0x9c, 0x12, 0xd4, 0xa0, 0x3c, 0x33, 0x54, 0x6d, 0xe5, 0x33, 0x26, 0x8b, 0x4a, 0xd6, 0x67, 0xde, 0xbf, 0x45, 0x8b, 0x46, 0x4d, 0x77, 0x44, 0x36, 0x36, 0x44, 0x0e, 0xe7, 0xfe, 0xc3, 0xef, 0x48, 0xa3, 0xab, 0x26, 0xe2, 0x02, 0x20, 0xbc, 0xda, 0x2c, 0x18, 0x51, 0x07, 0x68, 0x39, 0xda, 0xe8, 0x8e, 0xae, 0x96, 0x28, 0x69, 0xa4, 0x97, 0xbf, 0x73, 0xcb, 0x66, 0xfa, 0xf5, 0x36,
1569*f0865ec9SKyle Evans };
1570*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_2_test_vector_our_pub_key[] = {
1571*f0865ec9SKyle Evans 	0xd9, 0xf2, 0xb7, 0x9c, 0x17, 0x28, 0x45, 0xbf, 0xdb, 0x56, 0x0b, 0xbb, 0x01, 0x44, 0x7c, 0xa5, 0xec, 0xc0, 0x47, 0x0a, 0x09, 0x51, 0x3b, 0x61, 0x26, 0x90, 0x2c, 0x6b, 0x4f, 0x8d, 0x10, 0x51, 0xf8, 0x15, 0xef, 0x5e, 0xc3, 0x21, 0x28, 0xd3, 0x48, 0x78, 0x34, 0x76, 0x46, 0x78, 0x70, 0x2e, 0x64, 0xe1, 0x64, 0xff, 0x73, 0x15, 0x18, 0x5e, 0x23, 0xaf, 0xf5, 0xfa, 0xcd, 0x96, 0xd7, 0xbc,
1572*f0865ec9SKyle Evans };
1573*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_2_test_vector_shared_secret[] = {
1574*f0865ec9SKyle Evans 	0x2d, 0x45, 0x7b, 0x78, 0xb4, 0x61, 0x41, 0x32, 0x47, 0x76, 0x18, 0xa5, 0xb0, 0x77, 0x96, 0x5e, 0xc9, 0x07, 0x30, 0xa8, 0xc8, 0x1a, 0x1c, 0x75, 0xd6, 0xd4, 0xec, 0x68, 0x00, 0x5d, 0x67, 0xec,
1575*f0865ec9SKyle Evans };
1576*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_2_test_case = {
1577*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 2",
1578*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1579*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1580*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_2_test_vector_our_priv_key,
1581*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_our_priv_key),
1582*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_2_test_vector_peer_pub_key,
1583*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_peer_pub_key),
1584*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_2_test_vector_our_pub_key,
1585*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_our_pub_key),
1586*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_2_test_vector_shared_secret,
1587*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_2_test_vector_shared_secret),
1588*f0865ec9SKyle Evans };
1589*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1590*f0865ec9SKyle Evans 
1591*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1592*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_3
1593*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1594*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_3_test_vector_our_priv_key[] = {
1595*f0865ec9SKyle Evans 	0x20, 0x7c, 0x43, 0xa7, 0x9b, 0xfe, 0xe0, 0x3d, 0xb6, 0xf4, 0xb9, 0x44, 0xf5, 0x3d, 0x2f, 0xb7, 0x6c, 0xc4, 0x9e, 0xf1, 0xc9, 0xc4, 0xd3, 0x4d, 0x51, 0xb6, 0xc6, 0x5c, 0x4d, 0xb6, 0x93, 0x2d,
1596*f0865ec9SKyle Evans };
1597*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_3_test_vector_peer_pub_key[] = {
1598*f0865ec9SKyle Evans 	0xdf, 0x39, 0x89, 0xb9, 0xfa, 0x55, 0x49, 0x57, 0x19, 0xb3, 0xcf, 0x46, 0xdc, 0xcd, 0x28, 0xb5, 0x15, 0x3f, 0x78, 0x08, 0x19, 0x1d, 0xd5, 0x18, 0xef, 0xf0, 0xc3, 0xcf, 0xf2, 0xb7, 0x05, 0xed, 0x42, 0x22, 0x94, 0xff, 0x46, 0x00, 0x34, 0x29, 0xd7, 0x39, 0xa3, 0x32, 0x06, 0xc8, 0x75, 0x25, 0x52, 0xc8, 0xba, 0x54, 0xa2, 0x70, 0xde, 0xfc, 0x06, 0xe2, 0x21, 0xe0, 0xfe, 0xaf, 0x6a, 0xc4,
1599*f0865ec9SKyle Evans };
1600*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_3_test_vector_our_pub_key[] = {
1601*f0865ec9SKyle Evans 	0x24, 0x27, 0x7c, 0x33, 0xf4, 0x50, 0x46, 0x2d, 0xcb, 0x3d, 0x48, 0x01, 0xd5, 0x7b, 0x9c, 0xed, 0x05, 0x18, 0x8f, 0x16, 0xc2, 0x8e, 0xda, 0x87, 0x32, 0x58, 0x04, 0x8c, 0xd1, 0x60, 0x7e, 0x0d, 0xc4, 0x78, 0x97, 0x53, 0xe2, 0xb1, 0xf6, 0x3b, 0x32, 0xff, 0x01, 0x4e, 0xc4, 0x2c, 0xd6, 0xa6, 0x9f, 0xac, 0x81, 0xdf, 0xe6, 0xd0, 0xd6, 0xfd, 0x4a, 0xf3, 0x72, 0xae, 0x27, 0xc4, 0x6f, 0x88,
1602*f0865ec9SKyle Evans };
1603*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_3_test_vector_shared_secret[] = {
1604*f0865ec9SKyle Evans 	0x96, 0x44, 0x12, 0x59, 0x53, 0x4b, 0x80, 0xf6, 0xae, 0xe3, 0xd2, 0x87, 0xa6, 0xbb, 0x17, 0xb5, 0x09, 0x4d, 0xd4, 0x27, 0x7d, 0x9e, 0x29, 0x4f, 0x8f, 0xe7, 0x3e, 0x48, 0xbf, 0x2a, 0x00, 0x24,
1605*f0865ec9SKyle Evans };
1606*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_3_test_case = {
1607*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 3",
1608*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1609*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1610*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_3_test_vector_our_priv_key,
1611*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_our_priv_key),
1612*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_3_test_vector_peer_pub_key,
1613*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_peer_pub_key),
1614*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_3_test_vector_our_pub_key,
1615*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_our_pub_key),
1616*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_3_test_vector_shared_secret,
1617*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_3_test_vector_shared_secret),
1618*f0865ec9SKyle Evans };
1619*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1620*f0865ec9SKyle Evans 
1621*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1622*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_4
1623*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1624*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_4_test_vector_our_priv_key[] = {
1625*f0865ec9SKyle Evans 	0x59, 0x13, 0x7e, 0x38, 0x15, 0x23, 0x50, 0xb1, 0x95, 0xc9, 0x71, 0x8d, 0x39, 0x67, 0x3d, 0x51, 0x98, 0x38, 0x05, 0x5a, 0xd9, 0x08, 0xdd, 0x47, 0x57, 0x15, 0x2f, 0xd8, 0x25, 0x5c, 0x09, 0xbf,
1626*f0865ec9SKyle Evans };
1627*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_4_test_vector_peer_pub_key[] = {
1628*f0865ec9SKyle Evans 	0x41, 0x19, 0x2d, 0x28, 0x13, 0xe7, 0x95, 0x61, 0xe6, 0xa1, 0xd6, 0xf5, 0x3c, 0x8b, 0xc1, 0xa4, 0x33, 0xa1, 0x99, 0xc8, 0x35, 0xe1, 0x41, 0xb0, 0x5a, 0x74, 0xa9, 0x7b, 0x0f, 0xae, 0xb9, 0x22, 0x1a, 0xf9, 0x8c, 0xc4, 0x5e, 0x98, 0xa7, 0xe0, 0x41, 0xb0, 0x1c, 0xf3, 0x5f, 0x46, 0x2b, 0x75, 0x62, 0x28, 0x13, 0x51, 0xc8, 0xeb, 0xf3, 0xff, 0xa0, 0x2e, 0x33, 0xa0, 0x72, 0x2a, 0x13, 0x28,
1629*f0865ec9SKyle Evans };
1630*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_4_test_vector_our_pub_key[] = {
1631*f0865ec9SKyle Evans 	0xa8, 0xc5, 0xfd, 0xce, 0x8b, 0x62, 0xc5, 0xad, 0xa5, 0x98, 0xf1, 0x41, 0xad, 0xb3, 0xb2, 0x6c, 0xf2, 0x54, 0xc2, 0x80, 0xb2, 0x85, 0x7a, 0x63, 0xd2, 0xad, 0x78, 0x3a, 0x73, 0x11, 0x5f, 0x6b, 0x80, 0x6e, 0x1a, 0xaf, 0xec, 0x4a, 0xf8, 0x0a, 0x0d, 0x78, 0x6b, 0x3d, 0xe4, 0x53, 0x75, 0xb5, 0x17, 0xa7, 0xe5, 0xb5, 0x1f, 0xfb, 0x2c, 0x35, 0x65, 0x37, 0xc9, 0xe6, 0xef, 0x22, 0x7d, 0x4a,
1632*f0865ec9SKyle Evans };
1633*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_4_test_vector_shared_secret[] = {
1634*f0865ec9SKyle Evans 	0x19, 0xd4, 0x4c, 0x8d, 0x63, 0xe8, 0xe8, 0xdd, 0x12, 0xc2, 0x2a, 0x87, 0xb8, 0xcd, 0x4e, 0xce, 0x27, 0xac, 0xdd, 0xe0, 0x4d, 0xbf, 0x47, 0xf7, 0xf2, 0x75, 0x37, 0xa6, 0x99, 0x9a, 0x8e, 0x62,
1635*f0865ec9SKyle Evans };
1636*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_4_test_case = {
1637*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 4",
1638*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1639*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1640*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_4_test_vector_our_priv_key,
1641*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_our_priv_key),
1642*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_4_test_vector_peer_pub_key,
1643*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_peer_pub_key),
1644*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_4_test_vector_our_pub_key,
1645*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_our_pub_key),
1646*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_4_test_vector_shared_secret,
1647*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_4_test_vector_shared_secret),
1648*f0865ec9SKyle Evans };
1649*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1650*f0865ec9SKyle Evans 
1651*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1652*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_5
1653*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1654*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_5_test_vector_our_priv_key[] = {
1655*f0865ec9SKyle Evans 	0xf5, 0xf8, 0xe0, 0x17, 0x46, 0x10, 0xa6, 0x61, 0x27, 0x79, 0x79, 0xb5, 0x8c, 0xe5, 0xc9, 0x0f, 0xee, 0x6c, 0x9b, 0x3b, 0xb3, 0x46, 0xa9, 0x0a, 0x71, 0x96, 0x25, 0x5e, 0x40, 0xb1, 0x32, 0xef,
1656*f0865ec9SKyle Evans };
1657*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_5_test_vector_peer_pub_key[] = {
1658*f0865ec9SKyle Evans 	0x33, 0xe8, 0x20, 0x92, 0xa0, 0xf1, 0xfb, 0x38, 0xf5, 0x64, 0x9d, 0x58, 0x67, 0xfb, 0xa2, 0x8b, 0x50, 0x31, 0x72, 0xb7, 0x03, 0x55, 0x74, 0xbf, 0x8e, 0x5b, 0x71, 0x00, 0xa3, 0x05, 0x27, 0x92, 0xf2, 0xcf, 0x6b, 0x60, 0x1e, 0x0a, 0x05, 0x94, 0x5e, 0x33, 0x55, 0x50, 0xbf, 0x64, 0x8d, 0x78, 0x2f, 0x46, 0x18, 0x6c, 0x77, 0x2c, 0x0f, 0x20, 0xd3, 0xcd, 0x0d, 0x6b, 0x8c, 0xa1, 0x4b, 0x2f,
1659*f0865ec9SKyle Evans };
1660*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_5_test_vector_our_pub_key[] = {
1661*f0865ec9SKyle Evans 	0x7b, 0x86, 0x1d, 0xcd, 0x28, 0x44, 0xa5, 0xa8, 0x36, 0x3f, 0x6b, 0x8e, 0xf8, 0xd4, 0x93, 0x64, 0x0f, 0x55, 0x87, 0x92, 0x17, 0x18, 0x9d, 0x80, 0x32, 0x6a, 0xad, 0x94, 0x80, 0xdf, 0xc1, 0x49, 0xc4, 0x67, 0x5b, 0x45, 0xee, 0xb3, 0x06, 0x40, 0x5f, 0x6c, 0x33, 0xc3, 0x8b, 0xc6, 0x9e, 0xb2, 0xbd, 0xec, 0x9b, 0x75, 0xad, 0x5a, 0xf4, 0x70, 0x6a, 0xab, 0x84, 0x54, 0x3b, 0x9c, 0xc6, 0x3a,
1662*f0865ec9SKyle Evans };
1663*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_5_test_vector_shared_secret[] = {
1664*f0865ec9SKyle Evans 	0x66, 0x4e, 0x45, 0xd5, 0xbb, 0xa4, 0xac, 0x93, 0x1c, 0xd6, 0x5d, 0x52, 0x01, 0x7e, 0x4b, 0xe9, 0xb1, 0x9a, 0x51, 0x5f, 0x66, 0x9b, 0xea, 0x47, 0x03, 0x54, 0x2a, 0x2c, 0x52, 0x5c, 0xd3, 0xd3,
1665*f0865ec9SKyle Evans };
1666*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_5_test_case = {
1667*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 5",
1668*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1669*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1670*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_5_test_vector_our_priv_key,
1671*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_our_priv_key),
1672*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_5_test_vector_peer_pub_key,
1673*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_peer_pub_key),
1674*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_5_test_vector_our_pub_key,
1675*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_our_pub_key),
1676*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_5_test_vector_shared_secret,
1677*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_5_test_vector_shared_secret),
1678*f0865ec9SKyle Evans };
1679*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1680*f0865ec9SKyle Evans 
1681*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1682*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_6
1683*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1684*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_6_test_vector_our_priv_key[] = {
1685*f0865ec9SKyle Evans 	0x3b, 0x58, 0x9a, 0xf7, 0xdb, 0x03, 0x45, 0x9c, 0x23, 0x06, 0x8b, 0x64, 0xf6, 0x3f, 0x28, 0xd3, 0xc3, 0xc6, 0xbc, 0x25, 0xb5, 0xbf, 0x76, 0xac, 0x05, 0xf3, 0x54, 0x82, 0x88, 0x8b, 0x51, 0x90,
1686*f0865ec9SKyle Evans };
1687*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_6_test_vector_peer_pub_key[] = {
1688*f0865ec9SKyle Evans 	0x6a, 0x9e, 0x0c, 0x3f, 0x91, 0x6e, 0x4e, 0x31, 0x5c, 0x91, 0x14, 0x7b, 0xe5, 0x71, 0x68, 0x6d, 0x90, 0x46, 0x4e, 0x8b, 0xf9, 0x81, 0xd3, 0x4a, 0x90, 0xb6, 0x35, 0x3b, 0xca, 0x6e, 0xeb, 0xa7, 0x40, 0xf9, 0xbe, 0xad, 0x39, 0xc2, 0xf2, 0xbc, 0xc2, 0x60, 0x2f, 0x75, 0xb8, 0xa7, 0x3e, 0xc7, 0xbd, 0xff, 0xcb, 0xce, 0xad, 0x15, 0x9d, 0x01, 0x74, 0xc6, 0xc4, 0xd3, 0xc5, 0x35, 0x7f, 0x05,
1689*f0865ec9SKyle Evans };
1690*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_6_test_vector_our_pub_key[] = {
1691*f0865ec9SKyle Evans 	0x9f, 0xb3, 0x8e, 0x2d, 0x58, 0xea, 0x1b, 0xaf, 0x76, 0x22, 0xe9, 0x67, 0x20, 0x10, 0x1c, 0xae, 0x3c, 0xde, 0x4b, 0xa6, 0xc1, 0xe9, 0xfa, 0x26, 0xd9, 0xb1, 0xde, 0x08, 0x99, 0x10, 0x28, 0x63, 0xd5, 0x56, 0x1b, 0x90, 0x04, 0x06, 0xed, 0xf5, 0x08, 0x02, 0xdd, 0x7d, 0x73, 0xe8, 0x93, 0x95, 0xf8, 0xae, 0xd7, 0x2f, 0xba, 0x0e, 0x1d, 0x1b, 0x61, 0xfe, 0x1d, 0x22, 0x30, 0x22, 0x60, 0xf0,
1692*f0865ec9SKyle Evans };
1693*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_6_test_vector_shared_secret[] = {
1694*f0865ec9SKyle Evans 	0xca, 0x34, 0x2d, 0xaa, 0x50, 0xdc, 0x09, 0xd6, 0x1b, 0xe7, 0xc1, 0x96, 0xc8, 0x5e, 0x60, 0xa8, 0x0c, 0x5c, 0xb0, 0x49, 0x31, 0x74, 0x68, 0x20, 0xbe, 0x54, 0x8c, 0xdd, 0xe0, 0x55, 0x67, 0x9d,
1695*f0865ec9SKyle Evans };
1696*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_6_test_case = {
1697*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 6",
1698*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1699*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1700*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_6_test_vector_our_priv_key,
1701*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_our_priv_key),
1702*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_6_test_vector_peer_pub_key,
1703*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_peer_pub_key),
1704*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_6_test_vector_our_pub_key,
1705*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_our_pub_key),
1706*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_6_test_vector_shared_secret,
1707*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_6_test_vector_shared_secret),
1708*f0865ec9SKyle Evans };
1709*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1710*f0865ec9SKyle Evans 
1711*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1712*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_7
1713*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1714*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_7_test_vector_our_priv_key[] = {
1715*f0865ec9SKyle Evans 	0xd8, 0xbf, 0x92, 0x9a, 0x20, 0xea, 0x74, 0x36, 0xb2, 0x46, 0x1b, 0x54, 0x1a, 0x11, 0xc8, 0x0e, 0x61, 0xd8, 0x26, 0xc0, 0xa4, 0xc9, 0xd3, 0x22, 0xb3, 0x1d, 0xd5, 0x4e, 0x7f, 0x58, 0xb9, 0xc8,
1716*f0865ec9SKyle Evans };
1717*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_7_test_vector_peer_pub_key[] = {
1718*f0865ec9SKyle Evans 	0xa9, 0xc0, 0xac, 0xad, 0xe5, 0x5c, 0x2a, 0x73, 0xea, 0xd1, 0xa8, 0x6f, 0xb0, 0xa9, 0x71, 0x32, 0x23, 0xc8, 0x24, 0x75, 0x79, 0x1c, 0xd0, 0xe2, 0x10, 0xb0, 0x46, 0x41, 0x2c, 0xe2, 0x24, 0xbb, 0xf6, 0xde, 0x0a, 0xfa, 0x20, 0xe9, 0x3e, 0x07, 0x84, 0x67, 0xc0, 0x53, 0xd2, 0x41, 0x90, 0x3e, 0xda, 0xd7, 0x34, 0xc6, 0xb4, 0x03, 0xba, 0x75, 0x8c, 0x2b, 0x5f, 0xf0, 0x4c, 0x9d, 0x42, 0x29,
1719*f0865ec9SKyle Evans };
1720*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_7_test_vector_our_pub_key[] = {
1721*f0865ec9SKyle Evans 	0x20, 0xf0, 0x76, 0x31, 0xe4, 0xa6, 0x51, 0x2a, 0x89, 0xad, 0x48, 0x7c, 0x4e, 0x9d, 0x63, 0x03, 0x9e, 0x57, 0x9c, 0xb0, 0xd7, 0xa5, 0x56, 0xcb, 0x9e, 0x66, 0x1c, 0xd5, 0x9c, 0x1e, 0x7f, 0xa4, 0x6d, 0xe9, 0x18, 0x46, 0xb3, 0xee, 0xe8, 0xa5, 0xec, 0x09, 0xc2, 0xab, 0x1f, 0x41, 0xe2, 0x1b, 0xd8, 0x36, 0x20, 0xcc, 0xdd, 0x1b, 0xdc, 0xe3, 0xab, 0x7e, 0xa6, 0xe0, 0x2d, 0xd2, 0x74, 0xf5,
1722*f0865ec9SKyle Evans };
1723*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_7_test_vector_shared_secret[] = {
1724*f0865ec9SKyle Evans 	0x35, 0xaa, 0x9b, 0x52, 0x53, 0x6a, 0x46, 0x1b, 0xfd, 0xe4, 0xe8, 0x5f, 0xc7, 0x56, 0xbe, 0x92, 0x8c, 0x7d, 0xe9, 0x79, 0x23, 0xf0, 0x41, 0x6c, 0x7a, 0x3a, 0xc8, 0xf8, 0x8b, 0x3d, 0x44, 0x89,
1725*f0865ec9SKyle Evans };
1726*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_7_test_case = {
1727*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 7",
1728*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1729*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1730*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_7_test_vector_our_priv_key,
1731*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_our_priv_key),
1732*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_7_test_vector_peer_pub_key,
1733*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_peer_pub_key),
1734*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_7_test_vector_our_pub_key,
1735*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_our_pub_key),
1736*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_7_test_vector_shared_secret,
1737*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_7_test_vector_shared_secret),
1738*f0865ec9SKyle Evans };
1739*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1740*f0865ec9SKyle Evans 
1741*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1742*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_8
1743*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1744*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_8_test_vector_our_priv_key[] = {
1745*f0865ec9SKyle Evans 	0x0f, 0x98, 0x83, 0xba, 0x0e, 0xf3, 0x2e, 0xe7, 0x5d, 0xed, 0x0d, 0x8b, 0xda, 0x39, 0xa5, 0x14, 0x6a, 0x29, 0xf1, 0xf2, 0x50, 0x7b, 0x3b, 0xd4, 0x58, 0xdb, 0xea, 0x0b, 0x2b, 0xb0, 0x5b, 0x4d,
1746*f0865ec9SKyle Evans };
1747*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_8_test_vector_peer_pub_key[] = {
1748*f0865ec9SKyle Evans 	0x94, 0xe9, 0x4f, 0x16, 0xa9, 0x82, 0x55, 0xff, 0xf2, 0xb9, 0xac, 0x0c, 0x95, 0x98, 0xaa, 0xc3, 0x54, 0x87, 0xb3, 0x23, 0x2d, 0x32, 0x31, 0xbd, 0x93, 0xb7, 0xdb, 0x7d, 0xf3, 0x6f, 0x9e, 0xb9, 0xd8, 0x04, 0x9a, 0x43, 0x57, 0x9c, 0xfa, 0x90, 0xb8, 0x09, 0x3a, 0x94, 0x41, 0x6c, 0xbe, 0xfb, 0xf9, 0x33, 0x86, 0xf1, 0x5b, 0x3f, 0x6e, 0x19, 0x0b, 0x6e, 0x34, 0x55, 0xfe, 0xdf, 0xe6, 0x9a,
1749*f0865ec9SKyle Evans };
1750*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_8_test_vector_our_pub_key[] = {
1751*f0865ec9SKyle Evans 	0xab, 0xb6, 0x1b, 0x42, 0x3b, 0xe5, 0xd6, 0xc2, 0x6e, 0x21, 0xc6, 0x05, 0x83, 0x2c, 0x91, 0x42, 0xdc, 0x1d, 0xfe, 0x5a, 0x5f, 0xff, 0x28, 0x72, 0x67, 0x37, 0x93, 0x6e, 0x6f, 0xbf, 0x51, 0x6d, 0x73, 0x3d, 0x25, 0x13, 0xef, 0x58, 0xbe, 0xab, 0x20, 0x20, 0x90, 0x58, 0x6f, 0xac, 0x91, 0xbf, 0x0f, 0xee, 0x31, 0xe8, 0x0a, 0xb3, 0x34, 0x73, 0xab, 0x23, 0xa2, 0xd8, 0x9e, 0x58, 0xfa, 0xd6,
1752*f0865ec9SKyle Evans };
1753*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_8_test_vector_shared_secret[] = {
1754*f0865ec9SKyle Evans 	0x60, 0x5c, 0x16, 0x17, 0x8a, 0x9b, 0xc8, 0x75, 0xdc, 0xbf, 0xf5, 0x4d, 0x63, 0xfe, 0x00, 0xdf, 0x69, 0x9c, 0x03, 0xe8, 0xa8, 0x88, 0xe9, 0xe9, 0x4d, 0xfb, 0xab, 0x90, 0xb2, 0x5f, 0x39, 0xb4,
1755*f0865ec9SKyle Evans };
1756*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_8_test_case = {
1757*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 8",
1758*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1759*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1760*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_8_test_vector_our_priv_key,
1761*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_our_priv_key),
1762*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_8_test_vector_peer_pub_key,
1763*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_peer_pub_key),
1764*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_8_test_vector_our_pub_key,
1765*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_our_pub_key),
1766*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_8_test_vector_shared_secret,
1767*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_8_test_vector_shared_secret),
1768*f0865ec9SKyle Evans };
1769*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1770*f0865ec9SKyle Evans 
1771*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1772*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_9
1773*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1774*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_9_test_vector_our_priv_key[] = {
1775*f0865ec9SKyle Evans 	0x2b, 0xee, 0xdb, 0x04, 0xb0, 0x5c, 0x69, 0x88, 0xf6, 0xa6, 0x75, 0x00, 0xbb, 0x81, 0x3f, 0xaf, 0x2c, 0xae, 0x0d, 0x58, 0x0c, 0x92, 0x53, 0xb6, 0x33, 0x9e, 0x4a, 0x33, 0x37, 0xbb, 0x6c, 0x08,
1776*f0865ec9SKyle Evans };
1777*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_9_test_vector_peer_pub_key[] = {
1778*f0865ec9SKyle Evans 	0xe0, 0x99, 0xbf, 0x2a, 0x4d, 0x55, 0x74, 0x60, 0xb5, 0x54, 0x44, 0x30, 0xbb, 0xf6, 0xda, 0x11, 0x00, 0x4d, 0x12, 0x7c, 0xb5, 0xd6, 0x7f, 0x64, 0xab, 0x07, 0xc9, 0x4f, 0xcd, 0xf5, 0x27, 0x4f, 0xd9, 0xc5, 0x0d, 0xbe, 0x70, 0xd7, 0x14, 0xed, 0xb5, 0xe2, 0x21, 0xf4, 0xe0, 0x20, 0x61, 0x0e, 0xeb, 0x62, 0x70, 0x51, 0x7e, 0x68, 0x8c, 0xa6, 0x4f, 0xb0, 0xe9, 0x8c, 0x7e, 0xf8, 0xc1, 0xc5,
1779*f0865ec9SKyle Evans };
1780*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_9_test_vector_our_pub_key[] = {
1781*f0865ec9SKyle Evans 	0x3d, 0x63, 0xe4, 0x29, 0xcb, 0x5f, 0xa8, 0x95, 0xa9, 0x24, 0x71, 0x29, 0xbf, 0x4e, 0x48, 0xe8, 0x9f, 0x35, 0xd7, 0xb1, 0x1d, 0xe8, 0x15, 0x8e, 0xfe, 0xb3, 0xe1, 0x06, 0xa2, 0xa8, 0x73, 0x95, 0x0c, 0xae, 0x9e, 0x47, 0x7e, 0xf4, 0x1e, 0x7c, 0x8c, 0x10, 0x64, 0x37, 0x9b, 0xb7, 0xb5, 0x54, 0xdd, 0xcb, 0xca, 0xe7, 0x9f, 0x98, 0x14, 0x28, 0x1f, 0x1e, 0x50, 0xf0, 0x40, 0x3c, 0x61, 0xf3,
1782*f0865ec9SKyle Evans };
1783*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_9_test_vector_shared_secret[] = {
1784*f0865ec9SKyle Evans 	0xf9, 0x6e, 0x40, 0xa1, 0xb7, 0x28, 0x40, 0x85, 0x4b, 0xb6, 0x2b, 0xc1, 0x3c, 0x40, 0xcc, 0x27, 0x95, 0xe3, 0x73, 0xd4, 0xe7, 0x15, 0x98, 0x0b, 0x26, 0x14, 0x76, 0x83, 0x5a, 0x09, 0x2e, 0x0b,
1785*f0865ec9SKyle Evans };
1786*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_9_test_case = {
1787*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 9",
1788*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1789*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1790*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_9_test_vector_our_priv_key,
1791*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_our_priv_key),
1792*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_9_test_vector_peer_pub_key,
1793*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_peer_pub_key),
1794*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_9_test_vector_our_pub_key,
1795*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_our_pub_key),
1796*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_9_test_vector_shared_secret,
1797*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_9_test_vector_shared_secret),
1798*f0865ec9SKyle Evans };
1799*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1800*f0865ec9SKyle Evans 
1801*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1802*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_10
1803*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1804*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_10_test_vector_our_priv_key[] = {
1805*f0865ec9SKyle Evans 	0x77, 0xc1, 0x5d, 0xcf, 0x44, 0x61, 0x0e, 0x41, 0x69, 0x6b, 0xab, 0x75, 0x89, 0x43, 0xef, 0xf1, 0x40, 0x93, 0x33, 0xe4, 0xd5, 0xa1, 0x1b, 0xbe, 0x72, 0xc8, 0xf6, 0xc3, 0x95, 0xe9, 0xf8, 0x48,
1806*f0865ec9SKyle Evans };
1807*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_10_test_vector_peer_pub_key[] = {
1808*f0865ec9SKyle Evans 	0xf7, 0x5a, 0x5f, 0xe5, 0x6b, 0xda, 0x34, 0xf3, 0xc1, 0x39, 0x62, 0x96, 0x62, 0x6e, 0xf0, 0x12, 0xdc, 0x07, 0xe4, 0x82, 0x58, 0x38, 0x77, 0x8a, 0x64, 0x5c, 0x82, 0x48, 0xcf, 0xf0, 0x16, 0x58, 0x33, 0xbb, 0xdf, 0x1b, 0x17, 0x72, 0xd8, 0x05, 0x9d, 0xf5, 0x68, 0xb0, 0x61, 0xf3, 0xf1, 0x12, 0x2f, 0x28, 0xa8, 0xd8, 0x19, 0x16, 0x7c, 0x97, 0xbe, 0x44, 0x8e, 0x3d, 0xc3, 0xfb, 0x0c, 0x3c,
1809*f0865ec9SKyle Evans };
1810*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_10_test_vector_our_pub_key[] = {
1811*f0865ec9SKyle Evans 	0xad, 0x5d, 0x13, 0xc3, 0xdb, 0x50, 0x8d, 0xdc, 0xd3, 0x84, 0x57, 0xe5, 0x99, 0x14, 0x34, 0xa2, 0x51, 0xbe, 0xd4, 0x9c, 0xf5, 0xdd, 0xcb, 0x59, 0xcd, 0xee, 0x73, 0x86, 0x5f, 0x13, 0x8c, 0x9f, 0x62, 0xce, 0xc1, 0xe7, 0x05, 0x88, 0xaa, 0x4f, 0xdf, 0xc7, 0xb9, 0xa0, 0x9d, 0xaa, 0x67, 0x80, 0x81, 0xc0, 0x4e, 0x12, 0x08, 0xb9, 0xd6, 0x62, 0xb8, 0xa2, 0x21, 0x4b, 0xf8, 0xe8, 0x1a, 0x21,
1812*f0865ec9SKyle Evans };
1813*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_10_test_vector_shared_secret[] = {
1814*f0865ec9SKyle Evans 	0x83, 0x88, 0xfa, 0x79, 0xc4, 0xba, 0xbd, 0xca, 0x02, 0xa8, 0xe8, 0xa3, 0x4f, 0x9e, 0x43, 0x55, 0x49, 0x76, 0xe4, 0x20, 0xa4, 0xad, 0x27, 0x3c, 0x81, 0xb2, 0x6e, 0x42, 0x28, 0xe9, 0xd3, 0xa3,
1815*f0865ec9SKyle Evans };
1816*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_10_test_case = {
1817*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 10",
1818*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1819*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1820*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_10_test_vector_our_priv_key,
1821*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_our_priv_key),
1822*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_10_test_vector_peer_pub_key,
1823*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_peer_pub_key),
1824*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_10_test_vector_our_pub_key,
1825*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_our_pub_key),
1826*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_10_test_vector_shared_secret,
1827*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_10_test_vector_shared_secret),
1828*f0865ec9SKyle Evans };
1829*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1830*f0865ec9SKyle Evans 
1831*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1832*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_11
1833*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1834*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_11_test_vector_our_priv_key[] = {
1835*f0865ec9SKyle Evans 	0x42, 0xa8, 0x3b, 0x98, 0x50, 0x11, 0xd1, 0x23, 0x03, 0xdb, 0x1a, 0x80, 0x0f, 0x26, 0x10, 0xf7, 0x4a, 0xa7, 0x1c, 0xdf, 0x19, 0xc6, 0x7d, 0x54, 0xce, 0x6c, 0x9e, 0xd9, 0x51, 0xe9, 0x09, 0x3e,
1836*f0865ec9SKyle Evans };
1837*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_11_test_vector_peer_pub_key[] = {
1838*f0865ec9SKyle Evans 	0x2d, 0xb4, 0x54, 0x0d, 0x50, 0x23, 0x07, 0x56, 0x15, 0x8a, 0xbf, 0x61, 0xd9, 0x83, 0x57, 0x12, 0xb6, 0x48, 0x6c, 0x74, 0x31, 0x21, 0x83, 0xcc, 0xef, 0xca, 0xef, 0x27, 0x97, 0xb7, 0x67, 0x4d, 0x62, 0xf5, 0x7f, 0x31, 0x4e, 0x3f, 0x34, 0x95, 0xdc, 0x4e, 0x09, 0x90, 0x12, 0xf5, 0xe0, 0xba, 0x71, 0x77, 0x0f, 0x96, 0x60, 0xa1, 0xea, 0xda, 0x54, 0x10, 0x4c, 0xdf, 0xde, 0x77, 0x24, 0x3e,
1839*f0865ec9SKyle Evans };
1840*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_11_test_vector_our_pub_key[] = {
1841*f0865ec9SKyle Evans 	0xab, 0x48, 0xca, 0xa6, 0x1e, 0xa3, 0x5f, 0x13, 0xf8, 0xed, 0x07, 0xff, 0xa6, 0xa1, 0x3e, 0x8d, 0xb2, 0x24, 0xdf, 0xec, 0xfa, 0xe1, 0xa7, 0xdf, 0x8b, 0x1b, 0xb6, 0xeb, 0xaf, 0x0c, 0xb9, 0x7d, 0x12, 0x74, 0x53, 0x0c, 0xa2, 0xc3, 0x85, 0xa3, 0x21, 0x8b, 0xdd, 0xfb, 0xcb, 0xf0, 0xb4, 0x02, 0x4c, 0x9b, 0xad, 0xd5, 0x24, 0x3b, 0xff, 0x83, 0x4e, 0xbf, 0xf2, 0x4a, 0x86, 0x18, 0xdc, 0xcb,
1842*f0865ec9SKyle Evans };
1843*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_11_test_vector_shared_secret[] = {
1844*f0865ec9SKyle Evans 	0x72, 0x87, 0x7c, 0xea, 0x33, 0xcc, 0xc4, 0x71, 0x50, 0x38, 0xd4, 0xbc, 0xbd, 0xfe, 0x0e, 0x43, 0xf4, 0x2a, 0x9e, 0x2c, 0x0c, 0x3b, 0x01, 0x7f, 0xc2, 0x37, 0x0f, 0x4b, 0x9a, 0xcb, 0xda, 0x4a,
1845*f0865ec9SKyle Evans };
1846*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_11_test_case = {
1847*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 11",
1848*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1849*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1850*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_11_test_vector_our_priv_key,
1851*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_our_priv_key),
1852*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_11_test_vector_peer_pub_key,
1853*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_peer_pub_key),
1854*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_11_test_vector_our_pub_key,
1855*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_our_pub_key),
1856*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_11_test_vector_shared_secret,
1857*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_11_test_vector_shared_secret),
1858*f0865ec9SKyle Evans };
1859*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1860*f0865ec9SKyle Evans 
1861*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1862*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_12
1863*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1864*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_12_test_vector_our_priv_key[] = {
1865*f0865ec9SKyle Evans 	0xce, 0xed, 0x35, 0x50, 0x7b, 0x5c, 0x93, 0xea, 0xd5, 0x98, 0x91, 0x19, 0xb9, 0xba, 0x34, 0x2c, 0xfe, 0x38, 0xe6, 0xe6, 0x38, 0xba, 0x6e, 0xea, 0x34, 0x3a, 0x55, 0x47, 0x5d, 0xe2, 0x80, 0x0b,
1866*f0865ec9SKyle Evans };
1867*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_12_test_vector_peer_pub_key[] = {
1868*f0865ec9SKyle Evans 	0xcd, 0x94, 0xfc, 0x94, 0x97, 0xe8, 0x99, 0x07, 0x50, 0x30, 0x9e, 0x9a, 0x85, 0x34, 0xfd, 0x11, 0x4b, 0x0a, 0x6e, 0x54, 0xda, 0x89, 0xc4, 0x79, 0x61, 0x01, 0x89, 0x70, 0x41, 0xd1, 0x4e, 0xcb, 0xc3, 0xde, 0xf4, 0xb5, 0xfe, 0x04, 0xfa, 0xee, 0x0a, 0x11, 0x93, 0x22, 0x29, 0xff, 0xf5, 0x63, 0x63, 0x7b, 0xfd, 0xee, 0x0e, 0x79, 0xc6, 0xde, 0xea, 0xf4, 0x49, 0xf8, 0x54, 0x01, 0xc5, 0xc4,
1869*f0865ec9SKyle Evans };
1870*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_12_test_vector_our_pub_key[] = {
1871*f0865ec9SKyle Evans 	0x9a, 0x8c, 0xd9, 0xbd, 0x72, 0xe7, 0x17, 0x52, 0xdf, 0x91, 0x44, 0x0f, 0x77, 0xc5, 0x47, 0x50, 0x9a, 0x84, 0xdf, 0x98, 0x11, 0x4e, 0x7d, 0xe4, 0xf2, 0x6c, 0xdb, 0x39, 0x23, 0x4a, 0x62, 0x5d, 0xd0, 0x7c, 0xfc, 0x84, 0xc8, 0xe1, 0x44, 0xfa, 0xb2, 0x83, 0x9f, 0x51, 0x89, 0xbb, 0x1d, 0x7c, 0x88, 0x63, 0x1d, 0x57, 0x9b, 0xbc, 0x58, 0x01, 0x2e, 0xd9, 0xa2, 0x32, 0x7d, 0xa5, 0x2f, 0x62,
1872*f0865ec9SKyle Evans };
1873*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_12_test_vector_shared_secret[] = {
1874*f0865ec9SKyle Evans 	0xe4, 0xe7, 0x40, 0x8d, 0x85, 0xff, 0x0e, 0x0e, 0x9c, 0x83, 0x80, 0x03, 0xf2, 0x8c, 0xdb, 0xd5, 0x24, 0x7c, 0xdc, 0xe3, 0x1f, 0x32, 0xf6, 0x24, 0x94, 0xb7, 0x0e, 0x5f, 0x1b, 0xc3, 0x63, 0x07,
1875*f0865ec9SKyle Evans };
1876*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_12_test_case = {
1877*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 12",
1878*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1879*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1880*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_12_test_vector_our_priv_key,
1881*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_our_priv_key),
1882*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_12_test_vector_peer_pub_key,
1883*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_peer_pub_key),
1884*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_12_test_vector_our_pub_key,
1885*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_our_pub_key),
1886*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_12_test_vector_shared_secret,
1887*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_12_test_vector_shared_secret),
1888*f0865ec9SKyle Evans };
1889*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1890*f0865ec9SKyle Evans 
1891*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1892*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_13
1893*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1894*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_13_test_vector_our_priv_key[] = {
1895*f0865ec9SKyle Evans 	0x43, 0xe0, 0xe9, 0xd9, 0x5a, 0xf4, 0xdc, 0x36, 0x48, 0x3c, 0xdd, 0x19, 0x68, 0xd2, 0xb7, 0xee, 0xb8, 0x61, 0x1f, 0xcc, 0xe7, 0x7f, 0x3a, 0x4e, 0x7d, 0x05, 0x9a, 0xe4, 0x3e, 0x50, 0x96, 0x04,
1896*f0865ec9SKyle Evans };
1897*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_13_test_vector_peer_pub_key[] = {
1898*f0865ec9SKyle Evans 	0x15, 0xb9, 0xe4, 0x67, 0xaf, 0x4d, 0x29, 0x0c, 0x41, 0x74, 0x02, 0xe0, 0x40, 0x42, 0x6f, 0xe4, 0xcf, 0x23, 0x6b, 0xae, 0x72, 0xba, 0xa3, 0x92, 0xed, 0x89, 0x78, 0x0d, 0xfc, 0xcd, 0xb4, 0x71, 0xcd, 0xf4, 0xe9, 0x17, 0x0f, 0xb9, 0x04, 0x30, 0x2b, 0x8f, 0xd9, 0x3a, 0x82, 0x0b, 0xa8, 0xcc, 0x7e, 0xd4, 0xef, 0xd3, 0xa6, 0xf2, 0xd6, 0xb0, 0x5b, 0x80, 0xb2, 0xff, 0x2a, 0xee, 0x4e, 0x77,
1899*f0865ec9SKyle Evans };
1900*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_13_test_vector_our_pub_key[] = {
1901*f0865ec9SKyle Evans 	0xf9, 0x89, 0xcf, 0x8e, 0xe9, 0x56, 0xa8, 0x2e, 0x7e, 0xbd, 0x98, 0x81, 0xcd, 0xbf, 0xb2, 0xfd, 0x94, 0x61, 0x89, 0xb0, 0x8d, 0xb5, 0x35, 0x59, 0xbc, 0x8c, 0xfd, 0xd4, 0x80, 0x71, 0xeb, 0x14, 0x5e, 0xff, 0x28, 0xf1, 0xa1, 0x8a, 0x61, 0x6b, 0x04, 0xb7, 0xd3, 0x37, 0x86, 0x86, 0x79, 0xf6, 0xdd, 0x84, 0xf9, 0xa7, 0xb3, 0xd7, 0xb6, 0xf8, 0xaf, 0x27, 0x6c, 0x19, 0x61, 0x1a, 0x54, 0x1d,
1902*f0865ec9SKyle Evans };
1903*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_13_test_vector_shared_secret[] = {
1904*f0865ec9SKyle Evans 	0xed, 0x56, 0xbc, 0xf6, 0x95, 0xb7, 0x34, 0x14, 0x2c, 0x24, 0xec, 0xb1, 0xfc, 0x1b, 0xb6, 0x4d, 0x08, 0xf1, 0x75, 0xeb, 0x24, 0x3a, 0x31, 0xf3, 0x7b, 0x3d, 0x9b, 0xb4, 0x40, 0x7f, 0x3b, 0x96,
1905*f0865ec9SKyle Evans };
1906*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_13_test_case = {
1907*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 13",
1908*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1909*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1910*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_13_test_vector_our_priv_key,
1911*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_our_priv_key),
1912*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_13_test_vector_peer_pub_key,
1913*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_peer_pub_key),
1914*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_13_test_vector_our_pub_key,
1915*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_our_pub_key),
1916*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_13_test_vector_shared_secret,
1917*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_13_test_vector_shared_secret),
1918*f0865ec9SKyle Evans };
1919*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1920*f0865ec9SKyle Evans 
1921*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1922*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_14
1923*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1924*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_14_test_vector_our_priv_key[] = {
1925*f0865ec9SKyle Evans 	0xb2, 0xf3, 0x60, 0x0d, 0xf3, 0x36, 0x8e, 0xf8, 0xa0, 0xbb, 0x85, 0xab, 0x22, 0xf4, 0x1f, 0xc0, 0xe5, 0xf4, 0xfd, 0xd5, 0x4b, 0xe8, 0x16, 0x7a, 0x5c, 0x3c, 0xd4, 0xb0, 0x8d, 0xb0, 0x49, 0x03,
1926*f0865ec9SKyle Evans };
1927*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_14_test_vector_peer_pub_key[] = {
1928*f0865ec9SKyle Evans 	0x49, 0xc5, 0x03, 0xba, 0x6c, 0x4f, 0xa6, 0x05, 0x18, 0x2e, 0x18, 0x6b, 0x5e, 0x81, 0x11, 0x3f, 0x07, 0x5b, 0xc1, 0x1d, 0xcf, 0xd5, 0x1c, 0x93, 0x2f, 0xb2, 0x1e, 0x95, 0x1e, 0xee, 0x2f, 0xa1, 0x8a, 0xf7, 0x06, 0xff, 0x09, 0x22, 0xd8, 0x7b, 0x3f, 0x0c, 0x5e, 0x4e, 0x31, 0xd8, 0xb2, 0x59, 0xae, 0xb2, 0x60, 0xa9, 0x26, 0x96, 0x43, 0xed, 0x52, 0x0a, 0x13, 0xbb, 0x25, 0xda, 0x59, 0x24,
1929*f0865ec9SKyle Evans };
1930*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_14_test_vector_our_pub_key[] = {
1931*f0865ec9SKyle Evans 	0x69, 0xc6, 0x27, 0x62, 0x5b, 0x36, 0xa4, 0x29, 0xc3, 0x98, 0xb4, 0x5c, 0x38, 0x67, 0x7c, 0xb3, 0x5d, 0x8b, 0xeb, 0x1c, 0xf7, 0x8a, 0x57, 0x1e, 0x40, 0xe9, 0x9f, 0xe4, 0xea, 0xc1, 0xcd, 0x4e, 0x81, 0x69, 0x01, 0x12, 0xb0, 0xa8, 0x8f, 0x20, 0xf7, 0x13, 0x6b, 0x28, 0xd7, 0xd4, 0x7e, 0x5f, 0xbc, 0x2a, 0xda, 0x3c, 0x8e, 0xdd, 0x87, 0x58, 0x9b, 0xc1, 0x9e, 0xc9, 0x59, 0x06, 0x37, 0xbd,
1932*f0865ec9SKyle Evans };
1933*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_14_test_vector_shared_secret[] = {
1934*f0865ec9SKyle Evans 	0xbc, 0x5c, 0x70, 0x55, 0x08, 0x9f, 0xc9, 0xd6, 0xc8, 0x9f, 0x83, 0xc1, 0xea, 0x1a, 0xda, 0x87, 0x9d, 0x99, 0x34, 0xb2, 0xea, 0x28, 0xfc, 0xf4, 0xe4, 0xa7, 0xe9, 0x84, 0xb2, 0x8a, 0xd2, 0xcf,
1935*f0865ec9SKyle Evans };
1936*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_14_test_case = {
1937*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 14",
1938*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1939*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1940*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_14_test_vector_our_priv_key,
1941*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_our_priv_key),
1942*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_14_test_vector_peer_pub_key,
1943*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_peer_pub_key),
1944*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_14_test_vector_our_pub_key,
1945*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_our_pub_key),
1946*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_14_test_vector_shared_secret,
1947*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_14_test_vector_shared_secret),
1948*f0865ec9SKyle Evans };
1949*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1950*f0865ec9SKyle Evans 
1951*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1952*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_15
1953*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1954*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_15_test_vector_our_priv_key[] = {
1955*f0865ec9SKyle Evans 	0x40, 0x02, 0x53, 0x43, 0x07, 0xf8, 0xb6, 0x2a, 0x9b, 0xf6, 0x7f, 0xf6, 0x41, 0xdd, 0xc6, 0x0f, 0xef, 0x59, 0x3b, 0x17, 0xc3, 0x34, 0x12, 0x39, 0xe9, 0x5b, 0xdb, 0x3e, 0x57, 0x9b, 0xfd, 0xc8,
1956*f0865ec9SKyle Evans };
1957*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_15_test_vector_peer_pub_key[] = {
1958*f0865ec9SKyle Evans 	0x19, 0xb3, 0x8d, 0xe3, 0x9f, 0xdd, 0x2f, 0x70, 0xf7, 0x09, 0x16, 0x31, 0xa4, 0xf7, 0x5d, 0x19, 0x93, 0x74, 0x0b, 0xa9, 0x42, 0x91, 0x62, 0xc2, 0xa4, 0x53, 0x12, 0x40, 0x16, 0x36, 0xb2, 0x9c, 0x09, 0xae, 0xd7, 0x23, 0x2b, 0x28, 0xe0, 0x60, 0x94, 0x17, 0x41, 0xb6, 0x82, 0x8b, 0xcd, 0xfa, 0x2b, 0xc4, 0x9c, 0xc8, 0x44, 0xf3, 0x77, 0x36, 0x11, 0x50, 0x4f, 0x82, 0xa3, 0x90, 0xa5, 0xae,
1959*f0865ec9SKyle Evans };
1960*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_15_test_vector_our_pub_key[] = {
1961*f0865ec9SKyle Evans 	0x5f, 0xe9, 0x64, 0x67, 0x13, 0x15, 0xa1, 0x8a, 0xa6, 0x8a, 0x2a, 0x6e, 0x3d, 0xd1, 0xfd, 0xe7, 0xe2, 0x3b, 0x8c, 0xe7, 0x18, 0x14, 0x71, 0xcf, 0xac, 0x43, 0xc9, 0x9e, 0x1a, 0xe8, 0x02, 0x62, 0xd5, 0x82, 0x7b, 0xe2, 0x82, 0xe6, 0x2c, 0x84, 0xde, 0x53, 0x1b, 0x96, 0x38, 0x84, 0xba, 0x83, 0x2d, 0xb5, 0xd6, 0xb2, 0xc3, 0xa2, 0x56, 0xf0, 0xe6, 0x04, 0xfe, 0x7e, 0x6b, 0x8a, 0x7f, 0x72,
1962*f0865ec9SKyle Evans };
1963*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_15_test_vector_shared_secret[] = {
1964*f0865ec9SKyle Evans 	0x9a, 0x4e, 0x8e, 0x65, 0x7f, 0x6b, 0x0e, 0x09, 0x7f, 0x47, 0x95, 0x4a, 0x63, 0xc7, 0x5d, 0x74, 0xfc, 0xba, 0x71, 0xa3, 0x0d, 0x83, 0x65, 0x1e, 0x3e, 0x5a, 0x91, 0xaa, 0x7c, 0xcd, 0x83, 0x43,
1965*f0865ec9SKyle Evans };
1966*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_15_test_case = {
1967*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 15",
1968*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1969*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
1970*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_15_test_vector_our_priv_key,
1971*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_our_priv_key),
1972*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_15_test_vector_peer_pub_key,
1973*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_peer_pub_key),
1974*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_15_test_vector_our_pub_key,
1975*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_our_pub_key),
1976*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_15_test_vector_shared_secret,
1977*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_15_test_vector_shared_secret),
1978*f0865ec9SKyle Evans };
1979*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
1980*f0865ec9SKyle Evans 
1981*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
1982*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_16
1983*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
1984*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_16_test_vector_our_priv_key[] = {
1985*f0865ec9SKyle Evans 	0x4d, 0xfa, 0x12, 0xde, 0xfc, 0x60, 0x31, 0x90, 0x21, 0xb6, 0x81, 0xb3, 0xff, 0x84, 0xa1, 0x0a, 0x51, 0x19, 0x58, 0xc8, 0x50, 0x93, 0x9e, 0xd4, 0x56, 0x35, 0x93, 0x4b, 0xa4, 0x97, 0x91, 0x47,
1986*f0865ec9SKyle Evans };
1987*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_16_test_vector_peer_pub_key[] = {
1988*f0865ec9SKyle Evans 	0x2c, 0x91, 0xc6, 0x1f, 0x33, 0xad, 0xfe, 0x93, 0x11, 0xc9, 0x42, 0xfd, 0xbf, 0xf6, 0xba, 0x47, 0x02, 0x0f, 0xef, 0xf4, 0x16, 0xb7, 0xbb, 0x63, 0xce, 0xc1, 0x3f, 0xaf, 0x9b, 0x09, 0x99, 0x54, 0x6c, 0xab, 0x31, 0xb0, 0x64, 0x19, 0xe5, 0x22, 0x1f, 0xca, 0x01, 0x4f, 0xb8, 0x4e, 0xc8, 0x70, 0x62, 0x2a, 0x1b, 0x12, 0xba, 0xb5, 0xae, 0x43, 0x68, 0x2a, 0xa7, 0xea, 0x73, 0xea, 0x08, 0xd0,
1989*f0865ec9SKyle Evans };
1990*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_16_test_vector_our_pub_key[] = {
1991*f0865ec9SKyle Evans 	0xc9, 0xb2, 0xb8, 0x49, 0x6f, 0x14, 0x40, 0xbd, 0x4a, 0x2d, 0x1e, 0x52, 0x75, 0x2f, 0xd3, 0x72, 0x83, 0x5b, 0x36, 0x48, 0x85, 0xe1, 0x54, 0xa7, 0xda, 0xc4, 0x92, 0x95, 0xf2, 0x81, 0xec, 0x7c, 0xfb, 0xe6, 0xb9, 0x26, 0xa8, 0xa4, 0xde, 0x26, 0xcc, 0xc8, 0x3b, 0x80, 0x2b, 0x12, 0x12, 0x40, 0x07, 0x54, 0xbe, 0x25, 0xd9, 0xf3, 0xee, 0xaf, 0x00, 0x8b, 0x09, 0x87, 0x0a, 0xe7, 0x63, 0x21,
1992*f0865ec9SKyle Evans };
1993*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_16_test_vector_shared_secret[] = {
1994*f0865ec9SKyle Evans 	0x3c, 0xa1, 0xfc, 0x7a, 0xd8, 0x58, 0xfb, 0x1a, 0x6a, 0xba, 0x23, 0x25, 0x42, 0xf3, 0xe2, 0xa7, 0x49, 0xff, 0xc7, 0x20, 0x3a, 0x23, 0x74, 0xa3, 0xf3, 0xd3, 0x26, 0x7f, 0x1f, 0xc9, 0x7b, 0x78,
1995*f0865ec9SKyle Evans };
1996*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_16_test_case = {
1997*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 16",
1998*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
1999*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2000*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_16_test_vector_our_priv_key,
2001*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_our_priv_key),
2002*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_16_test_vector_peer_pub_key,
2003*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_peer_pub_key),
2004*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_16_test_vector_our_pub_key,
2005*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_our_pub_key),
2006*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_16_test_vector_shared_secret,
2007*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_16_test_vector_shared_secret),
2008*f0865ec9SKyle Evans };
2009*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2010*f0865ec9SKyle Evans 
2011*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
2012*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_17
2013*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
2014*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_17_test_vector_our_priv_key[] = {
2015*f0865ec9SKyle Evans 	0x13, 0x31, 0xf6, 0xd8, 0x74, 0xa4, 0xed, 0x3b, 0xc4, 0xa2, 0xc6, 0xe9, 0xc7, 0x43, 0x31, 0xd3, 0x03, 0x97, 0x96, 0x31, 0x4b, 0xee, 0xe3, 0xb7, 0x15, 0x2f, 0xcd, 0xba, 0x55, 0x56, 0x30, 0x4e,
2016*f0865ec9SKyle Evans };
2017*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_17_test_vector_peer_pub_key[] = {
2018*f0865ec9SKyle Evans 	0xa2, 0x8a, 0x2e, 0xdf, 0x58, 0x02, 0x56, 0x68, 0xf7, 0x24, 0xaa, 0xf8, 0x3a, 0x50, 0x95, 0x6b, 0x7a, 0xc1, 0xcf, 0xbb, 0xff, 0x79, 0xb0, 0x8c, 0x3b, 0xf8, 0x7d, 0xfd, 0x28, 0x28, 0xd7, 0x67, 0xdf, 0xa7, 0xbf, 0xff, 0xd4, 0xc7, 0x66, 0xb8, 0x6a, 0xbe, 0xaf, 0x5c, 0x99, 0xb6, 0xe5, 0x0c, 0xb9, 0xcc, 0xc9, 0xd9, 0xd0, 0x0b, 0x7f, 0xfc, 0x78, 0x04, 0xb0, 0x49, 0x1b, 0x67, 0xbc, 0x03,
2019*f0865ec9SKyle Evans };
2020*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_17_test_vector_our_pub_key[] = {
2021*f0865ec9SKyle Evans 	0x59, 0xe1, 0xe1, 0x01, 0x52, 0x10, 0x46, 0xad, 0x9c, 0xf1, 0xd0, 0x82, 0xe9, 0xd2, 0xec, 0x7d, 0xd2, 0x25, 0x30, 0xcc, 0xe0, 0x64, 0x99, 0x1f, 0x1e, 0x55, 0xc5, 0xbc, 0xf5, 0xfc, 0xb5, 0x91, 0x48, 0x2f, 0x4f, 0x67, 0x31, 0x76, 0xc8, 0xfd, 0xaa, 0x0b, 0xb6, 0xe5, 0x9b, 0x15, 0xa3, 0xe4, 0x74, 0x54, 0xe3, 0xa0, 0x42, 0x97, 0xd3, 0x86, 0x3c, 0x93, 0x38, 0xd9, 0x8a, 0xdd, 0x1f, 0x37,
2022*f0865ec9SKyle Evans };
2023*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_17_test_vector_shared_secret[] = {
2024*f0865ec9SKyle Evans 	0x1a, 0xaa, 0xbe, 0x7e, 0xe6, 0xe4, 0xa6, 0xfa, 0x73, 0x22, 0x91, 0x20, 0x24, 0x33, 0xa2, 0x37, 0xdf, 0x1b, 0x49, 0xbc, 0x53, 0x86, 0x6b, 0xfb, 0xe0, 0x0d, 0xb9, 0x6a, 0x0f, 0x58, 0x22, 0x4f,
2025*f0865ec9SKyle Evans };
2026*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_17_test_case = {
2027*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 17",
2028*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2029*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2030*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_17_test_vector_our_priv_key,
2031*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_our_priv_key),
2032*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_17_test_vector_peer_pub_key,
2033*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_peer_pub_key),
2034*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_17_test_vector_our_pub_key,
2035*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_our_pub_key),
2036*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_17_test_vector_shared_secret,
2037*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_17_test_vector_shared_secret),
2038*f0865ec9SKyle Evans };
2039*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2040*f0865ec9SKyle Evans 
2041*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
2042*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_18
2043*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
2044*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_18_test_vector_our_priv_key[] = {
2045*f0865ec9SKyle Evans 	0xdd, 0x5e, 0x9f, 0x70, 0xae, 0x74, 0x00, 0x73, 0xca, 0x02, 0x04, 0xdf, 0x60, 0x76, 0x3f, 0xb6, 0x03, 0x6c, 0x45, 0x70, 0x9b, 0xf4, 0xa7, 0xbb, 0x4e, 0x67, 0x14, 0x12, 0xfa, 0xd6, 0x5d, 0xa3,
2046*f0865ec9SKyle Evans };
2047*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_18_test_vector_peer_pub_key[] = {
2048*f0865ec9SKyle Evans 	0xa2, 0xef, 0x85, 0x7a, 0x08, 0x1f, 0x9d, 0x6e, 0xb2, 0x06, 0xa8, 0x1c, 0x4c, 0xf7, 0x8a, 0x80, 0x2b, 0xdf, 0x59, 0x8a, 0xe3, 0x80, 0xc8, 0x88, 0x6e, 0xcd, 0x85, 0xfd, 0xc1, 0xed, 0x76, 0x44, 0x56, 0x3c, 0x4c, 0x20, 0x41, 0x9f, 0x07, 0xbc, 0x17, 0xd0, 0x53, 0x9f, 0xad, 0xe1, 0x85, 0x5e, 0x34, 0x83, 0x95, 0x15, 0xb8, 0x92, 0xc0, 0xf5, 0xd2, 0x65, 0x61, 0xf9, 0x7f, 0xa0, 0x4d, 0x1a,
2049*f0865ec9SKyle Evans };
2050*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_18_test_vector_our_pub_key[] = {
2051*f0865ec9SKyle Evans 	0x30, 0xb9, 0xdb, 0x2e, 0x2e, 0x97, 0x7b, 0xcd, 0xc9, 0x8c, 0xb8, 0x7d, 0xd7, 0x36, 0xcb, 0xd8, 0xe7, 0x85, 0x52, 0x12, 0x19, 0x25, 0xcf, 0x16, 0xe1, 0x93, 0x36, 0x57, 0xc2, 0xfb, 0x23, 0x14, 0x6a, 0x45, 0x02, 0x88, 0x00, 0xb8, 0x12, 0x91, 0xbc, 0xe5, 0xc2, 0xe1, 0xfe, 0xd7, 0xde, 0xd6, 0x50, 0x62, 0x0e, 0xbb, 0xe6, 0x05, 0x0c, 0x6f, 0x3a, 0x7f, 0x0d, 0xfb, 0x46, 0x73, 0xab, 0x5c,
2052*f0865ec9SKyle Evans };
2053*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_18_test_vector_shared_secret[] = {
2054*f0865ec9SKyle Evans 	0x43, 0x0e, 0x6a, 0x4f, 0xba, 0x44, 0x49, 0xd7, 0x00, 0xd2, 0x73, 0x3e, 0x55, 0x7f, 0x66, 0xa3, 0xbf, 0x3d, 0x50, 0x51, 0x7c, 0x12, 0x71, 0xb1, 0xdd, 0xae, 0x11, 0x61, 0xb7, 0xac, 0x79, 0x8c,
2055*f0865ec9SKyle Evans };
2056*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_18_test_case = {
2057*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 18",
2058*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2059*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2060*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_18_test_vector_our_priv_key,
2061*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_our_priv_key),
2062*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_18_test_vector_peer_pub_key,
2063*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_peer_pub_key),
2064*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_18_test_vector_our_pub_key,
2065*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_our_pub_key),
2066*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_18_test_vector_shared_secret,
2067*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_18_test_vector_shared_secret),
2068*f0865ec9SKyle Evans };
2069*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2070*f0865ec9SKyle Evans 
2071*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
2072*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_19
2073*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
2074*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_19_test_vector_our_priv_key[] = {
2075*f0865ec9SKyle Evans 	0x5a, 0xe0, 0x26, 0xcf, 0xc0, 0x60, 0xd5, 0x56, 0x00, 0x71, 0x7e, 0x55, 0xb8, 0xa1, 0x2e, 0x11, 0x6d, 0x1d, 0x0d, 0xf3, 0x4a, 0xf8, 0x31, 0x97, 0x90, 0x57, 0x60, 0x7c, 0x2d, 0x9c, 0x2f, 0x76,
2076*f0865ec9SKyle Evans };
2077*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_19_test_vector_peer_pub_key[] = {
2078*f0865ec9SKyle Evans 	0xcc, 0xd8, 0xa2, 0xd8, 0x6b, 0xc9, 0x2f, 0x2e, 0x01, 0xbc, 0xe4, 0xd6, 0x92, 0x2c, 0xf7, 0xfe, 0x16, 0x26, 0xae, 0xd0, 0x44, 0x68, 0x5e, 0x95, 0xe2, 0xee, 0xbd, 0x46, 0x45, 0x05, 0xf0, 0x1f, 0xe9, 0xdd, 0xd5, 0x83, 0xa9, 0x63, 0x5a, 0x66, 0x77, 0x77, 0xd5, 0xb8, 0xa8, 0xf3, 0x1b, 0x0f, 0x79, 0xeb, 0xa1, 0x2c, 0x75, 0x02, 0x34, 0x10, 0xb5, 0x4b, 0x85, 0x67, 0xdd, 0xdc, 0x0f, 0x38,
2079*f0865ec9SKyle Evans };
2080*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_19_test_vector_our_pub_key[] = {
2081*f0865ec9SKyle Evans 	0x46, 0xc9, 0xeb, 0xd1, 0xa4, 0xa3, 0xc8, 0xc0, 0xb6, 0xd5, 0x72, 0xb5, 0xdc, 0xfb, 0xa1, 0x24, 0x67, 0x60, 0x32, 0x08, 0xa9, 0xcb, 0x5d, 0x2a, 0xcf, 0xbb, 0x73, 0x3c, 0x40, 0xcf, 0x63, 0x91, 0x46, 0xc9, 0x13, 0xa2, 0x7d, 0x04, 0x41, 0x85, 0xd3, 0x8b, 0x46, 0x7a, 0xce, 0x01, 0x1e, 0x04, 0xd4, 0xd9, 0xbb, 0xbb, 0x8c, 0xb9, 0xae, 0x25, 0xfa, 0x92, 0xaa, 0xf1, 0x5a, 0x59, 0x5e, 0x86,
2082*f0865ec9SKyle Evans };
2083*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_19_test_vector_shared_secret[] = {
2084*f0865ec9SKyle Evans 	0x1c, 0xe9, 0xe6, 0x74, 0x05, 0x29, 0x49, 0x9f, 0x98, 0xd1, 0xf1, 0xd7, 0x13, 0x29, 0x14, 0x7a, 0x33, 0xdf, 0x1d, 0x05, 0xe4, 0x76, 0x5b, 0x53, 0x9b, 0x11, 0xcf, 0x61, 0x5d, 0x69, 0x74, 0xd3,
2085*f0865ec9SKyle Evans };
2086*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_19_test_case = {
2087*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 19",
2088*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2089*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2090*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_19_test_vector_our_priv_key,
2091*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_our_priv_key),
2092*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_19_test_vector_peer_pub_key,
2093*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_peer_pub_key),
2094*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_19_test_vector_our_pub_key,
2095*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_our_pub_key),
2096*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_19_test_vector_shared_secret,
2097*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_19_test_vector_shared_secret),
2098*f0865ec9SKyle Evans };
2099*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2100*f0865ec9SKyle Evans 
2101*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
2102*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_20
2103*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
2104*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_20_test_vector_our_priv_key[] = {
2105*f0865ec9SKyle Evans 	0xb6, 0x01, 0xac, 0x42, 0x5d, 0x5d, 0xbf, 0x9e, 0x17, 0x35, 0xc5, 0xe2, 0xd5, 0xbd, 0xb7, 0x9c, 0xa9, 0x8b, 0x3d, 0x5b, 0xe4, 0xa2, 0xcf, 0xd6, 0xf2, 0x27, 0x3f, 0x15, 0x0e, 0x06, 0x4d, 0x9d,
2106*f0865ec9SKyle Evans };
2107*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_20_test_vector_peer_pub_key[] = {
2108*f0865ec9SKyle Evans 	0xc1, 0x88, 0xff, 0xc8, 0x94, 0x7f, 0x73, 0x01, 0xfb, 0x7b, 0x53, 0xe3, 0x67, 0x46, 0x09, 0x7c, 0x21, 0x34, 0xbf, 0x9c, 0xc9, 0x81, 0xba, 0x74, 0xb4, 0xe9, 0xc4, 0x36, 0x1f, 0x59, 0x5e, 0x4e, 0xbf, 0x7d, 0x2f, 0x20, 0x56, 0xe7, 0x24, 0x21, 0xef, 0x39, 0x3f, 0x0c, 0x0f, 0x2b, 0x0e, 0x00, 0x13, 0x0e, 0x3c, 0xac, 0x4a, 0xbb, 0xcc, 0x00, 0x28, 0x61, 0x68, 0xe8, 0x5e, 0xc5, 0x50, 0x51,
2109*f0865ec9SKyle Evans };
2110*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_20_test_vector_our_pub_key[] = {
2111*f0865ec9SKyle Evans 	0x7c, 0x9e, 0x95, 0x08, 0x41, 0xd2, 0x6c, 0x8d, 0xde, 0x89, 0x94, 0x39, 0x8b, 0x8f, 0x5d, 0x47, 0x5a, 0x02, 0x2b, 0xc6, 0x3d, 0xe7, 0x77, 0x3f, 0xcf, 0x8d, 0x55, 0x2e, 0x01, 0xf1, 0xba, 0x0a, 0xcc, 0x42, 0xb9, 0x88, 0x5c, 0x9b, 0x3b, 0xee, 0x0f, 0x8d, 0x8c, 0x57, 0xd3, 0xa8, 0xf6, 0x35, 0x50, 0x16, 0xc0, 0x19, 0xc4, 0x06, 0x2f, 0xa2, 0x2c, 0xff, 0x2f, 0x20, 0x9b, 0x5c, 0xc2, 0xe1,
2112*f0865ec9SKyle Evans };
2113*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_20_test_vector_shared_secret[] = {
2114*f0865ec9SKyle Evans 	0x46, 0x90, 0xe3, 0x74, 0x3c, 0x07, 0xd6, 0x43, 0xf1, 0xbc, 0x18, 0x36, 0x36, 0xab, 0x2a, 0x9c, 0xb9, 0x36, 0xa6, 0x0a, 0x80, 0x21, 0x13, 0xc4, 0x9b, 0xb1, 0xb3, 0xf2, 0xd0, 0x66, 0x16, 0x60,
2115*f0865ec9SKyle Evans };
2116*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_20_test_case = {
2117*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 20",
2118*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2119*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2120*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_20_test_vector_our_priv_key,
2121*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_our_priv_key),
2122*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_20_test_vector_peer_pub_key,
2123*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_peer_pub_key),
2124*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_20_test_vector_our_pub_key,
2125*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_our_pub_key),
2126*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_20_test_vector_shared_secret,
2127*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_20_test_vector_shared_secret),
2128*f0865ec9SKyle Evans };
2129*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2130*f0865ec9SKyle Evans 
2131*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
2132*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_21
2133*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
2134*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_21_test_vector_our_priv_key[] = {
2135*f0865ec9SKyle Evans 	0xfe, 0xfb, 0x1d, 0xda, 0x18, 0x45, 0x31, 0x2b, 0x5f, 0xce, 0x6b, 0x81, 0xb2, 0xbe, 0x20, 0x5a, 0xf2, 0xf3, 0xa2, 0x74, 0xf5, 0xa2, 0x12, 0xf6, 0x6c, 0x0d, 0x9f, 0xc3, 0x3d, 0x7a, 0xe5, 0x35,
2136*f0865ec9SKyle Evans };
2137*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_21_test_vector_peer_pub_key[] = {
2138*f0865ec9SKyle Evans 	0x31, 0x7e, 0x10, 0x20, 0xff, 0x53, 0xfc, 0xce, 0xf1, 0x8b, 0xf4, 0x7b, 0xb7, 0xf2, 0xdd, 0x77, 0x07, 0xfb, 0x7b, 0x7a, 0x75, 0x78, 0xe0, 0x4f, 0x35, 0xb3, 0xbe, 0xed, 0x22, 0x2a, 0x0e, 0xb6, 0x09, 0x42, 0x0c, 0xe5, 0xa1, 0x9d, 0x77, 0xc6, 0xfe, 0x1e, 0xe5, 0x87, 0xe6, 0xa4, 0x9f, 0xba, 0xf8, 0xf2, 0x80, 0xe8, 0xdf, 0x03, 0x3d, 0x75, 0x40, 0x33, 0x02, 0xe5, 0xa2, 0x7d, 0xb2, 0xae,
2139*f0865ec9SKyle Evans };
2140*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_21_test_vector_our_pub_key[] = {
2141*f0865ec9SKyle Evans 	0x38, 0xb5, 0x4d, 0xb8, 0x55, 0x00, 0xcb, 0x20, 0xc6, 0x10, 0x56, 0xed, 0xd3, 0xd8, 0x8b, 0x6a, 0x9d, 0xc2, 0x67, 0x80, 0xa0, 0x47, 0xf2, 0x13, 0xa6, 0xe1, 0xb9, 0x00, 0xf7, 0x65, 0x96, 0xeb, 0x63, 0x87, 0xe4, 0xe5, 0x78, 0x15, 0x71, 0xe4, 0xeb, 0x8a, 0xe6, 0x29, 0x91, 0xa3, 0x3b, 0x5d, 0xc3, 0x33, 0x01, 0xc5, 0xbc, 0x7e, 0x12, 0x5d, 0x53, 0x79, 0x4a, 0x39, 0x16, 0x0d, 0x8f, 0xd0,
2142*f0865ec9SKyle Evans };
2143*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_21_test_vector_shared_secret[] = {
2144*f0865ec9SKyle Evans 	0x30, 0xc2, 0x26, 0x1b, 0xd0, 0x00, 0x4e, 0x61, 0xfe, 0xda, 0x2c, 0x16, 0xaa, 0x5e, 0x21, 0xff, 0xa8, 0xd7, 0xe7, 0xf7, 0xdb, 0xf6, 0xec, 0x37, 0x9a, 0x43, 0xb4, 0x8e, 0x4b, 0x36, 0xae, 0xb0,
2145*f0865ec9SKyle Evans };
2146*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_21_test_case = {
2147*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 21",
2148*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2149*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2150*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_21_test_vector_our_priv_key,
2151*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_our_priv_key),
2152*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_21_test_vector_peer_pub_key,
2153*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_peer_pub_key),
2154*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_21_test_vector_our_pub_key,
2155*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_our_pub_key),
2156*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_21_test_vector_shared_secret,
2157*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_21_test_vector_shared_secret),
2158*f0865ec9SKyle Evans };
2159*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2160*f0865ec9SKyle Evans 
2161*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
2162*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_22
2163*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
2164*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_22_test_vector_our_priv_key[] = {
2165*f0865ec9SKyle Evans 	0x33, 0x4a, 0xe0, 0xc4, 0x69, 0x3d, 0x23, 0x93, 0x5a, 0x7e, 0x8e, 0x04, 0x3e, 0xbb, 0xde, 0x21, 0xe1, 0x68, 0xa7, 0xcb, 0xa3, 0xfa, 0x50, 0x7c, 0x9b, 0xe4, 0x1d, 0x76, 0x81, 0xe0, 0x49, 0xce,
2166*f0865ec9SKyle Evans };
2167*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_22_test_vector_peer_pub_key[] = {
2168*f0865ec9SKyle Evans 	0x45, 0xfb, 0x02, 0xb2, 0xce, 0xb9, 0xd7, 0xc7, 0x9d, 0x9c, 0x2f, 0xa9, 0x3e, 0x9c, 0x79, 0x67, 0xc2, 0xfa, 0x4d, 0xf5, 0x78, 0x9f, 0x96, 0x40, 0xb2, 0x42, 0x64, 0xb1, 0xe5, 0x24, 0xfc, 0xb1, 0x5c, 0x6e, 0x8e, 0xcf, 0x1f, 0x7d, 0x30, 0x23, 0x89, 0x3b, 0x7b, 0x1c, 0xa1, 0xe4, 0xd1, 0x78, 0x97, 0x2e, 0xe2, 0xa2, 0x30, 0x75, 0x7d, 0xdc, 0x56, 0x4f, 0xfe, 0x37, 0xf5, 0xc5, 0xa3, 0x21,
2169*f0865ec9SKyle Evans };
2170*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_22_test_vector_our_pub_key[] = {
2171*f0865ec9SKyle Evans 	0x3f, 0x2b, 0xf1, 0x58, 0x9a, 0xbf, 0x30, 0x47, 0xbf, 0x3e, 0x54, 0xac, 0x9a, 0x95, 0x37, 0x9b, 0xff, 0x95, 0xf8, 0xf5, 0x54, 0x05, 0xf6, 0x4e, 0xca, 0x36, 0xa7, 0xee, 0xbe, 0x8f, 0xfc, 0xa7, 0x52, 0x12, 0xa9, 0x4e, 0x66, 0xc5, 0xae, 0x9a, 0x89, 0x91, 0x87, 0x2f, 0x66, 0xa7, 0x27, 0x23, 0xd8, 0x0e, 0xc5, 0xb2, 0xe9, 0x25, 0x74, 0x5c, 0x45, 0x6f, 0x53, 0x71, 0x94, 0x3b, 0x3a, 0x06,
2172*f0865ec9SKyle Evans };
2173*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_22_test_vector_shared_secret[] = {
2174*f0865ec9SKyle Evans 	0x2a, 0xda, 0xe4, 0xa1, 0x38, 0xa2, 0x39, 0xdc, 0xd9, 0x3c, 0x24, 0x3a, 0x38, 0x03, 0xc3, 0xe4, 0xcf, 0x96, 0xe3, 0x7f, 0xe1, 0x4e, 0x6a, 0x9b, 0x71, 0x7b, 0xe9, 0x59, 0x99, 0x59, 0xb1, 0x1c,
2175*f0865ec9SKyle Evans };
2176*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_22_test_case = {
2177*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 22",
2178*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2179*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2180*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_22_test_vector_our_priv_key,
2181*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_our_priv_key),
2182*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_22_test_vector_peer_pub_key,
2183*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_peer_pub_key),
2184*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_22_test_vector_our_pub_key,
2185*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_our_pub_key),
2186*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_22_test_vector_shared_secret,
2187*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_22_test_vector_shared_secret),
2188*f0865ec9SKyle Evans };
2189*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2190*f0865ec9SKyle Evans 
2191*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
2192*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_23
2193*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
2194*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_23_test_vector_our_priv_key[] = {
2195*f0865ec9SKyle Evans 	0x2c, 0x4b, 0xde, 0x40, 0x21, 0x4f, 0xcc, 0x3b, 0xfc, 0x47, 0xd4, 0xcf, 0x43, 0x4b, 0x62, 0x9a, 0xcb, 0xe9, 0x15, 0x7f, 0x8f, 0xd0, 0x28, 0x25, 0x40, 0x33, 0x1d, 0xe7, 0x94, 0x2c, 0xf0, 0x9d,
2196*f0865ec9SKyle Evans };
2197*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_23_test_vector_peer_pub_key[] = {
2198*f0865ec9SKyle Evans 	0xa1, 0x9e, 0xf7, 0xbf, 0xf9, 0x8a, 0xda, 0x78, 0x18, 0x42, 0xfb, 0xfc, 0x51, 0xa4, 0x7a, 0xff, 0x39, 0xb5, 0x93, 0x5a, 0x1c, 0x7d, 0x96, 0x25, 0xc8, 0xd3, 0x23, 0xd5, 0x11, 0xc9, 0x2d, 0xe6, 0xe9, 0xc1, 0x84, 0xdf, 0x75, 0xc9, 0x55, 0xe0, 0x2e, 0x02, 0xe4, 0x00, 0xff, 0xe4, 0x5f, 0x78, 0xf3, 0x39, 0xe1, 0xaf, 0xe6, 0xd0, 0x56, 0xfb, 0x32, 0x45, 0xf4, 0x70, 0x0c, 0xe6, 0x06, 0xef,
2199*f0865ec9SKyle Evans };
2200*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_23_test_vector_our_pub_key[] = {
2201*f0865ec9SKyle Evans 	0x29, 0xc0, 0x80, 0x7f, 0x10, 0xcb, 0xc4, 0x2f, 0xb4, 0x5c, 0x99, 0x89, 0xda, 0x50, 0x68, 0x1e, 0xea, 0xd7, 0x16, 0xda, 0xa7, 0xb9, 0xe9, 0x1f, 0xd3, 0x2e, 0x06, 0x2f, 0x5e, 0xb9, 0x2c, 0xa0, 0xff, 0x1d, 0x6d, 0x19, 0x55, 0xd7, 0x37, 0x6b, 0x2d, 0xa2, 0x4f, 0xe1, 0x16, 0x3a, 0x27, 0x16, 0x59, 0x13, 0x63, 0x41, 0xbc, 0x2e, 0xb1, 0x19, 0x5f, 0xc7, 0x06, 0xdc, 0x62, 0xe7, 0xf3, 0x4d,
2202*f0865ec9SKyle Evans };
2203*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_23_test_vector_shared_secret[] = {
2204*f0865ec9SKyle Evans 	0x2e, 0x27, 0x7e, 0xc3, 0x0f, 0x5e, 0xa0, 0x7d, 0x6c, 0xe5, 0x13, 0x14, 0x9b, 0x94, 0x79, 0xb9, 0x6e, 0x07, 0xf4, 0xb6, 0x91, 0x3b, 0x1b, 0x5c, 0x11, 0x30, 0x5c, 0x14, 0x44, 0xa1, 0xbc, 0x0b,
2205*f0865ec9SKyle Evans };
2206*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_23_test_case = {
2207*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 23",
2208*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2209*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2210*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_23_test_vector_our_priv_key,
2211*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_our_priv_key),
2212*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_23_test_vector_peer_pub_key,
2213*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_peer_pub_key),
2214*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_23_test_vector_our_pub_key,
2215*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_our_pub_key),
2216*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_23_test_vector_shared_secret,
2217*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_23_test_vector_shared_secret),
2218*f0865ec9SKyle Evans };
2219*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2220*f0865ec9SKyle Evans 
2221*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP256R1
2222*f0865ec9SKyle Evans #define ECCCDH_SECP256R1_SELF_TEST_24
2223*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP256R1 ***/
2224*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_24_test_vector_our_priv_key[] = {
2225*f0865ec9SKyle Evans 	0x85, 0xa2, 0x68, 0xf9, 0xd7, 0x77, 0x2f, 0x99, 0x0c, 0x36, 0xb4, 0x2b, 0x0a, 0x33, 0x1a, 0xdc, 0x92, 0xb5, 0x94, 0x1d, 0xe0, 0xb8, 0x62, 0xd5, 0xd8, 0x9a, 0x34, 0x7c, 0xbf, 0x8f, 0xaa, 0xb0,
2226*f0865ec9SKyle Evans };
2227*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_24_test_vector_peer_pub_key[] = {
2228*f0865ec9SKyle Evans 	0x35, 0x6c, 0x5a, 0x44, 0x4c, 0x04, 0x9a, 0x52, 0xfe, 0xe0, 0xad, 0xeb, 0x7e, 0x5d, 0x82, 0xae, 0x5a, 0xa8, 0x30, 0x30, 0xbf, 0xff, 0x31, 0xbb, 0xf8, 0xce, 0x20, 0x96, 0xcf, 0x16, 0x1c, 0x4b, 0x57, 0xd1, 0x28, 0xde, 0x8b, 0x2a, 0x57, 0xa0, 0x94, 0xd1, 0xa0, 0x01, 0xe5, 0x72, 0x17, 0x3f, 0x96, 0xe8, 0x86, 0x6a, 0xe3, 0x52, 0xbf, 0x29, 0xcd, 0xda, 0xf9, 0x2f, 0xc8, 0x5b, 0x2f, 0x92,
2229*f0865ec9SKyle Evans };
2230*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_24_test_vector_our_pub_key[] = {
2231*f0865ec9SKyle Evans 	0x9c, 0xf4, 0xb9, 0x85, 0x81, 0xca, 0x17, 0x79, 0x45, 0x3c, 0xc8, 0x16, 0xff, 0x28, 0xb4, 0x10, 0x0a, 0xf5, 0x6c, 0xf1, 0xbf, 0x2e, 0x5b, 0xc3, 0x12, 0xd8, 0x3b, 0x6b, 0x1b, 0x21, 0xd3, 0x33, 0x7a, 0x55, 0x04, 0xfc, 0xac, 0x52, 0x31, 0xa0, 0xd1, 0x2d, 0x65, 0x82, 0x18, 0x28, 0x48, 0x68, 0x22, 0x9c, 0x84, 0x4a, 0x04, 0xa3, 0x45, 0x0d, 0x6c, 0x73, 0x81, 0xab, 0xe0, 0x80, 0xbf, 0x3b,
2232*f0865ec9SKyle Evans };
2233*f0865ec9SKyle Evans static const u8 ecccdh_SECP256R1_24_test_vector_shared_secret[] = {
2234*f0865ec9SKyle Evans 	0x1e, 0x51, 0x37, 0x3b, 0xd2, 0xc6, 0x04, 0x4c, 0x12, 0x9c, 0x43, 0x6e, 0x74, 0x2a, 0x55, 0xbe, 0x2a, 0x66, 0x8a, 0x85, 0xae, 0x08, 0x44, 0x1b, 0x67, 0x56, 0x44, 0x5d, 0xf5, 0x49, 0x38, 0x57,
2235*f0865ec9SKyle Evans };
2236*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP256R1_24_test_case = {
2237*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP256R1 24",
2238*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2239*f0865ec9SKyle Evans 	.ec_str_p = &secp256r1_str_params,
2240*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP256R1_24_test_vector_our_priv_key,
2241*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_our_priv_key),
2242*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP256R1_24_test_vector_peer_pub_key,
2243*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_peer_pub_key),
2244*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP256R1_24_test_vector_our_pub_key,
2245*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_our_pub_key),
2246*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP256R1_24_test_vector_shared_secret,
2247*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_24_test_vector_shared_secret),
2248*f0865ec9SKyle Evans };
2249*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP256R1 */
2250*f0865ec9SKyle Evans 
2251*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2252*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_0
2253*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2254*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_0_test_vector_our_priv_key[] = {
2255*f0865ec9SKyle Evans 	0x3c, 0xc3, 0x12, 0x2a, 0x68, 0xf0, 0xd9, 0x50, 0x27, 0xad, 0x38, 0xc0, 0x67, 0x91, 0x6b, 0xa0, 0xeb, 0x8c, 0x38, 0x89, 0x4d, 0x22, 0xe1, 0xb1, 0x56, 0x18, 0xb6, 0x81, 0x8a, 0x66, 0x17, 0x74, 0xad, 0x46, 0x3b, 0x20, 0x5d, 0xa8, 0x8c, 0xf6, 0x99, 0xab, 0x4d, 0x43, 0xc9, 0xcf, 0x98, 0xa1,
2256*f0865ec9SKyle Evans };
2257*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_0_test_vector_peer_pub_key[] = {
2258*f0865ec9SKyle Evans 	0xa7, 0xc7, 0x6b, 0x97, 0x0c, 0x3b, 0x5f, 0xe8, 0xb0, 0x5d, 0x28, 0x38, 0xae, 0x04, 0xab, 0x47, 0x69, 0x7b, 0x9e, 0xaf, 0x52, 0xe7, 0x64, 0x59, 0x2e, 0xfd, 0xa2, 0x7f, 0xe7, 0x51, 0x32, 0x72, 0x73, 0x44, 0x66, 0xb4, 0x00, 0x09, 0x1a, 0xdb, 0xf2, 0xd6, 0x8c, 0x58, 0xe0, 0xc5, 0x00, 0x66, 0xac, 0x68, 0xf1, 0x9f, 0x2e, 0x1c, 0xb8, 0x79, 0xae, 0xd4, 0x3a, 0x99, 0x69, 0xb9, 0x1a, 0x08, 0x39, 0xc4, 0xc3, 0x8a, 0x49, 0x74, 0x9b, 0x66, 0x1e, 0xfe, 0xdf, 0x24, 0x34, 0x51, 0x91, 0x5e, 0xd0, 0x90, 0x5a, 0x32, 0xb0, 0x60, 0x99, 0x2b, 0x46, 0x8c, 0x64, 0x76, 0x6f, 0xc8, 0x43, 0x7a,
2259*f0865ec9SKyle Evans };
2260*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_0_test_vector_our_pub_key[] = {
2261*f0865ec9SKyle Evans 	0x98, 0x03, 0x80, 0x7f, 0x2f, 0x6d, 0x2f, 0xd9, 0x66, 0xcd, 0xd0, 0x29, 0x0b, 0xd4, 0x10, 0xc0, 0x19, 0x03, 0x52, 0xfb, 0xec, 0x7f, 0xf6, 0x24, 0x7d, 0xe1, 0x30, 0x2d, 0xf8, 0x6f, 0x25, 0xd3, 0x4f, 0xe4, 0xa9, 0x7b, 0xef, 0x60, 0xcf, 0xf5, 0x48, 0x35, 0x5c, 0x01, 0x5d, 0xbb, 0x3e, 0x5f, 0xba, 0x26, 0xca, 0x69, 0xec, 0x2f, 0x5b, 0x5d, 0x9d, 0xad, 0x20, 0xcc, 0x9d, 0xa7, 0x11, 0x38, 0x3a, 0x9d, 0xbe, 0x34, 0xea, 0x3f, 0xa5, 0xa2, 0xaf, 0x75, 0xb4, 0x65, 0x02, 0x62, 0x9a, 0xd5, 0x4d, 0xd8, 0xb7, 0xd7, 0x3a, 0x8a, 0xbb, 0x06, 0xa3, 0xa3, 0xbe, 0x47, 0xd6, 0x50, 0xcc, 0x99,
2262*f0865ec9SKyle Evans };
2263*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_0_test_vector_shared_secret[] = {
2264*f0865ec9SKyle Evans 	0x5f, 0x9d, 0x29, 0xdc, 0x5e, 0x31, 0xa1, 0x63, 0x06, 0x03, 0x56, 0x21, 0x36, 0x69, 0xc8, 0xce, 0x13, 0x2e, 0x22, 0xf5, 0x7c, 0x9a, 0x04, 0xf4, 0x0b, 0xa7, 0xfc, 0xea, 0xd4, 0x93, 0xb4, 0x57, 0xe5, 0x62, 0x1e, 0x76, 0x6c, 0x40, 0xa2, 0xe3, 0xd4, 0xd6, 0xa0, 0x4b, 0x25, 0xe5, 0x33, 0xf1,
2265*f0865ec9SKyle Evans };
2266*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_0_test_case = {
2267*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 0",
2268*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2269*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2270*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_0_test_vector_our_priv_key,
2271*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_our_priv_key),
2272*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_0_test_vector_peer_pub_key,
2273*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_peer_pub_key),
2274*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_0_test_vector_our_pub_key,
2275*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_our_pub_key),
2276*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_0_test_vector_shared_secret,
2277*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_0_test_vector_shared_secret),
2278*f0865ec9SKyle Evans };
2279*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2280*f0865ec9SKyle Evans 
2281*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2282*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_1
2283*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2284*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_1_test_vector_our_priv_key[] = {
2285*f0865ec9SKyle Evans 	0x92, 0x86, 0x0c, 0x21, 0xbd, 0xe0, 0x61, 0x65, 0xf8, 0xe9, 0x00, 0xc6, 0x87, 0xf8, 0xef, 0x0a, 0x05, 0xd1, 0x4f, 0x29, 0x0b, 0x3f, 0x07, 0xd8, 0xb3, 0xa8, 0xcc, 0x64, 0x04, 0x36, 0x6e, 0x5d, 0x51, 0x19, 0xcd, 0x6d, 0x03, 0xfb, 0x12, 0xdc, 0x58, 0xe8, 0x9f, 0x13, 0xdf, 0x9c, 0xd7, 0x83,
2286*f0865ec9SKyle Evans };
2287*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_1_test_vector_peer_pub_key[] = {
2288*f0865ec9SKyle Evans 	0x30, 0xf4, 0x3f, 0xcf, 0x2b, 0x6b, 0x00, 0xde, 0x53, 0xf6, 0x24, 0xf1, 0x54, 0x30, 0x90, 0x68, 0x18, 0x39, 0x71, 0x7d, 0x53, 0xc7, 0xc9, 0x55, 0xd1, 0xd6, 0x9e, 0xfa, 0xf0, 0x34, 0x9b, 0x73, 0x63, 0xac, 0xb4, 0x47, 0x24, 0x01, 0x01, 0xcb, 0xb3, 0xaf, 0x66, 0x41, 0xce, 0x4b, 0x88, 0xe0, 0x25, 0xe4, 0x6c, 0x0c, 0x54, 0xf0, 0x16, 0x2a, 0x77, 0xef, 0xcc, 0x27, 0xb6, 0xea, 0x79, 0x20, 0x02, 0xae, 0x2b, 0xa8, 0x27, 0x14, 0x29, 0x9c, 0x86, 0x08, 0x57, 0xa6, 0x81, 0x53, 0xab, 0x62, 0xe5, 0x25, 0xec, 0x05, 0x30, 0xd8, 0x1b, 0x5a, 0xa1, 0x58, 0x97, 0x98, 0x1e, 0x85, 0x87, 0x57,
2289*f0865ec9SKyle Evans };
2290*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_1_test_vector_our_pub_key[] = {
2291*f0865ec9SKyle Evans 	0xea, 0x40, 0x18, 0xf5, 0xa3, 0x07, 0xc3, 0x79, 0x18, 0x0b, 0xf6, 0xa6, 0x2f, 0xd2, 0xce, 0xce, 0xeb, 0xee, 0xb7, 0xd4, 0xdf, 0x06, 0x3a, 0x66, 0xfb, 0x83, 0x8a, 0xa3, 0x52, 0x43, 0x41, 0x97, 0x91, 0xf7, 0xe2, 0xc9, 0xd4, 0x80, 0x3c, 0x93, 0x19, 0xaa, 0x0e, 0xb0, 0x3c, 0x41, 0x6b, 0x66, 0x68, 0x83, 0x5a, 0x91, 0x48, 0x4f, 0x05, 0xef, 0x02, 0x82, 0x84, 0xdf, 0x64, 0x36, 0xfb, 0x88, 0xff, 0xeb, 0xab, 0xcd, 0xd6, 0x9a, 0xb0, 0x13, 0x3e, 0x67, 0x35, 0xa1, 0xbc, 0xfb, 0x37, 0x20, 0x3d, 0x10, 0xd3, 0x40, 0xa8, 0x32, 0x8a, 0x7b, 0x68, 0x77, 0x0c, 0xa7, 0x58, 0x78, 0xa1, 0xa6,
2292*f0865ec9SKyle Evans };
2293*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_1_test_vector_shared_secret[] = {
2294*f0865ec9SKyle Evans 	0xa2, 0x37, 0x42, 0xa2, 0xc2, 0x67, 0xd7, 0x42, 0x5f, 0xda, 0x94, 0xb9, 0x3f, 0x93, 0xbb, 0xcc, 0x24, 0x79, 0x1a, 0xc5, 0x1c, 0xd8, 0xfd, 0x50, 0x1a, 0x23, 0x8d, 0x40, 0x81, 0x2f, 0x4c, 0xbf, 0xc5, 0x9a, 0xac, 0x95, 0x20, 0xd7, 0x58, 0xcf, 0x78, 0x9c, 0x76, 0x30, 0x0c, 0x69, 0xd2, 0xff,
2295*f0865ec9SKyle Evans };
2296*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_1_test_case = {
2297*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 1",
2298*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2299*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2300*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_1_test_vector_our_priv_key,
2301*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_our_priv_key),
2302*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_1_test_vector_peer_pub_key,
2303*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_peer_pub_key),
2304*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_1_test_vector_our_pub_key,
2305*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_our_pub_key),
2306*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_1_test_vector_shared_secret,
2307*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_1_test_vector_shared_secret),
2308*f0865ec9SKyle Evans };
2309*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2310*f0865ec9SKyle Evans 
2311*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2312*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_2
2313*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2314*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_2_test_vector_our_priv_key[] = {
2315*f0865ec9SKyle Evans 	0x12, 0xcf, 0x6a, 0x22, 0x3a, 0x72, 0x35, 0x25, 0x43, 0x83, 0x0f, 0x3f, 0x18, 0x53, 0x0d, 0x5c, 0xb3, 0x7f, 0x26, 0x88, 0x0a, 0x0b, 0x29, 0x44, 0x82, 0xc8, 0xa8, 0xef, 0x8a, 0xfa, 0xd0, 0x9a, 0xa7, 0x8b, 0x7d, 0xc2, 0xf2, 0x78, 0x9a, 0x78, 0xc6, 0x6a, 0xf5, 0xd1, 0xcc, 0x55, 0x38, 0x53,
2316*f0865ec9SKyle Evans };
2317*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_2_test_vector_peer_pub_key[] = {
2318*f0865ec9SKyle Evans 	0x1a, 0xef, 0xbf, 0xa2, 0xc6, 0xc8, 0xc8, 0x55, 0xa1, 0xa2, 0x16, 0x77, 0x45, 0x50, 0xb7, 0x9a, 0x24, 0xcd, 0xa3, 0x76, 0x07, 0xbb, 0x1f, 0x7c, 0xc9, 0x06, 0x65, 0x0e, 0xe4, 0xb3, 0x81, 0x6d, 0x68, 0xf6, 0xa9, 0xc7, 0x5d, 0xa6, 0xe4, 0x24, 0x2c, 0xeb, 0xfb, 0x66, 0x52, 0xf6, 0x51, 0x80, 0x41, 0x9d, 0x28, 0xb7, 0x23, 0xeb, 0xad, 0xb7, 0x65, 0x8f, 0xce, 0xbb, 0x9a, 0xd9, 0xb7, 0xad, 0xea, 0x67, 0x4f, 0x1d, 0xa3, 0xdc, 0x6b, 0x63, 0x97, 0xb5, 0x5d, 0xa0, 0xf6, 0x1a, 0x3e, 0xdd, 0xac, 0xb4, 0xac, 0xdb, 0x14, 0x44, 0x1c, 0xb2, 0x14, 0xb0, 0x4a, 0x08, 0x44, 0xc0, 0x2f, 0xa3,
2319*f0865ec9SKyle Evans };
2320*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_2_test_vector_our_pub_key[] = {
2321*f0865ec9SKyle Evans 	0xfc, 0xfc, 0xea, 0x08, 0x5e, 0x8c, 0xf7, 0x4d, 0x0d, 0xce, 0xd1, 0x62, 0x0b, 0xa8, 0x42, 0x36, 0x94, 0xf9, 0x03, 0xa2, 0x19, 0xbb, 0xf9, 0x01, 0xb0, 0xb5, 0x9d, 0x6a, 0xc8, 0x1b, 0xaa, 0xd3, 0x16, 0xa2, 0x42, 0xba, 0x32, 0xbd, 0xe8, 0x5c, 0xb2, 0x48, 0x11, 0x9b, 0x85, 0x2f, 0xab, 0x66, 0x97, 0x2e, 0x3c, 0x68, 0xc7, 0xab, 0x40, 0x2c, 0x58, 0x36, 0xf2, 0xa1, 0x6e, 0xd4, 0x51, 0xa3, 0x31, 0x20, 0xa7, 0x75, 0x0a, 0x60, 0x39, 0xf3, 0xff, 0x15, 0x38, 0x8e, 0xe6, 0x22, 0xb7, 0x06, 0x5f, 0x71, 0x22, 0xbf, 0x6d, 0x51, 0xae, 0xfb, 0xc2, 0x9b, 0x37, 0xb0, 0x34, 0x04, 0x58, 0x1b,
2322*f0865ec9SKyle Evans };
2323*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_2_test_vector_shared_secret[] = {
2324*f0865ec9SKyle Evans 	0x3d, 0x2e, 0x64, 0x0f, 0x35, 0x08, 0x05, 0xee, 0xd1, 0xff, 0x43, 0xb4, 0x0a, 0x72, 0xb2, 0xab, 0xed, 0x0a, 0x51, 0x8b, 0xce, 0xbe, 0x8f, 0x2d, 0x15, 0xb1, 0x11, 0xb6, 0x77, 0x32, 0x23, 0xda, 0x3c, 0x34, 0x89, 0x12, 0x1d, 0xb1, 0x73, 0xd4, 0x14, 0xb5, 0xbd, 0x5a, 0xd7, 0x15, 0x34, 0x35,
2325*f0865ec9SKyle Evans };
2326*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_2_test_case = {
2327*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 2",
2328*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2329*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2330*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_2_test_vector_our_priv_key,
2331*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_our_priv_key),
2332*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_2_test_vector_peer_pub_key,
2333*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_peer_pub_key),
2334*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_2_test_vector_our_pub_key,
2335*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_our_pub_key),
2336*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_2_test_vector_shared_secret,
2337*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_2_test_vector_shared_secret),
2338*f0865ec9SKyle Evans };
2339*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2340*f0865ec9SKyle Evans 
2341*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2342*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_3
2343*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2344*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_3_test_vector_our_priv_key[] = {
2345*f0865ec9SKyle Evans 	0x8d, 0xd4, 0x80, 0x63, 0xa3, 0xa0, 0x58, 0xc3, 0x34, 0xb5, 0xcc, 0x7a, 0x4c, 0xe0, 0x7d, 0x02, 0xe5, 0xee, 0x6d, 0x8f, 0x1f, 0x3c, 0x51, 0xa1, 0x60, 0x09, 0x62, 0xcb, 0xab, 0x46, 0x26, 0x90, 0xae, 0x3c, 0xd9, 0x74, 0xfb, 0x39, 0xe4, 0x0b, 0x0e, 0x84, 0x3d, 0xaa, 0x0f, 0xd3, 0x2d, 0xe1,
2346*f0865ec9SKyle Evans };
2347*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_3_test_vector_peer_pub_key[] = {
2348*f0865ec9SKyle Evans 	0x8b, 0xc0, 0x89, 0x32, 0x6e, 0xc5, 0x5b, 0x9c, 0xf5, 0x9b, 0x34, 0xf0, 0xeb, 0x75, 0x4d, 0x93, 0x59, 0x6c, 0xa2, 0x90, 0xfc, 0xb3, 0x44, 0x4c, 0x83, 0xd4, 0xde, 0x3a, 0x56, 0x07, 0x03, 0x7e, 0xc3, 0x97, 0x68, 0x3f, 0x8c, 0xef, 0x07, 0xea, 0xb2, 0xfe, 0x35, 0x7e, 0xae, 0x36, 0xc4, 0x49, 0xd9, 0xd1, 0x6c, 0xe8, 0xac, 0x85, 0xb3, 0xf1, 0xe9, 0x45, 0x68, 0x52, 0x1a, 0xae, 0x53, 0x4e, 0x67, 0x13, 0x9e, 0x31, 0x0e, 0xc7, 0x26, 0x93, 0x52, 0x6a, 0xa2, 0xe9, 0x27, 0xb5, 0xb3, 0x22, 0xc9, 0x5a, 0x1a, 0x03, 0x3c, 0x22, 0x9c, 0xb6, 0x77, 0x0c, 0x95, 0x7c, 0xd3, 0x14, 0x8d, 0xd7,
2349*f0865ec9SKyle Evans };
2350*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_3_test_vector_our_pub_key[] = {
2351*f0865ec9SKyle Evans 	0xe3, 0x8c, 0x98, 0x46, 0x24, 0x81, 0x23, 0xc3, 0x42, 0x18, 0x61, 0xea, 0x4d, 0x32, 0x66, 0x9a, 0x7b, 0x5c, 0x3c, 0x08, 0x37, 0x6a, 0xd2, 0x81, 0x04, 0x39, 0x94, 0x94, 0xc8, 0x4f, 0xf5, 0xef, 0xa3, 0x89, 0x4a, 0xdb, 0x2c, 0x6c, 0xbe, 0x8c, 0x3c, 0x91, 0x3e, 0xf2, 0xee, 0xc5, 0xbd, 0x3c, 0x9f, 0xa8, 0x40, 0x24, 0xa1, 0x02, 0x87, 0x96, 0xdf, 0x84, 0x02, 0x1f, 0x7b, 0x6c, 0x9d, 0x02, 0xf0, 0xf4, 0xbd, 0x1a, 0x61, 0x2a, 0x03, 0xcb, 0xf7, 0x5a, 0x0b, 0xee, 0xa4, 0x3f, 0xef, 0x8a, 0xe8, 0x4b, 0x48, 0xc6, 0x01, 0x72, 0xaa, 0xdf, 0x09, 0xc1, 0xad, 0x01, 0x6d, 0x0b, 0xf3, 0xce,
2352*f0865ec9SKyle Evans };
2353*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_3_test_vector_shared_secret[] = {
2354*f0865ec9SKyle Evans 	0x6a, 0x42, 0xcf, 0xc3, 0x92, 0xab, 0xa0, 0xbf, 0xd3, 0xd1, 0x7b, 0x7c, 0xcf, 0x06, 0x2b, 0x91, 0xfc, 0x09, 0xbb, 0xf3, 0x41, 0x76, 0x12, 0xd0, 0x2a, 0x90, 0xbd, 0xde, 0x62, 0xae, 0x40, 0xc5, 0x4b, 0xb2, 0xe5, 0x6e, 0x16, 0x7d, 0x6b, 0x70, 0xdb, 0x67, 0x00, 0x97, 0xeb, 0x8d, 0xb8, 0x54,
2355*f0865ec9SKyle Evans };
2356*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_3_test_case = {
2357*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 3",
2358*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2359*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2360*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_3_test_vector_our_priv_key,
2361*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_our_priv_key),
2362*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_3_test_vector_peer_pub_key,
2363*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_peer_pub_key),
2364*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_3_test_vector_our_pub_key,
2365*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_our_pub_key),
2366*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_3_test_vector_shared_secret,
2367*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_3_test_vector_shared_secret),
2368*f0865ec9SKyle Evans };
2369*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2370*f0865ec9SKyle Evans 
2371*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2372*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_4
2373*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2374*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_4_test_vector_our_priv_key[] = {
2375*f0865ec9SKyle Evans 	0x84, 0xec, 0xe6, 0xcc, 0x34, 0x29, 0x30, 0x9b, 0xd5, 0xb2, 0x3e, 0x95, 0x97, 0x93, 0xed, 0x2b, 0x11, 0x1e, 0xc5, 0xcb, 0x43, 0xb6, 0xc1, 0x80, 0x85, 0xfc, 0xae, 0xa9, 0xef, 0xa0, 0x68, 0x5d, 0x98, 0xa6, 0x26, 0x2e, 0xe0, 0xd3, 0x30, 0xee, 0x25, 0x0b, 0xc8, 0xa6, 0x7d, 0x0e, 0x73, 0x3f,
2376*f0865ec9SKyle Evans };
2377*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_4_test_vector_peer_pub_key[] = {
2378*f0865ec9SKyle Evans 	0xeb, 0x95, 0x2e, 0x2d, 0x9a, 0xc0, 0xc2, 0x0c, 0x6c, 0xc4, 0x8f, 0xb2, 0x25, 0xc2, 0xad, 0x15, 0x4f, 0x53, 0xc8, 0x75, 0x0b, 0x00, 0x3f, 0xd3, 0xb4, 0xed, 0x8e, 0xd1, 0xdc, 0x0d, 0xef, 0xac, 0x61, 0xbc, 0xdd, 0xe0, 0x2a, 0x2b, 0xcf, 0xee, 0x70, 0x67, 0xd7, 0x5d, 0x34, 0x2e, 0xd2, 0xb0, 0xf1, 0x82, 0x82, 0x05, 0xba, 0xec, 0xe8, 0x2d, 0x1b, 0x26, 0x7d, 0x0d, 0x7f, 0xf2, 0xf9, 0xc9, 0xe1, 0x5b, 0x69, 0xa7, 0x2d, 0xf4, 0x70, 0x58, 0xa9, 0x7f, 0x38, 0x91, 0x00, 0x5d, 0x1f, 0xb3, 0x88, 0x58, 0xf5, 0x60, 0x3d, 0xe8, 0x40, 0xe5, 0x91, 0xdf, 0xa4, 0xf6, 0xe7, 0xd4, 0x89, 0xe1,
2379*f0865ec9SKyle Evans };
2380*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_4_test_vector_our_pub_key[] = {
2381*f0865ec9SKyle Evans 	0x32, 0x22, 0x06, 0x3a, 0x29, 0x97, 0xb3, 0x02, 0xee, 0x60, 0xee, 0x19, 0x61, 0x10, 0x8f, 0xf4, 0xc7, 0xac, 0xf1, 0xc0, 0xef, 0x1d, 0x5f, 0xb0, 0xd1, 0x64, 0xb8, 0x4b, 0xce, 0x71, 0xc4, 0x31, 0x70, 0x5c, 0xb9, 0xae, 0xa9, 0xa4, 0x5f, 0x5d, 0x73, 0x80, 0x66, 0x55, 0xa0, 0x58, 0xbe, 0xe3, 0xe6, 0x1f, 0xa9, 0xe7, 0xfb, 0xe7, 0xcd, 0x43, 0xab, 0xf9, 0x95, 0x96, 0xa3, 0xd3, 0xa0, 0x39, 0xe9, 0x9f, 0xa9, 0xdc, 0x93, 0xb0, 0xbd, 0xd9, 0xca, 0xd8, 0x19, 0x66, 0xd1, 0x7e, 0xea, 0xf5, 0x57, 0x06, 0x8a, 0xfa, 0x7c, 0x78, 0x46, 0x6b, 0xb5, 0xb2, 0x20, 0x32, 0xd1, 0x10, 0x0f, 0xa6,
2382*f0865ec9SKyle Evans };
2383*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_4_test_vector_shared_secret[] = {
2384*f0865ec9SKyle Evans 	0xce, 0x7b, 0xa4, 0x54, 0xd4, 0x41, 0x27, 0x29, 0xa3, 0x2b, 0xb8, 0x33, 0xa2, 0xd1, 0xfd, 0x2a, 0xe6, 0x12, 0xd4, 0x66, 0x7c, 0x3a, 0x90, 0x0e, 0x06, 0x92, 0x14, 0x81, 0x86, 0x13, 0x44, 0x7d, 0xf8, 0xc6, 0x11, 0xde, 0x66, 0xda, 0x20, 0x0d, 0xb7, 0xc3, 0x75, 0xcf, 0x91, 0x3e, 0x44, 0x05,
2385*f0865ec9SKyle Evans };
2386*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_4_test_case = {
2387*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 4",
2388*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2389*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2390*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_4_test_vector_our_priv_key,
2391*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_our_priv_key),
2392*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_4_test_vector_peer_pub_key,
2393*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_peer_pub_key),
2394*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_4_test_vector_our_pub_key,
2395*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_our_pub_key),
2396*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_4_test_vector_shared_secret,
2397*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_4_test_vector_shared_secret),
2398*f0865ec9SKyle Evans };
2399*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2400*f0865ec9SKyle Evans 
2401*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2402*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_5
2403*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2404*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_5_test_vector_our_priv_key[] = {
2405*f0865ec9SKyle Evans 	0x68, 0xfc, 0xe2, 0x12, 0x1d, 0xc3, 0xa1, 0xe3, 0x7b, 0x10, 0xf1, 0xdd, 0xe3, 0x09, 0xf9, 0xe2, 0xe1, 0x8f, 0xac, 0x47, 0xcd, 0x17, 0x70, 0x95, 0x14, 0x51, 0xc3, 0x48, 0x4c, 0xdb, 0x77, 0xcb, 0x13, 0x6d, 0x00, 0xe7, 0x31, 0x26, 0x05, 0x97, 0xcc, 0x28, 0x59, 0x60, 0x1c, 0x01, 0xa2, 0x5b,
2406*f0865ec9SKyle Evans };
2407*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_5_test_vector_peer_pub_key[] = {
2408*f0865ec9SKyle Evans 	0x44, 0x1d, 0x02, 0x9e, 0x24, 0x4e, 0xb7, 0x16, 0x8d, 0x64, 0x7d, 0x4d, 0xf5, 0x0d, 0xb5, 0xf4, 0xe4, 0x97, 0x4a, 0xb3, 0xfd, 0xaf, 0x02, 0x2a, 0xff, 0x05, 0x8b, 0x36, 0x95, 0xd0, 0xb8, 0xc8, 0x14, 0xcc, 0x88, 0xda, 0x62, 0x85, 0xdc, 0x6d, 0xf1, 0xac, 0x55, 0xc5, 0x53, 0x88, 0x50, 0x03, 0xe8, 0x02, 0x5a, 0xc2, 0x3a, 0x41, 0xd4, 0xb1, 0xea, 0x2a, 0xa4, 0x6c, 0x50, 0xc6, 0xe4, 0x79, 0x94, 0x6b, 0x59, 0xb6, 0xd7, 0x64, 0x97, 0xcd, 0x92, 0x49, 0x97, 0x7e, 0x0b, 0xfe, 0x4a, 0x62, 0x62, 0x62, 0x2f, 0x13, 0xd4, 0x2a, 0x3c, 0x43, 0xd6, 0x6b, 0xdb, 0xb3, 0x04, 0x03, 0xc3, 0x45,
2409*f0865ec9SKyle Evans };
2410*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_5_test_vector_our_pub_key[] = {
2411*f0865ec9SKyle Evans 	0x86, 0x8b, 0xe0, 0xe6, 0x94, 0x84, 0x18, 0x30, 0xe4, 0x24, 0xd9, 0x13, 0xd8, 0xe7, 0xd8, 0x6b, 0x84, 0xee, 0x10, 0x21, 0xd8, 0x2b, 0x0e, 0xcf, 0x52, 0x3f, 0x09, 0xfe, 0x89, 0xa7, 0x6c, 0x0c, 0x95, 0xc4, 0x9f, 0x2d, 0xfb, 0xcf, 0x82, 0x9c, 0x1e, 0x39, 0x70, 0x9d, 0x55, 0xef, 0xbb, 0x3b, 0x91, 0x95, 0xeb, 0x18, 0x36, 0x75, 0xb4, 0x0f, 0xd9, 0x2f, 0x51, 0xf3, 0x77, 0x13, 0x31, 0x7e, 0x4a, 0x9b, 0x4f, 0x71, 0x5c, 0x8a, 0xb2, 0x2e, 0x07, 0x73, 0xb1, 0xbc, 0x71, 0xd3, 0xa2, 0x19, 0xf0, 0x5b, 0x81, 0x16, 0x07, 0x46, 0x58, 0xee, 0x86, 0xb5, 0x2e, 0x36, 0xf3, 0x89, 0x71, 0x16,
2412*f0865ec9SKyle Evans };
2413*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_5_test_vector_shared_secret[] = {
2414*f0865ec9SKyle Evans 	0xba, 0x69, 0xf0, 0xac, 0xdf, 0x3e, 0x1c, 0xa9, 0x5c, 0xaa, 0xac, 0x4e, 0xca, 0xf4, 0x75, 0xbb, 0xe5, 0x1b, 0x54, 0x77, 0x7e, 0xfc, 0xe0, 0x1c, 0xa3, 0x81, 0xf4, 0x53, 0x70, 0xe4, 0x86, 0xfe, 0x87, 0xf9, 0xf4, 0x19, 0xb1, 0x50, 0xc6, 0x1e, 0x32, 0x9a, 0x28, 0x6d, 0x1a, 0xa2, 0x65, 0xec,
2415*f0865ec9SKyle Evans };
2416*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_5_test_case = {
2417*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 5",
2418*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2419*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2420*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_5_test_vector_our_priv_key,
2421*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_our_priv_key),
2422*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_5_test_vector_peer_pub_key,
2423*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_peer_pub_key),
2424*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_5_test_vector_our_pub_key,
2425*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_our_pub_key),
2426*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_5_test_vector_shared_secret,
2427*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_5_test_vector_shared_secret),
2428*f0865ec9SKyle Evans };
2429*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2430*f0865ec9SKyle Evans 
2431*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2432*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_6
2433*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2434*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_6_test_vector_our_priv_key[] = {
2435*f0865ec9SKyle Evans 	0xb1, 0x76, 0x4c, 0x54, 0x89, 0x7e, 0x7a, 0xae, 0x6d, 0xe9, 0xe7, 0x75, 0x1f, 0x2f, 0x37, 0xde, 0x84, 0x92, 0x91, 0xf8, 0x8f, 0x0f, 0x91, 0x09, 0x31, 0x55, 0xb8, 0x58, 0xd1, 0xcc, 0x32, 0xa3, 0xa8, 0x79, 0x80, 0xf7, 0x06, 0xb8, 0x6c, 0xc8, 0x3f, 0x92, 0x7b, 0xdf, 0xdb, 0xea, 0xe0, 0xbd,
2436*f0865ec9SKyle Evans };
2437*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_6_test_vector_peer_pub_key[] = {
2438*f0865ec9SKyle Evans 	0x3d, 0x4e, 0x6b, 0xf0, 0x8a, 0x73, 0x40, 0x4a, 0xcc, 0xc1, 0x62, 0x98, 0x73, 0x46, 0x8e, 0x42, 0x69, 0xe8, 0x2d, 0x90, 0xd8, 0x32, 0xe5, 0x8a, 0xd7, 0x21, 0x42, 0x63, 0x9b, 0x5a, 0x05, 0x6a, 0xd8, 0xd3, 0x5c, 0x66, 0xc6, 0x0e, 0x81, 0x49, 0xfa, 0xc0, 0xc7, 0x97, 0xbc, 0xeb, 0x7c, 0x2f, 0x9b, 0x03, 0x08, 0xdc, 0x7f, 0x0e, 0x6d, 0x29, 0xf8, 0xc2, 0x77, 0xac, 0xbc, 0x65, 0xa2, 0x1e, 0x5a, 0xdb, 0x83, 0xd1, 0x1e, 0x68, 0x73, 0xbc, 0x0a, 0x07, 0xfd, 0xa0, 0x99, 0x7f, 0x48, 0x25, 0x04, 0x60, 0x2f, 0x59, 0xe1, 0x0b, 0xc5, 0xcb, 0x47, 0x6b, 0x83, 0xd0, 0xa4, 0xf7, 0x5e, 0x71,
2439*f0865ec9SKyle Evans };
2440*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_6_test_vector_our_pub_key[] = {
2441*f0865ec9SKyle Evans 	0xc3, 0x71, 0x22, 0x2f, 0xea, 0xa6, 0x77, 0x0c, 0x6f, 0x3e, 0xa3, 0xe0, 0xda, 0xc9, 0x74, 0x0d, 0xef, 0x4f, 0xcf, 0x82, 0x13, 0x78, 0xb7, 0xf9, 0x1f, 0xf9, 0x37, 0xc2, 0x1e, 0x04, 0x70, 0xf7, 0x0f, 0x3a, 0x31, 0xd5, 0xc6, 0xb2, 0x91, 0x21, 0x95, 0xf1, 0x09, 0x26, 0x94, 0x2b, 0x48, 0xae, 0x04, 0x7d, 0x6b, 0x4d, 0x76, 0x51, 0x23, 0x56, 0x3f, 0x81, 0x11, 0x6b, 0xc6, 0x65, 0xb7, 0xb8, 0xcc, 0x62, 0x07, 0x83, 0x0d, 0x80, 0x5f, 0xd8, 0x4d, 0xa7, 0xcb, 0x80, 0x5a, 0x65, 0xba, 0xa7, 0xc1, 0x2f, 0xd5, 0x92, 0xd1, 0xb5, 0xb5, 0xe3, 0xe6, 0x5d, 0x96, 0x72, 0xa9, 0xef, 0x76, 0x62,
2442*f0865ec9SKyle Evans };
2443*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_6_test_vector_shared_secret[] = {
2444*f0865ec9SKyle Evans 	0x1a, 0x66, 0x88, 0xee, 0x1d, 0x6e, 0x59, 0x86, 0x5d, 0x8e, 0x3a, 0xda, 0x37, 0x78, 0x1d, 0x36, 0xbb, 0x0c, 0x27, 0x17, 0xee, 0xf9, 0x2e, 0x61, 0x96, 0x4d, 0x39, 0x27, 0xcb, 0x76, 0x5c, 0x29, 0x65, 0xea, 0x80, 0xf7, 0xf6, 0x3e, 0x58, 0xc3, 0x22, 0xba, 0x03, 0x97, 0xfa, 0xea, 0xf6, 0x2b,
2445*f0865ec9SKyle Evans };
2446*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_6_test_case = {
2447*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 6",
2448*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2449*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2450*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_6_test_vector_our_priv_key,
2451*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_our_priv_key),
2452*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_6_test_vector_peer_pub_key,
2453*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_peer_pub_key),
2454*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_6_test_vector_our_pub_key,
2455*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_our_pub_key),
2456*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_6_test_vector_shared_secret,
2457*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_6_test_vector_shared_secret),
2458*f0865ec9SKyle Evans };
2459*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2460*f0865ec9SKyle Evans 
2461*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2462*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_7
2463*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2464*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_7_test_vector_our_priv_key[] = {
2465*f0865ec9SKyle Evans 	0xf0, 0xf7, 0xa9, 0x6e, 0x70, 0xd9, 0x8f, 0xd5, 0xa3, 0x0a, 0xd6, 0x40, 0x6c, 0xf5, 0x6e, 0xb5, 0xb7, 0x2a, 0x51, 0x0e, 0x9f, 0x19, 0x2f, 0x50, 0xe1, 0xf8, 0x45, 0x24, 0xdb, 0xf3, 0xd2, 0x43, 0x9f, 0x72, 0x87, 0xbb, 0x36, 0xf5, 0xaa, 0x91, 0x2a, 0x79, 0xde, 0xaa, 0xb4, 0xad, 0xea, 0x82,
2466*f0865ec9SKyle Evans };
2467*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_7_test_vector_peer_pub_key[] = {
2468*f0865ec9SKyle Evans 	0xf5, 0xf6, 0xbe, 0xf1, 0xd1, 0x10, 0xda, 0x03, 0xbe, 0x00, 0x17, 0xea, 0xc7, 0x60, 0xcc, 0x34, 0xb2, 0x4d, 0x09, 0x2f, 0x73, 0x6f, 0x23, 0x7b, 0xc7, 0x05, 0x4b, 0x38, 0x65, 0x31, 0x2a, 0x81, 0x3b, 0xcb, 0x62, 0xd2, 0x97, 0xfb, 0x10, 0xa4, 0xf7, 0xab, 0xf5, 0x47, 0x08, 0xfe, 0x2d, 0x3d, 0x06, 0xfd, 0xf8, 0xd7, 0xdc, 0x03, 0x2f, 0x4e, 0x10, 0x01, 0x0b, 0xf1, 0x9c, 0xbf, 0x61, 0x59, 0x32, 0x12, 0x52, 0xff, 0x41, 0x5f, 0xb9, 0x19, 0x20, 0xd4, 0x38, 0xf2, 0x4e, 0x67, 0xe6, 0x0c, 0x2e, 0xb0, 0x46, 0x32, 0x04, 0x67, 0x9f, 0xa3, 0x56, 0xaf, 0x44, 0xce, 0xa9, 0xc9, 0xeb, 0xf5,
2469*f0865ec9SKyle Evans };
2470*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_7_test_vector_our_pub_key[] = {
2471*f0865ec9SKyle Evans 	0x99, 0xc8, 0xc4, 0x1c, 0xb1, 0xab, 0x5e, 0x08, 0x54, 0xa3, 0x46, 0xe4, 0xb0, 0x8a, 0x53, 0x7c, 0x17, 0x06, 0xa6, 0x15, 0x53, 0x38, 0x7c, 0x8d, 0x94, 0x94, 0x3a, 0xb1, 0x51, 0x96, 0xd4, 0x0d, 0xba, 0xa5, 0x5b, 0x82, 0x10, 0xa7, 0x7a, 0x5d, 0x00, 0x91, 0x5f, 0x2c, 0x4e, 0xa6, 0x9e, 0xab, 0x55, 0x31, 0x06, 0x5b, 0xdc, 0xf1, 0x7b, 0xfb, 0x3c, 0xb5, 0x5a, 0x02, 0xe4, 0x1a, 0x57, 0xc7, 0xf6, 0x94, 0xc3, 0x83, 0xad, 0x28, 0x9f, 0x90, 0x0f, 0xbd, 0x65, 0x6c, 0x22, 0x33, 0xa9, 0x3c, 0x92, 0xe9, 0x33, 0xe7, 0xa2, 0x6f, 0x54, 0xcb, 0xb5, 0x6f, 0x0a, 0xd8, 0x75, 0xc5, 0x1b, 0xb0,
2472*f0865ec9SKyle Evans };
2473*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_7_test_vector_shared_secret[] = {
2474*f0865ec9SKyle Evans 	0xd0, 0x6a, 0x56, 0x8b, 0xf2, 0x33, 0x6b, 0x90, 0xcb, 0xac, 0x32, 0x51, 0x61, 0xbe, 0x76, 0x95, 0xea, 0xcb, 0x22, 0x95, 0xf5, 0x99, 0x50, 0x0d, 0x78, 0x7f, 0x07, 0x26, 0x12, 0xac, 0xa3, 0x13, 0xee, 0x5d, 0x87, 0x4f, 0x80, 0x7d, 0xde, 0xf6, 0xc1, 0xf0, 0x23, 0xfe, 0x2b, 0x6e, 0x7c, 0xd0,
2475*f0865ec9SKyle Evans };
2476*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_7_test_case = {
2477*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 7",
2478*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2479*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2480*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_7_test_vector_our_priv_key,
2481*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_our_priv_key),
2482*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_7_test_vector_peer_pub_key,
2483*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_peer_pub_key),
2484*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_7_test_vector_our_pub_key,
2485*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_our_pub_key),
2486*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_7_test_vector_shared_secret,
2487*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_7_test_vector_shared_secret),
2488*f0865ec9SKyle Evans };
2489*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2490*f0865ec9SKyle Evans 
2491*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2492*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_8
2493*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2494*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_8_test_vector_our_priv_key[] = {
2495*f0865ec9SKyle Evans 	0x9e, 0xfb, 0x87, 0xdd, 0xc6, 0x1d, 0x43, 0xc4, 0x82, 0xba, 0x66, 0xe1, 0xb1, 0x43, 0xae, 0xf6, 0x78, 0xfb, 0xd0, 0xd1, 0xbe, 0xbc, 0x20, 0x00, 0x94, 0x1f, 0xab, 0xe6, 0x77, 0xfe, 0x5b, 0x70, 0x6b, 0xf7, 0x8f, 0xce, 0x36, 0xd1, 0x00, 0xb1, 0x7c, 0xc7, 0x87, 0xea, 0xd7, 0x4b, 0xbc, 0xa2,
2496*f0865ec9SKyle Evans };
2497*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_8_test_vector_peer_pub_key[] = {
2498*f0865ec9SKyle Evans 	0x7c, 0xde, 0xc7, 0x7e, 0x07, 0x37, 0xea, 0x37, 0xc6, 0x7b, 0x89, 0xb7, 0x13, 0x7f, 0xe3, 0x88, 0x18, 0x01, 0x0f, 0x44, 0x64, 0x43, 0x8e, 0xe4, 0xd1, 0xd3, 0x5a, 0x0c, 0x48, 0x8c, 0xad, 0x3f, 0xde, 0x2f, 0x37, 0xd0, 0x08, 0x85, 0xd3, 0x6d, 0x3b, 0x79, 0x5b, 0x9f, 0x93, 0xd2, 0x3a, 0x67, 0x28, 0xc4, 0x2e, 0xe8, 0xd6, 0x02, 0x7c, 0x56, 0xcf, 0x97, 0x9b, 0xa4, 0xc2, 0x29, 0xfd, 0xb0, 0x1d, 0x23, 0x49, 0x44, 0xf8, 0xac, 0x43, 0x36, 0x50, 0x11, 0x2c, 0x3c, 0xf0, 0xf0, 0x28, 0x44, 0xe8, 0x88, 0xa3, 0x56, 0x9d, 0xfe, 0xf7, 0x82, 0x8a, 0x8a, 0x88, 0x45, 0x89, 0xaa, 0x05, 0x5e,
2499*f0865ec9SKyle Evans };
2500*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_8_test_vector_our_pub_key[] = {
2501*f0865ec9SKyle Evans 	0x4c, 0x34, 0xef, 0xee, 0x8f, 0x0c, 0x95, 0x56, 0x5d, 0x20, 0x65, 0xd1, 0xbb, 0xac, 0x2a, 0x2d, 0xd2, 0x5a, 0xe9, 0x64, 0x32, 0x0e, 0xb6, 0xbc, 0xce, 0xdc, 0x5f, 0x3a, 0x9b, 0x42, 0xa8, 0x81, 0xa1, 0xaf, 0xca, 0x1b, 0xb6, 0xb8, 0x80, 0x58, 0x4f, 0xa2, 0x7b, 0x01, 0xc1, 0x93, 0xcd, 0x92, 0xd8, 0xfb, 0x01, 0xdb, 0xf7, 0xcd, 0x0a, 0x38, 0x68, 0xc2, 0x6b, 0x95, 0x1f, 0x39, 0x3c, 0x3c, 0x56, 0xc2, 0x85, 0x8c, 0xee, 0x90, 0x1f, 0x77, 0x93, 0xff, 0x5d, 0x27, 0x19, 0x25, 0xd1, 0x3a, 0x41, 0xf8, 0xe5, 0x24, 0x09, 0xf4, 0xeb, 0xa1, 0x99, 0x0f, 0x33, 0xac, 0xb0, 0xba, 0xc6, 0x69,
2502*f0865ec9SKyle Evans };
2503*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_8_test_vector_shared_secret[] = {
2504*f0865ec9SKyle Evans 	0xbb, 0x3b, 0x1e, 0xda, 0x9c, 0x65, 0x60, 0xd8, 0x2f, 0xf5, 0xbe, 0xe4, 0x03, 0x33, 0x9f, 0x1e, 0x80, 0x34, 0x23, 0x38, 0xa9, 0x91, 0x34, 0x48, 0x53, 0xb5, 0x6b, 0x24, 0xf1, 0x09, 0xa4, 0xd9, 0x4b, 0x92, 0xf6, 0x54, 0xf0, 0x42, 0x5e, 0xdd, 0x4c, 0x20, 0x59, 0x03, 0xd7, 0x58, 0x61, 0x04,
2505*f0865ec9SKyle Evans };
2506*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_8_test_case = {
2507*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 8",
2508*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2509*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2510*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_8_test_vector_our_priv_key,
2511*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_our_priv_key),
2512*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_8_test_vector_peer_pub_key,
2513*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_peer_pub_key),
2514*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_8_test_vector_our_pub_key,
2515*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_our_pub_key),
2516*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_8_test_vector_shared_secret,
2517*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_8_test_vector_shared_secret),
2518*f0865ec9SKyle Evans };
2519*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2520*f0865ec9SKyle Evans 
2521*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2522*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_9
2523*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2524*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_9_test_vector_our_priv_key[] = {
2525*f0865ec9SKyle Evans 	0xd7, 0x87, 0xa5, 0x7f, 0xde, 0x22, 0xec, 0x65, 0x6a, 0x0a, 0x52, 0x5c, 0xf3, 0xc7, 0x38, 0xb3, 0x0d, 0x73, 0xaf, 0x61, 0xe7, 0x43, 0xea, 0x90, 0x89, 0x3e, 0xcb, 0x2d, 0x7b, 0x62, 0x2a, 0xdd, 0x2f, 0x94, 0xee, 0x25, 0xc2, 0x17, 0x14, 0x67, 0xaf, 0xb0, 0x93, 0xf3, 0xf8, 0x4d, 0x00, 0x18,
2526*f0865ec9SKyle Evans };
2527*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_9_test_vector_peer_pub_key[] = {
2528*f0865ec9SKyle Evans 	0x8e, 0xee, 0xa3, 0xa3, 0x19, 0xc8, 0xdf, 0x99, 0xfb, 0xc2, 0x9c, 0xb5, 0x5f, 0x24, 0x3a, 0x72, 0x0d, 0x95, 0x50, 0x95, 0x15, 0xee, 0x5c, 0xc5, 0x87, 0xa5, 0xc5, 0xae, 0x22, 0xfb, 0xbd, 0x00, 0x9e, 0x62, 0x6d, 0xb3, 0xe9, 0x11, 0xde, 0xf0, 0xb9, 0x9a, 0x4f, 0x7a, 0xe3, 0x04, 0xb1, 0xba, 0x73, 0x87, 0x7d, 0xc9, 0x4d, 0xb9, 0xad, 0xdd, 0xc0, 0xd9, 0xa4, 0xb2, 0x4e, 0x89, 0x76, 0xc2, 0x2d, 0x73, 0xc8, 0x44, 0x37, 0x0e, 0x1e, 0xe8, 0x57, 0xf8, 0xd1, 0xb1, 0x29, 0xa3, 0xbd, 0x5f, 0x63, 0xf4, 0x0c, 0xaf, 0x3b, 0xd0, 0x53, 0x3e, 0x38, 0xa5, 0xf5, 0x77, 0x70, 0x74, 0xff, 0x9e,
2529*f0865ec9SKyle Evans };
2530*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_9_test_vector_our_pub_key[] = {
2531*f0865ec9SKyle Evans 	0x17, 0x15, 0x46, 0x92, 0x3b, 0x87, 0xb2, 0xcb, 0xba, 0xd6, 0x64, 0xf0, 0x1c, 0xe9, 0x32, 0xbf, 0x09, 0xd6, 0xa6, 0x11, 0x81, 0x68, 0x67, 0x84, 0x46, 0xbf, 0xa9, 0xf0, 0x93, 0x86, 0x08, 0xcb, 0x46, 0x67, 0xa9, 0x8f, 0x4e, 0xc8, 0xac, 0x14, 0x62, 0x28, 0x5c, 0x25, 0x08, 0xf7, 0x48, 0x62, 0xfa, 0x41, 0xcb, 0x4d, 0xb6, 0x8a, 0xe7, 0x1f, 0x1f, 0x8a, 0x3e, 0x89, 0x39, 0xdc, 0x52, 0xc2, 0xde, 0xc6, 0x1a, 0x83, 0xc9, 0x83, 0xbe, 0xb2, 0xa0, 0x2b, 0xaf, 0x29, 0xec, 0x49, 0x27, 0x80, 0x88, 0x88, 0x2e, 0xd0, 0xcf, 0x56, 0xc7, 0x4b, 0x5c, 0x17, 0x3b, 0x55, 0x2c, 0xcf, 0x63, 0xcf,
2532*f0865ec9SKyle Evans };
2533*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_9_test_vector_shared_secret[] = {
2534*f0865ec9SKyle Evans 	0x1e, 0x97, 0xb6, 0x0a, 0xdd, 0x7c, 0xb3, 0x5c, 0x74, 0x03, 0xdd, 0x88, 0x4c, 0x0a, 0x75, 0x79, 0x5b, 0x76, 0x83, 0xff, 0xf8, 0xb4, 0x9f, 0x9d, 0x86, 0x72, 0xa8, 0x20, 0x6b, 0xfd, 0xcf, 0x0a, 0x10, 0x6b, 0x87, 0x68, 0xf9, 0x83, 0x25, 0x8c, 0x74, 0x16, 0x74, 0x22, 0xe4, 0x4e, 0x4d, 0x14,
2535*f0865ec9SKyle Evans };
2536*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_9_test_case = {
2537*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 9",
2538*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2539*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2540*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_9_test_vector_our_priv_key,
2541*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_our_priv_key),
2542*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_9_test_vector_peer_pub_key,
2543*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_peer_pub_key),
2544*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_9_test_vector_our_pub_key,
2545*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_our_pub_key),
2546*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_9_test_vector_shared_secret,
2547*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_9_test_vector_shared_secret),
2548*f0865ec9SKyle Evans };
2549*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2550*f0865ec9SKyle Evans 
2551*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2552*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_10
2553*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2554*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_10_test_vector_our_priv_key[] = {
2555*f0865ec9SKyle Evans 	0x83, 0xd7, 0x0f, 0x7b, 0x16, 0x4d, 0x9f, 0x4c, 0x22, 0x7c, 0x76, 0x70, 0x46, 0xb2, 0x0e, 0xb3, 0x4d, 0xfc, 0x77, 0x8f, 0x53, 0x87, 0xe3, 0x2e, 0x83, 0x4b, 0x1e, 0x6d, 0xae, 0xc2, 0x0e, 0xdb, 0x8c, 0xa5, 0xbb, 0x41, 0x92, 0x09, 0x3f, 0x54, 0x3b, 0x68, 0xe6, 0xae, 0xb7, 0xce, 0x78, 0x8b,
2556*f0865ec9SKyle Evans };
2557*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_10_test_vector_peer_pub_key[] = {
2558*f0865ec9SKyle Evans 	0xa7, 0x21, 0xf6, 0xa2, 0xd4, 0x52, 0x74, 0x11, 0x83, 0x4b, 0x13, 0xd4, 0xd3, 0xa3, 0x3c, 0x29, 0xbe, 0xb8, 0x3a, 0xb7, 0x68, 0x24, 0x65, 0xc6, 0xcb, 0xaf, 0x66, 0x24, 0xac, 0xa6, 0xea, 0x58, 0xc3, 0x0e, 0xb0, 0xf2, 0x9d, 0xd8, 0x42, 0x88, 0x66, 0x95, 0x40, 0x0d, 0x72, 0x54, 0xf2, 0x0f, 0x14, 0xba, 0x6e, 0x26, 0x35, 0x51, 0x09, 0xad, 0x35, 0x12, 0x93, 0x66, 0xd5, 0xe3, 0xa6, 0x40, 0xae, 0x79, 0x85, 0x05, 0xa7, 0xfa, 0x55, 0xa9, 0x6a, 0x36, 0xb5, 0xda, 0xd3, 0x3d, 0xe0, 0x04, 0x74, 0xf6, 0x67, 0x0f, 0x52, 0x22, 0x14, 0xdd, 0x79, 0x52, 0x14, 0x0a, 0xb0, 0xa7, 0xeb, 0x68,
2559*f0865ec9SKyle Evans };
2560*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_10_test_vector_our_pub_key[] = {
2561*f0865ec9SKyle Evans 	0x57, 0xcd, 0x77, 0x0f, 0x3b, 0xbc, 0xbe, 0x0c, 0x78, 0xc7, 0x70, 0xea, 0xb0, 0xb1, 0x69, 0xbc, 0x45, 0xe1, 0x39, 0xf8, 0x63, 0x78, 0xff, 0xae, 0x1c, 0x2b, 0x16, 0x96, 0x67, 0x27, 0xc2, 0xf2, 0xeb, 0x72, 0x45, 0x72, 0xb8, 0xf3, 0xeb, 0x22, 0x8d, 0x13, 0x0d, 0xb4, 0xff, 0x86, 0x2c, 0x63, 0x7e, 0xc5, 0xc8, 0x81, 0x3b, 0x68, 0x55, 0x58, 0xd8, 0x3e, 0x92, 0x4f, 0x14, 0xbc, 0x71, 0x9f, 0x6e, 0xb7, 0xae, 0x0c, 0xbb, 0x2c, 0x47, 0x42, 0x27, 0xc5, 0xbd, 0xa8, 0x86, 0x37, 0xa4, 0xf2, 0x6c, 0x64, 0x81, 0x79, 0x29, 0xaf, 0x99, 0x95, 0x92, 0xda, 0x6f, 0x78, 0x74, 0x90, 0x33, 0x2f,
2562*f0865ec9SKyle Evans };
2563*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_10_test_vector_shared_secret[] = {
2564*f0865ec9SKyle Evans 	0x10, 0x23, 0x47, 0x88, 0x40, 0xe5, 0x47, 0x75, 0xbf, 0xc6, 0x92, 0x93, 0xa3, 0xcf, 0x97, 0xf5, 0xbc, 0x91, 0x47, 0x26, 0x45, 0x5c, 0x66, 0x53, 0x8e, 0xb5, 0x62, 0x3e, 0x21, 0x8f, 0xee, 0xf7, 0xdf, 0x4b, 0xef, 0xa2, 0x3e, 0x09, 0xd7, 0x71, 0x45, 0xad, 0x57, 0x7d, 0xb3, 0x2b, 0x41, 0xf9,
2565*f0865ec9SKyle Evans };
2566*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_10_test_case = {
2567*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 10",
2568*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2569*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2570*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_10_test_vector_our_priv_key,
2571*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_our_priv_key),
2572*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_10_test_vector_peer_pub_key,
2573*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_peer_pub_key),
2574*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_10_test_vector_our_pub_key,
2575*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_our_pub_key),
2576*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_10_test_vector_shared_secret,
2577*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_10_test_vector_shared_secret),
2578*f0865ec9SKyle Evans };
2579*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2580*f0865ec9SKyle Evans 
2581*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2582*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_11
2583*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2584*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_11_test_vector_our_priv_key[] = {
2585*f0865ec9SKyle Evans 	0x8f, 0x55, 0x8e, 0x05, 0x81, 0x8b, 0x88, 0xed, 0x38, 0x3d, 0x5f, 0xca, 0x96, 0x2e, 0x53, 0x41, 0x3d, 0xb1, 0xa0, 0xe4, 0x63, 0x7e, 0xda, 0x19, 0x4f, 0x76, 0x19, 0x44, 0xcb, 0xea, 0x11, 0x4a, 0xb9, 0xd5, 0xda, 0x17, 0x5a, 0x7d, 0x57, 0x88, 0x25, 0x50, 0xb0, 0xe4, 0x32, 0xf3, 0x95, 0xa9,
2586*f0865ec9SKyle Evans };
2587*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_11_test_vector_peer_pub_key[] = {
2588*f0865ec9SKyle Evans 	0xd8, 0x82, 0xa8, 0x50, 0x5c, 0x2d, 0x5c, 0xb9, 0xb8, 0x85, 0x1f, 0xc6, 0x76, 0x67, 0x7b, 0xb0, 0x08, 0x76, 0x81, 0xad, 0x53, 0xfa, 0xce, 0xba, 0x17, 0x38, 0x28, 0x6b, 0x45, 0x82, 0x75, 0x61, 0xe7, 0xda, 0x37, 0xb8, 0x80, 0x27, 0x6c, 0x65, 0x6c, 0xfc, 0x38, 0xb3, 0x2a, 0xde, 0x84, 0x7e, 0x34, 0xb3, 0x14, 0xbd, 0xc1, 0x34, 0x57, 0x56, 0x54, 0x57, 0x3c, 0xff, 0xaf, 0x40, 0x44, 0x5d, 0xa2, 0xe6, 0xaa, 0xf9, 0x87, 0xf7, 0xe9, 0x13, 0xcd, 0x4c, 0x30, 0x91, 0x52, 0x30, 0x58, 0x98, 0x4a, 0x25, 0xd8, 0xf2, 0x1d, 0xa8, 0x32, 0x61, 0x92, 0x45, 0x6c, 0x6a, 0x0f, 0xa5, 0xf6, 0x0c,
2589*f0865ec9SKyle Evans };
2590*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_11_test_vector_our_pub_key[] = {
2591*f0865ec9SKyle Evans 	0x9a, 0x2f, 0x57, 0xf4, 0x86, 0x7c, 0xe7, 0x53, 0xd7, 0x2b, 0x0d, 0x95, 0x19, 0x5d, 0xf6, 0xf9, 0x6c, 0x1f, 0xae, 0x93, 0x4f, 0x60, 0x2e, 0xfd, 0x7b, 0x6a, 0x54, 0x58, 0x2f, 0x55, 0x6c, 0xfa, 0x53, 0x9d, 0x89, 0x00, 0x5c, 0xa2, 0xed, 0xac, 0x08, 0xad, 0x9b, 0x72, 0xdd, 0x1f, 0x60, 0xba, 0xd9, 0xb9, 0x4e, 0xe8, 0x2d, 0xa9, 0xcc, 0x60, 0x1f, 0x34, 0x60, 0x44, 0x99, 0x8b, 0xa3, 0x87, 0xae, 0xe5, 0x64, 0x04, 0xdc, 0x6e, 0xcc, 0x8a, 0xb2, 0xb5, 0x90, 0x44, 0x33, 0x19, 0xd0, 0xb2, 0xb6, 0x17, 0x6f, 0x9d, 0x0e, 0xac, 0x2d, 0x44, 0x67, 0x8e, 0xd5, 0x61, 0x60, 0x7d, 0x09, 0xa9,
2592*f0865ec9SKyle Evans };
2593*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_11_test_vector_shared_secret[] = {
2594*f0865ec9SKyle Evans 	0x6a, 0xd6, 0xb9, 0xdc, 0x8a, 0x6c, 0xf0, 0xd3, 0x69, 0x1c, 0x50, 0x1c, 0xbb, 0x96, 0x78, 0x67, 0xf6, 0xe4, 0xbb, 0xb7, 0x64, 0xb6, 0x0d, 0xbf, 0xf8, 0xfc, 0xff, 0x3e, 0xd4, 0x2d, 0xbb, 0xa3, 0x9d, 0x63, 0xcf, 0x32, 0x5b, 0x4b, 0x40, 0x78, 0x85, 0x84, 0x95, 0xdd, 0xee, 0x75, 0xf9, 0x54,
2595*f0865ec9SKyle Evans };
2596*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_11_test_case = {
2597*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 11",
2598*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2599*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2600*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_11_test_vector_our_priv_key,
2601*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_our_priv_key),
2602*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_11_test_vector_peer_pub_key,
2603*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_peer_pub_key),
2604*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_11_test_vector_our_pub_key,
2605*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_our_pub_key),
2606*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_11_test_vector_shared_secret,
2607*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_11_test_vector_shared_secret),
2608*f0865ec9SKyle Evans };
2609*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2610*f0865ec9SKyle Evans 
2611*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2612*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_12
2613*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2614*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_12_test_vector_our_priv_key[] = {
2615*f0865ec9SKyle Evans 	0x0f, 0x5d, 0xee, 0x0a, 0xff, 0xa7, 0xbb, 0xf2, 0x39, 0xd5, 0xdf, 0xf3, 0x29, 0x87, 0xeb, 0xb7, 0xcf, 0x84, 0xfc, 0xce, 0xed, 0x64, 0x3e, 0x1d, 0x3c, 0x62, 0xd0, 0xb3, 0x35, 0x2a, 0xec, 0x23, 0xb6, 0xe5, 0xac, 0x7f, 0xa4, 0x10, 0x5c, 0x8c, 0xb2, 0x61, 0x26, 0xad, 0x2d, 0x18, 0x92, 0xcb,
2616*f0865ec9SKyle Evans };
2617*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_12_test_vector_peer_pub_key[] = {
2618*f0865ec9SKyle Evans 	0x81, 0x5c, 0x9d, 0x77, 0x3d, 0xbf, 0x5f, 0xb6, 0xa1, 0xb8, 0x67, 0x99, 0x96, 0x62, 0x47, 0xf4, 0x00, 0x6a, 0x23, 0xc9, 0x2e, 0x68, 0xc5, 0x5e, 0x9e, 0xaa, 0x99, 0x8b, 0x17, 0xd8, 0x83, 0x2d, 0xd4, 0xd8, 0x4d, 0x92, 0x7d, 0x83, 0x1d, 0x4f, 0x68, 0xda, 0xc6, 0x7c, 0x64, 0x88, 0x21, 0x9f, 0xe7, 0x92, 0x69, 0x94, 0x8b, 0x26, 0x11, 0x48, 0x45, 0x60, 0xfd, 0x49, 0x0f, 0xee, 0xc8, 0x87, 0xcb, 0x55, 0xef, 0x99, 0xa4, 0xb5, 0x24, 0x88, 0x0f, 0xa7, 0x49, 0x9d, 0x6a, 0x07, 0x28, 0x3a, 0xae, 0x2a, 0xfa, 0x33, 0xfe, 0xab, 0x97, 0xde, 0xca, 0x40, 0xbc, 0x60, 0x6c, 0x4d, 0x87, 0x64,
2619*f0865ec9SKyle Evans };
2620*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_12_test_vector_our_pub_key[] = {
2621*f0865ec9SKyle Evans 	0x23, 0x34, 0x6b, 0xdf, 0xbc, 0x9d, 0x7c, 0x7c, 0x73, 0x6e, 0x02, 0xbd, 0xf6, 0x07, 0x67, 0x1f, 0xf6, 0x08, 0x2f, 0xdd, 0x27, 0x33, 0x4a, 0x8b, 0xc7, 0x5f, 0x3b, 0x23, 0x68, 0x1e, 0xbe, 0x61, 0x4d, 0x05, 0x97, 0xdd, 0x61, 0x4f, 0xae, 0x58, 0x67, 0x7c, 0x83, 0x5a, 0x9f, 0x0b, 0x27, 0x3b, 0x82, 0xba, 0x36, 0x29, 0x0d, 0x2f, 0x94, 0xdb, 0x41, 0x47, 0x9e, 0xb4, 0x5a, 0xb4, 0xea, 0xf6, 0x79, 0x28, 0xa2, 0x31, 0x51, 0x38, 0xd5, 0x9e, 0xec, 0xc9, 0xb5, 0x28, 0x5d, 0xfd, 0xdd, 0x67, 0x14, 0xf7, 0x75, 0x57, 0x21, 0x6e, 0xa4, 0x4c, 0xc6, 0xfc, 0x11, 0x9d, 0x82, 0x43, 0xef, 0xaf,
2622*f0865ec9SKyle Evans };
2623*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_12_test_vector_shared_secret[] = {
2624*f0865ec9SKyle Evans 	0xcc, 0x9e, 0x06, 0x35, 0x66, 0xd4, 0x6b, 0x35, 0x7b, 0x3f, 0xca, 0xe2, 0x18, 0x27, 0x37, 0x73, 0x31, 0xe5, 0xe2, 0x90, 0xa3, 0x6e, 0x60, 0xcd, 0x7c, 0x39, 0x10, 0x2b, 0x82, 0x8a, 0xe0, 0xb9, 0x18, 0xdc, 0x5a, 0x02, 0x21, 0x6b, 0x07, 0xfe, 0x6f, 0x19, 0x58, 0xd8, 0x34, 0xe4, 0x24, 0x37,
2625*f0865ec9SKyle Evans };
2626*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_12_test_case = {
2627*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 12",
2628*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2629*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2630*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_12_test_vector_our_priv_key,
2631*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_our_priv_key),
2632*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_12_test_vector_peer_pub_key,
2633*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_peer_pub_key),
2634*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_12_test_vector_our_pub_key,
2635*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_our_pub_key),
2636*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_12_test_vector_shared_secret,
2637*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_12_test_vector_shared_secret),
2638*f0865ec9SKyle Evans };
2639*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2640*f0865ec9SKyle Evans 
2641*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2642*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_13
2643*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2644*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_13_test_vector_our_priv_key[] = {
2645*f0865ec9SKyle Evans 	0x03, 0x7b, 0x63, 0x3b, 0x5b, 0x8b, 0xa8, 0x57, 0xc0, 0xfc, 0x85, 0x65, 0x68, 0x68, 0x23, 0x2e, 0x2f, 0xeb, 0xf5, 0x95, 0x78, 0x71, 0x83, 0x91, 0xb8, 0x1d, 0xa8, 0x54, 0x1a, 0x00, 0xbf, 0xe5, 0x3c, 0x30, 0xae, 0x04, 0x15, 0x18, 0x47, 0xf2, 0x74, 0x99, 0xf8, 0xd7, 0xab, 0xad, 0x8c, 0xf4,
2646*f0865ec9SKyle Evans };
2647*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_13_test_vector_peer_pub_key[] = {
2648*f0865ec9SKyle Evans 	0x1c, 0x0e, 0xed, 0xa7, 0xa2, 0xbe, 0x00, 0x0c, 0x5b, 0xdc, 0xda, 0x04, 0x78, 0xae, 0xd4, 0xdb, 0x73, 0x3d, 0x2a, 0x9e, 0x34, 0x12, 0x24, 0x37, 0x91, 0x23, 0xad, 0x84, 0x70, 0x30, 0xf2, 0x9e, 0x3b, 0x16, 0x8f, 0xa1, 0x8e, 0x89, 0xa3, 0xc0, 0xfb, 0xa2, 0xa6, 0xce, 0x1c, 0x28, 0xfc, 0x3b, 0xec, 0x8c, 0x1c, 0x83, 0xc1, 0x18, 0xc4, 0xdb, 0xea, 0x94, 0x27, 0x18, 0x69, 0xf2, 0xd8, 0x68, 0xeb, 0x65, 0xe8, 0xb4, 0x4e, 0x21, 0xe6, 0xf1, 0x4b, 0x0f, 0x4d, 0x9b, 0x38, 0xc0, 0x68, 0xda, 0xef, 0xa2, 0x71, 0x14, 0x25, 0x5b, 0x9a, 0x41, 0xd0, 0x84, 0xcc, 0x4a, 0x1a, 0xd8, 0x54, 0x56,
2649*f0865ec9SKyle Evans };
2650*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_13_test_vector_our_pub_key[] = {
2651*f0865ec9SKyle Evans 	0x88, 0x78, 0xac, 0x8a, 0x94, 0x7f, 0x7d, 0x5c, 0xb2, 0xb4, 0x7a, 0xad, 0x24, 0xfb, 0xb8, 0x21, 0x0d, 0x86, 0x12, 0x65, 0x85, 0x39, 0x9a, 0x28, 0x71, 0xf8, 0x4a, 0xa9, 0xc5, 0xfd, 0xe3, 0x07, 0x4a, 0xe5, 0x40, 0xc6, 0xbf, 0x82, 0x27, 0x5c, 0xa8, 0x22, 0xd0, 0xfe, 0xb8, 0x62, 0xbc, 0x74, 0x63, 0x2f, 0x5c, 0xd2, 0xf9, 0x00, 0xc2, 0x71, 0x1c, 0x32, 0xf8, 0x93, 0x07, 0x28, 0xeb, 0x64, 0x7d, 0x31, 0xed, 0xd8, 0xd6, 0x50, 0xf9, 0x65, 0x4e, 0x7d, 0x33, 0xe5, 0xed, 0x1b, 0x47, 0x54, 0x89, 0xd0, 0x8d, 0xaa, 0x30, 0xd8, 0xcb, 0xcb, 0xa6, 0xbf, 0xc3, 0xb6, 0x0d, 0x9b, 0x5a, 0x37,
2652*f0865ec9SKyle Evans };
2653*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_13_test_vector_shared_secret[] = {
2654*f0865ec9SKyle Evans 	0xde, 0xff, 0x7f, 0x03, 0xbd, 0x09, 0x86, 0x5b, 0xaf, 0x94, 0x5e, 0x73, 0xed, 0xff, 0x6d, 0x51, 0x22, 0xc0, 0x3f, 0xb5, 0x61, 0xdb, 0x87, 0xde, 0xc8, 0x66, 0x2e, 0x09, 0xbe, 0xd4, 0x34, 0x0b, 0x28, 0xa9, 0xef, 0xe1, 0x18, 0x33, 0x7b, 0xb7, 0xd3, 0xd4, 0xf7, 0xf5, 0x68, 0x63, 0x5f, 0xf9,
2655*f0865ec9SKyle Evans };
2656*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_13_test_case = {
2657*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 13",
2658*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2659*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2660*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_13_test_vector_our_priv_key,
2661*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_our_priv_key),
2662*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_13_test_vector_peer_pub_key,
2663*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_peer_pub_key),
2664*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_13_test_vector_our_pub_key,
2665*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_our_pub_key),
2666*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_13_test_vector_shared_secret,
2667*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_13_test_vector_shared_secret),
2668*f0865ec9SKyle Evans };
2669*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2670*f0865ec9SKyle Evans 
2671*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2672*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_14
2673*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2674*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_14_test_vector_our_priv_key[] = {
2675*f0865ec9SKyle Evans 	0xe3, 0xd0, 0x71, 0x06, 0xbe, 0xdc, 0xc0, 0x96, 0xe7, 0xd9, 0x16, 0x30, 0xff, 0xd3, 0x09, 0x4d, 0xf2, 0xc7, 0x85, 0x9d, 0xb8, 0xd7, 0xed, 0xbb, 0x2e, 0x37, 0xb4, 0xac, 0x47, 0xf4, 0x29, 0xa6, 0x37, 0xd0, 0x6a, 0x67, 0xd2, 0xfb, 0xa3, 0x38, 0x38, 0x76, 0x4e, 0xf2, 0x03, 0x46, 0x49, 0x91,
2676*f0865ec9SKyle Evans };
2677*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_14_test_vector_peer_pub_key[] = {
2678*f0865ec9SKyle Evans 	0xc9, 0x5c, 0x18, 0x5e, 0x25, 0x6b, 0xf9, 0x97, 0xf3, 0x0b, 0x31, 0x15, 0x48, 0xae, 0x7f, 0x76, 0x8a, 0x38, 0xde, 0xe4, 0x3e, 0xee, 0xef, 0x43, 0x08, 0x3f, 0x30, 0x77, 0xbe, 0x70, 0xe2, 0xbf, 0x39, 0xac, 0x1d, 0x4d, 0xaf, 0x36, 0x0c, 0x51, 0x4c, 0x8c, 0x6b, 0xe6, 0x23, 0x44, 0x3d, 0x1a, 0x3e, 0x63, 0xa6, 0x63, 0xea, 0xf7, 0x5d, 0x8a, 0x76, 0x5a, 0xb2, 0xb9, 0xa3, 0x55, 0x13, 0xd7, 0x93, 0x3f, 0xa5, 0xe2, 0x64, 0x20, 0xa5, 0x24, 0x45, 0x50, 0xec, 0x6c, 0x3b, 0x6f, 0x03, 0x3b, 0x96, 0xdb, 0x2a, 0xca, 0x3d, 0x6a, 0xc6, 0xaa, 0xb0, 0x52, 0xce, 0x92, 0x95, 0x95, 0xae, 0xa5,
2679*f0865ec9SKyle Evans };
2680*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_14_test_vector_our_pub_key[] = {
2681*f0865ec9SKyle Evans 	0xe7, 0x4a, 0x1a, 0x2b, 0x85, 0xf1, 0xcb, 0xf8, 0xdb, 0xbd, 0xf0, 0x50, 0xcf, 0x1a, 0xff, 0x8a, 0xcb, 0x02, 0xfd, 0xa2, 0xfb, 0x65, 0x91, 0xf9, 0xd3, 0xcf, 0xe4, 0xe7, 0x9d, 0x0a, 0xe9, 0x38, 0xa9, 0xc1, 0x48, 0x3e, 0x7b, 0x75, 0xf8, 0xdb, 0x24, 0x50, 0x5d, 0x65, 0x06, 0x5c, 0xdb, 0x18, 0x17, 0x73, 0xee, 0x59, 0x18, 0x22, 0xf7, 0xab, 0xaa, 0x85, 0x6a, 0x1a, 0x60, 0xbc, 0x0a, 0x52, 0x03, 0x54, 0x8d, 0xbd, 0x1c, 0xb5, 0x02, 0x54, 0x66, 0xef, 0xf8, 0x48, 0x1b, 0xd0, 0x76, 0x14, 0xea, 0xa0, 0x4a, 0x16, 0xc3, 0xdb, 0x76, 0x90, 0x59, 0x13, 0xe9, 0x72, 0xa5, 0xb6, 0xb5, 0x9d,
2682*f0865ec9SKyle Evans };
2683*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_14_test_vector_shared_secret[] = {
2684*f0865ec9SKyle Evans 	0xc8, 0xb1, 0x03, 0x8f, 0x73, 0x5a, 0xd3, 0xbb, 0x3e, 0x46, 0x37, 0xc3, 0xe4, 0x7e, 0xab, 0x48, 0x76, 0x37, 0x91, 0x1a, 0x6b, 0x79, 0x50, 0xa4, 0xe4, 0x61, 0x94, 0x83, 0x29, 0xd3, 0x92, 0x3b, 0x96, 0x9e, 0x5d, 0xb6, 0x63, 0x67, 0x56, 0x23, 0x61, 0x1a, 0x45, 0x7f, 0xcd, 0xa3, 0x5a, 0x71,
2685*f0865ec9SKyle Evans };
2686*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_14_test_case = {
2687*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 14",
2688*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2689*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2690*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_14_test_vector_our_priv_key,
2691*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_our_priv_key),
2692*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_14_test_vector_peer_pub_key,
2693*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_peer_pub_key),
2694*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_14_test_vector_our_pub_key,
2695*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_our_pub_key),
2696*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_14_test_vector_shared_secret,
2697*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_14_test_vector_shared_secret),
2698*f0865ec9SKyle Evans };
2699*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2700*f0865ec9SKyle Evans 
2701*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2702*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_15
2703*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2704*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_15_test_vector_our_priv_key[] = {
2705*f0865ec9SKyle Evans 	0xf3, 0xf9, 0xb0, 0xc6, 0x5a, 0x49, 0xa5, 0x06, 0x63, 0x2c, 0x8a, 0x45, 0xb1, 0x0f, 0x66, 0xb5, 0x31, 0x6f, 0x9e, 0xeb, 0x06, 0xfa, 0xe2, 0x18, 0xf2, 0xda, 0x62, 0x33, 0x3f, 0x99, 0x90, 0x51, 0x17, 0xb1, 0x41, 0xc7, 0x60, 0xe8, 0x97, 0x4e, 0xfc, 0x4a, 0xf1, 0x05, 0x70, 0x63, 0x57, 0x91,
2706*f0865ec9SKyle Evans };
2707*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_15_test_vector_peer_pub_key[] = {
2708*f0865ec9SKyle Evans 	0x34, 0x97, 0x23, 0x8a, 0x7e, 0x6a, 0xd1, 0x66, 0xdf, 0x2d, 0xac, 0x03, 0x9a, 0xa4, 0xda, 0xc8, 0xd1, 0x7a, 0xa9, 0x25, 0xe7, 0xc7, 0x63, 0x1e, 0xb3, 0xb5, 0x6e, 0x3a, 0xaa, 0x1c, 0x54, 0x5f, 0xcd, 0x54, 0xd2, 0xe5, 0x98, 0x58, 0x07, 0x91, 0x0f, 0xb2, 0x02, 0xb1, 0xfc, 0x19, 0x1d, 0x2a, 0xa4, 0x9e, 0x5c, 0x48, 0x7d, 0xcc, 0x7a, 0xa4, 0x0a, 0x8f, 0x23, 0x4c, 0x97, 0x94, 0x46, 0x04, 0x0d, 0x91, 0x74, 0xe3, 0xad, 0x35, 0x7d, 0x40, 0x4d, 0x77, 0x65, 0x18, 0x31, 0x95, 0xae, 0xd3, 0xf9, 0x13, 0x64, 0x1b, 0x90, 0xc8, 0x1a, 0x30, 0x6e, 0xbf, 0x0d, 0x89, 0x13, 0x86, 0x13, 0x16,
2709*f0865ec9SKyle Evans };
2710*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_15_test_vector_our_pub_key[] = {
2711*f0865ec9SKyle Evans 	0xa4, 0xad, 0x77, 0xaa, 0x7d, 0x86, 0xe5, 0x36, 0x11, 0x18, 0xa6, 0xb9, 0x21, 0x71, 0x0c, 0x82, 0x07, 0x21, 0x21, 0x07, 0x12, 0xf4, 0xc3, 0x47, 0x98, 0x5f, 0xde, 0xe5, 0x8a, 0xa4, 0xef, 0xfa, 0x1e, 0x28, 0xbe, 0x80, 0xa1, 0x7b, 0x12, 0x0b, 0x13, 0x9f, 0x96, 0x30, 0x0f, 0x89, 0xb4, 0x9b, 0x1d, 0xdf, 0x22, 0xe0, 0x7e, 0x03, 0xf1, 0x56, 0x0d, 0x8f, 0x45, 0xa4, 0x80, 0x09, 0x45, 0x60, 0xdb, 0xa9, 0xfa, 0xe7, 0xf9, 0x53, 0x11, 0x30, 0xc1, 0xb5, 0x7e, 0xbb, 0x95, 0x98, 0x24, 0x96, 0x52, 0x4f, 0x31, 0xd3, 0x79, 0x77, 0x93, 0x39, 0x6f, 0xa8, 0x23, 0xf2, 0x2b, 0xdb, 0x43, 0x28,
2712*f0865ec9SKyle Evans };
2713*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_15_test_vector_shared_secret[] = {
2714*f0865ec9SKyle Evans 	0xd3, 0x37, 0xea, 0xa3, 0x2b, 0x9f, 0x71, 0x6b, 0x87, 0x47, 0xb0, 0x05, 0xb9, 0x7a, 0x55, 0x3c, 0x59, 0xda, 0xb0, 0xc5, 0x1d, 0xf4, 0x1a, 0x2d, 0x49, 0x03, 0x9c, 0xda, 0xe7, 0x05, 0xaa, 0x75, 0xc7, 0xb9, 0xe7, 0xbc, 0x0b, 0x6a, 0x0e, 0x8c, 0x57, 0x8c, 0x90, 0x2b, 0xc4, 0xff, 0xf2, 0x3e,
2715*f0865ec9SKyle Evans };
2716*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_15_test_case = {
2717*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 15",
2718*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2719*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2720*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_15_test_vector_our_priv_key,
2721*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_our_priv_key),
2722*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_15_test_vector_peer_pub_key,
2723*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_peer_pub_key),
2724*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_15_test_vector_our_pub_key,
2725*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_our_pub_key),
2726*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_15_test_vector_shared_secret,
2727*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_15_test_vector_shared_secret),
2728*f0865ec9SKyle Evans };
2729*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2730*f0865ec9SKyle Evans 
2731*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2732*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_16
2733*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2734*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_16_test_vector_our_priv_key[] = {
2735*f0865ec9SKyle Evans 	0x59, 0xfc, 0xe7, 0xfa, 0xd7, 0xde, 0x28, 0xba, 0xc0, 0x23, 0x06, 0x90, 0xc9, 0x57, 0x10, 0xc7, 0x20, 0xe5, 0x28, 0xf9, 0xa4, 0xe5, 0x4d, 0x3a, 0x6a, 0x8c, 0xd5, 0xfc, 0x5c, 0x5f, 0x21, 0x63, 0x70, 0x31, 0xce, 0x1c, 0x5b, 0x4e, 0x3d, 0x39, 0x64, 0x7d, 0x8d, 0xcb, 0x9b, 0x79, 0x46, 0x64,
2736*f0865ec9SKyle Evans };
2737*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_16_test_vector_peer_pub_key[] = {
2738*f0865ec9SKyle Evans 	0x90, 0xa3, 0x47, 0x37, 0xd4, 0x5b, 0x1a, 0xa6, 0x5f, 0x74, 0xe0, 0xbd, 0x06, 0x59, 0xbc, 0x11, 0x8f, 0x8e, 0x4b, 0x77, 0x4b, 0x76, 0x19, 0x44, 0xff, 0xa6, 0x57, 0x3c, 0x6d, 0xf4, 0xf4, 0x1d, 0xec, 0x0d, 0x11, 0xb6, 0x97, 0xab, 0xd9, 0x34, 0xd3, 0x90, 0x87, 0x1d, 0x4b, 0x45, 0x32, 0x40, 0x9b, 0x59, 0x07, 0x19, 0xbb, 0x33, 0x07, 0xc1, 0x49, 0xa7, 0x81, 0x7b, 0xe3, 0x55, 0xd6, 0x84, 0x89, 0x3a, 0x30, 0x77, 0x64, 0xb5, 0x12, 0xee, 0xff, 0xe0, 0x7c, 0xb6, 0x99, 0xed, 0xb5, 0xa6, 0xff, 0xbf, 0x8d, 0x60, 0x32, 0xe6, 0xc7, 0x9d, 0x5e, 0x93, 0xe9, 0x42, 0x12, 0xc2, 0xaa, 0x4e,
2739*f0865ec9SKyle Evans };
2740*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_16_test_vector_our_pub_key[] = {
2741*f0865ec9SKyle Evans 	0x9c, 0x43, 0xbf, 0x97, 0x1e, 0xdf, 0x09, 0x40, 0x28, 0x76, 0xee, 0x74, 0x20, 0x95, 0x38, 0x1f, 0x78, 0xb1, 0xbd, 0x3a, 0xa3, 0x9b, 0x51, 0x32, 0xaf, 0x75, 0xdb, 0xfe, 0x7e, 0x98, 0xbd, 0x78, 0xbd, 0xe1, 0x0f, 0xe2, 0xe9, 0x03, 0xc2, 0xb6, 0x37, 0x9e, 0x1d, 0xee, 0xe1, 0x75, 0xa1, 0xb0, 0xa6, 0xc5, 0x8e, 0xce, 0xa5, 0xa4, 0x77, 0xbb, 0x01, 0xbd, 0x54, 0x3b, 0x33, 0x9f, 0x1c, 0xc4, 0x9f, 0x13, 0x71, 0xa2, 0xcd, 0xa4, 0xd4, 0x6e, 0xb4, 0xe5, 0x3e, 0x25, 0x05, 0x97, 0x94, 0x23, 0x51, 0xa9, 0x96, 0x65, 0xa1, 0x22, 0xff, 0xea, 0x9b, 0xde, 0x06, 0x36, 0xc3, 0x75, 0xda, 0xf2,
2742*f0865ec9SKyle Evans };
2743*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_16_test_vector_shared_secret[] = {
2744*f0865ec9SKyle Evans 	0x32, 0xd2, 0x92, 0xb6, 0x95, 0xa4, 0x48, 0x8e, 0x42, 0xa7, 0xb7, 0x92, 0x2e, 0x1a, 0xe5, 0x37, 0xd7, 0x6a, 0x3d, 0x21, 0xa0, 0xb2, 0xe3, 0x68, 0x75, 0xf6, 0x0e, 0x9f, 0x6d, 0x3e, 0x87, 0x79, 0xc2, 0xaf, 0xb3, 0xa4, 0x13, 0xb9, 0xdd, 0x79, 0xae, 0x18, 0xe7, 0x0b, 0x47, 0xd3, 0x37, 0xc1,
2745*f0865ec9SKyle Evans };
2746*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_16_test_case = {
2747*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 16",
2748*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2749*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2750*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_16_test_vector_our_priv_key,
2751*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_our_priv_key),
2752*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_16_test_vector_peer_pub_key,
2753*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_peer_pub_key),
2754*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_16_test_vector_our_pub_key,
2755*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_our_pub_key),
2756*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_16_test_vector_shared_secret,
2757*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_16_test_vector_shared_secret),
2758*f0865ec9SKyle Evans };
2759*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2760*f0865ec9SKyle Evans 
2761*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2762*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_17
2763*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2764*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_17_test_vector_our_priv_key[] = {
2765*f0865ec9SKyle Evans 	0x3e, 0x49, 0xfb, 0xf9, 0x50, 0xa4, 0x24, 0xc5, 0xd8, 0x02, 0x28, 0xdc, 0x4b, 0xc3, 0x5e, 0x9f, 0x6c, 0x6c, 0x0c, 0x1d, 0x04, 0x44, 0x09, 0x98, 0xda, 0x0a, 0x60, 0x9a, 0x87, 0x75, 0x75, 0xdb, 0xe4, 0x37, 0xd6, 0xa5, 0xce, 0xda, 0xa2, 0xdd, 0xd2, 0xa1, 0xa1, 0x7f, 0xd1, 0x12, 0xad, 0xed,
2766*f0865ec9SKyle Evans };
2767*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_17_test_vector_peer_pub_key[] = {
2768*f0865ec9SKyle Evans 	0xdd, 0xa5, 0x46, 0xac, 0xfc, 0x8f, 0x90, 0x3d, 0x11, 0xe2, 0xe3, 0x92, 0x06, 0x69, 0x63, 0x6d, 0x44, 0xb2, 0x06, 0x8a, 0xeb, 0x66, 0xff, 0x07, 0xaa, 0x26, 0x6f, 0x00, 0x30, 0xe1, 0x53, 0x5b, 0x0e, 0xd0, 0x20, 0x3c, 0xb8, 0xa4, 0x60, 0xac, 0x99, 0x0f, 0x13, 0x94, 0xfa, 0xf2, 0x2f, 0x1d, 0x15, 0xbb, 0xb2, 0x59, 0x79, 0x13, 0x03, 0x5f, 0xaa, 0xdf, 0x41, 0x34, 0x76, 0xf4, 0xc7, 0x0f, 0x72, 0x79, 0x76, 0x9a, 0x40, 0xc9, 0x86, 0xf4, 0x70, 0xc4, 0x27, 0xb4, 0xee, 0x49, 0x62, 0xab, 0xdf, 0x81, 0x73, 0xbb, 0xad, 0x81, 0x87, 0x47, 0x72, 0x92, 0x5f, 0xd3, 0x2f, 0x0b, 0x15, 0x9f,
2769*f0865ec9SKyle Evans };
2770*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_17_test_vector_our_pub_key[] = {
2771*f0865ec9SKyle Evans 	0x5a, 0x94, 0x95, 0x94, 0x22, 0x8b, 0x1a, 0x3d, 0x6f, 0x59, 0x9e, 0xb3, 0xdb, 0x0d, 0x06, 0x07, 0x0f, 0xbc, 0x55, 0x1c, 0x65, 0x7b, 0x58, 0x23, 0x4b, 0xa1, 0x64, 0xce, 0x3f, 0xe4, 0x15, 0xfa, 0x5f, 0x3e, 0xb8, 0x23, 0xc0, 0x8d, 0xc2, 0x9b, 0x8c, 0x34, 0x12, 0x19, 0xc7, 0x7b, 0x6b, 0x3d, 0x2b, 0xaa, 0xd4, 0x47, 0xc8, 0xc2, 0x90, 0xcf, 0xed, 0x25, 0xed, 0xd9, 0x03, 0x1c, 0x41, 0xd0, 0xb7, 0x69, 0x21, 0x45, 0x73, 0x27, 0xf4, 0x2d, 0xb3, 0x11, 0x22, 0xb8, 0x1f, 0x33, 0x7b, 0xbf, 0x0b, 0x10, 0x39, 0xec, 0x83, 0x0c, 0xe9, 0x06, 0x1a, 0x37, 0x61, 0x95, 0x3c, 0x75, 0xe4, 0xa8,
2772*f0865ec9SKyle Evans };
2773*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_17_test_vector_shared_secret[] = {
2774*f0865ec9SKyle Evans 	0x12, 0x20, 0xe7, 0xe6, 0xca, 0xd7, 0xb2, 0x5d, 0xf9, 0x8e, 0x5b, 0xbd, 0xcc, 0x6c, 0x0b, 0x65, 0xca, 0x6c, 0x2a, 0x50, 0xc5, 0xff, 0x6c, 0x41, 0xdc, 0xa7, 0x1e, 0x47, 0x56, 0x46, 0xfd, 0x48, 0x96, 0x15, 0x97, 0x9c, 0xa9, 0x2f, 0xb4, 0x38, 0x9a, 0xea, 0xde, 0xfd, 0xe7, 0x9a, 0x24, 0xf1,
2775*f0865ec9SKyle Evans };
2776*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_17_test_case = {
2777*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 17",
2778*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2779*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2780*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_17_test_vector_our_priv_key,
2781*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_our_priv_key),
2782*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_17_test_vector_peer_pub_key,
2783*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_peer_pub_key),
2784*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_17_test_vector_our_pub_key,
2785*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_our_pub_key),
2786*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_17_test_vector_shared_secret,
2787*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_17_test_vector_shared_secret),
2788*f0865ec9SKyle Evans };
2789*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2790*f0865ec9SKyle Evans 
2791*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2792*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_18
2793*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2794*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_18_test_vector_our_priv_key[] = {
2795*f0865ec9SKyle Evans 	0x50, 0xcc, 0xc1, 0xf7, 0x07, 0x6e, 0x92, 0xf4, 0x63, 0x8e, 0x85, 0xf2, 0xdb, 0x98, 0xe0, 0xb4, 0x83, 0xe6, 0xe2, 0x20, 0x4c, 0x92, 0xbd, 0xd4, 0x40, 0xa6, 0xde, 0xea, 0x04, 0xe3, 0x7a, 0x07, 0xc6, 0xe7, 0x27, 0x91, 0xc1, 0x90, 0xad, 0x4e, 0x4e, 0x86, 0xe0, 0x1e, 0xfb, 0xa8, 0x42, 0x69,
2796*f0865ec9SKyle Evans };
2797*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_18_test_vector_peer_pub_key[] = {
2798*f0865ec9SKyle Evans 	0x78, 0x8b, 0xe2, 0x33, 0x6c, 0x52, 0xf4, 0x45, 0x4d, 0x63, 0xee, 0x94, 0x4b, 0x1e, 0x49, 0xbf, 0xb6, 0x19, 0xa0, 0x83, 0x71, 0x04, 0x8e, 0x6d, 0xa9, 0x2e, 0x58, 0x4e, 0xae, 0x70, 0xbd, 0xe1, 0xf1, 0x71, 0xc4, 0xdf, 0x37, 0x8b, 0xd1, 0xf3, 0xc0, 0xab, 0x03, 0x04, 0x8a, 0x23, 0x78, 0x02, 0x46, 0x73, 0xeb, 0xd8, 0xdb, 0x60, 0x4e, 0xaf, 0x41, 0x71, 0x17, 0x48, 0xba, 0xb2, 0x96, 0x8a, 0x23, 0xca, 0x44, 0x76, 0xce, 0x14, 0x4e, 0x72, 0x82, 0x47, 0xf0, 0x8a, 0xf7, 0x52, 0x92, 0x91, 0x57, 0xb5, 0x83, 0x0f, 0x1e, 0x26, 0x06, 0x74, 0x66, 0xbd, 0xfa, 0x8b, 0x65, 0x14, 0x5a, 0x33,
2799*f0865ec9SKyle Evans };
2800*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_18_test_vector_our_pub_key[] = {
2801*f0865ec9SKyle Evans 	0x75, 0x6c, 0x07, 0xdf, 0x0c, 0xe3, 0x2c, 0x83, 0x9d, 0xac, 0x9f, 0xb4, 0x73, 0x3c, 0x9c, 0x28, 0xb7, 0x01, 0x13, 0xa6, 0x76, 0xa7, 0x05, 0x7c, 0x38, 0xd2, 0x23, 0xf2, 0x2a, 0x3a, 0x90, 0x95, 0xa8, 0xd5, 0x64, 0x65, 0x3a, 0xf5, 0x28, 0xe0, 0x4c, 0x7e, 0x18, 0x24, 0xbe, 0x4a, 0x65, 0x12, 0x17, 0xc2, 0xce, 0x69, 0x62, 0xcb, 0xd2, 0xa2, 0xe0, 0x66, 0x29, 0x7b, 0x39, 0xd5, 0x7d, 0xd9, 0xbb, 0x46, 0x80, 0xf0, 0x19, 0x1d, 0x39, 0x0f, 0x70, 0xb4, 0xe4, 0x61, 0x41, 0x9b, 0x29, 0x72, 0xce, 0x68, 0xad, 0x46, 0x12, 0x7f, 0xdd, 0xa6, 0xc3, 0x91, 0x95, 0x77, 0x4e, 0xa8, 0x6d, 0xf3,
2802*f0865ec9SKyle Evans };
2803*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_18_test_vector_shared_secret[] = {
2804*f0865ec9SKyle Evans 	0x79, 0x3b, 0xb9, 0xcd, 0x22, 0xa9, 0x3c, 0xf4, 0x68, 0xfa, 0xf8, 0x04, 0xa3, 0x8d, 0x12, 0xb7, 0x8c, 0xb1, 0x21, 0x89, 0xec, 0x67, 0x9d, 0xdd, 0x2e, 0x9a, 0xa2, 0x1f, 0xa9, 0xa5, 0xa0, 0xb0, 0x49, 0xab, 0x16, 0xa2, 0x35, 0x74, 0xfe, 0x04, 0xc1, 0xc3, 0xc0, 0x23, 0x43, 0xb9, 0x1b, 0xeb,
2805*f0865ec9SKyle Evans };
2806*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_18_test_case = {
2807*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 18",
2808*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2809*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2810*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_18_test_vector_our_priv_key,
2811*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_our_priv_key),
2812*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_18_test_vector_peer_pub_key,
2813*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_peer_pub_key),
2814*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_18_test_vector_our_pub_key,
2815*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_our_pub_key),
2816*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_18_test_vector_shared_secret,
2817*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_18_test_vector_shared_secret),
2818*f0865ec9SKyle Evans };
2819*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2820*f0865ec9SKyle Evans 
2821*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2822*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_19
2823*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2824*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_19_test_vector_our_priv_key[] = {
2825*f0865ec9SKyle Evans 	0x06, 0xf1, 0x32, 0xb7, 0x1f, 0x74, 0xd8, 0x7b, 0xf9, 0x98, 0x57, 0xe1, 0xe4, 0x35, 0x0a, 0x59, 0x4e, 0x5f, 0xe3, 0x55, 0x33, 0xb8, 0x88, 0x55, 0x2c, 0xec, 0xcb, 0xc0, 0xd8, 0x92, 0x3c, 0x90, 0x2e, 0x36, 0x14, 0x1d, 0x76, 0x91, 0xe2, 0x86, 0x31, 0xb8, 0xbc, 0x9b, 0xaf, 0xe5, 0xe0, 0x64,
2826*f0865ec9SKyle Evans };
2827*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_19_test_vector_peer_pub_key[] = {
2828*f0865ec9SKyle Evans 	0xd0, 0x9b, 0xb8, 0x22, 0xeb, 0x99, 0xe3, 0x80, 0x60, 0x95, 0x47, 0x47, 0xc8, 0x2b, 0xb3, 0x27, 0x8c, 0xf9, 0x6b, 0xbf, 0x36, 0xfe, 0xce, 0x34, 0x00, 0xf4, 0xc8, 0x73, 0x83, 0x8a, 0x40, 0xc1, 0x35, 0xeb, 0x3b, 0xab, 0xb9, 0x29, 0x3b, 0xd1, 0x00, 0x1b, 0xf3, 0xec, 0xde, 0xe7, 0xbf, 0x26, 0xd4, 0x16, 0xdb, 0x6e, 0x1b, 0x87, 0xbb, 0xb7, 0x42, 0x77, 0x88, 0xa3, 0xb6, 0xc7, 0xa7, 0xab, 0x2c, 0x16, 0x5b, 0x1e, 0x36, 0x6f, 0x96, 0x08, 0xdf, 0x51, 0x20, 0x37, 0x58, 0x4f, 0x21, 0x3a, 0x64, 0x8d, 0x47, 0xf1, 0x6a, 0xc3, 0x26, 0xe1, 0x9a, 0xae, 0x97, 0x2f, 0x63, 0xfd, 0x76, 0xc9,
2829*f0865ec9SKyle Evans };
2830*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_19_test_vector_our_pub_key[] = {
2831*f0865ec9SKyle Evans 	0x2a, 0x3c, 0xc6, 0xb8, 0xff, 0x5c, 0xde, 0x92, 0x6e, 0x7e, 0x3a, 0x18, 0x9a, 0x1b, 0xd0, 0x29, 0xc9, 0xb5, 0x86, 0x35, 0x1a, 0xf8, 0x83, 0x8f, 0x4f, 0x20, 0x1c, 0xb8, 0xf4, 0xb7, 0x0e, 0xf3, 0xb0, 0xda, 0x06, 0xd3, 0x52, 0xc8, 0x0f, 0xc2, 0x6b, 0xaf, 0x8f, 0x42, 0xb7, 0x84, 0x45, 0x9e, 0xbf, 0x99, 0x85, 0x96, 0x01, 0x76, 0xda, 0x6d, 0x23, 0xc7, 0x45, 0x2a, 0x29, 0x54, 0xff, 0xcb, 0xbc, 0xb2, 0x42, 0x49, 0xb4, 0x30, 0x19, 0xa2, 0xa0, 0x23, 0xe0, 0xb3, 0xda, 0xbd, 0x46, 0x1f, 0x19, 0xad, 0x3e, 0x77, 0x5c, 0x36, 0x4f, 0x3f, 0x11, 0xad, 0x49, 0xf3, 0x09, 0x94, 0x00, 0xd3,
2832*f0865ec9SKyle Evans };
2833*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_19_test_vector_shared_secret[] = {
2834*f0865ec9SKyle Evans 	0x01, 0x2d, 0x19, 0x1c, 0xf7, 0x40, 0x4a, 0x52, 0x36, 0x78, 0xc6, 0xfc, 0x07, 0x5d, 0xe8, 0x28, 0x5b, 0x24, 0x37, 0x20, 0xa9, 0x03, 0x04, 0x77, 0x08, 0xbb, 0x33, 0xe5, 0x01, 0xe0, 0xdb, 0xee, 0x5b, 0xcc, 0x40, 0xd7, 0xc3, 0xef, 0x6c, 0x6d, 0xa3, 0x9e, 0xa2, 0x4d, 0x83, 0x0d, 0xa1, 0xe8,
2835*f0865ec9SKyle Evans };
2836*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_19_test_case = {
2837*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 19",
2838*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2839*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2840*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_19_test_vector_our_priv_key,
2841*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_our_priv_key),
2842*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_19_test_vector_peer_pub_key,
2843*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_peer_pub_key),
2844*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_19_test_vector_our_pub_key,
2845*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_our_pub_key),
2846*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_19_test_vector_shared_secret,
2847*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_19_test_vector_shared_secret),
2848*f0865ec9SKyle Evans };
2849*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2850*f0865ec9SKyle Evans 
2851*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2852*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_20
2853*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2854*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_20_test_vector_our_priv_key[] = {
2855*f0865ec9SKyle Evans 	0x12, 0x04, 0x8e, 0xbb, 0x43, 0x31, 0xec, 0x19, 0xa1, 0xe2, 0x3f, 0x1a, 0x2c, 0x77, 0x3b, 0x66, 0x4c, 0xcf, 0xe9, 0x0a, 0x28, 0xbf, 0xb8, 0x46, 0xfc, 0x12, 0xf8, 0x1d, 0xff, 0x44, 0xb7, 0x44, 0x3c, 0x77, 0x64, 0x71, 0x64, 0xbf, 0x1e, 0x9e, 0x67, 0xfd, 0x2c, 0x07, 0xa6, 0x76, 0x62, 0x41,
2856*f0865ec9SKyle Evans };
2857*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_20_test_vector_peer_pub_key[] = {
2858*f0865ec9SKyle Evans 	0x13, 0x74, 0x12, 0x62, 0xed, 0xe5, 0x86, 0x1d, 0xad, 0x71, 0x06, 0x3d, 0xfd, 0x20, 0x4b, 0x91, 0xea, 0x1d, 0x3b, 0x7c, 0x63, 0x1d, 0xf6, 0x8e, 0xb9, 0x49, 0x96, 0x95, 0x27, 0xd7, 0x9a, 0x1d, 0xc5, 0x92, 0x95, 0xef, 0x7d, 0x2b, 0xca, 0x67, 0x43, 0xe8, 0xcd, 0x77, 0xb0, 0x4d, 0x1b, 0x58, 0x0b, 0xaa, 0xea, 0xdc, 0x7e, 0x19, 0xd7, 0x4a, 0x8a, 0x04, 0x45, 0x1a, 0x13, 0x5f, 0x1b, 0xe1, 0xb0, 0x2f, 0xe2, 0x99, 0xf9, 0xdc, 0x00, 0xbf, 0xdf, 0x20, 0x1e, 0x83, 0xd9, 0x95, 0xc6, 0x95, 0x0b, 0xcc, 0x1c, 0xb8, 0x9d, 0x6f, 0x7b, 0x30, 0xbf, 0x54, 0x65, 0x6b, 0x9a, 0x4d, 0xa5, 0x86,
2859*f0865ec9SKyle Evans };
2860*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_20_test_vector_our_pub_key[] = {
2861*f0865ec9SKyle Evans 	0xbc, 0x18, 0x83, 0x6b, 0xc7, 0xa9, 0xfd, 0xf5, 0x4b, 0x53, 0x52, 0xf3, 0x7d, 0x75, 0x28, 0xab, 0x8f, 0xa8, 0xec, 0x54, 0x4a, 0x8c, 0x61, 0x80, 0x51, 0x1c, 0xbf, 0xdd, 0x49, 0xcc, 0xe3, 0x77, 0xc3, 0x9e, 0x34, 0xc0, 0x31, 0xb5, 0x24, 0x0d, 0xc9, 0x98, 0x05, 0x03, 0xed, 0x2f, 0x26, 0x2c, 0x80, 0x86, 0xcb, 0xe3, 0x38, 0x19, 0x10, 0x80, 0xf0, 0xb7, 0xa1, 0x6c, 0x7a, 0xfc, 0x4c, 0x7b, 0x03, 0x26, 0xf9, 0xac, 0x66, 0xf5, 0x85, 0x52, 0xef, 0x4b, 0xb9, 0xd2, 0x4d, 0xe3, 0x42, 0x9e, 0xd5, 0xd3, 0x27, 0x7e, 0xd5, 0x8f, 0xcf, 0x48, 0xf2, 0xb5, 0xf6, 0x13, 0x26, 0xbe, 0xc6, 0xc6,
2862*f0865ec9SKyle Evans };
2863*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_20_test_vector_shared_secret[] = {
2864*f0865ec9SKyle Evans 	0xad, 0x0f, 0xd3, 0xdd, 0xff, 0xe8, 0x88, 0x4b, 0x92, 0x63, 0xf3, 0xc1, 0x5f, 0xe1, 0xf0, 0x7f, 0x2a, 0x5a, 0x22, 0xff, 0xdc, 0x7e, 0x96, 0x70, 0x85, 0xee, 0xa4, 0x5f, 0x0c, 0xd9, 0x59, 0xf2, 0x0f, 0x18, 0xf5, 0x22, 0x76, 0x3e, 0x28, 0xbc, 0xc9, 0x25, 0xe4, 0x96, 0xa5, 0x2d, 0xda, 0x98,
2865*f0865ec9SKyle Evans };
2866*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_20_test_case = {
2867*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 20",
2868*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2869*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2870*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_20_test_vector_our_priv_key,
2871*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_our_priv_key),
2872*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_20_test_vector_peer_pub_key,
2873*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_peer_pub_key),
2874*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_20_test_vector_our_pub_key,
2875*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_our_pub_key),
2876*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_20_test_vector_shared_secret,
2877*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_20_test_vector_shared_secret),
2878*f0865ec9SKyle Evans };
2879*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2880*f0865ec9SKyle Evans 
2881*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2882*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_21
2883*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2884*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_21_test_vector_our_priv_key[] = {
2885*f0865ec9SKyle Evans 	0x34, 0xd6, 0x1a, 0x69, 0x9c, 0xa5, 0x76, 0x16, 0x9f, 0xcd, 0xc0, 0xcc, 0x7e, 0x44, 0xe4, 0xe1, 0x22, 0x1d, 0xb0, 0xfe, 0x63, 0xd1, 0x68, 0x50, 0xc8, 0x10, 0x40, 0x29, 0xf7, 0xd4, 0x84, 0x49, 0x71, 0x4b, 0x98, 0x84, 0x32, 0x8c, 0xae, 0x18, 0x99, 0x78, 0x75, 0x4a, 0xb4, 0x60, 0xb4, 0x86,
2886*f0865ec9SKyle Evans };
2887*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_21_test_vector_peer_pub_key[] = {
2888*f0865ec9SKyle Evans 	0x9e, 0x22, 0xcb, 0xc1, 0x86, 0x57, 0xf5, 0x16, 0xa8, 0x64, 0xb3, 0x7b, 0x78, 0x33, 0x48, 0xb6, 0x6f, 0x1a, 0xa9, 0x62, 0x6c, 0xd6, 0x31, 0xf4, 0xfa, 0x1b, 0xd3, 0x2a, 0xd8, 0x8c, 0xf1, 0x1d, 0xb5, 0x20, 0x57, 0xc6, 0x60, 0x86, 0x0d, 0x39, 0xd1, 0x1f, 0xbf, 0x02, 0x4f, 0xab, 0xd4, 0x44, 0x6b, 0x0d, 0x53, 0xc7, 0x96, 0x81, 0xc2, 0x81, 0x16, 0xdf, 0x71, 0xe9, 0xce, 0xe7, 0x4f, 0xd5, 0x6c, 0x8b, 0x7f, 0x04, 0xb3, 0x9f, 0x11, 0x98, 0xcc, 0x72, 0x28, 0x4e, 0x98, 0xbe, 0x95, 0x62, 0xe3, 0x59, 0x26, 0xfb, 0x4f, 0x48, 0xa9, 0xfb, 0xec, 0xaf, 0xe7, 0x29, 0x30, 0x9e, 0x8b, 0x6f,
2889*f0865ec9SKyle Evans };
2890*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_21_test_vector_our_pub_key[] = {
2891*f0865ec9SKyle Evans 	0x86, 0x7f, 0x81, 0x10, 0x4c, 0xcd, 0x6b, 0x16, 0x3a, 0x79, 0x02, 0xb6, 0x70, 0xef, 0x40, 0x60, 0x42, 0xcb, 0x0c, 0xce, 0x7d, 0xcd, 0xc6, 0x3d, 0x1d, 0xfc, 0x91, 0xb2, 0xc4, 0x0e, 0x3c, 0xdf, 0x75, 0x95, 0x83, 0x4b, 0xf9, 0xec, 0xeb, 0x79, 0x84, 0x9f, 0x16, 0x36, 0xfc, 0x84, 0x62, 0xfc, 0x9d, 0x4b, 0xde, 0x8e, 0x87, 0x5e, 0xc4, 0x96, 0x97, 0xd2, 0x58, 0xd1, 0xd5, 0x94, 0x65, 0xf8, 0x43, 0x1c, 0x6f, 0x55, 0x31, 0xe1, 0xc5, 0x9e, 0x9f, 0x9e, 0xbe, 0x3c, 0xf1, 0x64, 0xa8, 0xd9, 0xce, 0x10, 0xa1, 0x2f, 0x19, 0x79, 0x28, 0x3a, 0x95, 0x9b, 0xad, 0x24, 0x4d, 0xd8, 0x38, 0x63,
2892*f0865ec9SKyle Evans };
2893*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_21_test_vector_shared_secret[] = {
2894*f0865ec9SKyle Evans 	0xdc, 0x4c, 0xa3, 0x92, 0xdc, 0x15, 0xe2, 0x01, 0x85, 0xf2, 0xc6, 0xa8, 0xea, 0x5e, 0xc3, 0x1d, 0xfc, 0x96, 0xf5, 0x61, 0x53, 0xa4, 0x73, 0x94, 0xb3, 0x07, 0x2b, 0x13, 0xd0, 0x01, 0x5f, 0x5d, 0x4a, 0xe1, 0x3b, 0xeb, 0x3b, 0xed, 0x54, 0xd6, 0x58, 0x48, 0xf9, 0xb8, 0x38, 0x3e, 0x6c, 0x95,
2895*f0865ec9SKyle Evans };
2896*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_21_test_case = {
2897*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 21",
2898*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2899*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2900*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_21_test_vector_our_priv_key,
2901*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_our_priv_key),
2902*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_21_test_vector_peer_pub_key,
2903*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_peer_pub_key),
2904*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_21_test_vector_our_pub_key,
2905*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_our_pub_key),
2906*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_21_test_vector_shared_secret,
2907*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_21_test_vector_shared_secret),
2908*f0865ec9SKyle Evans };
2909*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2910*f0865ec9SKyle Evans 
2911*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2912*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_22
2913*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2914*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_22_test_vector_our_priv_key[] = {
2915*f0865ec9SKyle Evans 	0xdc, 0x60, 0xfa, 0x87, 0x36, 0xd7, 0x02, 0x13, 0x5f, 0xf1, 0x6a, 0xab, 0x99, 0x2b, 0xb8, 0x8e, 0xac, 0x39, 0x7f, 0x59, 0x72, 0x45, 0x6c, 0x72, 0xec, 0x44, 0x73, 0x74, 0xd0, 0xd8, 0xce, 0x61, 0x15, 0x38, 0x31, 0xbf, 0xc8, 0x6a, 0xd5, 0xa6, 0xeb, 0x5b, 0x60, 0xbf, 0xb9, 0x6a, 0x86, 0x2c,
2916*f0865ec9SKyle Evans };
2917*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_22_test_vector_peer_pub_key[] = {
2918*f0865ec9SKyle Evans 	0x2d, 0xb5, 0xda, 0x5f, 0x94, 0x0e, 0xaa, 0x88, 0x4f, 0x4d, 0xb5, 0xec, 0x21, 0x39, 0xb0, 0x46, 0x9f, 0x38, 0xe4, 0xe6, 0xfb, 0xbc, 0xc5, 0x2d, 0xf1, 0x5c, 0x0f, 0x7c, 0xf7, 0xfc, 0xb1, 0x80, 0x8c, 0x74, 0x97, 0x64, 0xb6, 0xbe, 0x85, 0xd2, 0xfd, 0xc5, 0xb1, 0x6f, 0x58, 0xad, 0x5d, 0xc0, 0x22, 0xe8, 0xb0, 0x2d, 0xcf, 0x33, 0xe1, 0xb5, 0xa0, 0x83, 0x84, 0x95, 0x45, 0xf8, 0x4a, 0xd5, 0xe4, 0x3f, 0x77, 0xcb, 0x71, 0x54, 0x6d, 0xbb, 0xac, 0x0d, 0x11, 0xbd, 0xb2, 0xee, 0x20, 0x2e, 0x9d, 0x38, 0x72, 0xe8, 0xd0, 0x28, 0xc0, 0x89, 0x90, 0x74, 0x6c, 0x5e, 0x1d, 0xde, 0x99, 0x89,
2919*f0865ec9SKyle Evans };
2920*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_22_test_vector_our_pub_key[] = {
2921*f0865ec9SKyle Evans 	0xb6, 0x9b, 0xee, 0xde, 0x85, 0xd0, 0xf8, 0x29, 0xfe, 0xc1, 0xb8, 0x93, 0xcc, 0xb9, 0xc3, 0xe0, 0x52, 0xff, 0x69, 0x2e, 0x13, 0xb9, 0x74, 0x53, 0x7b, 0xc5, 0xb0, 0xf9, 0xfe, 0xaf, 0x7b, 0x22, 0xe8, 0x4f, 0x03, 0x23, 0x16, 0x29, 0xb2, 0x48, 0x66, 0xbd, 0xb4, 0xb8, 0xcf, 0x90, 0x89, 0x14, 0x66, 0xf8, 0x5e, 0x2b, 0xfc, 0xab, 0xa2, 0x84, 0x32, 0x85, 0xb0, 0xe1, 0x4e, 0xbc, 0x07, 0xef, 0x7d, 0xaf, 0xff, 0x8b, 0x42, 0x44, 0x16, 0xfe, 0xe6, 0x47, 0xb5, 0x98, 0x97, 0xb6, 0x19, 0xf2, 0x0e, 0xed, 0x95, 0xa6, 0x32, 0xe6, 0xa4, 0x20, 0x6b, 0xf7, 0xda, 0x42, 0x9c, 0x04, 0xc5, 0x60,
2922*f0865ec9SKyle Evans };
2923*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_22_test_vector_shared_secret[] = {
2924*f0865ec9SKyle Evans 	0xd7, 0x65, 0xb2, 0x08, 0x11, 0x2d, 0x2b, 0x9e, 0xd5, 0xad, 0x10, 0xc4, 0x04, 0x6e, 0x2e, 0x3b, 0x0d, 0xbf, 0x57, 0xc4, 0x69, 0x32, 0x95, 0x19, 0xe2, 0x39, 0xac, 0x28, 0xb2, 0x5c, 0x7d, 0x85, 0x2b, 0xf7, 0x57, 0xd5, 0xde, 0x0e, 0xe2, 0x71, 0xca, 0xdd, 0x02, 0x1d, 0x86, 0xcf, 0xd3, 0x47,
2925*f0865ec9SKyle Evans };
2926*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_22_test_case = {
2927*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 22",
2928*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2929*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2930*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_22_test_vector_our_priv_key,
2931*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_our_priv_key),
2932*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_22_test_vector_peer_pub_key,
2933*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_peer_pub_key),
2934*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_22_test_vector_our_pub_key,
2935*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_our_pub_key),
2936*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_22_test_vector_shared_secret,
2937*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_22_test_vector_shared_secret),
2938*f0865ec9SKyle Evans };
2939*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2940*f0865ec9SKyle Evans 
2941*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2942*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_23
2943*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2944*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_23_test_vector_our_priv_key[] = {
2945*f0865ec9SKyle Evans 	0x6f, 0xa6, 0xa1, 0xc7, 0x04, 0x73, 0x09, 0x87, 0xaa, 0x63, 0x4b, 0x05, 0x16, 0xa8, 0x26, 0xab, 0xa8, 0xc6, 0xd6, 0x41, 0x1d, 0x3a, 0x4c, 0x89, 0x77, 0x2d, 0x7a, 0x62, 0x61, 0x02, 0x56, 0xa2, 0xe2, 0xf2, 0x89, 0xf5, 0xc3, 0x44, 0x0b, 0x0e, 0xc1, 0xe7, 0x0f, 0xa3, 0x39, 0xe2, 0x51, 0xce,
2946*f0865ec9SKyle Evans };
2947*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_23_test_vector_peer_pub_key[] = {
2948*f0865ec9SKyle Evans 	0x32, 0x96, 0x47, 0xba, 0xa3, 0x54, 0x22, 0x4e, 0xb4, 0x41, 0x48, 0x29, 0xc5, 0x36, 0x8c, 0x82, 0xd7, 0x89, 0x3b, 0x39, 0x80, 0x4e, 0x08, 0xcb, 0xb2, 0x18, 0x0f, 0x45, 0x9b, 0xef, 0xc4, 0xb3, 0x47, 0xa3, 0x89, 0xa7, 0x0c, 0x91, 0xa2, 0x3b, 0xd9, 0xd3, 0x0c, 0x83, 0xbe, 0x52, 0x95, 0xd3, 0xcc, 0x8f, 0x61, 0x92, 0x3f, 0xad, 0x2a, 0xa8, 0xe5, 0x05, 0xd6, 0xcf, 0xa1, 0x26, 0xb9, 0xfa, 0xbd, 0x5a, 0xf9, 0xdc, 0xe2, 0x90, 0xb7, 0x56, 0x60, 0xef, 0x06, 0xd1, 0xca, 0xa7, 0x36, 0x81, 0xd0, 0x60, 0x89, 0xc3, 0x3b, 0xc4, 0x24, 0x6b, 0x3a, 0xa3, 0x0d, 0xbc, 0xd2, 0x43, 0x5b, 0x12,
2949*f0865ec9SKyle Evans };
2950*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_23_test_vector_our_pub_key[] = {
2951*f0865ec9SKyle Evans 	0x53, 0xde, 0x1f, 0xc1, 0x32, 0x8e, 0x8d, 0xe1, 0x4a, 0xec, 0xab, 0x29, 0xad, 0x8a, 0x40, 0xd6, 0xb1, 0x37, 0x68, 0xf8, 0x6f, 0x7d, 0x29, 0x84, 0x33, 0xd2, 0x0f, 0xec, 0x79, 0x1f, 0x86, 0xf8, 0xbc, 0x73, 0xf3, 0x58, 0x09, 0x8b, 0x25, 0x6a, 0x29, 0x8b, 0xb4, 0x88, 0xde, 0x25, 0x7b, 0xf4, 0xac, 0x28, 0x94, 0x4f, 0xd2, 0x7f, 0x17, 0xb8, 0x29, 0x46, 0xc0, 0x4c, 0x66, 0xc4, 0x1f, 0x00, 0x53, 0xd3, 0x69, 0x2f, 0x27, 0x5d, 0xa5, 0x5c, 0xd8, 0x73, 0x9a, 0x95, 0xbd, 0x8c, 0xd3, 0xaf, 0x2f, 0x96, 0xe4, 0xde, 0x95, 0x9e, 0xa8, 0x34, 0x4d, 0x89, 0x45, 0x37, 0x59, 0x05, 0x85, 0x8b,
2952*f0865ec9SKyle Evans };
2953*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_23_test_vector_shared_secret[] = {
2954*f0865ec9SKyle Evans 	0xd3, 0x77, 0x88, 0x50, 0xae, 0xb5, 0x88, 0x04, 0xfb, 0xe9, 0xdf, 0xe6, 0xf3, 0x8b, 0x9f, 0xa8, 0xe2, 0x0c, 0x2c, 0xa4, 0xe0, 0xde, 0xc3, 0x35, 0xaa, 0xfc, 0xec, 0xa0, 0x33, 0x3e, 0x3f, 0x24, 0x90, 0xb5, 0x3c, 0x0c, 0x1a, 0x14, 0xa8, 0x31, 0xba, 0x37, 0xc4, 0xb9, 0xd7, 0x4b, 0xe0, 0xf2,
2955*f0865ec9SKyle Evans };
2956*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_23_test_case = {
2957*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 23",
2958*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2959*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2960*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_23_test_vector_our_priv_key,
2961*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_our_priv_key),
2962*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_23_test_vector_peer_pub_key,
2963*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_peer_pub_key),
2964*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_23_test_vector_our_pub_key,
2965*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_our_pub_key),
2966*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_23_test_vector_shared_secret,
2967*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_23_test_vector_shared_secret),
2968*f0865ec9SKyle Evans };
2969*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
2970*f0865ec9SKyle Evans 
2971*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP384R1
2972*f0865ec9SKyle Evans #define ECCCDH_SECP384R1_SELF_TEST_24
2973*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP384R1 ***/
2974*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_24_test_vector_our_priv_key[] = {
2975*f0865ec9SKyle Evans 	0x74, 0xad, 0x83, 0x86, 0xc1, 0xcb, 0x2c, 0xa0, 0xfc, 0xde, 0xb3, 0x1e, 0x08, 0x69, 0xbb, 0x3f, 0x48, 0xc0, 0x36, 0xaf, 0xe2, 0xef, 0x11, 0x0c, 0xa3, 0x02, 0xbc, 0x8b, 0x91, 0x0f, 0x62, 0x1c, 0x9f, 0xcc, 0x54, 0xce, 0xc3, 0x2b, 0xb8, 0x9e, 0xc7, 0xca, 0xa8, 0x4c, 0x7b, 0x8e, 0x54, 0xa8,
2976*f0865ec9SKyle Evans };
2977*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_24_test_vector_peer_pub_key[] = {
2978*f0865ec9SKyle Evans 	0x29, 0xd8, 0xa3, 0x6d, 0x22, 0x20, 0x0a, 0x75, 0xb7, 0xae, 0xa1, 0xbb, 0x47, 0xcd, 0xfc, 0xb1, 0xb7, 0xfd, 0x66, 0xde, 0x96, 0x70, 0x41, 0x43, 0x47, 0x28, 0xab, 0x5d, 0x53, 0x3a, 0x06, 0x0d, 0xf7, 0x32, 0x13, 0x06, 0x00, 0xfe, 0x6f, 0x75, 0x85, 0x2a, 0x87, 0x1f, 0xb2, 0x93, 0x8e, 0x39, 0xe1, 0x9b, 0x53, 0xdb, 0x52, 0x83, 0x95, 0xde, 0x89, 0x7a, 0x45, 0x10, 0x89, 0x67, 0x71, 0x5e, 0xb8, 0xcb, 0x55, 0xc3, 0xfc, 0xbf, 0x23, 0x37, 0x93, 0x72, 0xc0, 0x87, 0x3a, 0x05, 0x8d, 0x57, 0x54, 0x4b, 0x10, 0x2e, 0xcc, 0xe7, 0x22, 0xb2, 0xcc, 0xab, 0xb1, 0xa6, 0x03, 0x77, 0x4f, 0xd5,
2979*f0865ec9SKyle Evans };
2980*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_24_test_vector_our_pub_key[] = {
2981*f0865ec9SKyle Evans 	0x27, 0xa3, 0xe8, 0x3c, 0xfb, 0x9d, 0x51, 0x22, 0xe7, 0x31, 0x29, 0xd8, 0x01, 0x61, 0x58, 0x57, 0xda, 0x7c, 0xc0, 0x89, 0xcc, 0xcc, 0x9c, 0x54, 0xab, 0x30, 0x32, 0xa1, 0x9e, 0x0a, 0x0a, 0x9f, 0x67, 0x73, 0x46, 0xe3, 0x7f, 0x08, 0xa0, 0xb3, 0xed, 0x8d, 0xa6, 0xe5, 0xdd, 0x69, 0x10, 0x63, 0x8d, 0x60, 0xe4, 0x4a, 0xa5, 0xe0, 0xfd, 0x30, 0xc9, 0x18, 0x45, 0x67, 0x96, 0xaf, 0x37, 0xf0, 0xe4, 0x19, 0x57, 0x90, 0x16, 0x45, 0xe5, 0xc5, 0x96, 0xc6, 0xd9, 0x89, 0xf5, 0x85, 0x9b, 0x03, 0xa0, 0xbd, 0x7d, 0x1f, 0x4e, 0x77, 0x93, 0x6f, 0xff, 0x3c, 0x74, 0xd2, 0x04, 0xe5, 0x38, 0x8e,
2982*f0865ec9SKyle Evans };
2983*f0865ec9SKyle Evans static const u8 ecccdh_SECP384R1_24_test_vector_shared_secret[] = {
2984*f0865ec9SKyle Evans 	0x81, 0xe1, 0xe7, 0x15, 0x75, 0xbb, 0x45, 0x05, 0x49, 0x8d, 0xe0, 0x97, 0x35, 0x01, 0x86, 0x43, 0x0a, 0x62, 0x42, 0xfa, 0x6c, 0x57, 0xb8, 0x5a, 0x5f, 0x98, 0x4a, 0x23, 0x37, 0x11, 0x23, 0xd2, 0xd1, 0x42, 0x4e, 0xef, 0xbf, 0x80, 0x42, 0x58, 0x39, 0x2b, 0xc7, 0x23, 0xe4, 0xef, 0x1e, 0x35,
2985*f0865ec9SKyle Evans };
2986*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP384R1_24_test_case = {
2987*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP384R1 24",
2988*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
2989*f0865ec9SKyle Evans 	.ec_str_p = &secp384r1_str_params,
2990*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP384R1_24_test_vector_our_priv_key,
2991*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_our_priv_key),
2992*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP384R1_24_test_vector_peer_pub_key,
2993*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_peer_pub_key),
2994*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP384R1_24_test_vector_our_pub_key,
2995*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_our_pub_key),
2996*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP384R1_24_test_vector_shared_secret,
2997*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_24_test_vector_shared_secret),
2998*f0865ec9SKyle Evans };
2999*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP384R1 */
3000*f0865ec9SKyle Evans 
3001*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3002*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_0
3003*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3004*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_0_test_vector_our_priv_key[] = {
3005*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0x7e, 0xec, 0xc0, 0x7a, 0xb4, 0xb3, 0x29, 0x06, 0x8f, 0xba, 0x65, 0xe5, 0x6a, 0x1f, 0x88, 0x90, 0xaa, 0x93, 0x5e, 0x57, 0x13, 0x4a, 0xe0, 0xff, 0xcc, 0xe8, 0x02, 0x73, 0x51, 0x51, 0xf4, 0xea, 0xc6, 0x56, 0x4f, 0x6e, 0xe9, 0x97, 0x4c, 0x5e, 0x68, 0x87, 0xa1, 0xfe, 0xfe, 0xe5, 0x74, 0x3a, 0xe2, 0x24, 0x1b, 0xfe, 0xb9, 0x5d, 0x5c, 0xe3, 0x1d, 0xdc, 0xb6, 0xf9, 0xed, 0xb4, 0xd6, 0xfc, 0x47,
3006*f0865ec9SKyle Evans };
3007*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_0_test_vector_peer_pub_key[] = {
3008*f0865ec9SKyle Evans 	0x00, 0x68, 0x5a, 0x48, 0xe8, 0x6c, 0x79, 0xf0, 0xf0, 0x87, 0x5f, 0x7b, 0xc1, 0x8d, 0x25, 0xeb, 0x5f, 0xc8, 0xc0, 0xb0, 0x7e, 0x5d, 0xa4, 0xf4, 0x37, 0x0f, 0x3a, 0x94, 0x90, 0x34, 0x08, 0x54, 0x33, 0x4b, 0x1e, 0x1b, 0x87, 0xfa, 0x39, 0x54, 0x64, 0xc6, 0x06, 0x26, 0x12, 0x4a, 0x4e, 0x70, 0xd0, 0xf7, 0x85, 0x60, 0x1d, 0x37, 0xc0, 0x98, 0x70, 0xeb, 0xf1, 0x76, 0x66, 0x68, 0x77, 0xa2, 0x04, 0x6d, 0x01, 0xba, 0x52, 0xc5, 0x6f, 0xc8, 0x77, 0x6d, 0x9e, 0x8f, 0x5d, 0xb4, 0xf0, 0xcc, 0x27, 0x63, 0x6d, 0x0b, 0x74, 0x1b, 0xbe, 0x05, 0x40, 0x06, 0x97, 0x94, 0x2e, 0x80, 0xb7, 0x39, 0x88, 0x4a, 0x83, 0xbd, 0xe9, 0x9e, 0x0f, 0x67, 0x16, 0x93, 0x9e, 0x63, 0x2b, 0xc8, 0x98, 0x6f, 0xa1, 0x8d, 0xcc, 0xd4, 0x43, 0xa3, 0x48, 0xb6, 0xc3, 0xe5, 0x22, 0x49, 0x79, 0x55, 0xa4, 0xf3, 0xc3, 0x02, 0xf6, 0x76,
3009*f0865ec9SKyle Evans };
3010*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_0_test_vector_our_pub_key[] = {
3011*f0865ec9SKyle Evans 	0x00, 0x60, 0x2f, 0x9d, 0x0c, 0xf9, 0xe5, 0x26, 0xb2, 0x9e, 0x22, 0x38, 0x1c, 0x20, 0x3c, 0x48, 0xa8, 0x86, 0xc2, 0xb0, 0x67, 0x30, 0x33, 0x36, 0x63, 0x14, 0xf1, 0xff, 0xbc, 0xba, 0x24, 0x0b, 0xa4, 0x2f, 0x4e, 0xf3, 0x8a, 0x76, 0x17, 0x46, 0x35, 0xf9, 0x1e, 0x6b, 0x4e, 0xd3, 0x42, 0x75, 0xeb, 0x01, 0xc8, 0x46, 0x7d, 0x05, 0xca, 0x80, 0x31, 0x5b, 0xf1, 0xa7, 0xbb, 0xd9, 0x45, 0xf5, 0x50, 0xa5, 0x01, 0xb7, 0xc8, 0x5f, 0x26, 0xf5, 0xd4, 0xb2, 0xd7, 0x35, 0x5c, 0xf6, 0xb0, 0x21, 0x17, 0x65, 0x99, 0x43, 0x76, 0x2b, 0x6d, 0x1d, 0xb5, 0xab, 0x4f, 0x1d, 0xbc, 0x44, 0xce, 0x7b, 0x29, 0x46, 0xeb, 0x6c, 0x7d, 0xe3, 0x42, 0x96, 0x28, 0x93, 0xfd, 0x38, 0x7d, 0x1b, 0x73, 0xd7, 0xa8, 0x67, 0x2d, 0x1f, 0x23, 0x69, 0x61, 0x17, 0x0b, 0x7e, 0xb3, 0x57, 0x99, 0x53, 0xee, 0x5c, 0xdc, 0x88, 0xcd, 0x2d,
3012*f0865ec9SKyle Evans };
3013*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_0_test_vector_shared_secret[] = {
3014*f0865ec9SKyle Evans 	0x00, 0x5f, 0xc7, 0x04, 0x77, 0xc3, 0xe6, 0x3b, 0xc3, 0x95, 0x4b, 0xd0, 0xdf, 0x3e, 0xa0, 0xd1, 0xf4, 0x1e, 0xe2, 0x17, 0x46, 0xed, 0x95, 0xfc, 0x5e, 0x1f, 0xdf, 0x90, 0x93, 0x0d, 0x5e, 0x13, 0x66, 0x72, 0xd7, 0x2c, 0xc7, 0x70, 0x74, 0x2d, 0x17, 0x11, 0xc3, 0xc3, 0xa4, 0xc3, 0x34, 0xa0, 0xad, 0x97, 0x59, 0x43, 0x6a, 0x4d, 0x3c, 0x5b, 0xf6, 0xe7, 0x4b, 0x95, 0x78, 0xfa, 0xc1, 0x48, 0xc8, 0x31,
3015*f0865ec9SKyle Evans };
3016*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_0_test_case = {
3017*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 0",
3018*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3019*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3020*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_0_test_vector_our_priv_key,
3021*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_our_priv_key),
3022*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_0_test_vector_peer_pub_key,
3023*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_peer_pub_key),
3024*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_0_test_vector_our_pub_key,
3025*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_our_pub_key),
3026*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_0_test_vector_shared_secret,
3027*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_0_test_vector_shared_secret),
3028*f0865ec9SKyle Evans };
3029*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3030*f0865ec9SKyle Evans 
3031*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3032*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_1
3033*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3034*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_1_test_vector_our_priv_key[] = {
3035*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x81, 0x6f, 0x19, 0xc1, 0xfb, 0x10, 0xef, 0x94, 0xd4, 0xa1, 0xd8, 0x1c, 0x15, 0x6e, 0xc3, 0xd1, 0xde, 0x08, 0xb6, 0x67, 0x61, 0xf0, 0x3f, 0x06, 0xee, 0x4b, 0xb9, 0xdc, 0xeb, 0xbb, 0xfe, 0x1e, 0xaa, 0x1e, 0xd4, 0x9a, 0x6a, 0x99, 0x08, 0x38, 0xd8, 0xed, 0x31, 0x8c, 0x14, 0xd7, 0x4c, 0xc8, 0x72, 0xf9, 0x5d, 0x05, 0xd0, 0x7a, 0xd5, 0x0f, 0x62, 0x1c, 0xeb, 0x62, 0x0c, 0xd9, 0x05, 0xcf, 0xb8,
3036*f0865ec9SKyle Evans };
3037*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_1_test_vector_peer_pub_key[] = {
3038*f0865ec9SKyle Evans 	0x01, 0xdf, 0x27, 0x7c, 0x15, 0x21, 0x08, 0x34, 0x9b, 0xc3, 0x4d, 0x53, 0x9e, 0xe0, 0xcf, 0x06, 0xb2, 0x4f, 0x5d, 0x35, 0x00, 0x67, 0x7b, 0x44, 0x45, 0x45, 0x3c, 0xcc, 0x21, 0x40, 0x94, 0x53, 0xaa, 0xfb, 0x8a, 0x72, 0xa0, 0xbe, 0x9e, 0xbe, 0x54, 0xd1, 0x22, 0x70, 0xaa, 0x51, 0xb3, 0xab, 0x7f, 0x31, 0x6a, 0xa5, 0xe7, 0x4a, 0x95, 0x1c, 0x5e, 0x53, 0xf7, 0x4c, 0xd9, 0x5f, 0xc2, 0x9a, 0xee, 0x7a, 0x01, 0x3d, 0x52, 0xf3, 0x3a, 0x9f, 0x3c, 0x14, 0x38, 0x4d, 0x15, 0x87, 0xfa, 0x8a, 0xbe, 0x7a, 0xed, 0x74, 0xbc, 0x33, 0x74, 0x9a, 0xd9, 0xc5, 0x70, 0xb4, 0x71, 0x77, 0x64, 0x22, 0xc7, 0xd4, 0x50, 0x5d, 0x9b, 0x0a, 0x96, 0xb3, 0xbf, 0xac, 0x04, 0x1e, 0x4c, 0x6a, 0x69, 0x90, 0xae, 0x7f, 0x70, 0x0e, 0x5b, 0x4a, 0x66, 0x40, 0x22, 0x91, 0x12, 0xde, 0xaf, 0xa0, 0xcd, 0x8b, 0xb0, 0xd0, 0x89, 0xb0,
3039*f0865ec9SKyle Evans };
3040*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_1_test_vector_our_pub_key[] = {
3041*f0865ec9SKyle Evans 	0x00, 0xd4, 0x56, 0x15, 0xed, 0x5d, 0x37, 0xfd, 0xe6, 0x99, 0x61, 0x0a, 0x62, 0xcd, 0x43, 0xba, 0x76, 0xbe, 0xdd, 0x8f, 0x85, 0xed, 0x31, 0x00, 0x5f, 0xe0, 0x0d, 0x64, 0x50, 0xfb, 0xbd, 0x10, 0x12, 0x91, 0xab, 0xd9, 0x6d, 0x49, 0x45, 0xa8, 0xb5, 0x7b, 0xc7, 0x3b, 0x3f, 0xe9, 0xf4, 0x67, 0x11, 0x05, 0x30, 0x9e, 0xc9, 0xb6, 0x87, 0x9d, 0x05, 0x51, 0xd9, 0x30, 0xda, 0xc8, 0xba, 0x45, 0xd2, 0x55, 0x01, 0x42, 0x53, 0x32, 0x84, 0x4e, 0x59, 0x2b, 0x44, 0x0c, 0x00, 0x27, 0x97, 0x2a, 0xd1, 0x52, 0x64, 0x31, 0xc0, 0x67, 0x32, 0xdf, 0x19, 0xcd, 0x46, 0xa2, 0x42, 0x17, 0x2d, 0x4d, 0xd6, 0x7c, 0x2c, 0x8c, 0x99, 0xdf, 0xc2, 0x2e, 0x49, 0x94, 0x9a, 0x56, 0xcf, 0x90, 0xc6, 0x47, 0x36, 0x35, 0xce, 0x82, 0xf2, 0x5b, 0x33, 0x68, 0x2f, 0xb1, 0x9b, 0xc3, 0x3b, 0xd9, 0x10, 0xed, 0x8c, 0xe3, 0xa7, 0xfa,
3042*f0865ec9SKyle Evans };
3043*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_1_test_vector_shared_secret[] = {
3044*f0865ec9SKyle Evans 	0x00, 0x0b, 0x39, 0x20, 0xac, 0x83, 0x0a, 0xde, 0x81, 0x2c, 0x8f, 0x96, 0x80, 0x5d, 0xa2, 0x23, 0x6e, 0x00, 0x2a, 0xcb, 0xbf, 0x13, 0x59, 0x6a, 0x9a, 0xb2, 0x54, 0xd4, 0x4d, 0x0e, 0x91, 0xb6, 0x25, 0x5e, 0xbf, 0x12, 0x29, 0xf3, 0x66, 0xfb, 0x5a, 0x05, 0xc5, 0x88, 0x4e, 0xf4, 0x60, 0x32, 0xc2, 0x6d, 0x42, 0x18, 0x92, 0x73, 0xca, 0x4e, 0xfa, 0x4c, 0x3d, 0xb6, 0xbd, 0x12, 0xa6, 0x85, 0x37, 0x59,
3045*f0865ec9SKyle Evans };
3046*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_1_test_case = {
3047*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 1",
3048*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3049*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3050*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_1_test_vector_our_priv_key,
3051*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_our_priv_key),
3052*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_1_test_vector_peer_pub_key,
3053*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_peer_pub_key),
3054*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_1_test_vector_our_pub_key,
3055*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_our_pub_key),
3056*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_1_test_vector_shared_secret,
3057*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_1_test_vector_shared_secret),
3058*f0865ec9SKyle Evans };
3059*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3060*f0865ec9SKyle Evans 
3061*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3062*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_2
3063*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3064*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_2_test_vector_our_priv_key[] = {
3065*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0x2f, 0x2e, 0x0c, 0x6d, 0x9e, 0x9d, 0x11, 0x7c, 0xeb, 0x97, 0x23, 0xbc, 0xed, 0x02, 0xeb, 0x3d, 0x4e, 0xeb, 0xf5, 0xfe, 0xea, 0xf8, 0xee, 0x01, 0x13, 0xcc, 0xd8, 0x05, 0x7b, 0x13, 0xdd, 0xd4, 0x16, 0xe0, 0xb7, 0x42, 0x80, 0xc2, 0xd0, 0xba, 0x8e, 0xd2, 0x91, 0xc4, 0x43, 0xbc, 0x1b, 0x14, 0x1c, 0xaf, 0x8a, 0xfb, 0x3a, 0x71, 0xf9, 0x7f, 0x57, 0xc2, 0x25, 0xc0, 0x3e, 0x1e, 0x4d, 0x42, 0xb0,
3066*f0865ec9SKyle Evans };
3067*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_2_test_vector_peer_pub_key[] = {
3068*f0865ec9SKyle Evans 	0x00, 0x92, 0xdb, 0x31, 0x42, 0x56, 0x4d, 0x27, 0xa5, 0xf0, 0x00, 0x6f, 0x81, 0x99, 0x08, 0xfb, 0xa1, 0xb8, 0x50, 0x38, 0xa5, 0xbc, 0x25, 0x09, 0x90, 0x6a, 0x49, 0x7d, 0xaa, 0xc6, 0x7f, 0xd7, 0xae, 0xe0, 0xfc, 0x2d, 0xab, 0xa4, 0xe4, 0x33, 0x4e, 0xea, 0xef, 0x0e, 0x00, 0x19, 0x20, 0x4b, 0x47, 0x1c, 0xd8, 0x80, 0x24, 0xf8, 0x21, 0x15, 0xd8, 0x14, 0x9c, 0xc0, 0xcf, 0x4f, 0x7c, 0xe1, 0xa4, 0xd5, 0x01, 0x6b, 0xad, 0x06, 0x23, 0xf5, 0x17, 0xb1, 0x58, 0xd9, 0x88, 0x18, 0x41, 0xd2, 0x57, 0x1e, 0xfb, 0xad, 0x63, 0xf8, 0x5c, 0xbe, 0x2e, 0x58, 0x19, 0x60, 0xc5, 0xd6, 0x70, 0x60, 0x1a, 0x67, 0x60, 0x27, 0x26, 0x75, 0xa5, 0x48, 0x99, 0x62, 0x17, 0xe4, 0xab, 0x2b, 0x8e, 0xbc, 0xe3, 0x1d, 0x71, 0xfc, 0xa6, 0x3f, 0xcc, 0x3c, 0x08, 0xe9, 0x1c, 0x1d, 0x8e, 0xdd, 0x91, 0xcf, 0x6f, 0xe8, 0x45, 0xf8,
3069*f0865ec9SKyle Evans };
3070*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_2_test_vector_our_pub_key[] = {
3071*f0865ec9SKyle Evans 	0x00, 0x71, 0x7f, 0xcb, 0x3d, 0x4a, 0x40, 0xd1, 0x03, 0x87, 0x1e, 0xde, 0x04, 0x4d, 0xc8, 0x03, 0xdb, 0x50, 0x8a, 0xaa, 0x4a, 0xe7, 0x4b, 0x70, 0xb9, 0xfb, 0x8d, 0x8d, 0xfd, 0x84, 0xbf, 0xec, 0xfa, 0xd1, 0x78, 0x71, 0x87, 0x96, 0x98, 0xc2, 0x92, 0xd2, 0xfd, 0x5e, 0x17, 0xb4, 0xf9, 0x34, 0x36, 0x36, 0xc5, 0x31, 0xa4, 0xfa, 0xc6, 0x8a, 0x35, 0xa9, 0x36, 0x65, 0x54, 0x6b, 0x9a, 0x87, 0x86, 0x79, 0x00, 0xf3, 0xd9, 0x6a, 0x86, 0x37, 0x03, 0x69, 0x93, 0xab, 0x5d, 0x24, 0x45, 0x00, 0xff, 0xf9, 0xd2, 0x77, 0x21, 0x12, 0x82, 0x6f, 0x64, 0x36, 0x60, 0x3d, 0x3e, 0xb2, 0x34, 0xa4, 0x4d, 0x5c, 0x4e, 0x5c, 0x57, 0x72, 0x34, 0x67, 0x9c, 0x4f, 0x9d, 0xf7, 0x25, 0xee, 0x5b, 0x91, 0x18, 0xf2, 0x3d, 0x8a, 0x58, 0xd0, 0xcc, 0x01, 0x09, 0x6d, 0xaf, 0x70, 0xe8, 0xdf, 0xec, 0x01, 0x28, 0xbd, 0xc2, 0xe8,
3072*f0865ec9SKyle Evans };
3073*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_2_test_vector_shared_secret[] = {
3074*f0865ec9SKyle Evans 	0x00, 0x6b, 0x38, 0x0a, 0x6e, 0x95, 0x67, 0x92, 0x77, 0xcf, 0xee, 0x4e, 0x83, 0x53, 0xbf, 0x96, 0xef, 0x2a, 0x1e, 0xbd, 0xd0, 0x60, 0x74, 0x9f, 0x2f, 0x04, 0x6f, 0xe5, 0x71, 0x05, 0x37, 0x40, 0xbb, 0xcc, 0x9a, 0x0b, 0x55, 0x79, 0x0b, 0xc9, 0xab, 0x56, 0xc3, 0x20, 0x8a, 0xa0, 0x5d, 0xdf, 0x74, 0x6a, 0x10, 0xa3, 0xad, 0x69, 0x4d, 0xaa, 0xe0, 0x0d, 0x98, 0x0d, 0x94, 0x4a, 0xab, 0xc6, 0xa0, 0x8f,
3075*f0865ec9SKyle Evans };
3076*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_2_test_case = {
3077*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 2",
3078*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3079*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3080*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_2_test_vector_our_priv_key,
3081*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_our_priv_key),
3082*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_2_test_vector_peer_pub_key,
3083*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_peer_pub_key),
3084*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_2_test_vector_our_pub_key,
3085*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_our_pub_key),
3086*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_2_test_vector_shared_secret,
3087*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_2_test_vector_shared_secret),
3088*f0865ec9SKyle Evans };
3089*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3090*f0865ec9SKyle Evans 
3091*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3092*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_3
3093*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3094*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_3_test_vector_our_priv_key[] = {
3095*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0xe5, 0x48, 0xa7, 0x9d, 0x8b, 0x05, 0xf9, 0x23, 0xb9, 0x82, 0x5d, 0x11, 0xb6, 0x56, 0xf2, 0x22, 0xe8, 0xcb, 0x98, 0xb0, 0xf8, 0x9d, 0xe1, 0xd3, 0x17, 0x18, 0x4d, 0xc5, 0xa6, 0x98, 0xf7, 0xc7, 0x11, 0x61, 0xee, 0x7d, 0xc1, 0x1c, 0xd3, 0x1f, 0x4f, 0x4f, 0x8a, 0xe3, 0xa9, 0x81, 0xe1, 0xa3, 0xe7, 0x8b, 0xde, 0xbb, 0x97, 0xd7, 0xc2, 0x04, 0xb9, 0x26, 0x1b, 0x4e, 0xf9, 0x2e, 0x09, 0x18, 0xe0,
3096*f0865ec9SKyle Evans };
3097*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_3_test_vector_peer_pub_key[] = {
3098*f0865ec9SKyle Evans 	0x00, 0xfd, 0xd4, 0x0d, 0x9e, 0x9d, 0x97, 0x40, 0x27, 0xcb, 0x3b, 0xae, 0x68, 0x21, 0x62, 0xea, 0xc1, 0x32, 0x8a, 0xd6, 0x1b, 0xc4, 0x35, 0x3c, 0x45, 0xbf, 0x5a, 0xfe, 0x76, 0xbf, 0x60, 0x7d, 0x28, 0x94, 0xc8, 0xcc, 0xe2, 0x36, 0x95, 0xd9, 0x20, 0xf2, 0x46, 0x4f, 0xda, 0x47, 0x73, 0xd4, 0x69, 0x3b, 0xe4, 0xb3, 0x77, 0x35, 0x84, 0x69, 0x1b, 0xdb, 0x03, 0x29, 0xb7, 0xf4, 0xc8, 0x6c, 0xc2, 0x99, 0x00, 0x34, 0xce, 0xac, 0x6a, 0x3f, 0xef, 0x1c, 0x3e, 0x1c, 0x49, 0x4b, 0xfe, 0x8d, 0x87, 0x2b, 0x18, 0x38, 0x32, 0x21, 0x9a, 0x7e, 0x14, 0xda, 0x41, 0x4d, 0x4e, 0x34, 0x74, 0x57, 0x36, 0x71, 0xec, 0x19, 0xb0, 0x33, 0xbe, 0x83, 0x1b, 0x91, 0x54, 0x35, 0x90, 0x59, 0x25, 0xb4, 0x49, 0x47, 0xc5, 0x92, 0x95, 0x99, 0x45, 0xb4, 0xeb, 0x7c, 0x95, 0x1c, 0x3b, 0x9c, 0x8c, 0xf5, 0x25, 0x30, 0xba, 0x23,
3099*f0865ec9SKyle Evans };
3100*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_3_test_vector_our_pub_key[] = {
3101*f0865ec9SKyle Evans 	0x00, 0x0c, 0xe8, 0x00, 0x21, 0x7e, 0xd2, 0x43, 0xdd, 0x10, 0xa7, 0x9a, 0xd7, 0x3d, 0xf5, 0x78, 0xaa, 0x8a, 0x3f, 0x91, 0x94, 0xaf, 0x52, 0x8c, 0xd1, 0x09, 0x4b, 0xbf, 0xee, 0x27, 0xa3, 0xb5, 0x48, 0x1a, 0xd5, 0x86, 0x2c, 0x88, 0x76, 0xc0, 0xc3, 0xf9, 0x12, 0x94, 0xc0, 0xab, 0x3a, 0xa8, 0x06, 0xd9, 0x02, 0x0c, 0xba, 0xa2, 0xed, 0x72, 0xb7, 0xfe, 0xcd, 0xc5, 0xa0, 0x9a, 0x6d, 0xad, 0x6f, 0x32, 0x01, 0x54, 0x3c, 0x9a, 0xb4, 0x5b, 0x12, 0x46, 0x92, 0x32, 0x91, 0x8e, 0x21, 0xd5, 0xa3, 0x51, 0xf9, 0xa4, 0xb9, 0xcb, 0xf9, 0xef, 0xb2, 0xaf, 0xcc, 0x40, 0x2f, 0xa9, 0xb3, 0x16, 0x50, 0xbe, 0xc2, 0xd6, 0x41, 0xa0, 0x5c, 0x44, 0x0d, 0x35, 0x33, 0x1c, 0x08, 0x93, 0xd1, 0x1f, 0xb1, 0x31, 0x51, 0x33, 0x59, 0x88, 0xb3, 0x03, 0x34, 0x13, 0x01, 0xa7, 0x3d, 0xc5, 0xf6, 0x1d, 0x57, 0x4e, 0x67, 0xd9,
3102*f0865ec9SKyle Evans };
3103*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_3_test_vector_shared_secret[] = {
3104*f0865ec9SKyle Evans 	0x00, 0xfb, 0xbc, 0xd0, 0xb8, 0xd0, 0x53, 0x31, 0xfe, 0xf6, 0x08, 0x6f, 0x22, 0xa6, 0xcc, 0xe4, 0xd3, 0x57, 0x24, 0xab, 0x7a, 0x2f, 0x49, 0xdd, 0x84, 0x58, 0xd0, 0xbf, 0xd5, 0x7a, 0x0b, 0x8b, 0x70, 0xf2, 0x46, 0xc1, 0x7c, 0x44, 0x68, 0xc0, 0x76, 0x87, 0x4b, 0x0d, 0xff, 0x7a, 0x03, 0x36, 0x82, 0x3b, 0x19, 0xe9, 0x8b, 0xf1, 0xce, 0xc0, 0x5e, 0x4b, 0xef, 0xfb, 0x05, 0x91, 0xf9, 0x77, 0x13, 0xc6,
3105*f0865ec9SKyle Evans };
3106*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_3_test_case = {
3107*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 3",
3108*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3109*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3110*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_3_test_vector_our_priv_key,
3111*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_our_priv_key),
3112*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_3_test_vector_peer_pub_key,
3113*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_peer_pub_key),
3114*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_3_test_vector_our_pub_key,
3115*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_our_pub_key),
3116*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_3_test_vector_shared_secret,
3117*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_3_test_vector_shared_secret),
3118*f0865ec9SKyle Evans };
3119*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3120*f0865ec9SKyle Evans 
3121*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3122*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_4
3123*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3124*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_4_test_vector_our_priv_key[] = {
3125*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0xc8, 0xaa, 0xe9, 0x4b, 0xb1, 0x0b, 0x8c, 0xa4, 0xf7, 0xbe, 0x57, 0x7b, 0x4f, 0xb3, 0x2b, 0xb2, 0x38, 0x10, 0x32, 0xc4, 0x94, 0x2c, 0x24, 0xfc, 0x2d, 0x75, 0x3e, 0x7c, 0xc5, 0xe4, 0x7b, 0x48, 0x33, 0x89, 0xd9, 0xf3, 0xb9, 0x56, 0xd2, 0x0e, 0xe9, 0x00, 0x1b, 0x1e, 0xef, 0x9f, 0x23, 0x54, 0x5f, 0x72, 0xc5, 0x60, 0x21, 0x40, 0x04, 0x68, 0x39, 0xe9, 0x63, 0x31, 0x3c, 0x3d, 0xec, 0xc8, 0x64,
3126*f0865ec9SKyle Evans };
3127*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_4_test_vector_peer_pub_key[] = {
3128*f0865ec9SKyle Evans 	0x00, 0x98, 0xd9, 0x9d, 0xee, 0x08, 0x16, 0x55, 0x0e, 0x84, 0xdb, 0xfc, 0xed, 0x7e, 0x88, 0x13, 0x7f, 0xdd, 0xcf, 0x58, 0x1a, 0x72, 0x5a, 0x45, 0x50, 0x21, 0x11, 0x5f, 0xe4, 0x9f, 0x8d, 0xc3, 0xcf, 0x23, 0x3c, 0xd9, 0xea, 0x0e, 0x6f, 0x03, 0x9d, 0xc7, 0x91, 0x9d, 0xa9, 0x73, 0xcd, 0xce, 0xac, 0xa2, 0x05, 0xda, 0x39, 0xe0, 0xbd, 0x98, 0xc8, 0x06, 0x25, 0x36, 0xc4, 0x7f, 0x25, 0x8f, 0x44, 0xb5, 0x00, 0xcd, 0x22, 0x5c, 0x87, 0x97, 0x37, 0x1b, 0xe0, 0xc4, 0x29, 0x7d, 0x2b, 0x45, 0x77, 0x40, 0x10, 0x0c, 0x77, 0x41, 0x41, 0xd8, 0xf2, 0x14, 0xc2, 0x3b, 0x61, 0xaa, 0x2b, 0x6c, 0xd4, 0x80, 0x6b, 0x9b, 0x70, 0x72, 0x2a, 0xa4, 0x96, 0x5f, 0xb6, 0x22, 0xf4, 0x2b, 0x73, 0x91, 0xe2, 0x7e, 0x5e, 0xc2, 0x1c, 0x56, 0x79, 0xc5, 0xb0, 0x6b, 0x59, 0x12, 0x73, 0x72, 0x99, 0x7d, 0x42, 0x1a, 0xdc, 0x1e,
3129*f0865ec9SKyle Evans };
3130*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_4_test_vector_our_pub_key[] = {
3131*f0865ec9SKyle Evans 	0x01, 0x06, 0xa1, 0x4e, 0x2e, 0xe8, 0xff, 0x97, 0x0a, 0xa8, 0xab, 0x0c, 0x79, 0xb9, 0x7a, 0x33, 0xbb, 0xa2, 0x95, 0x8e, 0x07, 0x0b, 0x75, 0xb9, 0x47, 0x36, 0xb7, 0x7b, 0xbe, 0x3f, 0x77, 0x73, 0x24, 0xfa, 0x52, 0x87, 0x27, 0x71, 0xaa, 0x88, 0xa6, 0x3a, 0x9e, 0x84, 0x90, 0xc3, 0x37, 0x8d, 0xf4, 0xdc, 0x76, 0x0c, 0xd1, 0x4d, 0x62, 0xbe, 0x70, 0x07, 0x79, 0xdd, 0x1a, 0x43, 0x77, 0x94, 0x36, 0x56, 0x00, 0x23, 0x66, 0xce, 0x39, 0x41, 0xe0, 0xb2, 0x84, 0xb1, 0xaa, 0x81, 0x21, 0x5d, 0x0d, 0x3b, 0x97, 0x78, 0xfc, 0xe2, 0x3c, 0x8c, 0xd1, 0xe4, 0xed, 0x6f, 0xa0, 0xab, 0xf6, 0x21, 0x56, 0xc9, 0x1d, 0x4b, 0x3e, 0xb5, 0x59, 0x99, 0xc3, 0x47, 0x1b, 0xed, 0x27, 0x5e, 0x9e, 0x60, 0xe5, 0xaa, 0x9d, 0x69, 0x0d, 0x31, 0x0b, 0xfb, 0x15, 0xc9, 0xc5, 0xbb, 0xd6, 0xf5, 0xe9, 0xeb, 0x39, 0x68, 0x2b, 0x74,
3132*f0865ec9SKyle Evans };
3133*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_4_test_vector_shared_secret[] = {
3134*f0865ec9SKyle Evans 	0x01, 0x45, 0xcf, 0xa3, 0x8f, 0x25, 0x94, 0x35, 0x16, 0xc9, 0x6a, 0x5f, 0xd4, 0xbf, 0xeb, 0xb2, 0xf6, 0x45, 0xd1, 0x05, 0x20, 0x11, 0x7a, 0xa5, 0x19, 0x71, 0xef, 0xf4, 0x42, 0x80, 0x8a, 0x23, 0xb4, 0xe2, 0x3c, 0x18, 0x7e, 0x63, 0x9f, 0xf9, 0x28, 0xc3, 0x72, 0x5f, 0xbd, 0x1c, 0x0c, 0x2a, 0xd0, 0xd4, 0xae, 0xb2, 0x07, 0xbc, 0x1a, 0x6f, 0xb6, 0xcb, 0x6d, 0x46, 0x78, 0x88, 0xdc, 0x04, 0x4b, 0x3c,
3135*f0865ec9SKyle Evans };
3136*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_4_test_case = {
3137*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 4",
3138*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3139*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3140*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_4_test_vector_our_priv_key,
3141*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_our_priv_key),
3142*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_4_test_vector_peer_pub_key,
3143*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_peer_pub_key),
3144*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_4_test_vector_our_pub_key,
3145*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_our_pub_key),
3146*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_4_test_vector_shared_secret,
3147*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_4_test_vector_shared_secret),
3148*f0865ec9SKyle Evans };
3149*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3150*f0865ec9SKyle Evans 
3151*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3152*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_5
3153*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3154*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_5_test_vector_our_priv_key[] = {
3155*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x9b, 0x0a, 0xf1, 0x37, 0xc9, 0x69, 0x6c, 0x75, 0xb7, 0xe6, 0xdf, 0x7b, 0x73, 0x15, 0x6b, 0xb2, 0xd4, 0x5f, 0x48, 0x2e, 0x5a, 0x42, 0x17, 0x32, 0x4f, 0x47, 0x8b, 0x10, 0xce, 0xb7, 0x6a, 0xf0, 0x97, 0x24, 0xcf, 0x86, 0xaf, 0xa3, 0x16, 0xe7, 0xf8, 0x99, 0x18, 0xd3, 0x1d, 0x54, 0x82, 0x4a, 0x5c, 0x33, 0x10, 0x7a, 0x48, 0x3c, 0x15, 0xc1, 0x5b, 0x96, 0xed, 0xc6, 0x61, 0x34, 0x0b, 0x1c, 0x0e,
3156*f0865ec9SKyle Evans };
3157*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_5_test_vector_peer_pub_key[] = {
3158*f0865ec9SKyle Evans 	0x00, 0x7a, 0xe1, 0x15, 0xad, 0xaa, 0xf0, 0x41, 0x69, 0x1a, 0xb6, 0xb7, 0xfb, 0x8c, 0x92, 0x1f, 0x99, 0xd8, 0xed, 0x32, 0xd2, 0x83, 0xd6, 0x70, 0x84, 0xe8, 0x0b, 0x9a, 0xd9, 0xc4, 0x0c, 0x56, 0xcd, 0x98, 0x38, 0x9f, 0xb0, 0xa8, 0x49, 0xd9, 0xec, 0xf7, 0x26, 0x8c, 0x29, 0x7b, 0x6f, 0x93, 0x40, 0x61, 0x19, 0xf4, 0x0e, 0x32, 0xb5, 0x77, 0x3e, 0xd2, 0x5a, 0x28, 0xa9, 0xa8, 0x5c, 0x4a, 0x75, 0x88, 0x01, 0xa2, 0x8e, 0x00, 0x4e, 0x37, 0xee, 0xae, 0xfe, 0x1f, 0x4d, 0xbb, 0x71, 0xf1, 0x87, 0x86, 0x96, 0x14, 0x1a, 0xf3, 0xa1, 0x0a, 0x96, 0x91, 0xc4, 0xed, 0x93, 0x48, 0x72, 0x14, 0x64, 0x3b, 0x76, 0x1f, 0xa4, 0xb0, 0xfb, 0xee, 0xb2, 0x47, 0xcf, 0x6d, 0x3f, 0xba, 0x7a, 0x60, 0x69, 0x75, 0x36, 0xad, 0x03, 0xf4, 0x9b, 0x80, 0xa9, 0xd1, 0xcb, 0x07, 0x96, 0x73, 0x65, 0x49, 0x77, 0xc5, 0xfa, 0x94,
3159*f0865ec9SKyle Evans };
3160*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_5_test_vector_our_pub_key[] = {
3161*f0865ec9SKyle Evans 	0x00, 0x74, 0x8c, 0xdb, 0xb8, 0x75, 0xd3, 0x5f, 0x4b, 0xcc, 0xb6, 0x2a, 0xbe, 0x20, 0xe8, 0x2d, 0x32, 0xe4, 0xc1, 0x4d, 0xc2, 0xfe, 0xb5, 0xb8, 0x7d, 0xa2, 0xd0, 0xcc, 0xb1, 0x1c, 0x9b, 0x6d, 0x4b, 0x77, 0x37, 0xb6, 0xc4, 0x6f, 0x0d, 0xfb, 0x4d, 0x89, 0x6e, 0x2d, 0xb9, 0x2f, 0xcf, 0x53, 0xcd, 0xbb, 0xae, 0x2a, 0x40, 0x4c, 0x0b, 0xab, 0xd5, 0x64, 0xad, 0x7a, 0xde, 0xac, 0x62, 0x73, 0xef, 0xa3, 0x01, 0x98, 0x4a, 0xca, 0xb8, 0xd8, 0xf1, 0x73, 0x32, 0x3d, 0xe0, 0xbb, 0x60, 0x27, 0x4b, 0x22, 0x88, 0x71, 0x60, 0x93, 0x73, 0xbb, 0x22, 0xa1, 0x72, 0x87, 0xe9, 0xde, 0xc7, 0x49, 0x58, 0x73, 0xab, 0xc0, 0x9a, 0x89, 0x15, 0xb5, 0x4c, 0x84, 0x55, 0xc8, 0xe0, 0x2f, 0x65, 0x4f, 0x60, 0x2e, 0x23, 0xa2, 0xbb, 0xd7, 0xa9, 0xeb, 0xb7, 0x4f, 0x30, 0x09, 0xbd, 0x65, 0xec, 0xc6, 0x50, 0x81, 0x4c, 0xc0,
3162*f0865ec9SKyle Evans };
3163*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_5_test_vector_shared_secret[] = {
3164*f0865ec9SKyle Evans 	0x00, 0x5c, 0x57, 0x21, 0xe9, 0x6c, 0x27, 0x33, 0x19, 0xfd, 0x60, 0xec, 0xc4, 0x6b, 0x59, 0x62, 0xf6, 0x98, 0xe9, 0x74, 0xb4, 0x29, 0xf2, 0x8f, 0xe6, 0x96, 0x2f, 0x4a, 0xc6, 0x56, 0xbe, 0x2e, 0xb8, 0x67, 0x4c, 0x4a, 0xaf, 0xc0, 0x37, 0xea, 0xb4, 0x8e, 0xce, 0x61, 0x29, 0x53, 0xb1, 0xe8, 0xd8, 0x61, 0x01, 0x6b, 0x6a, 0xd0, 0xc7, 0x98, 0x05, 0x78, 0x4c, 0x67, 0xf7, 0x3a, 0xda, 0x96, 0xf3, 0x51,
3165*f0865ec9SKyle Evans };
3166*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_5_test_case = {
3167*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 5",
3168*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3169*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3170*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_5_test_vector_our_priv_key,
3171*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_our_priv_key),
3172*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_5_test_vector_peer_pub_key,
3173*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_peer_pub_key),
3174*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_5_test_vector_our_pub_key,
3175*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_our_pub_key),
3176*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_5_test_vector_shared_secret,
3177*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_5_test_vector_shared_secret),
3178*f0865ec9SKyle Evans };
3179*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3180*f0865ec9SKyle Evans 
3181*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3182*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_6
3183*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3184*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_6_test_vector_our_priv_key[] = {
3185*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0xe4, 0x8f, 0xaa, 0xce, 0xe6, 0xde, 0xc8, 0x3f, 0xfc, 0xde, 0x94, 0x4c, 0xf6, 0xbd, 0xf4, 0xce, 0x4b, 0xae, 0x72, 0x74, 0x78, 0x88, 0xeb, 0xaf, 0xee, 0x45, 0x5b, 0x1e, 0x91, 0x58, 0x49, 0x71, 0xef, 0xb4, 0x91, 0x27, 0x97, 0x6a, 0x52, 0xf4, 0x14, 0x29, 0x52, 0xf7, 0xc2, 0x07, 0xec, 0x02, 0x65, 0xf2, 0xb7, 0x18, 0xcf, 0x3e, 0xad, 0x96, 0xea, 0x4f, 0x62, 0xc7, 0x52, 0xe4, 0xf7, 0xac, 0xd3,
3186*f0865ec9SKyle Evans };
3187*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_6_test_vector_peer_pub_key[] = {
3188*f0865ec9SKyle Evans 	0x01, 0x25, 0x88, 0x11, 0x5e, 0x6f, 0x7f, 0x7b, 0xdc, 0xfd, 0xf5, 0x7f, 0x03, 0xb1, 0x69, 0xb4, 0x79, 0x75, 0x8b, 0xaa, 0xfd, 0xaf, 0x56, 0x9d, 0x04, 0x13, 0x59, 0x87, 0xb2, 0xce, 0x61, 0x64, 0xc0, 0x2a, 0x57, 0x68, 0x5e, 0xb5, 0x27, 0x6b, 0x5d, 0xae, 0x62, 0x95, 0xd3, 0xfe, 0x90, 0x62, 0x0f, 0x38, 0xb5, 0x53, 0x5c, 0x6d, 0x22, 0x60, 0xc1, 0x73, 0xe6, 0x1e, 0xb8, 0x88, 0xca, 0x92, 0x02, 0x03, 0x01, 0x54, 0x2c, 0x16, 0x9c, 0xf9, 0x7c, 0x25, 0x96, 0xfe, 0x2d, 0xdd, 0x84, 0x8a, 0x22, 0x2e, 0x36, 0x7c, 0x5f, 0x7e, 0x62, 0x67, 0xeb, 0xc1, 0xbc, 0xd9, 0xab, 0x5d, 0xcf, 0x49, 0x15, 0x8f, 0x1a, 0x48, 0xe4, 0xaf, 0x29, 0xa8, 0x97, 0xb7, 0xe6, 0xa8, 0x20, 0x91, 0xc2, 0xdb, 0x87, 0x4d, 0x8e, 0x7a, 0xbf, 0x0f, 0x58, 0x06, 0x46, 0x91, 0x34, 0x41, 0x54, 0xf3, 0x96, 0xdb, 0xae, 0xd1, 0x88, 0xb6,
3189*f0865ec9SKyle Evans };
3190*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_6_test_vector_our_pub_key[] = {
3191*f0865ec9SKyle Evans 	0x01, 0x0e, 0xb1, 0xb4, 0xd9, 0x17, 0x2b, 0xcc, 0x23, 0xf4, 0xf2, 0x0c, 0xc9, 0x56, 0x0f, 0xc5, 0x49, 0x28, 0xc3, 0xf3, 0x4e, 0xa6, 0x1c, 0x00, 0x39, 0x1d, 0xc7, 0x66, 0xc7, 0x6e, 0xd9, 0xfa, 0x60, 0x84, 0x49, 0x37, 0x7d, 0x1e, 0x4f, 0xad, 0xd1, 0x23, 0x60, 0x25, 0x41, 0x73, 0x30, 0xb4, 0xb9, 0x10, 0x86, 0x70, 0x4a, 0xce, 0x3e, 0x4e, 0x64, 0x84, 0xc6, 0x06, 0xe2, 0xa9, 0x43, 0x47, 0x8c, 0x86, 0x01, 0x49, 0x41, 0x38, 0x64, 0x06, 0x98, 0x25, 0xee, 0x1d, 0x08, 0x28, 0xda, 0x9f, 0x4a, 0x97, 0x71, 0x30, 0x05, 0xe9, 0xbd, 0x1a, 0xdb, 0xc3, 0xb3, 0x8c, 0x5b, 0x94, 0x69, 0x00, 0x72, 0x1a, 0x96, 0x0f, 0xe9, 0x6a, 0xd2, 0xc1, 0xb3, 0xa4, 0x4f, 0xe3, 0xde, 0x91, 0x56, 0x13, 0x6d, 0x44, 0xcb, 0x17, 0xcb, 0xc2, 0x41, 0x57, 0x29, 0xbb, 0x78, 0x2e, 0x16, 0xbf, 0xe2, 0xde, 0xb3, 0x06, 0x9e, 0x43,
3192*f0865ec9SKyle Evans };
3193*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_6_test_vector_shared_secret[] = {
3194*f0865ec9SKyle Evans 	0x01, 0x73, 0x6d, 0x97, 0x17, 0x42, 0x9b, 0x4f, 0x41, 0x2e, 0x90, 0x3f, 0xeb, 0xe2, 0xf9, 0xe0, 0xff, 0xfd, 0x81, 0x35, 0x5d, 0x6c, 0xe2, 0xc0, 0x6f, 0xf3, 0xf6, 0x6a, 0x3b, 0xe1, 0x5c, 0xee, 0xc6, 0xe6, 0x5e, 0x30, 0x83, 0x47, 0x59, 0x3f, 0x00, 0xd7, 0xf3, 0x35, 0x91, 0xda, 0x40, 0x43, 0xc3, 0x07, 0x63, 0xd7, 0x27, 0x49, 0xf7, 0x2c, 0xdc, 0xee, 0xbe, 0x82, 0x5e, 0x4b, 0x34, 0xec, 0xd5, 0x70,
3195*f0865ec9SKyle Evans };
3196*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_6_test_case = {
3197*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 6",
3198*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3199*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3200*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_6_test_vector_our_priv_key,
3201*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_our_priv_key),
3202*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_6_test_vector_peer_pub_key,
3203*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_peer_pub_key),
3204*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_6_test_vector_our_pub_key,
3205*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_our_pub_key),
3206*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_6_test_vector_shared_secret,
3207*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_6_test_vector_shared_secret),
3208*f0865ec9SKyle Evans };
3209*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3210*f0865ec9SKyle Evans 
3211*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3212*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_7
3213*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3214*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_7_test_vector_our_priv_key[] = {
3215*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0xc2, 0x9a, 0xa2, 0x23, 0xea, 0x8d, 0x64, 0xb4, 0xa1, 0xed, 0xa2, 0x7f, 0x39, 0xd3, 0xbc, 0x98, 0xea, 0x01, 0x48, 0xdd, 0x98, 0xc1, 0xcb, 0xe5, 0x95, 0xf8, 0xfd, 0x2b, 0xfb, 0xde, 0x11, 0x9c, 0x9e, 0x01, 0x7a, 0x50, 0xf5, 0xd1, 0xfc, 0x12, 0x1c, 0x08, 0xc1, 0xce, 0xf3, 0x1b, 0x75, 0x88, 0x59, 0x55, 0x6e, 0xb3, 0xe0, 0xe0, 0x42, 0xd8, 0xdd, 0x6a, 0xaa, 0xc5, 0x7a, 0x05, 0xca, 0x61, 0xe3,
3216*f0865ec9SKyle Evans };
3217*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_7_test_vector_peer_pub_key[] = {
3218*f0865ec9SKyle Evans 	0x01, 0x69, 0x49, 0x1d, 0x55, 0xbd, 0x09, 0x04, 0x9f, 0xdf, 0x4c, 0x2a, 0x53, 0xa6, 0x60, 0x48, 0x0f, 0xee, 0x4c, 0x03, 0xa0, 0x53, 0x86, 0x75, 0xd1, 0xcd, 0x09, 0xb5, 0xbb, 0xa7, 0x8d, 0xac, 0x48, 0x54, 0x3e, 0xf1, 0x18, 0xa1, 0x17, 0x3b, 0x3f, 0xbf, 0x8b, 0x20, 0xe3, 0x9c, 0xe0, 0xe6, 0xb8, 0x90, 0xa1, 0x63, 0xc5, 0x0f, 0x96, 0x45, 0xb3, 0xd2, 0x1d, 0x1c, 0xbb, 0x3b, 0x60, 0xa6, 0xff, 0xf4, 0x00, 0x83, 0x49, 0x4b, 0x2e, 0xba, 0x76, 0x91, 0x0f, 0xed, 0x33, 0xc7, 0x61, 0x80, 0x45, 0x15, 0x01, 0x1f, 0xab, 0x50, 0xe3, 0xb3, 0x77, 0xab, 0xd8, 0xa8, 0xa0, 0x45, 0xd8, 0x86, 0xd2, 0x23, 0x8d, 0x2c, 0x26, 0x8a, 0xc1, 0xb6, 0xec, 0x88, 0xbd, 0x71, 0xb7, 0xba, 0x78, 0xe2, 0xc3, 0x3c, 0x15, 0x2e, 0x4b, 0xf7, 0xda, 0x5d, 0x56, 0x5e, 0x4a, 0xcb, 0xec, 0xf5, 0xe9, 0x2c, 0x7a, 0xd6, 0x62, 0xbb,
3219*f0865ec9SKyle Evans };
3220*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_7_test_vector_our_pub_key[] = {
3221*f0865ec9SKyle Evans 	0x00, 0x15, 0x11, 0xc8, 0x48, 0xef, 0x60, 0xd5, 0x41, 0x9a, 0x98, 0xd1, 0x02, 0x04, 0xdb, 0x0f, 0xe5, 0x82, 0x24, 0x12, 0x43, 0x70, 0x06, 0x1b, 0xcf, 0xa4, 0xe9, 0x24, 0x9d, 0x50, 0x61, 0x8c, 0x56, 0xbf, 0x37, 0x22, 0x47, 0x1b, 0x25, 0x9f, 0x38, 0x26, 0x3b, 0xb7, 0xb2, 0x80, 0xd2, 0x3c, 0xaf, 0x2a, 0x1e, 0xe8, 0x73, 0x7f, 0x93, 0x71, 0xcd, 0xb2, 0x73, 0x2c, 0xdc, 0x95, 0x83, 0x69, 0x93, 0x0c, 0x01, 0xd4, 0x61, 0x68, 0x1a, 0xe6, 0xd8, 0xc4, 0x9b, 0x4c, 0x5f, 0x4d, 0x60, 0x16, 0x14, 0x3f, 0xb1, 0xbd, 0x74, 0x91, 0x57, 0x3e, 0x3e, 0xd0, 0xe6, 0xc4, 0x8b, 0x82, 0xe8, 0x21, 0x64, 0x4f, 0x87, 0xf8, 0x2f, 0x0e, 0x5f, 0x08, 0xfd, 0x16, 0xf1, 0xf9, 0x8f, 0xa1, 0x75, 0x86, 0x20, 0x0a, 0xb0, 0x2e, 0xd8, 0xc6, 0x27, 0xb3, 0x5c, 0x3f, 0x27, 0x61, 0x7e, 0xc5, 0xfd, 0x92, 0xf4, 0x56, 0x20, 0x3f,
3222*f0865ec9SKyle Evans };
3223*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_7_test_vector_shared_secret[] = {
3224*f0865ec9SKyle Evans 	0x01, 0x8f, 0x2a, 0xe9, 0x47, 0x6c, 0x77, 0x17, 0x26, 0xa7, 0x77, 0x80, 0x20, 0x8d, 0xed, 0xfe, 0xfa, 0x20, 0x54, 0x88, 0x99, 0x6b, 0x18, 0xfe, 0xcc, 0x50, 0xbf, 0xd4, 0xc1, 0x32, 0x75, 0x3f, 0x57, 0x66, 0xb2, 0xcd, 0x74, 0x4a, 0xfa, 0x99, 0x18, 0x60, 0x6d, 0xe2, 0xe0, 0x16, 0xef, 0xfc, 0x63, 0x62, 0x2e, 0x90, 0x29, 0xe7, 0x6d, 0xc6, 0xe3, 0xf0, 0xc6, 0x9f, 0x7a, 0xec, 0xed, 0x56, 0x5c, 0x2c,
3225*f0865ec9SKyle Evans };
3226*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_7_test_case = {
3227*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 7",
3228*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3229*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3230*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_7_test_vector_our_priv_key,
3231*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_our_priv_key),
3232*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_7_test_vector_peer_pub_key,
3233*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_peer_pub_key),
3234*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_7_test_vector_our_pub_key,
3235*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_our_pub_key),
3236*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_7_test_vector_shared_secret,
3237*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_7_test_vector_shared_secret),
3238*f0865ec9SKyle Evans };
3239*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3240*f0865ec9SKyle Evans 
3241*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3242*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_8
3243*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3244*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_8_test_vector_our_priv_key[] = {
3245*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x28, 0x69, 0x2b, 0xe2, 0xbf, 0x5c, 0x4b, 0x48, 0x93, 0x98, 0x46, 0xfb, 0x3d, 0x5b, 0xce, 0x74, 0x65, 0x4b, 0xb2, 0x64, 0x6e, 0x15, 0xf8, 0x38, 0x9e, 0x23, 0x70, 0x8a, 0x1a, 0xfa, 0xdf, 0x56, 0x15, 0x11, 0xea, 0x0d, 0x99, 0x57, 0xd0, 0xb5, 0x34, 0x53, 0x81, 0x9d, 0x60, 0xfb, 0xa8, 0xf6, 0x5a, 0x18, 0xf7, 0xb2, 0x9d, 0xf0, 0x21, 0xb1, 0xbb, 0x01, 0xcd, 0x16, 0x32, 0x93, 0xac, 0xc3, 0xcc,
3246*f0865ec9SKyle Evans };
3247*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_8_test_vector_peer_pub_key[] = {
3248*f0865ec9SKyle Evans 	0x00, 0x84, 0x15, 0xf5, 0xbb, 0xd0, 0xee, 0xe3, 0x87, 0xd6, 0xc0, 0x9d, 0x0e, 0xf8, 0xac, 0xaf, 0x29, 0xc6, 0x6d, 0xb4, 0x5d, 0x6b, 0xa1, 0x01, 0x86, 0x0a, 0xe4, 0x5d, 0x3c, 0x60, 0xe1, 0xe0, 0xe3, 0xf7, 0x24, 0x7a, 0x46, 0x26, 0xa6, 0x0f, 0xdd, 0x40, 0x49, 0x65, 0xc3, 0x56, 0x6c, 0x79, 0xf6, 0x44, 0x9e, 0x85, 0x6c, 0xe0, 0xbf, 0x94, 0x61, 0x9f, 0x97, 0xda, 0x8d, 0xa2, 0x4b, 0xd2, 0xcf, 0xb6, 0x00, 0xfd, 0xd7, 0xc5, 0x9c, 0x58, 0xc3, 0x61, 0xbc, 0x50, 0xa7, 0xa5, 0xd0, 0xd3, 0x6f, 0x72, 0x3b, 0x17, 0xc4, 0xf2, 0xad, 0x2b, 0x03, 0xc2, 0x4d, 0x42, 0xdc, 0x50, 0xf7, 0x4a, 0x8c, 0x46, 0x5a, 0x0a, 0xfc, 0x46, 0x83, 0xf1, 0x0f, 0xab, 0x84, 0x65, 0x2d, 0xfe, 0x9e, 0x92, 0x8c, 0x26, 0x26, 0xb5, 0x45, 0x64, 0x53, 0xe1, 0x57, 0x3f, 0xf6, 0x0b, 0xe1, 0x50, 0x74, 0x67, 0xd4, 0x31, 0xfb, 0xb2,
3249*f0865ec9SKyle Evans };
3250*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_8_test_vector_our_pub_key[] = {
3251*f0865ec9SKyle Evans 	0x01, 0xcf, 0xdc, 0x10, 0xc7, 0x99, 0xf5, 0xc7, 0x9c, 0xb6, 0x93, 0x0a, 0x65, 0xfb, 0xa3, 0x51, 0x74, 0x8e, 0x07, 0x56, 0x79, 0x93, 0xe5, 0xe4, 0x10, 0xef, 0x4c, 0xac, 0xc4, 0xcd, 0x8a, 0x25, 0x78, 0x49, 0x91, 0xeb, 0x46, 0x74, 0xe4, 0x10, 0x50, 0xf9, 0x30, 0xc7, 0x19, 0x0a, 0xc8, 0x12, 0xb9, 0x24, 0x5f, 0x48, 0xa7, 0x97, 0x3b, 0x65, 0x8d, 0xaf, 0x40, 0x88, 0x22, 0xfe, 0x5b, 0x85, 0xf6, 0x68, 0x01, 0x80, 0xd9, 0xdd, 0xfc, 0x9a, 0xf7, 0x7b, 0x9c, 0x4a, 0x6f, 0x02, 0xa8, 0x34, 0xdb, 0x15, 0xe5, 0x35, 0xe0, 0xb3, 0x84, 0x5b, 0x2c, 0xce, 0x30, 0x38, 0x83, 0x01, 0xb5, 0x1c, 0xec, 0xbe, 0x32, 0x76, 0x30, 0x7e, 0xf4, 0x39, 0xb5, 0xc9, 0xe6, 0xa7, 0x2d, 0xc2, 0xd9, 0x4d, 0x87, 0x9b, 0xc3, 0x95, 0x05, 0x2d, 0xbb, 0x4a, 0x57, 0x87, 0xd0, 0x6e, 0xfb, 0x28, 0x02, 0x10, 0xfb, 0x8b, 0xe0, 0x37,
3252*f0865ec9SKyle Evans };
3253*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_8_test_vector_shared_secret[] = {
3254*f0865ec9SKyle Evans 	0x01, 0x05, 0xa3, 0x46, 0x98, 0x8b, 0x92, 0xed, 0x8c, 0x7a, 0x25, 0xce, 0x4d, 0x79, 0xd2, 0x1b, 0xc8, 0x6c, 0xfc, 0xc7, 0xf9, 0x9c, 0x6c, 0xd1, 0x9d, 0xbb, 0x4a, 0x39, 0xf4, 0x8a, 0xb9, 0x43, 0xb7, 0x9e, 0x4f, 0x06, 0x47, 0x34, 0x8d, 0xa0, 0xb8, 0x0b, 0xd8, 0x64, 0xb8, 0x5c, 0x6b, 0x8d, 0x92, 0x53, 0x6d, 0x6a, 0xa5, 0x44, 0xdc, 0x75, 0x37, 0xa0, 0x0c, 0x85, 0x8f, 0x8b, 0x66, 0x31, 0x9e, 0x25,
3255*f0865ec9SKyle Evans };
3256*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_8_test_case = {
3257*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 8",
3258*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3259*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3260*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_8_test_vector_our_priv_key,
3261*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_our_priv_key),
3262*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_8_test_vector_peer_pub_key,
3263*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_peer_pub_key),
3264*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_8_test_vector_our_pub_key,
3265*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_our_pub_key),
3266*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_8_test_vector_shared_secret,
3267*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_8_test_vector_shared_secret),
3268*f0865ec9SKyle Evans };
3269*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3270*f0865ec9SKyle Evans 
3271*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3272*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_9
3273*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3274*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_9_test_vector_our_priv_key[] = {
3275*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0x19, 0x4d, 0x1e, 0xe6, 0x13, 0xf5, 0x36, 0x6c, 0xbc, 0x44, 0xb5, 0x04, 0xd2, 0x1a, 0x0c, 0xf6, 0x71, 0x5e, 0x20, 0x9c, 0xd3, 0x58, 0xf2, 0xdd, 0x5f, 0x3e, 0x71, 0xcc, 0x0d, 0x67, 0xd0, 0xe9, 0x64, 0x16, 0x8c, 0x42, 0xa0, 0x84, 0xeb, 0xda, 0x74, 0x6f, 0x98, 0x63, 0xa8, 0x6b, 0xac, 0xff, 0xc8, 0x19, 0xf1, 0xed, 0xf1, 0xb8, 0xc7, 0x27, 0xcc, 0xfb, 0x30, 0x47, 0x24, 0x0a, 0x57, 0xc4, 0x35,
3276*f0865ec9SKyle Evans };
3277*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_9_test_vector_peer_pub_key[] = {
3278*f0865ec9SKyle Evans 	0x01, 0xc7, 0x21, 0xee, 0xa8, 0x05, 0xa5, 0xcb, 0xa2, 0x9f, 0x34, 0xba, 0x57, 0x58, 0x77, 0x5b, 0xe0, 0xcf, 0x61, 0x60, 0xe6, 0xc0, 0x87, 0x23, 0xf5, 0xab, 0x17, 0xbf, 0x96, 0xa1, 0xff, 0x2b, 0xd9, 0x42, 0x79, 0x61, 0xa4, 0xf3, 0x4b, 0x07, 0xfc, 0x0b, 0x14, 0xca, 0x4b, 0x2b, 0xf6, 0x84, 0x5d, 0xeb, 0xd5, 0xa8, 0x69, 0xf1, 0x24, 0xeb, 0xfa, 0x7a, 0xa7, 0x2f, 0xe5, 0x65, 0x05, 0x0b, 0x7f, 0x18, 0x00, 0xb6, 0xe8, 0x9e, 0xb0, 0xe1, 0xdc, 0xf1, 0x81, 0x23, 0x6f, 0x7c, 0x54, 0x8f, 0xd1, 0xa8, 0xc1, 0x6b, 0x25, 0x8b, 0x52, 0xc1, 0xa9, 0xbf, 0xd3, 0xfe, 0x8f, 0x22, 0x84, 0x1b, 0x26, 0x76, 0x32, 0x65, 0xf0, 0x74, 0xc4, 0xcc, 0xf2, 0xd6, 0x34, 0xae, 0x97, 0xb7, 0x01, 0x95, 0x6f, 0x67, 0xa1, 0x10, 0x06, 0xc5, 0x2d, 0x97, 0x19, 0x7d, 0x92, 0xf5, 0x85, 0xf5, 0x74, 0x8b, 0xc2, 0x67, 0x2e, 0xeb,
3279*f0865ec9SKyle Evans };
3280*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_9_test_vector_our_pub_key[] = {
3281*f0865ec9SKyle Evans 	0x01, 0x6b, 0xd1, 0x5c, 0x8a, 0x58, 0xd3, 0x66, 0xf7, 0xf2, 0xb2, 0xf2, 0x98, 0xcc, 0x87, 0xb7, 0x48, 0x5e, 0x9e, 0xe7, 0x0d, 0x11, 0xd1, 0x24, 0x48, 0xb8, 0x37, 0x7c, 0x0a, 0x82, 0xc7, 0x62, 0x6f, 0x67, 0xaf, 0xf7, 0xf9, 0x7b, 0xe7, 0xa3, 0x54, 0x6b, 0xf4, 0x17, 0xee, 0xed, 0xdf, 0x75, 0xa9, 0x3c, 0x13, 0x01, 0x91, 0xc8, 0x41, 0x08, 0x04, 0x2e, 0xa2, 0xfc, 0xa1, 0x7f, 0xd3, 0xf8, 0x0d, 0x14, 0x01, 0x56, 0x05, 0x02, 0xd0, 0x4b, 0x74, 0xfc, 0xe1, 0x74, 0x3a, 0xab, 0x47, 0x7a, 0x9d, 0x1e, 0xac, 0x93, 0xe5, 0x22, 0x69, 0x81, 0xfd, 0xb9, 0x7a, 0x74, 0x78, 0xce, 0x4c, 0xe5, 0x66, 0xff, 0x72, 0x43, 0x93, 0x12, 0x84, 0xfa, 0xd8, 0x50, 0xb0, 0xc2, 0xbc, 0xae, 0x0d, 0xdd, 0x2d, 0x97, 0x79, 0x01, 0x60, 0xc1, 0xa2, 0xe7, 0x7c, 0x3e, 0xd6, 0xc9, 0x5e, 0xcc, 0x44, 0xb8, 0x9e, 0x26, 0x37, 0xfc,
3282*f0865ec9SKyle Evans };
3283*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_9_test_vector_shared_secret[] = {
3284*f0865ec9SKyle Evans 	0x00, 0x45, 0x31, 0xb3, 0xd2, 0xc6, 0xcd, 0x12, 0xf2, 0x16, 0x04, 0xc8, 0x61, 0x0e, 0x67, 0x23, 0xdb, 0xf4, 0xda, 0xf8, 0x0b, 0x5a, 0x45, 0x9d, 0x6b, 0xa5, 0x81, 0x43, 0x97, 0xd1, 0xc1, 0xf7, 0xa2, 0x1d, 0x7c, 0x11, 0x4b, 0xe9, 0x64, 0xe2, 0x73, 0x76, 0xaa, 0xeb, 0xe3, 0xa7, 0xbc, 0x3d, 0x6a, 0xf7, 0xa7, 0xf8, 0xc7, 0xbe, 0xfb, 0x61, 0x1a, 0xfe, 0x48, 0x7f, 0xf0, 0x32, 0x92, 0x1f, 0x75, 0x0f,
3285*f0865ec9SKyle Evans };
3286*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_9_test_case = {
3287*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 9",
3288*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3289*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3290*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_9_test_vector_our_priv_key,
3291*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_our_priv_key),
3292*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_9_test_vector_peer_pub_key,
3293*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_peer_pub_key),
3294*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_9_test_vector_our_pub_key,
3295*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_our_pub_key),
3296*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_9_test_vector_shared_secret,
3297*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_9_test_vector_shared_secret),
3298*f0865ec9SKyle Evans };
3299*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3300*f0865ec9SKyle Evans 
3301*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3302*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_10
3303*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3304*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_10_test_vector_our_priv_key[] = {
3305*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0xfd, 0x90, 0xe3, 0xe4, 0x16, 0xe9, 0x8a, 0xa3, 0xf2, 0xb6, 0xaf, 0xa7, 0xf3, 0xbf, 0x36, 0x8e, 0x45, 0x1a, 0xd9, 0xca, 0x5b, 0xd5, 0x4b, 0x5b, 0x14, 0xae, 0xe2, 0xed, 0x67, 0x23, 0xdd, 0xe5, 0x18, 0x1f, 0x50, 0x85, 0xb6, 0x81, 0x69, 0xb0, 0x9f, 0xbe, 0xc7, 0x21, 0x37, 0x2c, 0xcf, 0x6b, 0x28, 0x47, 0x13, 0xf9, 0xa6, 0x35, 0x6b, 0x8d, 0x56, 0x0a, 0x8f, 0xf7, 0x8c, 0xa3, 0x73, 0x7c, 0x88,
3306*f0865ec9SKyle Evans };
3307*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_10_test_vector_peer_pub_key[] = {
3308*f0865ec9SKyle Evans 	0x01, 0xc3, 0x58, 0x23, 0xe4, 0x40, 0xa9, 0x36, 0x3a, 0xb9, 0x8d, 0x9f, 0xc7, 0xa7, 0xbc, 0x0c, 0x05, 0x32, 0xdc, 0x79, 0x77, 0xa7, 0x91, 0x65, 0x59, 0x9b, 0xf1, 0xa9, 0xcc, 0x64, 0xc0, 0x0f, 0xb3, 0x87, 0xb4, 0x2c, 0xca, 0x36, 0x52, 0x86, 0xe8, 0x43, 0x03, 0x60, 0xbf, 0xad, 0x36, 0x43, 0xbc, 0x31, 0x35, 0x4e, 0xda, 0x50, 0xdc, 0x93, 0x6c, 0x32, 0x9e, 0xcd, 0xb6, 0x09, 0x05, 0xc4, 0x0f, 0xcb, 0x00, 0xd9, 0xe7, 0xf4, 0x33, 0x53, 0x1e, 0x44, 0xdf, 0x4f, 0x6d, 0x51, 0x42, 0x01, 0xcb, 0xaa, 0xbb, 0x06, 0xba, 0xdd, 0x67, 0x83, 0xe0, 0x11, 0x11, 0x72, 0x6d, 0x81, 0x55, 0x31, 0xd2, 0x33, 0xc5, 0xcd, 0xb7, 0x22, 0x89, 0x3f, 0xfb, 0xb2, 0x02, 0x72, 0x59, 0xd5, 0x94, 0xde, 0x77, 0x43, 0x88, 0x09, 0x73, 0x81, 0x20, 0xc6, 0xf7, 0x83, 0x93, 0x4f, 0x92, 0x6c, 0x3f, 0xb6, 0x9b, 0x40, 0xc4, 0x09,
3309*f0865ec9SKyle Evans };
3310*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_10_test_vector_our_pub_key[] = {
3311*f0865ec9SKyle Evans 	0x01, 0xeb, 0xea, 0x1b, 0x10, 0xd3, 0xe3, 0xb9, 0x71, 0xb7, 0xef, 0xb6, 0x9f, 0xc8, 0x78, 0xde, 0x11, 0xc7, 0xf4, 0x72, 0xe4, 0xe4, 0xd3, 0x84, 0xc3, 0x1b, 0x8d, 0x62, 0x88, 0xd8, 0x07, 0x15, 0x17, 0xac, 0xad, 0xe9, 0xb3, 0x97, 0x96, 0xc7, 0xaf, 0x51, 0x63, 0xbc, 0xf7, 0x1a, 0xed, 0xa7, 0x77, 0x53, 0x3f, 0x38, 0x2c, 0x6c, 0xf0, 0xa4, 0xd9, 0xbb, 0xb9, 0x38, 0xc8, 0x5f, 0x44, 0xb7, 0x80, 0x37, 0x01, 0x6b, 0x0e, 0x3e, 0x19, 0xc2, 0x99, 0x6b, 0x2c, 0xbd, 0x1f, 0xf6, 0x47, 0x30, 0xe7, 0xca, 0x90, 0xed, 0xca, 0x19, 0x84, 0xf9, 0xb2, 0x95, 0x13, 0x33, 0x53, 0x5e, 0x57, 0x48, 0xba, 0xa3, 0x4a, 0x99, 0xf6, 0x1f, 0xf4, 0xd5, 0xf8, 0x12, 0x07, 0x9e, 0x0f, 0x01, 0xe8, 0x77, 0x89, 0xf3, 0x4e, 0xfd, 0xad, 0x80, 0x98, 0x01, 0x5e, 0xe7, 0x4a, 0x4f, 0x84, 0x6d, 0xd1, 0x90, 0xd1, 0x6d, 0xc6, 0xe1,
3312*f0865ec9SKyle Evans };
3313*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_10_test_vector_shared_secret[] = {
3314*f0865ec9SKyle Evans 	0x01, 0x00, 0xc8, 0x93, 0x59, 0x69, 0x07, 0x7b, 0xae, 0x0b, 0xa8, 0x9e, 0xf0, 0xdf, 0x81, 0x61, 0xd9, 0x75, 0xec, 0x58, 0x70, 0xac, 0x81, 0x1a, 0xe7, 0xe6, 0x5c, 0xa5, 0x39, 0x4e, 0xfb, 0xa4, 0xf0, 0x63, 0x3d, 0x41, 0xbf, 0x79, 0xea, 0x5e, 0x5b, 0x94, 0x96, 0xbb, 0xd7, 0xaa, 0xe0, 0x00, 0xb0, 0x59, 0x4b, 0xaa, 0x82, 0xef, 0x8f, 0x24, 0x4e, 0x69, 0x84, 0xae, 0x87, 0xae, 0x1e, 0xd1, 0x24, 0xb7,
3315*f0865ec9SKyle Evans };
3316*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_10_test_case = {
3317*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 10",
3318*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3319*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3320*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_10_test_vector_our_priv_key,
3321*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_our_priv_key),
3322*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_10_test_vector_peer_pub_key,
3323*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_peer_pub_key),
3324*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_10_test_vector_our_pub_key,
3325*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_our_pub_key),
3326*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_10_test_vector_shared_secret,
3327*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_10_test_vector_shared_secret),
3328*f0865ec9SKyle Evans };
3329*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3330*f0865ec9SKyle Evans 
3331*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3332*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_11
3333*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3334*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_11_test_vector_our_priv_key[] = {
3335*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x90, 0x12, 0xec, 0xfd, 0xad, 0xc8, 0x5c, 0xed, 0x63, 0x0a, 0xfe, 0xa5, 0x34, 0xcd, 0xc8, 0xe9, 0xd1, 0xab, 0x8b, 0xe5, 0xf3, 0x75, 0x3d, 0xcf, 0x5f, 0x2b, 0x09, 0xb4, 0x0e, 0xda, 0x66, 0xfc, 0x68, 0x58, 0x54, 0x9b, 0xc3, 0x6e, 0x6f, 0x8d, 0xf5, 0x59, 0x98, 0xcf, 0xa9, 0xa0, 0x70, 0x3a, 0xec, 0xf6, 0xc4, 0x27, 0x99, 0xc2, 0x45, 0x01, 0x10, 0x64, 0xf5, 0x30, 0xc0, 0x9d, 0xb9, 0x83, 0x69,
3336*f0865ec9SKyle Evans };
3337*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_11_test_vector_peer_pub_key[] = {
3338*f0865ec9SKyle Evans 	0x00, 0x09, 0x30, 0x57, 0xfb, 0x86, 0x2f, 0x2a, 0xd2, 0xe8, 0x2e, 0x58, 0x1b, 0xae, 0xb3, 0x32, 0x4e, 0x7b, 0x32, 0x94, 0x6f, 0x2b, 0xa8, 0x45, 0xa9, 0xbe, 0xee, 0xd8, 0x7d, 0x69, 0x95, 0xf5, 0x49, 0x18, 0xec, 0x66, 0x19, 0xb9, 0x93, 0x19, 0x55, 0xd5, 0xa8, 0x9d, 0x4d, 0x74, 0xad, 0xf1, 0x04, 0x6b, 0xb3, 0x62, 0x19, 0x2f, 0x2e, 0xf6, 0xbd, 0x3e, 0x3d, 0x2d, 0x04, 0xdd, 0x1f, 0x87, 0x05, 0x4a, 0x00, 0xaa, 0x3f, 0xb2, 0x44, 0x83, 0x35, 0xf6, 0x94, 0xe3, 0xcd, 0xa4, 0xae, 0x0c, 0xc7, 0x1b, 0x1b, 0x2f, 0x2a, 0x20, 0x6f, 0xa8, 0x02, 0xd7, 0x26, 0x2f, 0x19, 0x98, 0x3c, 0x44, 0x67, 0x4f, 0xe1, 0x53, 0x27, 0xac, 0xaa, 0xc1, 0xfa, 0x40, 0x42, 0x4c, 0x39, 0x5a, 0x65, 0x56, 0xcb, 0x81, 0x67, 0x31, 0x25, 0x27, 0xfa, 0xe5, 0x86, 0x5e, 0xcf, 0xfc, 0x14, 0xbb, 0xdc, 0x17, 0xda, 0x78, 0xcd, 0xcf,
3339*f0865ec9SKyle Evans };
3340*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_11_test_vector_our_pub_key[] = {
3341*f0865ec9SKyle Evans 	0x00, 0x23, 0x4e, 0x32, 0xbe, 0x0a, 0x90, 0x71, 0x31, 0xd2, 0xd1, 0x28, 0xa6, 0x47, 0x7e, 0x0c, 0xac, 0xeb, 0x86, 0xf0, 0x24, 0x79, 0x74, 0x5e, 0x0f, 0xe2, 0x45, 0xcb, 0x33, 0x2d, 0xe6, 0x31, 0xc0, 0x78, 0x87, 0x11, 0x60, 0x48, 0x2e, 0xee, 0xf5, 0x84, 0xe2, 0x74, 0xdf, 0x7f, 0xa4, 0x12, 0xce, 0xa3, 0xe1, 0xe9, 0x1f, 0x71, 0xec, 0xba, 0x87, 0x81, 0xd9, 0x20, 0x5d, 0x48, 0x38, 0x63, 0x41, 0xad, 0x01, 0xcf, 0x86, 0x45, 0x5b, 0x09, 0xb1, 0xc0, 0x05, 0xcf, 0xfb, 0xa8, 0xd7, 0x62, 0x89, 0xa3, 0x75, 0x96, 0x28, 0xc8, 0x74, 0xbe, 0xea, 0x46, 0x2f, 0x51, 0xf3, 0x0b, 0xd5, 0x81, 0xe3, 0x80, 0x31, 0x34, 0x30, 0x7d, 0xed, 0xbb, 0x77, 0x1b, 0x33, 0x34, 0xee, 0x15, 0xbe, 0x2e, 0x24, 0x2c, 0xd7, 0x9c, 0x34, 0x07, 0xd2, 0xf5, 0x89, 0x35, 0x45, 0x6c, 0x69, 0x41, 0xdd, 0x9b, 0x6d, 0x15, 0x5a, 0x46,
3342*f0865ec9SKyle Evans };
3343*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_11_test_vector_shared_secret[] = {
3344*f0865ec9SKyle Evans 	0x01, 0x7f, 0x36, 0xaf, 0x19, 0x30, 0x38, 0x41, 0xd1, 0x3a, 0x38, 0x9d, 0x95, 0xec, 0x0b, 0x80, 0x1c, 0x7f, 0x9a, 0x67, 0x9a, 0x82, 0x31, 0x46, 0xc7, 0x5c, 0x17, 0xbc, 0x44, 0x25, 0x6e, 0x9a, 0xd4, 0x22, 0xa4, 0xf8, 0xb3, 0x1f, 0x14, 0x64, 0x7b, 0x2c, 0x7d, 0x31, 0x7b, 0x93, 0x3f, 0x7c, 0x29, 0x46, 0xc4, 0xb8, 0xab, 0xd1, 0xd5, 0x6d, 0x62, 0x0f, 0xab, 0x1b, 0x5f, 0xf1, 0xa3, 0xad, 0xc7, 0x1f,
3345*f0865ec9SKyle Evans };
3346*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_11_test_case = {
3347*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 11",
3348*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3349*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3350*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_11_test_vector_our_priv_key,
3351*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_our_priv_key),
3352*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_11_test_vector_peer_pub_key,
3353*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_peer_pub_key),
3354*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_11_test_vector_our_pub_key,
3355*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_our_pub_key),
3356*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_11_test_vector_shared_secret,
3357*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_11_test_vector_shared_secret),
3358*f0865ec9SKyle Evans };
3359*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3360*f0865ec9SKyle Evans 
3361*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3362*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_12
3363*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3364*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_12_test_vector_our_priv_key[] = {
3365*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0xb5, 0xff, 0x84, 0x7f, 0x8e, 0xff, 0x20, 0xb8, 0x8c, 0xfa, 0xd4, 0x2c, 0x06, 0xe5, 0x8c, 0x37, 0x42, 0xf2, 0xf8, 0xf1, 0xfd, 0xfd, 0x64, 0xb5, 0x39, 0xba, 0x48, 0xc2, 0x59, 0x26, 0x92, 0x6b, 0xd5, 0xe3, 0x32, 0xb4, 0x56, 0x49, 0xc0, 0xb1, 0x84, 0xf7, 0x72, 0x55, 0xe9, 0xd5, 0x8f, 0xe8, 0xaf, 0xa1, 0xa6, 0xd9, 0x68, 0xe2, 0xcb, 0x1d, 0x46, 0x37, 0x77, 0x71, 0x20, 0xc7, 0x65, 0xc1, 0x28,
3366*f0865ec9SKyle Evans };
3367*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_12_test_vector_peer_pub_key[] = {
3368*f0865ec9SKyle Evans 	0x00, 0x83, 0x19, 0x2e, 0xd0, 0xb1, 0xcb, 0x31, 0xf7, 0x58, 0x17, 0x79, 0x49, 0x37, 0xf6, 0x6a, 0xd9, 0x1c, 0xf7, 0x45, 0x52, 0xcd, 0x51, 0x0c, 0xed, 0xb9, 0xfd, 0x64, 0x13, 0x10, 0x42, 0x2a, 0xf5, 0xd0, 0x9f, 0x22, 0x1c, 0xad, 0x24, 0x9e, 0xe8, 0x14, 0xd1, 0x6d, 0xd7, 0xac, 0x84, 0xde, 0xd9, 0xea, 0xcd, 0xc2, 0x83, 0x40, 0xfc, 0xfc, 0x9c, 0x0c, 0x06, 0xab, 0xe3, 0x0a, 0x2f, 0xc2, 0x8c, 0xd8, 0x00, 0x22, 0x12, 0xed, 0x86, 0x8c, 0x9b, 0xa0, 0xfb, 0x2c, 0x91, 0xe2, 0xc3, 0x9b, 0xa9, 0x39, 0x96, 0xa3, 0xe4, 0xeb, 0xf4, 0x5f, 0x28, 0x52, 0xd0, 0x92, 0x8c, 0x48, 0x93, 0x0e, 0x87, 0x5c, 0xc7, 0xb4, 0x28, 0xd0, 0xe7, 0xf3, 0xf4, 0xd5, 0x03, 0xe5, 0xd6, 0x0c, 0x68, 0xcb, 0x49, 0xb1, 0x3c, 0x24, 0x80, 0xcd, 0x48, 0x6b, 0xed, 0x92, 0x00, 0xca, 0xdd, 0xad, 0xdf, 0xe4, 0xff, 0x8e, 0x35, 0x62,
3369*f0865ec9SKyle Evans };
3370*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_12_test_vector_our_pub_key[] = {
3371*f0865ec9SKyle Evans 	0x01, 0xde, 0x3d, 0xc9, 0x26, 0x3b, 0xc8, 0xc4, 0x96, 0x9d, 0xc6, 0x84, 0xbe, 0x0e, 0xec, 0x54, 0xbe, 0xfd, 0x9a, 0x9f, 0x3d, 0xba, 0x19, 0x4d, 0x86, 0x58, 0xa7, 0x89, 0x34, 0x1b, 0xf0, 0xd7, 0x8d, 0x84, 0xda, 0x67, 0x35, 0x22, 0x7c, 0xaf, 0xaf, 0x09, 0x35, 0x19, 0x51, 0x69, 0x11, 0x97, 0x57, 0x3c, 0x8c, 0x36, 0x0a, 0x11, 0xe5, 0x28, 0x57, 0x12, 0xb8, 0xbb, 0xdf, 0x5a, 0xc9, 0x1b, 0x97, 0x7c, 0x00, 0x81, 0x2d, 0xe5, 0x8c, 0xd0, 0x95, 0xec, 0x2e, 0x5a, 0x9b, 0x24, 0x7e, 0xb3, 0xed, 0x41, 0xd8, 0xbe, 0xf6, 0xae, 0xac, 0xe1, 0x94, 0xa7, 0xa0, 0x5b, 0x65, 0xaa, 0x5d, 0x28, 0x9f, 0xbc, 0x9b, 0x17, 0x70, 0xec, 0x84, 0xbb, 0x6b, 0xe0, 0xc2, 0xc6, 0x4c, 0xc3, 0x7c, 0x1d, 0x54, 0xa7, 0xf5, 0xd7, 0x13, 0x77, 0xa9, 0xad, 0xbe, 0x20, 0xf2, 0x6f, 0x6f, 0x2b, 0x54, 0x4a, 0x82, 0x1e, 0xa8, 0x31,
3372*f0865ec9SKyle Evans };
3373*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_12_test_vector_shared_secret[] = {
3374*f0865ec9SKyle Evans 	0x00, 0x06, 0x2f, 0x9f, 0xc2, 0x9a, 0xe1, 0xa6, 0x8b, 0x2e, 0xe0, 0xdc, 0xf9, 0x56, 0xcb, 0xd3, 0x8c, 0x88, 0xae, 0x5f, 0x64, 0x5e, 0xaa, 0x54, 0x6b, 0x00, 0xeb, 0xe8, 0x7a, 0x72, 0x60, 0xbf, 0x72, 0x4b, 0xe2, 0x0d, 0x34, 0xb9, 0xd0, 0x20, 0x76, 0x65, 0x5c, 0x93, 0x3d, 0x05, 0x6b, 0x21, 0xe3, 0x04, 0xc2, 0x4d, 0xdb, 0x1d, 0xed, 0xf1, 0xdd, 0x76, 0xde, 0x61, 0x1f, 0xc4, 0xa2, 0x34, 0x03, 0x36,
3375*f0865ec9SKyle Evans };
3376*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_12_test_case = {
3377*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 12",
3378*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3379*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3380*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_12_test_vector_our_priv_key,
3381*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_our_priv_key),
3382*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_12_test_vector_peer_pub_key,
3383*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_peer_pub_key),
3384*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_12_test_vector_our_pub_key,
3385*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_our_pub_key),
3386*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_12_test_vector_shared_secret,
3387*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_12_test_vector_shared_secret),
3388*f0865ec9SKyle Evans };
3389*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3390*f0865ec9SKyle Evans 
3391*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3392*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_13
3393*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3394*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_13_test_vector_our_priv_key[] = {
3395*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0x1a, 0x63, 0x47, 0xd4, 0xe8, 0x01, 0xc9, 0x19, 0x23, 0x48, 0x83, 0x54, 0xcc, 0x53, 0x3e, 0x7e, 0x35, 0xfd, 0xdf, 0x81, 0xff, 0x0f, 0xb7, 0xf5, 0x6b, 0xb0, 0x72, 0x6e, 0x0c, 0x29, 0xee, 0x5d, 0xcd, 0xc5, 0xf3, 0x94, 0xba, 0x54, 0xcf, 0x57, 0x26, 0x90, 0x48, 0xaa, 0xb6, 0xe0, 0x55, 0x89, 0x5c, 0x8d, 0xa2, 0x4b, 0x8b, 0x06, 0x39, 0xa7, 0x42, 0x31, 0x43, 0x90, 0xcc, 0x04, 0x19, 0x0e, 0xd6,
3396*f0865ec9SKyle Evans };
3397*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_13_test_vector_peer_pub_key[] = {
3398*f0865ec9SKyle Evans 	0x01, 0xa8, 0x9b, 0x63, 0x6a, 0x93, 0xe5, 0xd2, 0xba, 0x6c, 0x22, 0x92, 0xbf, 0x23, 0x03, 0x3a, 0x84, 0xf0, 0x6a, 0x3a, 0xc1, 0x22, 0x0e, 0xa7, 0x1e, 0x80, 0x6a, 0xfb, 0xe0, 0x97, 0xa8, 0x04, 0xcc, 0x67, 0xe9, 0xba, 0xa5, 0x14, 0xcf, 0xb6, 0xc1, 0x2c, 0x91, 0x94, 0xbe, 0x30, 0x21, 0x2b, 0xf7, 0xaa, 0xe7, 0xfd, 0xf6, 0xd3, 0x76, 0xc2, 0x12, 0xf0, 0x55, 0x4e, 0x65, 0x64, 0x63, 0xff, 0xab, 0x7e, 0x01, 0x82, 0xef, 0xca, 0xf7, 0x0f, 0xc4, 0x12, 0xd3, 0x36, 0x60, 0x2e, 0x01, 0x4d, 0xa4, 0x72, 0x56, 0xa0, 0xb6, 0x06, 0xf2, 0xad, 0xdc, 0xce, 0x80, 0x53, 0xbf, 0x81, 0x7a, 0xc8, 0x65, 0x6b, 0xb4, 0xe4, 0x2f, 0x14, 0xc8, 0xcb, 0xf2, 0xa6, 0x8f, 0x48, 0x8a, 0xb3, 0x5d, 0xcd, 0xf6, 0x40, 0x56, 0x27, 0x1d, 0xee, 0x1f, 0x60, 0x6a, 0x44, 0x0b, 0xa4, 0xbd, 0x4e, 0x5a, 0x11, 0xb8, 0xb8, 0xe5, 0x4f,
3399*f0865ec9SKyle Evans };
3400*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_13_test_vector_our_pub_key[] = {
3401*f0865ec9SKyle Evans 	0x00, 0xfe, 0x30, 0x26, 0x7f, 0x33, 0xba, 0x5c, 0xde, 0xfc, 0x25, 0xcb, 0xb3, 0xc9, 0x32, 0x0d, 0xad, 0x9c, 0xcb, 0x1d, 0x7d, 0x37, 0x66, 0x44, 0x62, 0x0c, 0xa4, 0xfa, 0xde, 0xe5, 0x62, 0x6a, 0x3c, 0xed, 0xe2, 0x5a, 0xd2, 0x54, 0x62, 0x4d, 0xef, 0x72, 0x7a, 0x70, 0x48, 0xf7, 0x14, 0x5f, 0x76, 0x16, 0x2a, 0xa9, 0x80, 0x42, 0xf9, 0xb1, 0x23, 0xb2, 0x07, 0x6f, 0x8e, 0x8c, 0xf5, 0x9b, 0x3f, 0xdf, 0x00, 0x11, 0x45, 0xdc, 0x66, 0x31, 0x95, 0x3b, 0x6e, 0x29, 0x45, 0xe9, 0x43, 0x01, 0xd6, 0xcb, 0xb0, 0x98, 0xfe, 0x4b, 0x04, 0xf7, 0xee, 0x9b, 0x09, 0x41, 0x1d, 0xf1, 0x04, 0xdc, 0x82, 0xd7, 0xd7, 0x9e, 0xc4, 0x6a, 0x01, 0xed, 0x0f, 0x2d, 0x3e, 0x7d, 0xb6, 0xeb, 0x68, 0x06, 0x94, 0xbd, 0xeb, 0x10, 0x7c, 0x10, 0x78, 0xae, 0xc6, 0xca, 0xbd, 0x9e, 0xbe, 0xe3, 0xd3, 0x42, 0xfe, 0x7e, 0x54, 0xdf,
3402*f0865ec9SKyle Evans };
3403*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_13_test_vector_shared_secret[] = {
3404*f0865ec9SKyle Evans 	0x01, 0x28, 0xab, 0x09, 0xbf, 0xec, 0x54, 0x06, 0x79, 0x9e, 0x61, 0x0f, 0x77, 0x2b, 0xa1, 0x7e, 0x89, 0x22, 0x49, 0xfa, 0x8e, 0x0e, 0x7b, 0x18, 0xa0, 0x4b, 0x91, 0x97, 0x03, 0x4b, 0x25, 0x0b, 0x48, 0x29, 0x4f, 0x18, 0x67, 0xfb, 0x96, 0x41, 0x51, 0x8f, 0x92, 0x76, 0x60, 0x66, 0xa0, 0x7a, 0x8b, 0x91, 0x7b, 0x0e, 0x76, 0x87, 0x9e, 0x10, 0x11, 0xe5, 0x1c, 0xcb, 0xd9, 0xf5, 0x40, 0xc5, 0x4d, 0x4f,
3405*f0865ec9SKyle Evans };
3406*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_13_test_case = {
3407*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 13",
3408*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3409*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3410*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_13_test_vector_our_priv_key,
3411*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_our_priv_key),
3412*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_13_test_vector_peer_pub_key,
3413*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_peer_pub_key),
3414*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_13_test_vector_our_pub_key,
3415*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_our_pub_key),
3416*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_13_test_vector_shared_secret,
3417*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_13_test_vector_shared_secret),
3418*f0865ec9SKyle Evans };
3419*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3420*f0865ec9SKyle Evans 
3421*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3422*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_14
3423*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3424*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_14_test_vector_our_priv_key[] = {
3425*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x22, 0xb6, 0xd2, 0xa2, 0x2d, 0x71, 0xdf, 0xaa, 0x81, 0x1d, 0x2d, 0x9f, 0x9f, 0x31, 0xfb, 0xed, 0x27, 0xf2, 0xe1, 0xf3, 0xd2, 0x39, 0x53, 0x8d, 0xdf, 0x3e, 0x4c, 0xc8, 0xc3, 0x9a, 0x33, 0x02, 0x66, 0xdb, 0x25, 0xb7, 0xbc, 0x0a, 0x97, 0x04, 0xf1, 0x7b, 0xde, 0x7f, 0x35, 0x92, 0xbf, 0x5f, 0x1f, 0x2d, 0x4b, 0x56, 0x01, 0x3a, 0xac, 0xc3, 0xd8, 0xd1, 0xbc, 0x02, 0xf0, 0x0d, 0x31, 0x46, 0xcc,
3426*f0865ec9SKyle Evans };
3427*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_14_test_vector_peer_pub_key[] = {
3428*f0865ec9SKyle Evans 	0x01, 0x72, 0x00, 0xb3, 0xf1, 0x6a, 0x68, 0xcb, 0xae, 0xd2, 0xbf, 0x78, 0xba, 0x8c, 0xdd, 0xfb, 0x6c, 0xff, 0xac, 0x26, 0x2b, 0xba, 0x00, 0xfb, 0xc2, 0x5f, 0x9d, 0xc7, 0x2a, 0x07, 0xce, 0x59, 0x37, 0x29, 0x04, 0x89, 0x9f, 0x36, 0x4c, 0x44, 0xcb, 0x26, 0x4c, 0x09, 0x7b, 0x64, 0x7d, 0x44, 0x12, 0xbe, 0xe3, 0xe5, 0x19, 0x89, 0x2d, 0x53, 0x4d, 0x91, 0x29, 0xf8, 0xa2, 0x8f, 0x75, 0x00, 0xfe, 0xe7, 0x00, 0xba, 0xba, 0x8d, 0x67, 0x2a, 0x4f, 0x4a, 0x3b, 0x63, 0xde, 0x48, 0xb9, 0x6f, 0x56, 0xe1, 0x8d, 0xf5, 0xd6, 0x8f, 0x7d, 0x70, 0xd5, 0x10, 0x98, 0x33, 0xf4, 0x37, 0x70, 0xd6, 0x73, 0x2e, 0x06, 0xb3, 0x9a, 0xd6, 0x0d, 0x93, 0xe5, 0xb4, 0x3d, 0xb8, 0x78, 0x9f, 0x1e, 0xc0, 0xab, 0xa4, 0x72, 0x86, 0xa3, 0x9e, 0xa5, 0x84, 0x23, 0x5a, 0xce, 0xa7, 0x57, 0xdb, 0xf1, 0x3d, 0x53, 0xb5, 0x83, 0x64,
3429*f0865ec9SKyle Evans };
3430*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_14_test_vector_our_pub_key[] = {
3431*f0865ec9SKyle Evans 	0x00, 0xba, 0x38, 0xcf, 0xbf, 0x9f, 0xd2, 0x51, 0x8a, 0x3f, 0x61, 0xd4, 0x35, 0x49, 0xe7, 0xa6, 0xa6, 0xd2, 0x8b, 0x2b, 0xe5, 0x7f, 0xfd, 0x3e, 0x0f, 0xac, 0xeb, 0x63, 0x6b, 0x34, 0xed, 0x17, 0xe0, 0x44, 0xa9, 0xf2, 0x49, 0xda, 0xe8, 0xfc, 0x13, 0x2e, 0x93, 0x7e, 0x2d, 0x93, 0x49, 0xcd, 0x2e, 0xd7, 0x7b, 0xb1, 0x04, 0x9c, 0xeb, 0x69, 0x2a, 0x2e, 0xc5, 0xb1, 0x7a, 0xd6, 0x15, 0x02, 0xa6, 0x4c, 0x00, 0x1e, 0xc9, 0x1d, 0x30, 0x58, 0x57, 0x3f, 0xa6, 0xc0, 0x56, 0x4a, 0x02, 0xa1, 0xa0, 0x10, 0x16, 0x0c, 0x31, 0x3b, 0xc7, 0xc7, 0x35, 0x10, 0xdc, 0x98, 0x3e, 0x54, 0x61, 0x68, 0x2b, 0x5b, 0xe0, 0x0d, 0xbc, 0xe7, 0xe2, 0xc6, 0x82, 0xad, 0x73, 0xf2, 0x9c, 0xa8, 0x22, 0xcd, 0xc1, 0x11, 0xf6, 0x8f, 0xab, 0xe3, 0x3a, 0x7b, 0x38, 0x4a, 0x64, 0x83, 0x42, 0xc3, 0xcd, 0xb9, 0xf0, 0x50, 0xbc, 0xdb,
3432*f0865ec9SKyle Evans };
3433*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_14_test_vector_shared_secret[] = {
3434*f0865ec9SKyle Evans 	0x01, 0x01, 0xe4, 0x62, 0xe9, 0xd9, 0x15, 0x99, 0x68, 0xf6, 0x44, 0x0e, 0x95, 0x6f, 0x11, 0xdc, 0xf2, 0x22, 0x7a, 0xe4, 0xae, 0xa8, 0x16, 0x67, 0x12, 0x2b, 0x6a, 0xf9, 0x23, 0x9a, 0x29, 0x1e, 0xb5, 0xd6, 0xcf, 0x5a, 0x40, 0x87, 0xf3, 0x58, 0x52, 0x5f, 0xca, 0xcf, 0xa4, 0x6b, 0xb2, 0xdb, 0x01, 0xa7, 0x5a, 0xf1, 0xba, 0x51, 0x9b, 0x2d, 0x31, 0xda, 0x33, 0xed, 0xa8, 0x7a, 0x9d, 0x56, 0x57, 0x48,
3435*f0865ec9SKyle Evans };
3436*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_14_test_case = {
3437*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 14",
3438*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3439*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3440*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_14_test_vector_our_priv_key,
3441*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_our_priv_key),
3442*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_14_test_vector_peer_pub_key,
3443*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_peer_pub_key),
3444*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_14_test_vector_our_pub_key,
3445*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_our_pub_key),
3446*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_14_test_vector_shared_secret,
3447*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_14_test_vector_shared_secret),
3448*f0865ec9SKyle Evans };
3449*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3450*f0865ec9SKyle Evans 
3451*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3452*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_15
3453*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3454*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_15_test_vector_our_priv_key[] = {
3455*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x5b, 0xac, 0xff, 0xf2, 0x68, 0xac, 0xf6, 0x55, 0x3c, 0x3c, 0x58, 0x3b, 0x46, 0x4e, 0xa3, 0x6a, 0x1d, 0x35, 0xe2, 0xb2, 0x57, 0xa5, 0xd4, 0x9e, 0xb3, 0x41, 0x9d, 0x5a, 0x09, 0x50, 0x87, 0xc2, 0xfb, 0x4d, 0x15, 0xcf, 0x5b, 0xf5, 0xaf, 0x81, 0x6d, 0x0f, 0x3f, 0xf7, 0x58, 0x64, 0x90, 0xcc, 0xd3, 0xdd, 0xc1, 0xa9, 0x8b, 0x39, 0xce, 0x63, 0x74, 0x9c, 0x62, 0x88, 0xce, 0x0d, 0xbd, 0xac, 0x7d,
3456*f0865ec9SKyle Evans };
3457*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_15_test_vector_peer_pub_key[] = {
3458*f0865ec9SKyle Evans 	0x00, 0x4e, 0xfd, 0x5d, 0xbd, 0x2f, 0x97, 0x9e, 0x38, 0x31, 0xce, 0x98, 0xf8, 0x23, 0x55, 0xd6, 0xca, 0x14, 0xa5, 0x75, 0x78, 0x42, 0x87, 0x58, 0x82, 0x99, 0x0a, 0xb8, 0x5a, 0xb9, 0xb7, 0x35, 0x2d, 0xd6, 0xb9, 0xb2, 0xf4, 0xea, 0x9a, 0x1e, 0x95, 0xc3, 0x88, 0x0d, 0x65, 0xd1, 0xf3, 0x60, 0x2f, 0x9c, 0xa6, 0x53, 0xdc, 0x34, 0x6f, 0xac, 0x85, 0x86, 0x58, 0xd7, 0x56, 0x26, 0xf4, 0xd4, 0xfb, 0x08, 0x00, 0x61, 0xcf, 0x15, 0xdb, 0xda, 0xa7, 0xf3, 0x15, 0x89, 0xc9, 0x84, 0x00, 0x37, 0x3d, 0xa2, 0x84, 0x50, 0x6d, 0x70, 0xc8, 0x9f, 0x07, 0x4e, 0xd2, 0x62, 0xa9, 0xe2, 0x81, 0x40, 0x79, 0x6b, 0x72, 0x36, 0xc2, 0xee, 0xf9, 0x90, 0x16, 0x08, 0x5e, 0x71, 0x55, 0x2f, 0xf4, 0x88, 0xc7, 0x2b, 0x73, 0x39, 0xfe, 0xfb, 0x79, 0x15, 0xc3, 0x84, 0x59, 0xcb, 0x20, 0xab, 0x85, 0xae, 0xc4, 0xe4, 0x50, 0x52,
3459*f0865ec9SKyle Evans };
3460*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_15_test_vector_our_pub_key[] = {
3461*f0865ec9SKyle Evans 	0x00, 0x36, 0xe4, 0x88, 0xda, 0x75, 0x81, 0x47, 0x2a, 0x9d, 0x8e, 0x62, 0x8c, 0x58, 0xd6, 0xad, 0x72, 0x73, 0x11, 0xb7, 0xe6, 0xa3, 0xf6, 0xae, 0x33, 0xa8, 0x54, 0x4f, 0x34, 0xb0, 0x92, 0x80, 0x24, 0x90, 0x20, 0xbe, 0x71, 0x96, 0x91, 0x6f, 0xaf, 0xd9, 0x0e, 0x2e, 0xc5, 0x4b, 0x66, 0xb5, 0x46, 0x8d, 0x23, 0x61, 0xb9, 0x9b, 0x56, 0xfa, 0x00, 0xd7, 0xac, 0x37, 0xab, 0xb8, 0xc6, 0xf1, 0x66, 0x53, 0x01, 0x1e, 0xdb, 0x9f, 0xb8, 0xad, 0xb6, 0xa4, 0x3f, 0x4f, 0x5f, 0x5f, 0xdc, 0x14, 0x21, 0xc9, 0xfe, 0x04, 0xfc, 0x8b, 0xa4, 0x6c, 0x9b, 0x66, 0x33, 0x4e, 0x3a, 0xf9, 0x27, 0xc8, 0xbe, 0xfb, 0x43, 0x07, 0x10, 0x4f, 0x29, 0x9a, 0xce, 0xc4, 0xe3, 0x0f, 0x81, 0x2d, 0x93, 0x45, 0xc9, 0x72, 0x0d, 0x19, 0x86, 0x9d, 0xbf, 0xff, 0xd4, 0xca, 0x3e, 0x7d, 0x27, 0x13, 0xeb, 0x5f, 0xc3, 0xf4, 0x26, 0x15,
3462*f0865ec9SKyle Evans };
3463*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_15_test_vector_shared_secret[] = {
3464*f0865ec9SKyle Evans 	0x01, 0x41, 0xd6, 0xa4, 0xb7, 0x19, 0xab, 0x67, 0xea, 0xf0, 0x4a, 0x92, 0xc0, 0xa4, 0x1e, 0x2d, 0xda, 0x78, 0xf4, 0x35, 0x4f, 0xb9, 0x0b, 0xdc, 0x35, 0x20, 0x2c, 0xc7, 0x69, 0x9b, 0x9b, 0x04, 0xd4, 0x96, 0x16, 0xf8, 0x22, 0x55, 0xde, 0xbf, 0x7b, 0xbe, 0xc0, 0x45, 0xae, 0x58, 0xf9, 0x82, 0xa6, 0x69, 0x05, 0xfc, 0xfa, 0xe6, 0x9d, 0x68, 0x97, 0x85, 0xe3, 0x8c, 0x86, 0x8e, 0xb4, 0xa2, 0x7e, 0x7b,
3465*f0865ec9SKyle Evans };
3466*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_15_test_case = {
3467*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 15",
3468*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3469*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3470*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_15_test_vector_our_priv_key,
3471*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_our_priv_key),
3472*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_15_test_vector_peer_pub_key,
3473*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_peer_pub_key),
3474*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_15_test_vector_our_pub_key,
3475*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_our_pub_key),
3476*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_15_test_vector_shared_secret,
3477*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_15_test_vector_shared_secret),
3478*f0865ec9SKyle Evans };
3479*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3480*f0865ec9SKyle Evans 
3481*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3482*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_16
3483*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3484*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_16_test_vector_our_priv_key[] = {
3485*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x8e, 0x2c, 0x93, 0xc5, 0x42, 0x38, 0x76, 0x22, 0x3a, 0x63, 0x7c, 0xad, 0x36, 0x7c, 0x85, 0x89, 0xda, 0x69, 0xa2, 0xd0, 0xfc, 0x68, 0x61, 0x2f, 0x31, 0x92, 0x3a, 0xe5, 0x02, 0x19, 0xdf, 0x24, 0x52, 0xe7, 0xcc, 0x92, 0x61, 0x5b, 0x67, 0xf1, 0x7b, 0x57, 0xff, 0xd2, 0xf5, 0x2b, 0x19, 0x15, 0x4b, 0xb4, 0x0d, 0x77, 0x15, 0x33, 0x64, 0x20, 0xfd, 0xe2, 0xe8, 0x9f, 0xee, 0x24, 0x4f, 0x59, 0xdc,
3486*f0865ec9SKyle Evans };
3487*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_16_test_vector_peer_pub_key[] = {
3488*f0865ec9SKyle Evans 	0x01, 0x29, 0x89, 0x1d, 0xe0, 0xcf, 0x3c, 0xf8, 0x2e, 0x8c, 0x2c, 0xf1, 0xbf, 0x90, 0xbb, 0x29, 0x6f, 0xe0, 0x0a, 0xb0, 0x8c, 0xa4, 0x5b, 0xb7, 0x89, 0x2e, 0x0e, 0x22, 0x7a, 0x50, 0x4f, 0xdd, 0x05, 0xd2, 0x38, 0x1a, 0x44, 0x48, 0xb6, 0x8a, 0xdf, 0xf9, 0xc4, 0x15, 0x3c, 0x87, 0xea, 0xcb, 0x78, 0x33, 0x0d, 0x8b, 0xd5, 0x25, 0x15, 0xf9, 0xf9, 0xa0, 0xb5, 0x8e, 0x85, 0xf4, 0x46, 0xbb, 0x4e, 0x10, 0x00, 0x9e, 0xdd, 0x67, 0x96, 0x96, 0xd3, 0xd1, 0xd0, 0xef, 0x32, 0x7f, 0x20, 0x03, 0x83, 0x25, 0x3f, 0x64, 0x13, 0x68, 0x3d, 0x9e, 0x4f, 0xcc, 0x87, 0xbb, 0x35, 0xf1, 0x12, 0xc2, 0xf1, 0x10, 0x09, 0x8d, 0x15, 0xe5, 0x70, 0x1d, 0x7c, 0xee, 0xe4, 0x16, 0x29, 0x1f, 0xf5, 0xfe, 0xd8, 0x5e, 0x68, 0x7f, 0x72, 0x73, 0x88, 0xb9, 0xaf, 0xe2, 0x6a, 0x4f, 0x6f, 0xee, 0xd5, 0x60, 0xb2, 0x18, 0xe6, 0xbb,
3489*f0865ec9SKyle Evans };
3490*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_16_test_vector_our_pub_key[] = {
3491*f0865ec9SKyle Evans 	0x00, 0xfa, 0x3b, 0x35, 0x11, 0x8d, 0x6c, 0x42, 0x25, 0x70, 0xf7, 0x24, 0xa2, 0x6f, 0x90, 0xb2, 0x83, 0x3b, 0x19, 0x23, 0x91, 0x74, 0xce, 0xa0, 0x81, 0xc5, 0x31, 0x33, 0xf6, 0x4d, 0xb6, 0x0d, 0x69, 0x40, 0xea, 0x12, 0x61, 0x29, 0x9c, 0x04, 0xc1, 0xf4, 0x58, 0x7c, 0xdb, 0x0c, 0x4c, 0x39, 0x61, 0x64, 0x79, 0xc1, 0xbb, 0x0c, 0x14, 0x67, 0x99, 0xa1, 0x18, 0x03, 0x2d, 0xcf, 0x98, 0xf8, 0x99, 0xc0, 0x00, 0x69, 0xf0, 0x40, 0x22, 0x90, 0x06, 0x15, 0x1f, 0xa3, 0x2b, 0x51, 0xf6, 0x79, 0xc8, 0x81, 0x6f, 0x7c, 0x17, 0x50, 0x6b, 0x40, 0x38, 0x09, 0xdc, 0x77, 0xcd, 0x58, 0xa2, 0xae, 0xc4, 0x30, 0xd9, 0x4d, 0x13, 0xb6, 0xc9, 0x16, 0xde, 0x99, 0xf3, 0x55, 0xaa, 0x45, 0xfc, 0xfb, 0xc6, 0x85, 0x3d, 0x68, 0x6c, 0x71, 0xbe, 0x49, 0x6a, 0x06, 0x7d, 0x24, 0xbf, 0xae, 0xa4, 0x81, 0x8f, 0xc5, 0x1f, 0x75,
3492*f0865ec9SKyle Evans };
3493*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_16_test_vector_shared_secret[] = {
3494*f0865ec9SKyle Evans 	0x00, 0x34, 0x5e, 0x26, 0xe0, 0xab, 0xb1, 0xaa, 0xc1, 0x2b, 0x75, 0xf3, 0xa9, 0xcf, 0x41, 0xef, 0xe1, 0xc3, 0x36, 0x39, 0x6d, 0xff, 0xa4, 0xa0, 0x67, 0xa4, 0xc2, 0xcf, 0xeb, 0x87, 0x8c, 0x68, 0xb2, 0xb0, 0x45, 0xfa, 0xa4, 0xe5, 0xb4, 0xe6, 0xfa, 0x46, 0x78, 0xf5, 0xb6, 0x03, 0xc3, 0x51, 0x90, 0x3b, 0x14, 0xbf, 0x9a, 0x6a, 0x70, 0xc4, 0x39, 0x25, 0x71, 0x99, 0xa6, 0x40, 0x89, 0x0b, 0x61, 0xd1,
3495*f0865ec9SKyle Evans };
3496*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_16_test_case = {
3497*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 16",
3498*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3499*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3500*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_16_test_vector_our_priv_key,
3501*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_our_priv_key),
3502*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_16_test_vector_peer_pub_key,
3503*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_peer_pub_key),
3504*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_16_test_vector_our_pub_key,
3505*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_our_pub_key),
3506*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_16_test_vector_shared_secret,
3507*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_16_test_vector_shared_secret),
3508*f0865ec9SKyle Evans };
3509*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3510*f0865ec9SKyle Evans 
3511*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3512*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_17
3513*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3514*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_17_test_vector_our_priv_key[] = {
3515*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x04, 0xd4, 0x9d, 0x39, 0xd4, 0x0d, 0x81, 0x11, 0xbf, 0x16, 0xd2, 0x8c, 0x59, 0x36, 0x55, 0x43, 0x26, 0xb1, 0x97, 0x35, 0x3e, 0xeb, 0xbc, 0xf4, 0x75, 0x45, 0x39, 0x3b, 0xc8, 0xd3, 0xaa, 0xf9, 0x8f, 0x14, 0xf5, 0xbe, 0x70, 0x74, 0xbf, 0xb3, 0x8e, 0x6c, 0xc9, 0x7b, 0x98, 0x97, 0x54, 0x07, 0x4d, 0xad, 0xdb, 0x30, 0x45, 0xf4, 0xe4, 0xce, 0x74, 0x56, 0x69, 0xfd, 0xb3, 0xec, 0x0d, 0x5f, 0xa8,
3516*f0865ec9SKyle Evans };
3517*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_17_test_vector_peer_pub_key[] = {
3518*f0865ec9SKyle Evans 	0x01, 0xa3, 0xc2, 0x02, 0x40, 0xe5, 0x9f, 0x5b, 0x7a, 0x3e, 0x17, 0xc2, 0x75, 0xd2, 0x31, 0x4b, 0xa1, 0x74, 0x12, 0x10, 0xad, 0x58, 0xb7, 0x10, 0x36, 0xf8, 0xc8, 0x3c, 0xc1, 0xf6, 0xb0, 0xf4, 0x09, 0xdf, 0xdd, 0x91, 0x13, 0xe9, 0x4b, 0x67, 0xec, 0x39, 0xc3, 0x29, 0x14, 0x26, 0xc2, 0x3f, 0xfc, 0xc4, 0x47, 0x05, 0x46, 0x70, 0xd2, 0x90, 0x8f, 0xf8, 0xfe, 0x67, 0xdc, 0x23, 0x06, 0x03, 0x4c, 0x5c, 0x01, 0xd2, 0x82, 0x5b, 0xfd, 0x3a, 0xf8, 0xb1, 0xe1, 0x32, 0x05, 0x78, 0x0c, 0x13, 0x7f, 0xe9, 0x38, 0xf8, 0x4f, 0xde, 0x40, 0x18, 0x8e, 0x61, 0xea, 0x02, 0xce, 0xad, 0x81, 0xba, 0xdf, 0xdb, 0x42, 0x5c, 0x29, 0xf7, 0xd7, 0xfb, 0x03, 0x24, 0xde, 0xba, 0xdc, 0x10, 0xbb, 0xb9, 0x3d, 0xe6, 0x8f, 0x62, 0xc3, 0x50, 0x69, 0x26, 0x82, 0x83, 0xf5, 0x26, 0x58, 0x65, 0xdb, 0x57, 0xa7, 0x9f, 0x7b, 0xf7,
3519*f0865ec9SKyle Evans };
3520*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_17_test_vector_our_pub_key[] = {
3521*f0865ec9SKyle Evans 	0x01, 0x2e, 0xc2, 0x26, 0xd0, 0x50, 0xce, 0x07, 0xc7, 0x9b, 0x3d, 0xf4, 0xd0, 0xf0, 0x89, 0x1f, 0x9f, 0x7a, 0xdf, 0x46, 0x2e, 0x8c, 0x98, 0xdb, 0xc1, 0xa2, 0xa1, 0x4f, 0x5e, 0x53, 0xa3, 0xf5, 0xad, 0x89, 0x44, 0x33, 0x58, 0x7c, 0xc4, 0x29, 0xa8, 0xbe, 0x9e, 0xa1, 0xd8, 0x4f, 0xa3, 0x3b, 0x18, 0x03, 0x69, 0x0d, 0xae, 0x04, 0xda, 0x72, 0x18, 0xd3, 0x00, 0x26, 0x15, 0x7f, 0xc9, 0x95, 0xcf, 0x52, 0x00, 0x48, 0x37, 0xdf, 0xbf, 0x34, 0x26, 0xf5, 0x7b, 0x5c, 0x79, 0x32, 0x69, 0x13, 0x0a, 0xbb, 0x9a, 0x38, 0xf6, 0x18, 0x53, 0x22, 0x11, 0x93, 0x11, 0x54, 0xdb, 0x4e, 0xeb, 0x9a, 0xed, 0xe8, 0x8e, 0x57, 0x29, 0x0f, 0x84, 0x2e, 0xa0, 0xf2, 0xea, 0x9a, 0x5f, 0x74, 0xc6, 0x20, 0x3a, 0x39, 0x20, 0xfe, 0x4e, 0x30, 0x5f, 0x61, 0x18, 0xf6, 0x76, 0xb1, 0x54, 0xe1, 0xd7, 0x5b, 0x9c, 0xb5, 0xeb, 0x88,
3522*f0865ec9SKyle Evans };
3523*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_17_test_vector_shared_secret[] = {
3524*f0865ec9SKyle Evans 	0x00, 0x6f, 0xe9, 0xde, 0x6f, 0xb8, 0xe6, 0x72, 0xe7, 0xfd, 0x15, 0x0f, 0xdc, 0x5e, 0x61, 0x7f, 0xab, 0xb0, 0xd4, 0x39, 0x06, 0x35, 0x4c, 0xcf, 0xd2, 0x24, 0x75, 0x7c, 0x72, 0x76, 0xf7, 0xa1, 0x01, 0x00, 0x91, 0xb1, 0x7e, 0xd0, 0x72, 0x07, 0x4f, 0x8d, 0x10, 0xa5, 0xec, 0x97, 0x1e, 0xb3, 0x5a, 0x5c, 0xb7, 0x07, 0x66, 0x03, 0xb7, 0xbc, 0x38, 0xd4, 0x32, 0xcb, 0xc0, 0x59, 0xf8, 0x0f, 0x94, 0x88,
3525*f0865ec9SKyle Evans };
3526*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_17_test_case = {
3527*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 17",
3528*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3529*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3530*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_17_test_vector_our_priv_key,
3531*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_our_priv_key),
3532*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_17_test_vector_peer_pub_key,
3533*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_peer_pub_key),
3534*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_17_test_vector_our_pub_key,
3535*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_our_pub_key),
3536*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_17_test_vector_shared_secret,
3537*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_17_test_vector_shared_secret),
3538*f0865ec9SKyle Evans };
3539*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3540*f0865ec9SKyle Evans 
3541*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3542*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_18
3543*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3544*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_18_test_vector_our_priv_key[] = {
3545*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0x1a, 0x5d, 0x1c, 0xc7, 0x9c, 0xd2, 0xbf, 0x73, 0xea, 0x10, 0x6f, 0x0e, 0x60, 0xa5, 0xac, 0xe2, 0x20, 0x81, 0x3b, 0x53, 0xe2, 0x7b, 0x73, 0x98, 0x64, 0x33, 0x4a, 0x07, 0xc0, 0x33, 0x67, 0xef, 0xda, 0x7a, 0x46, 0x19, 0xfa, 0x6e, 0xef, 0x3a, 0x97, 0x46, 0x49, 0x22, 0x83, 0xb3, 0xc4, 0x45, 0x61, 0x0a, 0x02, 0x3a, 0x9c, 0xc4, 0x9b, 0xf4, 0x59, 0x11, 0x40, 0x38, 0x4f, 0xca, 0x5c, 0x8b, 0xb5,
3546*f0865ec9SKyle Evans };
3547*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_18_test_vector_peer_pub_key[] = {
3548*f0865ec9SKyle Evans 	0x00, 0x7e, 0x2d, 0x13, 0x8f, 0x28, 0x32, 0xe3, 0x45, 0xae, 0x8f, 0xf6, 0x59, 0x57, 0xe4, 0x0e, 0x5e, 0xc7, 0x16, 0x3f, 0x01, 0x6b, 0xdf, 0x6d, 0x24, 0xa2, 0x24, 0x3d, 0xaa, 0x63, 0x1d, 0x87, 0x8a, 0x4a, 0x16, 0x78, 0x39, 0x90, 0xc7, 0x22, 0x38, 0x21, 0x30, 0xf9, 0xe5, 0x1f, 0x0c, 0x1b, 0xd6, 0xff, 0x5a, 0xc9, 0x67, 0x80, 0xe4, 0x8b, 0x68, 0xf5, 0xde, 0xc9, 0x5f, 0x42, 0xe6, 0x14, 0x4b, 0xb5, 0x00, 0xb0, 0xde, 0x5c, 0x89, 0x67, 0x91, 0xf5, 0x28, 0x86, 0xb0, 0xf0, 0x99, 0x13, 0xe2, 0x6e, 0x78, 0xdd, 0x0b, 0x69, 0x79, 0x8f, 0xc4, 0xdf, 0x6d, 0x95, 0xe3, 0xca, 0x70, 0x8e, 0xcb, 0xcb, 0xcc, 0xe1, 0xc1, 0x89, 0x5f, 0x55, 0x61, 0xbb, 0xab, 0xaa, 0xe3, 0x72, 0xe9, 0xe6, 0x7e, 0x6e, 0x1a, 0x3b, 0xe6, 0x0e, 0x19, 0xb4, 0x70, 0xcd, 0xf6, 0x73, 0xec, 0x1f, 0xc3, 0x93, 0xd3, 0x42, 0x6e, 0x20,
3549*f0865ec9SKyle Evans };
3550*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_18_test_vector_our_pub_key[] = {
3551*f0865ec9SKyle Evans 	0x00, 0xeb, 0x07, 0xc7, 0x33, 0x2e, 0xed, 0xb7, 0xd3, 0x03, 0x60, 0x59, 0xd3, 0x5f, 0x7d, 0x22, 0x88, 0xd4, 0x37, 0x7d, 0x5f, 0x42, 0x33, 0x7a, 0xd3, 0x96, 0x40, 0x79, 0xfb, 0x12, 0x0c, 0xcd, 0x4c, 0x8b, 0xd3, 0x84, 0xb5, 0x85, 0x62, 0x10, 0x55, 0x21, 0x70, 0x23, 0xac, 0xd9, 0xa9, 0x4f, 0xcb, 0x3b, 0x96, 0x5b, 0xfb, 0x39, 0x46, 0x75, 0xe7, 0x88, 0xad, 0xe4, 0x1a, 0x1d, 0xe7, 0x3e, 0x62, 0x0c, 0x00, 0x49, 0x1a, 0x83, 0x5d, 0xe2, 0xe6, 0xe7, 0xde, 0xb7, 0xe0, 0x90, 0xf4, 0xa1, 0x1f, 0x2c, 0x46, 0x0c, 0x0b, 0x1f, 0x3d, 0x5e, 0x94, 0xee, 0x8d, 0x75, 0x10, 0x14, 0xdc, 0x72, 0x07, 0x84, 0xfd, 0x3b, 0x54, 0x50, 0x0c, 0x86, 0xeb, 0xae, 0xf1, 0x84, 0x29, 0xf0, 0x9e, 0x8e, 0x87, 0x6d, 0x5d, 0x15, 0x38, 0x96, 0x8a, 0x03, 0x0d, 0x77, 0x15, 0xdd, 0xe9, 0x9f, 0x0d, 0x8f, 0x06, 0xe2, 0x9d, 0x59,
3552*f0865ec9SKyle Evans };
3553*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_18_test_vector_shared_secret[] = {
3554*f0865ec9SKyle Evans 	0x01, 0xe4, 0xe7, 0x59, 0xec, 0xed, 0xce, 0x10, 0x13, 0xba, 0xf7, 0x3e, 0x6f, 0xcc, 0x0b, 0x92, 0x45, 0x1d, 0x03, 0xbd, 0xd5, 0x04, 0x89, 0xb7, 0x88, 0x71, 0xc3, 0x33, 0x11, 0x49, 0x90, 0xc9, 0xba, 0x6a, 0x9b, 0x2f, 0xc7, 0xb1, 0xa2, 0xd9, 0xa1, 0x79, 0x4c, 0x1b, 0x60, 0xd9, 0x27, 0x9a, 0xf6, 0xf1, 0x46, 0xf0, 0xbb, 0xfb, 0x06, 0x83, 0x14, 0x04, 0x03, 0xbf, 0xa4, 0xcc, 0xdb, 0x52, 0x4a, 0x29,
3555*f0865ec9SKyle Evans };
3556*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_18_test_case = {
3557*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 18",
3558*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3559*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3560*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_18_test_vector_our_priv_key,
3561*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_our_priv_key),
3562*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_18_test_vector_peer_pub_key,
3563*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_peer_pub_key),
3564*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_18_test_vector_our_pub_key,
3565*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_our_pub_key),
3566*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_18_test_vector_shared_secret,
3567*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_18_test_vector_shared_secret),
3568*f0865ec9SKyle Evans };
3569*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3570*f0865ec9SKyle Evans 
3571*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3572*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_19
3573*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3574*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_19_test_vector_our_priv_key[] = {
3575*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0x0c, 0x90, 0x8c, 0xaf, 0x1b, 0xe7, 0x4c, 0x61, 0x6b, 0x62, 0x5f, 0xc8, 0xc1, 0xf5, 0x14, 0x44, 0x6a, 0x6a, 0xec, 0x83, 0xb5, 0x93, 0x71, 0x41, 0xd6, 0xaf, 0xbb, 0x0a, 0x8c, 0x76, 0x66, 0xa7, 0x74, 0x6f, 0xa1, 0xf7, 0xa6, 0x66, 0x4a, 0x21, 0x23, 0xe8, 0xcd, 0xf6, 0xcd, 0x8b, 0xf8, 0x36, 0xc5, 0x6d, 0x3c, 0x0e, 0xbd, 0xcc, 0x98, 0x0e, 0x43, 0xa1, 0x86, 0xf9, 0x38, 0xf3, 0xa7, 0x8a, 0xe7,
3576*f0865ec9SKyle Evans };
3577*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_19_test_vector_peer_pub_key[] = {
3578*f0865ec9SKyle Evans 	0x00, 0x11, 0x8c, 0x36, 0x02, 0x22, 0x09, 0xb1, 0xaf, 0x8e, 0xba, 0xd1, 0xa1, 0x2b, 0x56, 0x6f, 0xc4, 0x87, 0x44, 0x57, 0x6e, 0x11, 0x99, 0xfe, 0x80, 0xde, 0x1c, 0xdf, 0x85, 0x1c, 0xdf, 0x03, 0xe5, 0xb9, 0x09, 0x1a, 0x8f, 0x7e, 0x07, 0x9e, 0x83, 0xb7, 0xf8, 0x27, 0x25, 0x9b, 0x69, 0x1d, 0x0c, 0x22, 0xee, 0x29, 0xd6, 0xbd, 0xf7, 0x3e, 0xc7, 0xbb, 0xfd, 0x74, 0x6f, 0x2c, 0xd9, 0x7a, 0x35, 0x7d, 0x00, 0xda, 0x5f, 0xf4, 0x90, 0x45, 0x48, 0xa3, 0x42, 0xe2, 0xe7, 0xba, 0x6a, 0x1f, 0x4e, 0xe5, 0xf8, 0x40, 0x41, 0x1a, 0x96, 0xcf, 0x63, 0xe6, 0xfe, 0x62, 0x2f, 0x22, 0xc1, 0x3e, 0x61, 0x4e, 0x0a, 0x84, 0x7c, 0x11, 0xa1, 0xab, 0x3f, 0x1d, 0x12, 0xcc, 0x85, 0x0c, 0x32, 0xe0, 0x95, 0x61, 0x4c, 0xa8, 0xf7, 0xe2, 0x72, 0x14, 0x77, 0xb4, 0x86, 0xe9, 0xff, 0x40, 0x37, 0x29, 0x77, 0xc3, 0xf6, 0x5c,
3579*f0865ec9SKyle Evans };
3580*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_19_test_vector_our_pub_key[] = {
3581*f0865ec9SKyle Evans 	0x00, 0x31, 0x89, 0x0f, 0x4c, 0x7a, 0xbe, 0xc3, 0xf7, 0x23, 0x36, 0x22, 0x85, 0xd7, 0x7d, 0x26, 0x36, 0xf8, 0x76, 0x81, 0x7d, 0xb3, 0xbb, 0xc8, 0x8b, 0x01, 0xe7, 0x73, 0x59, 0x7b, 0x96, 0x9f, 0xf6, 0xf0, 0x13, 0xea, 0x47, 0x0c, 0x85, 0x4a, 0xb4, 0xa7, 0x73, 0x90, 0x04, 0xeb, 0x8c, 0xbe, 0xa6, 0x9b, 0x82, 0xdd, 0xf3, 0x6a, 0xca, 0xdd, 0x40, 0x68, 0x71, 0x79, 0x8e, 0xcb, 0x2a, 0xc3, 0xaa, 0x7f, 0x00, 0xd8, 0xb4, 0x29, 0xae, 0x32, 0x50, 0x26, 0x6b, 0x96, 0x43, 0xc0, 0xc7, 0x65, 0xa6, 0x0d, 0xc1, 0x01, 0x55, 0xbc, 0x25, 0x31, 0xcf, 0x86, 0x27, 0x29, 0x6f, 0x49, 0x78, 0xb6, 0x64, 0x0a, 0x9e, 0x60, 0x0e, 0x19, 0xd0, 0x03, 0x7d, 0x58, 0x50, 0x3f, 0xa8, 0x07, 0x99, 0x54, 0x6a, 0x81, 0x4d, 0x74, 0x78, 0xa5, 0x50, 0xaa, 0x90, 0xe5, 0xeb, 0xeb, 0x05, 0x25, 0x27, 0xfa, 0xae, 0xae, 0x5d, 0x08,
3582*f0865ec9SKyle Evans };
3583*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_19_test_vector_shared_secret[] = {
3584*f0865ec9SKyle Evans 	0x01, 0x63, 0xc9, 0x19, 0x1d, 0x65, 0x10, 0x39, 0xa5, 0xfe, 0x98, 0x5a, 0x0e, 0xea, 0x1e, 0xba, 0x01, 0x8a, 0x40, 0xab, 0x19, 0x37, 0xfc, 0xd2, 0xb6, 0x12, 0x20, 0x82, 0x0e, 0xe8, 0xf2, 0x30, 0x2e, 0x97, 0x99, 0xf6, 0xed, 0xfc, 0x3f, 0x51, 0x74, 0xf3, 0x69, 0xd6, 0x72, 0xd3, 0x77, 0xea, 0x89, 0x54, 0xa8, 0xd0, 0xc8, 0xb8, 0x51, 0xe8, 0x1a, 0x56, 0xfd, 0xa9, 0x52, 0x12, 0xa6, 0x57, 0x8f, 0x0e,
3585*f0865ec9SKyle Evans };
3586*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_19_test_case = {
3587*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 19",
3588*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3589*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3590*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_19_test_vector_our_priv_key,
3591*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_our_priv_key),
3592*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_19_test_vector_peer_pub_key,
3593*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_peer_pub_key),
3594*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_19_test_vector_our_pub_key,
3595*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_our_pub_key),
3596*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_19_test_vector_shared_secret,
3597*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_19_test_vector_shared_secret),
3598*f0865ec9SKyle Evans };
3599*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3600*f0865ec9SKyle Evans 
3601*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3602*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_20
3603*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3604*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_20_test_vector_our_priv_key[] = {
3605*f0865ec9SKyle Evans 	0x00, 0x00, 0x01, 0xb3, 0x7d, 0x6b, 0x72, 0x88, 0xde, 0x67, 0x13, 0x60, 0x42, 0x5d, 0x3e, 0x5a, 0xc1, 0xcc, 0xb2, 0x18, 0x15, 0x07, 0x9d, 0x8d, 0x73, 0x43, 0x1e, 0x9b, 0x74, 0xa6, 0xf0, 0xe7, 0xae, 0x00, 0x4a, 0x35, 0x75, 0x75, 0xb1, 0x1a, 0xd6, 0x66, 0x42, 0xce, 0x8b, 0x77, 0x55, 0x93, 0xeb, 0xa9, 0xd9, 0x8b, 0xf2, 0x5c, 0x75, 0xef, 0x0b, 0x4d, 0x3a, 0x20, 0x98, 0xbb, 0xc6, 0x41, 0xf5, 0x9a, 0x2b, 0x77,
3606*f0865ec9SKyle Evans };
3607*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_20_test_vector_peer_pub_key[] = {
3608*f0865ec9SKyle Evans 	0x01, 0x78, 0x0e, 0xdf, 0xf1, 0xca, 0x1c, 0x03, 0xcf, 0xbe, 0x59, 0x3e, 0xdc, 0x6c, 0x04, 0x9b, 0xcb, 0x28, 0x60, 0x29, 0x4a, 0x92, 0xc3, 0x55, 0x48, 0x9d, 0x9a, 0xfb, 0x2e, 0x70, 0x20, 0x75, 0xad, 0xe1, 0xc9, 0x53, 0x89, 0x5a, 0x45, 0x62, 0x30, 0xa0, 0xcd, 0xe9, 0x05, 0xde, 0x4a, 0x3f, 0x38, 0x57, 0x3d, 0xbf, 0xcc, 0xcd, 0x67, 0xad, 0x6e, 0x7e, 0x93, 0xf0, 0xb5, 0x58, 0x1e, 0x92, 0x6a, 0x5d, 0x00, 0xa5, 0x48, 0x19, 0x62, 0xc9, 0x16, 0x29, 0x62, 0xe7, 0xf0, 0xeb, 0xde, 0xc9, 0x36, 0x93, 0x5d, 0x0e, 0xaa, 0x81, 0x3e, 0x82, 0x26, 0xd4, 0x0d, 0x7f, 0x61, 0x19, 0xbf, 0xd9, 0x40, 0x60, 0x23, 0x80, 0xc8, 0x67, 0x21, 0xe6, 0x1d, 0xb1, 0x83, 0x0f, 0x51, 0xe1, 0x39, 0xf2, 0x10, 0x00, 0x0b, 0xce, 0xc0, 0xd8, 0xed, 0xd3, 0x9e, 0x54, 0xd7, 0x3a, 0x9a, 0x12, 0x9f, 0x95, 0xcd, 0x5f, 0xa9, 0x79,
3609*f0865ec9SKyle Evans };
3610*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_20_test_vector_our_pub_key[] = {
3611*f0865ec9SKyle Evans 	0x00, 0x18, 0x9a, 0x5e, 0xe3, 0x4d, 0xe7, 0xe3, 0x5a, 0xef, 0xea, 0xee, 0xf9, 0x22, 0x0c, 0x18, 0x07, 0x1b, 0x4c, 0x29, 0xa4, 0xc3, 0xbd, 0x9d, 0x95, 0x44, 0x58, 0xbd, 0x3e, 0x82, 0xa7, 0xa3, 0x4d, 0xa3, 0x4c, 0xff, 0x55, 0x79, 0xb8, 0x10, 0x1c, 0x06, 0x5b, 0x1f, 0x2f, 0x52, 0x7c, 0xf4, 0x58, 0x15, 0x01, 0xe2, 0x8e, 0xf5, 0x67, 0x18, 0x73, 0xe6, 0x52, 0x67, 0x73, 0x3d, 0x00, 0x35, 0x20, 0xaf, 0x01, 0xeb, 0x4b, 0xc5, 0x0a, 0x7b, 0x4d, 0x45, 0x99, 0xd7, 0xe3, 0xfa, 0x77, 0x3d, 0xdb, 0x9e, 0xb2, 0x52, 0xc9, 0xb3, 0x42, 0x28, 0x72, 0xe5, 0x44, 0xbd, 0xf7, 0x5c, 0x7b, 0xf6, 0x0f, 0x51, 0x66, 0xdd, 0xc1, 0x1e, 0xb0, 0x8f, 0xa7, 0xc3, 0x08, 0x22, 0xda, 0xba, 0xee, 0x37, 0x3a, 0xb4, 0x68, 0xeb, 0x2d, 0x92, 0x2e, 0x48, 0x4e, 0x2a, 0x52, 0x7f, 0xff, 0x2e, 0xbb, 0x80, 0x4b, 0x7d, 0x9a, 0x37,
3612*f0865ec9SKyle Evans };
3613*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_20_test_vector_shared_secret[] = {
3614*f0865ec9SKyle Evans 	0x01, 0x5d, 0x61, 0x3e, 0x26, 0x7a, 0x36, 0x34, 0x2e, 0x0d, 0x12, 0x5c, 0xda, 0xd6, 0x43, 0xd8, 0x0d, 0x97, 0xed, 0x06, 0x00, 0xaf, 0xb9, 0xe6, 0xb9, 0x54, 0x5c, 0x9e, 0x64, 0xa9, 0x8c, 0xc6, 0xda, 0x7c, 0x5a, 0xaa, 0x3a, 0x8d, 0xa0, 0xbd, 0xd9, 0xdd, 0x3b, 0x97, 0xe9, 0x78, 0x82, 0x18, 0xa8, 0x0a, 0xba, 0xfc, 0x10, 0x6e, 0xf0, 0x65, 0xc8, 0xf1, 0xc4, 0xe1, 0x11, 0x9e, 0xf5, 0x8d, 0x29, 0x8b,
3615*f0865ec9SKyle Evans };
3616*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_20_test_case = {
3617*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 20",
3618*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3619*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3620*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_20_test_vector_our_priv_key,
3621*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_our_priv_key),
3622*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_20_test_vector_peer_pub_key,
3623*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_peer_pub_key),
3624*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_20_test_vector_our_pub_key,
3625*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_our_pub_key),
3626*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_20_test_vector_shared_secret,
3627*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_20_test_vector_shared_secret),
3628*f0865ec9SKyle Evans };
3629*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3630*f0865ec9SKyle Evans 
3631*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3632*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_21
3633*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3634*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_21_test_vector_our_priv_key[] = {
3635*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0xf2, 0x66, 0x1a, 0xc7, 0x62, 0xf6, 0x0c, 0x5f, 0xff, 0x23, 0xbe, 0x5d, 0x96, 0x9c, 0xcd, 0x4e, 0xc6, 0xf9, 0x8e, 0x4e, 0x72, 0x61, 0x8d, 0x12, 0xbd, 0xcd, 0xb9, 0xb4, 0x10, 0x21, 0x62, 0x33, 0x37, 0x88, 0xc0, 0xba, 0xe5, 0x9f, 0x91, 0xcd, 0xfc, 0x17, 0x2c, 0x7a, 0x16, 0x81, 0xee, 0x44, 0xd9, 0x6a, 0xb2, 0x13, 0x5a, 0x6e, 0x5f, 0x34, 0x15, 0xeb, 0xbc, 0xd5, 0x51, 0x65, 0xb1, 0xaf, 0xb0,
3636*f0865ec9SKyle Evans };
3637*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_21_test_vector_peer_pub_key[] = {
3638*f0865ec9SKyle Evans 	0x01, 0x6d, 0xac, 0xff, 0xa1, 0x83, 0xe5, 0x30, 0x30, 0x83, 0xa3, 0x34, 0xf7, 0x65, 0xde, 0x72, 0x4e, 0xc5, 0xec, 0x94, 0x02, 0x02, 0x6d, 0x47, 0x97, 0x88, 0x4a, 0x98, 0x28, 0xa0, 0xd3, 0x21, 0xa8, 0xcf, 0xac, 0x74, 0xab, 0x73, 0x7f, 0xe2, 0x0a, 0x7d, 0x6b, 0xef, 0xcf, 0xc7, 0x3b, 0x6a, 0x35, 0xc1, 0xc7, 0xb0, 0x1d, 0x37, 0x3e, 0x31, 0xab, 0xc1, 0x92, 0xd4, 0x8a, 0x42, 0x41, 0xa3, 0x58, 0x03, 0x01, 0x1e, 0x53, 0x27, 0xca, 0xc2, 0x2d, 0x30, 0x5e, 0x71, 0x56, 0xe5, 0x59, 0x17, 0x6e, 0x19, 0xbe, 0xe7, 0xe4, 0xf2, 0xf5, 0x9e, 0x86, 0xf1, 0xa9, 0xd0, 0xb6, 0x60, 0x3b, 0x6a, 0x7d, 0xf1, 0x06, 0x9b, 0xde, 0x63, 0x87, 0xfe, 0xb7, 0x15, 0x87, 0xb8, 0xff, 0xce, 0x5b, 0x26, 0x6e, 0x1b, 0xae, 0x86, 0xde, 0x29, 0x37, 0x8a, 0x34, 0xe5, 0xc7, 0x4b, 0x67, 0x24, 0xc4, 0xd4, 0x0a, 0x71, 0x99, 0x23,
3639*f0865ec9SKyle Evans };
3640*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_21_test_vector_our_pub_key[] = {
3641*f0865ec9SKyle Evans 	0x00, 0xa8, 0xe2, 0x5a, 0x69, 0x02, 0xd6, 0x87, 0xb4, 0x78, 0x7c, 0xdc, 0x94, 0xc3, 0x64, 0xac, 0x7c, 0xec, 0xc5, 0xc4, 0x95, 0x48, 0x3e, 0xd3, 0x63, 0xdc, 0x0a, 0xa9, 0x5e, 0xe2, 0xbd, 0x73, 0x9c, 0x4c, 0x4d, 0x46, 0xb1, 0x70, 0x06, 0xc7, 0x28, 0xb0, 0x76, 0x35, 0x0d, 0x7d, 0x7e, 0x54, 0xc6, 0x82, 0x2f, 0x52, 0xf4, 0x71, 0x62, 0xa2, 0x51, 0x09, 0xaa, 0xab, 0xa6, 0x90, 0xca, 0xb6, 0x96, 0xec, 0x01, 0x68, 0xd2, 0xf0, 0x8f, 0xe1, 0x9e, 0x4d, 0xc9, 0xee, 0x7a, 0x19, 0x5b, 0x03, 0xc9, 0xf7, 0xfe, 0x66, 0x76, 0xf9, 0xf5, 0x20, 0xb6, 0x27, 0x05, 0x57, 0x50, 0x4e, 0x72, 0xca, 0x43, 0x94, 0xa2, 0xc6, 0x91, 0x86, 0x25, 0xe1, 0x5a, 0xc0, 0xc5, 0x1b, 0x8f, 0x95, 0xcd, 0x56, 0x01, 0x23, 0x65, 0x3f, 0xb8, 0xe8, 0xee, 0x6d, 0xb9, 0x61, 0xe2, 0xc4, 0xc6, 0x2c, 0xc5, 0x4e, 0x92, 0xe2, 0xa2, 0xa9,
3642*f0865ec9SKyle Evans };
3643*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_21_test_vector_shared_secret[] = {
3644*f0865ec9SKyle Evans 	0x01, 0x4d, 0x60, 0x82, 0xa3, 0xb5, 0xce, 0xd1, 0xab, 0x8c, 0xa2, 0x65, 0xa8, 0x10, 0x6f, 0x30, 0x21, 0x46, 0xc4, 0xac, 0xb8, 0xc3, 0x0b, 0xb1, 0x4a, 0x4c, 0x99, 0x1e, 0x3c, 0x82, 0xa9, 0x73, 0x12, 0x88, 0xbd, 0xb9, 0x1e, 0x0e, 0x85, 0xbd, 0xa3, 0x13, 0x91, 0x2d, 0x06, 0x38, 0x4f, 0xc4, 0x4f, 0x21, 0x53, 0xfb, 0x13, 0x50, 0x6f, 0xa9, 0xcf, 0x43, 0xc9, 0xaa, 0xb5, 0x75, 0x09, 0x88, 0xc9, 0x43,
3645*f0865ec9SKyle Evans };
3646*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_21_test_case = {
3647*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 21",
3648*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3649*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3650*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_21_test_vector_our_priv_key,
3651*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_our_priv_key),
3652*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_21_test_vector_peer_pub_key,
3653*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_peer_pub_key),
3654*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_21_test_vector_our_pub_key,
3655*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_our_pub_key),
3656*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_21_test_vector_shared_secret,
3657*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_21_test_vector_shared_secret),
3658*f0865ec9SKyle Evans };
3659*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3660*f0865ec9SKyle Evans 
3661*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3662*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_22
3663*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3664*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_22_test_vector_our_priv_key[] = {
3665*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0xf4, 0x30, 0xca, 0x12, 0x61, 0xf0, 0x96, 0x81, 0xa9, 0x28, 0x2e, 0x9e, 0x97, 0x0a, 0x92, 0x34, 0x22, 0x7b, 0x1d, 0x5e, 0x58, 0xd5, 0x58, 0xc3, 0xcc, 0x6e, 0xff, 0x44, 0xd1, 0xbd, 0xf5, 0x3d, 0xe1, 0x6a, 0xd5, 0xee, 0x2b, 0x18, 0xb9, 0x2d, 0x62, 0xfc, 0x79, 0x58, 0x61, 0x16, 0xb0, 0xef, 0xc1, 0x5f, 0x79, 0x34, 0x0f, 0xb7, 0xea, 0xf5, 0xce, 0x6c, 0x44, 0x34, 0x1d, 0xcf, 0x8d, 0xde, 0x27,
3666*f0865ec9SKyle Evans };
3667*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_22_test_vector_peer_pub_key[] = {
3668*f0865ec9SKyle Evans 	0x00, 0xa0, 0x91, 0x42, 0x1d, 0x37, 0x03, 0xe3, 0xb3, 0x41, 0xe9, 0xf1, 0xe7, 0xd5, 0x8f, 0x8c, 0xf7, 0xbd, 0xbd, 0x17, 0x98, 0xd0, 0x01, 0x96, 0x7b, 0x80, 0x1d, 0x1c, 0xec, 0x27, 0xe6, 0x05, 0xc5, 0x80, 0xb2, 0x38, 0x7c, 0x1c, 0xb4, 0x64, 0xf5, 0x5c, 0xe7, 0xac, 0x80, 0x33, 0x41, 0x02, 0xab, 0x03, 0xcf, 0xb8, 0x6d, 0x88, 0xaf, 0x76, 0xc9, 0xf4, 0x12, 0x9c, 0x01, 0xbe, 0xdd, 0x3b, 0xbf, 0xc4, 0x00, 0x8c, 0x9c, 0x57, 0x7a, 0x8e, 0x6f, 0xc4, 0x46, 0x81, 0x5e, 0x9d, 0x40, 0xba, 0xa6, 0x60, 0x25, 0xf1, 0x5d, 0xae, 0x28, 0x5f, 0x19, 0xeb, 0x66, 0x8e, 0xe6, 0x0a, 0xe9, 0xc9, 0x8e, 0x7e, 0xcd, 0xbf, 0x2b, 0x2a, 0x68, 0xe2, 0x29, 0x28, 0x05, 0x9f, 0x67, 0xdb, 0x18, 0x80, 0x07, 0x16, 0x1d, 0x3e, 0xcf, 0x39, 0x7e, 0x08, 0x83, 0xf0, 0xc4, 0xeb, 0x7e, 0xaf, 0x78, 0x27, 0xa6, 0x22, 0x05, 0xcc,
3669*f0865ec9SKyle Evans };
3670*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_22_test_vector_our_pub_key[] = {
3671*f0865ec9SKyle Evans 	0x00, 0x6c, 0x1d, 0x9b, 0x5e, 0xca, 0x87, 0xde, 0x1f, 0xb8, 0x71, 0xa0, 0xa3, 0x2f, 0x80, 0x7c, 0x72, 0x5a, 0xdc, 0xcd, 0xe9, 0xb3, 0x96, 0x74, 0x53, 0xa7, 0x13, 0x47, 0xd6, 0x08, 0xf0, 0xc0, 0x30, 0xcd, 0x09, 0xe3, 0x38, 0xcd, 0xec, 0xbf, 0x4a, 0x02, 0x01, 0x5b, 0xc8, 0xa6, 0xe8, 0xd3, 0xe2, 0x59, 0x5f, 0xe7, 0x73, 0xff, 0xc2, 0xfc, 0x4e, 0x4a, 0x55, 0xd0, 0xb1, 0xa2, 0xcc, 0x00, 0x32, 0x3b, 0x01, 0x14, 0x1b, 0x21, 0x09, 0xe7, 0xf4, 0x98, 0x1c, 0x95, 0x2a, 0xa8, 0x18, 0xa2, 0xb9, 0xf6, 0xf5, 0xc4, 0x1f, 0xec, 0xcd, 0xb7, 0xa7, 0xa4, 0x5b, 0x9b, 0x4b, 0x67, 0x29, 0x37, 0x77, 0x1b, 0x00, 0x8c, 0xae, 0x5f, 0x93, 0x4d, 0xfe, 0x3f, 0xed, 0x10, 0xd3, 0x83, 0xab, 0x1f, 0x38, 0x76, 0x9c, 0x92, 0xce, 0x88, 0xd9, 0xbe, 0x54, 0x14, 0x81, 0x7e, 0xcb, 0x07, 0x3a, 0x31, 0xab, 0x36, 0x8c, 0xcb,
3672*f0865ec9SKyle Evans };
3673*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_22_test_vector_shared_secret[] = {
3674*f0865ec9SKyle Evans 	0x00, 0x20, 0xc0, 0x07, 0x47, 0xcb, 0x8d, 0x49, 0x2f, 0xd4, 0x97, 0xe0, 0xfe, 0xc5, 0x46, 0x44, 0xbf, 0x02, 0x7d, 0x41, 0x8a, 0xb6, 0x86, 0x38, 0x1f, 0x10, 0x97, 0x12, 0xa9, 0x9c, 0xab, 0xe3, 0x28, 0xb9, 0x74, 0x3d, 0x22, 0x25, 0x83, 0x6f, 0x9a, 0xd6, 0x6e, 0x5d, 0x7f, 0xed, 0x1d, 0xe2, 0x47, 0xe0, 0xda, 0x92, 0xf6, 0x0d, 0x5b, 0x31, 0xf9, 0xe4, 0x76, 0x72, 0xe5, 0x7f, 0x71, 0x05, 0x98, 0xf4,
3675*f0865ec9SKyle Evans };
3676*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_22_test_case = {
3677*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 22",
3678*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3679*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3680*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_22_test_vector_our_priv_key,
3681*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_our_priv_key),
3682*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_22_test_vector_peer_pub_key,
3683*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_peer_pub_key),
3684*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_22_test_vector_our_pub_key,
3685*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_our_pub_key),
3686*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_22_test_vector_shared_secret,
3687*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_22_test_vector_shared_secret),
3688*f0865ec9SKyle Evans };
3689*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3690*f0865ec9SKyle Evans 
3691*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3692*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_23
3693*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3694*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_23_test_vector_our_priv_key[] = {
3695*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0x5d, 0xc3, 0x3a, 0xed, 0xa0, 0x3c, 0x2e, 0xb2, 0x33, 0x01, 0x4e, 0xe4, 0x68, 0xdf, 0xf7, 0x53, 0xb7, 0x2f, 0x73, 0xb0, 0x09, 0x91, 0x04, 0x3e, 0xa3, 0x53, 0x82, 0x8a, 0xe6, 0x9d, 0x4c, 0xd0, 0xfa, 0xde, 0xda, 0x7b, 0xb2, 0x78, 0xb5, 0x35, 0xd7, 0xc5, 0x74, 0x06, 0xff, 0x2e, 0x6e, 0x47, 0x3a, 0x5a, 0x4f, 0xf9, 0x8e, 0x90, 0xf9, 0x0d, 0x6d, 0xad, 0xd2, 0x51, 0x00, 0xe8, 0xd8, 0x56, 0x66,
3696*f0865ec9SKyle Evans };
3697*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_23_test_vector_peer_pub_key[] = {
3698*f0865ec9SKyle Evans 	0x00, 0x4f, 0x38, 0x81, 0x66, 0x81, 0x77, 0x12, 0x89, 0xce, 0x0c, 0xb8, 0x3a, 0x5e, 0x29, 0xa1, 0xab, 0x06, 0xfc, 0x91, 0xf7, 0x86, 0x99, 0x4b, 0x23, 0x70, 0x8f, 0xf0, 0x8a, 0x08, 0xa0, 0xf6, 0x75, 0xb8, 0x09, 0xae, 0x99, 0xe9, 0xf9, 0x96, 0x7e, 0xb1, 0xa4, 0x9f, 0x19, 0x60, 0x57, 0xd6, 0x9e, 0x50, 0xd6, 0xde, 0xdb, 0x4d, 0xd2, 0xd9, 0xa8, 0x1c, 0x02, 0xbd, 0xcc, 0x8f, 0x7f, 0x51, 0x84, 0x60, 0x00, 0x9e, 0xfb, 0x24, 0x4c, 0x8b, 0x91, 0x08, 0x7d, 0xe1, 0xee, 0xd7, 0x66, 0x50, 0x0f, 0x0e, 0x81, 0x53, 0x07, 0x52, 0xd4, 0x69, 0x25, 0x6e, 0xf7, 0x9f, 0x6b, 0x96, 0x5d, 0x8a, 0x22, 0x32, 0xa0, 0xc2, 0xdb, 0xc4, 0xe8, 0xe1, 0xd0, 0x92, 0x14, 0xba, 0xb3, 0x84, 0x85, 0xbe, 0x6e, 0x35, 0x7c, 0x42, 0x00, 0xd0, 0x73, 0xb5, 0x2f, 0x04, 0xe4, 0xa1, 0x6f, 0xc6, 0xf5, 0x24, 0x71, 0x87, 0xae, 0xcb,
3699*f0865ec9SKyle Evans };
3700*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_23_test_vector_our_pub_key[] = {
3701*f0865ec9SKyle Evans 	0x00, 0xc8, 0x25, 0xba, 0x30, 0x73, 0x73, 0xce, 0xc8, 0xdd, 0x24, 0x98, 0xee, 0xf8, 0x2e, 0x21, 0xfd, 0x98, 0x62, 0x16, 0x8d, 0xbf, 0xeb, 0x83, 0x59, 0x39, 0x80, 0xca, 0x9f, 0x82, 0x87, 0x53, 0x33, 0x89, 0x9f, 0xe9, 0x4f, 0x13, 0x7d, 0xaf, 0x1c, 0x41, 0x89, 0xeb, 0x50, 0x29, 0x37, 0xc3, 0xa3, 0x67, 0xea, 0x79, 0x51, 0xed, 0x8b, 0x0f, 0x33, 0x77, 0xfc, 0xdf, 0x29, 0x22, 0x02, 0x1d, 0x46, 0xa5, 0x01, 0x6b, 0x8a, 0x25, 0x40, 0xd5, 0xe6, 0x54, 0x93, 0x88, 0x8b, 0xc3, 0x37, 0x24, 0x9e, 0x67, 0xc0, 0xa6, 0x87, 0x74, 0xf3, 0xe8, 0xd8, 0x1e, 0x3b, 0x45, 0x74, 0xa0, 0x12, 0x51, 0x65, 0xf0, 0xbd, 0x58, 0xb8, 0xaf, 0x9d, 0xe7, 0x4b, 0x35, 0x83, 0x25, 0x39, 0xf9, 0x5c, 0x3c, 0xd9, 0xf1, 0xb7, 0x59, 0x40, 0x85, 0x60, 0xaa, 0x68, 0x51, 0xae, 0x3a, 0xc7, 0x55, 0x53, 0x47, 0xb0, 0xd3, 0xb1, 0x3b,
3702*f0865ec9SKyle Evans };
3703*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_23_test_vector_shared_secret[] = {
3704*f0865ec9SKyle Evans 	0x00, 0xc2, 0xbf, 0xaf, 0xcd, 0x7f, 0xbd, 0x3e, 0x2f, 0xd1, 0xc7, 0x50, 0xfd, 0xea, 0x61, 0xe7, 0x0b, 0xd4, 0x78, 0x7a, 0x7e, 0x68, 0x46, 0x8c, 0x57, 0x4e, 0xe9, 0x9e, 0xbc, 0x47, 0xee, 0xde, 0xf0, 0x64, 0xe8, 0x94, 0x4a, 0x73, 0xbc, 0xb7, 0x91, 0x3d, 0xba, 0xb5, 0xd9, 0x3d, 0xca, 0x66, 0x0d, 0x21, 0x6c, 0x55, 0x36, 0x22, 0x36, 0x27, 0x94, 0xf7, 0xa2, 0xac, 0xc7, 0x10, 0x22, 0xbd, 0xb1, 0x6f,
3705*f0865ec9SKyle Evans };
3706*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_23_test_case = {
3707*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 23",
3708*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3709*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3710*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_23_test_vector_our_priv_key,
3711*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_our_priv_key),
3712*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_23_test_vector_peer_pub_key,
3713*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_peer_pub_key),
3714*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_23_test_vector_our_pub_key,
3715*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_our_pub_key),
3716*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_23_test_vector_shared_secret,
3717*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_23_test_vector_shared_secret),
3718*f0865ec9SKyle Evans };
3719*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3720*f0865ec9SKyle Evans 
3721*f0865ec9SKyle Evans #ifdef WITH_CURVE_SECP521R1
3722*f0865ec9SKyle Evans #define ECCCDH_SECP521R1_SELF_TEST_24
3723*f0865ec9SKyle Evans /*** Tests for ECCCDH/SECP521R1 ***/
3724*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_24_test_vector_our_priv_key[] = {
3725*f0865ec9SKyle Evans 	0x00, 0x00, 0x00, 0xdf, 0x14, 0xb1, 0xf1, 0x43, 0x2a, 0x7b, 0x0f, 0xb0, 0x53, 0x96, 0x5f, 0xd8, 0x64, 0x3a, 0xfe, 0xe2, 0x6b, 0x24, 0x51, 0xec, 0xb6, 0xa8, 0xa5, 0x3a, 0x65, 0x5d, 0x5f, 0xbe, 0x16, 0xe4, 0xc6, 0x4c, 0xe8, 0x64, 0x72, 0x25, 0xeb, 0x11, 0xe7, 0xfd, 0xcb, 0x23, 0x62, 0x74, 0x71, 0xdf, 0xfc, 0x5c, 0x25, 0x23, 0xbd, 0x2a, 0xe8, 0x99, 0x57, 0xcb, 0xa3, 0xa5, 0x7a, 0x23, 0x93, 0x3e, 0x5a, 0x78,
3726*f0865ec9SKyle Evans };
3727*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_24_test_vector_peer_pub_key[] = {
3728*f0865ec9SKyle Evans 	0x01, 0xa3, 0x20, 0x99, 0xb0, 0x2c, 0x0b, 0xd8, 0x53, 0x71, 0xf6, 0x0b, 0x0d, 0xd2, 0x08, 0x90, 0xe6, 0xc7, 0xaf, 0x04, 0x8c, 0x81, 0x79, 0x89, 0x0f, 0xda, 0x30, 0x8b, 0x35, 0x9d, 0xbb, 0xc2, 0xb7, 0xa8, 0x32, 0xbb, 0x8c, 0x65, 0x26, 0xc4, 0xaf, 0x99, 0xa7, 0xea, 0x3f, 0x0b, 0x3c, 0xb9, 0x6a, 0xe1, 0xeb, 0x76, 0x84, 0x13, 0x27, 0x95, 0xc4, 0x78, 0xad, 0x6f, 0x96, 0x2e, 0x4a, 0x6f, 0x44, 0x6d, 0x01, 0x76, 0x27, 0x35, 0x7b, 0x39, 0xe9, 0xd7, 0x63, 0x2a, 0x13, 0x70, 0xb3, 0xe9, 0x3c, 0x1a, 0xfb, 0x5c, 0x85, 0x1b, 0x91, 0x0e, 0xb4, 0xea, 0xd0, 0xc9, 0xd3, 0x87, 0xdf, 0x67, 0xcd, 0xe8, 0x50, 0x03, 0xe0, 0xe4, 0x27, 0x55, 0x2f, 0x1c, 0xd0, 0x90, 0x59, 0xaa, 0xd0, 0x26, 0x2e, 0x23, 0x5c, 0xce, 0x5f, 0xba, 0x8c, 0xed, 0xc4, 0xfd, 0xc1, 0x46, 0x3d, 0xa7, 0x6d, 0xcd, 0x4b, 0x6d, 0x1a, 0x46,
3729*f0865ec9SKyle Evans };
3730*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_24_test_vector_our_pub_key[] = {
3731*f0865ec9SKyle Evans 	0x00, 0x4e, 0x85, 0x83, 0xbb, 0xbb, 0x2e, 0xcd, 0x93, 0xf0, 0x71, 0x4c, 0x33, 0x2d, 0xff, 0x5a, 0xb3, 0xbc, 0x63, 0x96, 0xe6, 0x2f, 0x3c, 0x56, 0x02, 0x29, 0x66, 0x43, 0x29, 0xba, 0xa5, 0x13, 0x8c, 0x3b, 0xb1, 0xc3, 0x64, 0x28, 0xab, 0xd4, 0xe2, 0x3d, 0x17, 0xfc, 0xb7, 0xa2, 0xcf, 0xcc, 0x22, 0x4b, 0x2e, 0x73, 0x4c, 0x89, 0x41, 0xf6, 0xf1, 0x21, 0x72, 0x2d, 0x7b, 0x6b, 0x94, 0x15, 0x45, 0x76, 0x01, 0xcf, 0x08, 0x74, 0xf2, 0x04, 0xb0, 0x36, 0x3f, 0x02, 0x08, 0x64, 0x67, 0x2f, 0xad, 0xbf, 0x87, 0xc8, 0x81, 0x1e, 0xb1, 0x47, 0x75, 0x8b, 0x25, 0x4b, 0x74, 0xb1, 0x4f, 0xae, 0x74, 0x21, 0x59, 0xf0, 0xf6, 0x71, 0xa0, 0x18, 0x21, 0x2b, 0xbf, 0x25, 0xb8, 0x51, 0x9e, 0x12, 0x6d, 0x4c, 0xad, 0x77, 0x8c, 0xff, 0xf5, 0x0d, 0x28, 0x8f, 0xd3, 0x9c, 0xeb, 0x0c, 0xac, 0x63, 0x5b, 0x17, 0x5e, 0xc0,
3732*f0865ec9SKyle Evans };
3733*f0865ec9SKyle Evans static const u8 ecccdh_SECP521R1_24_test_vector_shared_secret[] = {
3734*f0865ec9SKyle Evans 	0x01, 0xaa, 0xf2, 0x4e, 0x5d, 0x47, 0xe4, 0x08, 0x0c, 0x18, 0xc5, 0x5e, 0xa3, 0x55, 0x81, 0xcd, 0x8d, 0xa3, 0x0f, 0x1a, 0x07, 0x95, 0x65, 0x04, 0x5d, 0x20, 0x08, 0xd5, 0x1b, 0x12, 0xd0, 0xab, 0xb4, 0x41, 0x1c, 0xda, 0x7a, 0x07, 0x85, 0xb1, 0x5d, 0x14, 0x9e, 0xd3, 0x01, 0xa3, 0x69, 0x70, 0x62, 0xf4, 0x2d, 0xa2, 0x37, 0xaa, 0x7f, 0x07, 0xe0, 0xaf, 0x3f, 0xd0, 0x0e, 0xb1, 0x80, 0x0d, 0x9c, 0x41,
3735*f0865ec9SKyle Evans };
3736*f0865ec9SKyle Evans static const ecdh_test_case ecccdh_SECP521R1_24_test_case = {
3737*f0865ec9SKyle Evans 	.name = "ECCCDH/SECP521R1 24",
3738*f0865ec9SKyle Evans 	.ecdh_type = ECCCDH,
3739*f0865ec9SKyle Evans 	.ec_str_p = &secp521r1_str_params,
3740*f0865ec9SKyle Evans 	.our_priv_key = ecccdh_SECP521R1_24_test_vector_our_priv_key,
3741*f0865ec9SKyle Evans 	.our_priv_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_our_priv_key),
3742*f0865ec9SKyle Evans 	.peer_pub_key = ecccdh_SECP521R1_24_test_vector_peer_pub_key,
3743*f0865ec9SKyle Evans 	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_peer_pub_key),
3744*f0865ec9SKyle Evans 	.exp_our_pub_key = ecccdh_SECP521R1_24_test_vector_our_pub_key,
3745*f0865ec9SKyle Evans 	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_our_pub_key),
3746*f0865ec9SKyle Evans 	.exp_shared_secret = ecccdh_SECP521R1_24_test_vector_shared_secret,
3747*f0865ec9SKyle Evans 	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_24_test_vector_shared_secret),
3748*f0865ec9SKyle Evans };
3749*f0865ec9SKyle Evans #endif /* WITH_CURVE_SECP521R1 */
3750*f0865ec9SKyle Evans 
3751