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