/ external / libecc / src / tests / ecccdh_test_vectors.h
ecccdh_test_vectors.h
   1  #ifdef WITH_CURVE_SECP192R1
   2  #define ECCCDH_SECP192R1_SELF_TEST_0
   3  /*** Tests for ECCCDH/SECP192R1 ***/
   4  static const u8 ecccdh_SECP192R1_0_test_vector_our_priv_key[] = {
   5  	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  };
   7  static const u8 ecccdh_SECP192R1_0_test_vector_peer_pub_key[] = {
   8  	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  };
  10  static const u8 ecccdh_SECP192R1_0_test_vector_our_pub_key[] = {
  11  	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  };
  13  static const u8 ecccdh_SECP192R1_0_test_vector_shared_secret[] = {
  14  	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  };
  16  static const ecdh_test_case ecccdh_SECP192R1_0_test_case = {
  17  	.name = "ECCCDH/SECP192R1 0",
  18  	.ecdh_type = ECCCDH,
  19  	.ec_str_p = &secp192r1_str_params,
  20  	.our_priv_key = ecccdh_SECP192R1_0_test_vector_our_priv_key,
  21  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_our_priv_key),
  22  	.peer_pub_key = ecccdh_SECP192R1_0_test_vector_peer_pub_key,
  23  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_peer_pub_key),
  24  	.exp_our_pub_key = ecccdh_SECP192R1_0_test_vector_our_pub_key,
  25  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_0_test_vector_our_pub_key),
  26  	.exp_shared_secret = ecccdh_SECP192R1_0_test_vector_shared_secret,
  27  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_0_test_vector_shared_secret),
  28  };
  29  #endif /* WITH_CURVE_SECP192R1 */
  30  
  31  #ifdef WITH_CURVE_SECP192R1
  32  #define ECCCDH_SECP192R1_SELF_TEST_1
  33  /*** Tests for ECCCDH/SECP192R1 ***/
  34  static const u8 ecccdh_SECP192R1_1_test_vector_our_priv_key[] = {
  35  	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  };
  37  static const u8 ecccdh_SECP192R1_1_test_vector_peer_pub_key[] = {
  38  	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  };
  40  static const u8 ecccdh_SECP192R1_1_test_vector_our_pub_key[] = {
  41  	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  };
  43  static const u8 ecccdh_SECP192R1_1_test_vector_shared_secret[] = {
  44  	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  };
  46  static const ecdh_test_case ecccdh_SECP192R1_1_test_case = {
  47  	.name = "ECCCDH/SECP192R1 1",
  48  	.ecdh_type = ECCCDH,
  49  	.ec_str_p = &secp192r1_str_params,
  50  	.our_priv_key = ecccdh_SECP192R1_1_test_vector_our_priv_key,
  51  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_our_priv_key),
  52  	.peer_pub_key = ecccdh_SECP192R1_1_test_vector_peer_pub_key,
  53  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_peer_pub_key),
  54  	.exp_our_pub_key = ecccdh_SECP192R1_1_test_vector_our_pub_key,
  55  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_1_test_vector_our_pub_key),
  56  	.exp_shared_secret = ecccdh_SECP192R1_1_test_vector_shared_secret,
  57  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_1_test_vector_shared_secret),
  58  };
  59  #endif /* WITH_CURVE_SECP192R1 */
  60  
  61  #ifdef WITH_CURVE_SECP192R1
  62  #define ECCCDH_SECP192R1_SELF_TEST_2
  63  /*** Tests for ECCCDH/SECP192R1 ***/
  64  static const u8 ecccdh_SECP192R1_2_test_vector_our_priv_key[] = {
  65  	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  };
  67  static const u8 ecccdh_SECP192R1_2_test_vector_peer_pub_key[] = {
  68  	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  };
  70  static const u8 ecccdh_SECP192R1_2_test_vector_our_pub_key[] = {
  71  	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  };
  73  static const u8 ecccdh_SECP192R1_2_test_vector_shared_secret[] = {
  74  	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  };
  76  static const ecdh_test_case ecccdh_SECP192R1_2_test_case = {
  77  	.name = "ECCCDH/SECP192R1 2",
  78  	.ecdh_type = ECCCDH,
  79  	.ec_str_p = &secp192r1_str_params,
  80  	.our_priv_key = ecccdh_SECP192R1_2_test_vector_our_priv_key,
  81  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_our_priv_key),
  82  	.peer_pub_key = ecccdh_SECP192R1_2_test_vector_peer_pub_key,
  83  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_peer_pub_key),
  84  	.exp_our_pub_key = ecccdh_SECP192R1_2_test_vector_our_pub_key,
  85  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_2_test_vector_our_pub_key),
  86  	.exp_shared_secret = ecccdh_SECP192R1_2_test_vector_shared_secret,
  87  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_2_test_vector_shared_secret),
  88  };
  89  #endif /* WITH_CURVE_SECP192R1 */
  90  
  91  #ifdef WITH_CURVE_SECP192R1
  92  #define ECCCDH_SECP192R1_SELF_TEST_3
  93  /*** Tests for ECCCDH/SECP192R1 ***/
  94  static const u8 ecccdh_SECP192R1_3_test_vector_our_priv_key[] = {
  95  	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  };
  97  static const u8 ecccdh_SECP192R1_3_test_vector_peer_pub_key[] = {
  98  	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  };
 100  static const u8 ecccdh_SECP192R1_3_test_vector_our_pub_key[] = {
 101  	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  };
 103  static const u8 ecccdh_SECP192R1_3_test_vector_shared_secret[] = {
 104  	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  };
 106  static const ecdh_test_case ecccdh_SECP192R1_3_test_case = {
 107  	.name = "ECCCDH/SECP192R1 3",
 108  	.ecdh_type = ECCCDH,
 109  	.ec_str_p = &secp192r1_str_params,
 110  	.our_priv_key = ecccdh_SECP192R1_3_test_vector_our_priv_key,
 111  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_our_priv_key),
 112  	.peer_pub_key = ecccdh_SECP192R1_3_test_vector_peer_pub_key,
 113  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_peer_pub_key),
 114  	.exp_our_pub_key = ecccdh_SECP192R1_3_test_vector_our_pub_key,
 115  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_3_test_vector_our_pub_key),
 116  	.exp_shared_secret = ecccdh_SECP192R1_3_test_vector_shared_secret,
 117  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_3_test_vector_shared_secret),
 118  };
 119  #endif /* WITH_CURVE_SECP192R1 */
 120  
 121  #ifdef WITH_CURVE_SECP192R1
 122  #define ECCCDH_SECP192R1_SELF_TEST_4
 123  /*** Tests for ECCCDH/SECP192R1 ***/
 124  static const u8 ecccdh_SECP192R1_4_test_vector_our_priv_key[] = {
 125  	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  };
 127  static const u8 ecccdh_SECP192R1_4_test_vector_peer_pub_key[] = {
 128  	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  };
 130  static const u8 ecccdh_SECP192R1_4_test_vector_our_pub_key[] = {
 131  	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  };
 133  static const u8 ecccdh_SECP192R1_4_test_vector_shared_secret[] = {
 134  	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  };
 136  static const ecdh_test_case ecccdh_SECP192R1_4_test_case = {
 137  	.name = "ECCCDH/SECP192R1 4",
 138  	.ecdh_type = ECCCDH,
 139  	.ec_str_p = &secp192r1_str_params,
 140  	.our_priv_key = ecccdh_SECP192R1_4_test_vector_our_priv_key,
 141  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_our_priv_key),
 142  	.peer_pub_key = ecccdh_SECP192R1_4_test_vector_peer_pub_key,
 143  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_peer_pub_key),
 144  	.exp_our_pub_key = ecccdh_SECP192R1_4_test_vector_our_pub_key,
 145  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_4_test_vector_our_pub_key),
 146  	.exp_shared_secret = ecccdh_SECP192R1_4_test_vector_shared_secret,
 147  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_4_test_vector_shared_secret),
 148  };
 149  #endif /* WITH_CURVE_SECP192R1 */
 150  
 151  #ifdef WITH_CURVE_SECP192R1
 152  #define ECCCDH_SECP192R1_SELF_TEST_5
 153  /*** Tests for ECCCDH/SECP192R1 ***/
 154  static const u8 ecccdh_SECP192R1_5_test_vector_our_priv_key[] = {
 155  	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  };
 157  static const u8 ecccdh_SECP192R1_5_test_vector_peer_pub_key[] = {
 158  	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  };
 160  static const u8 ecccdh_SECP192R1_5_test_vector_our_pub_key[] = {
 161  	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  };
 163  static const u8 ecccdh_SECP192R1_5_test_vector_shared_secret[] = {
 164  	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  };
 166  static const ecdh_test_case ecccdh_SECP192R1_5_test_case = {
 167  	.name = "ECCCDH/SECP192R1 5",
 168  	.ecdh_type = ECCCDH,
 169  	.ec_str_p = &secp192r1_str_params,
 170  	.our_priv_key = ecccdh_SECP192R1_5_test_vector_our_priv_key,
 171  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_our_priv_key),
 172  	.peer_pub_key = ecccdh_SECP192R1_5_test_vector_peer_pub_key,
 173  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_peer_pub_key),
 174  	.exp_our_pub_key = ecccdh_SECP192R1_5_test_vector_our_pub_key,
 175  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_5_test_vector_our_pub_key),
 176  	.exp_shared_secret = ecccdh_SECP192R1_5_test_vector_shared_secret,
 177  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_5_test_vector_shared_secret),
 178  };
 179  #endif /* WITH_CURVE_SECP192R1 */
 180  
 181  #ifdef WITH_CURVE_SECP192R1
 182  #define ECCCDH_SECP192R1_SELF_TEST_6
 183  /*** Tests for ECCCDH/SECP192R1 ***/
 184  static const u8 ecccdh_SECP192R1_6_test_vector_our_priv_key[] = {
 185  	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  };
 187  static const u8 ecccdh_SECP192R1_6_test_vector_peer_pub_key[] = {
 188  	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  };
 190  static const u8 ecccdh_SECP192R1_6_test_vector_our_pub_key[] = {
 191  	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  };
 193  static const u8 ecccdh_SECP192R1_6_test_vector_shared_secret[] = {
 194  	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  };
 196  static const ecdh_test_case ecccdh_SECP192R1_6_test_case = {
 197  	.name = "ECCCDH/SECP192R1 6",
 198  	.ecdh_type = ECCCDH,
 199  	.ec_str_p = &secp192r1_str_params,
 200  	.our_priv_key = ecccdh_SECP192R1_6_test_vector_our_priv_key,
 201  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_our_priv_key),
 202  	.peer_pub_key = ecccdh_SECP192R1_6_test_vector_peer_pub_key,
 203  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_peer_pub_key),
 204  	.exp_our_pub_key = ecccdh_SECP192R1_6_test_vector_our_pub_key,
 205  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_6_test_vector_our_pub_key),
 206  	.exp_shared_secret = ecccdh_SECP192R1_6_test_vector_shared_secret,
 207  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_6_test_vector_shared_secret),
 208  };
 209  #endif /* WITH_CURVE_SECP192R1 */
 210  
 211  #ifdef WITH_CURVE_SECP192R1
 212  #define ECCCDH_SECP192R1_SELF_TEST_7
 213  /*** Tests for ECCCDH/SECP192R1 ***/
 214  static const u8 ecccdh_SECP192R1_7_test_vector_our_priv_key[] = {
 215  	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  };
 217  static const u8 ecccdh_SECP192R1_7_test_vector_peer_pub_key[] = {
 218  	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  };
 220  static const u8 ecccdh_SECP192R1_7_test_vector_our_pub_key[] = {
 221  	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  };
 223  static const u8 ecccdh_SECP192R1_7_test_vector_shared_secret[] = {
 224  	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  };
 226  static const ecdh_test_case ecccdh_SECP192R1_7_test_case = {
 227  	.name = "ECCCDH/SECP192R1 7",
 228  	.ecdh_type = ECCCDH,
 229  	.ec_str_p = &secp192r1_str_params,
 230  	.our_priv_key = ecccdh_SECP192R1_7_test_vector_our_priv_key,
 231  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_our_priv_key),
 232  	.peer_pub_key = ecccdh_SECP192R1_7_test_vector_peer_pub_key,
 233  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_peer_pub_key),
 234  	.exp_our_pub_key = ecccdh_SECP192R1_7_test_vector_our_pub_key,
 235  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_7_test_vector_our_pub_key),
 236  	.exp_shared_secret = ecccdh_SECP192R1_7_test_vector_shared_secret,
 237  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_7_test_vector_shared_secret),
 238  };
 239  #endif /* WITH_CURVE_SECP192R1 */
 240  
 241  #ifdef WITH_CURVE_SECP192R1
 242  #define ECCCDH_SECP192R1_SELF_TEST_8
 243  /*** Tests for ECCCDH/SECP192R1 ***/
 244  static const u8 ecccdh_SECP192R1_8_test_vector_our_priv_key[] = {
 245  	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  };
 247  static const u8 ecccdh_SECP192R1_8_test_vector_peer_pub_key[] = {
 248  	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  };
 250  static const u8 ecccdh_SECP192R1_8_test_vector_our_pub_key[] = {
 251  	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  };
 253  static const u8 ecccdh_SECP192R1_8_test_vector_shared_secret[] = {
 254  	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  };
 256  static const ecdh_test_case ecccdh_SECP192R1_8_test_case = {
 257  	.name = "ECCCDH/SECP192R1 8",
 258  	.ecdh_type = ECCCDH,
 259  	.ec_str_p = &secp192r1_str_params,
 260  	.our_priv_key = ecccdh_SECP192R1_8_test_vector_our_priv_key,
 261  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_our_priv_key),
 262  	.peer_pub_key = ecccdh_SECP192R1_8_test_vector_peer_pub_key,
 263  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_peer_pub_key),
 264  	.exp_our_pub_key = ecccdh_SECP192R1_8_test_vector_our_pub_key,
 265  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_8_test_vector_our_pub_key),
 266  	.exp_shared_secret = ecccdh_SECP192R1_8_test_vector_shared_secret,
 267  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_8_test_vector_shared_secret),
 268  };
 269  #endif /* WITH_CURVE_SECP192R1 */
 270  
 271  #ifdef WITH_CURVE_SECP192R1
 272  #define ECCCDH_SECP192R1_SELF_TEST_9
 273  /*** Tests for ECCCDH/SECP192R1 ***/
 274  static const u8 ecccdh_SECP192R1_9_test_vector_our_priv_key[] = {
 275  	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  };
 277  static const u8 ecccdh_SECP192R1_9_test_vector_peer_pub_key[] = {
 278  	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  };
 280  static const u8 ecccdh_SECP192R1_9_test_vector_our_pub_key[] = {
 281  	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  };
 283  static const u8 ecccdh_SECP192R1_9_test_vector_shared_secret[] = {
 284  	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  };
 286  static const ecdh_test_case ecccdh_SECP192R1_9_test_case = {
 287  	.name = "ECCCDH/SECP192R1 9",
 288  	.ecdh_type = ECCCDH,
 289  	.ec_str_p = &secp192r1_str_params,
 290  	.our_priv_key = ecccdh_SECP192R1_9_test_vector_our_priv_key,
 291  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_our_priv_key),
 292  	.peer_pub_key = ecccdh_SECP192R1_9_test_vector_peer_pub_key,
 293  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_peer_pub_key),
 294  	.exp_our_pub_key = ecccdh_SECP192R1_9_test_vector_our_pub_key,
 295  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_9_test_vector_our_pub_key),
 296  	.exp_shared_secret = ecccdh_SECP192R1_9_test_vector_shared_secret,
 297  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_9_test_vector_shared_secret),
 298  };
 299  #endif /* WITH_CURVE_SECP192R1 */
 300  
 301  #ifdef WITH_CURVE_SECP192R1
 302  #define ECCCDH_SECP192R1_SELF_TEST_10
 303  /*** Tests for ECCCDH/SECP192R1 ***/
 304  static const u8 ecccdh_SECP192R1_10_test_vector_our_priv_key[] = {
 305  	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  };
 307  static const u8 ecccdh_SECP192R1_10_test_vector_peer_pub_key[] = {
 308  	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  };
 310  static const u8 ecccdh_SECP192R1_10_test_vector_our_pub_key[] = {
 311  	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  };
 313  static const u8 ecccdh_SECP192R1_10_test_vector_shared_secret[] = {
 314  	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  };
 316  static const ecdh_test_case ecccdh_SECP192R1_10_test_case = {
 317  	.name = "ECCCDH/SECP192R1 10",
 318  	.ecdh_type = ECCCDH,
 319  	.ec_str_p = &secp192r1_str_params,
 320  	.our_priv_key = ecccdh_SECP192R1_10_test_vector_our_priv_key,
 321  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_our_priv_key),
 322  	.peer_pub_key = ecccdh_SECP192R1_10_test_vector_peer_pub_key,
 323  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_peer_pub_key),
 324  	.exp_our_pub_key = ecccdh_SECP192R1_10_test_vector_our_pub_key,
 325  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_10_test_vector_our_pub_key),
 326  	.exp_shared_secret = ecccdh_SECP192R1_10_test_vector_shared_secret,
 327  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_10_test_vector_shared_secret),
 328  };
 329  #endif /* WITH_CURVE_SECP192R1 */
 330  
 331  #ifdef WITH_CURVE_SECP192R1
 332  #define ECCCDH_SECP192R1_SELF_TEST_11
 333  /*** Tests for ECCCDH/SECP192R1 ***/
 334  static const u8 ecccdh_SECP192R1_11_test_vector_our_priv_key[] = {
 335  	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  };
 337  static const u8 ecccdh_SECP192R1_11_test_vector_peer_pub_key[] = {
 338  	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  };
 340  static const u8 ecccdh_SECP192R1_11_test_vector_our_pub_key[] = {
 341  	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  };
 343  static const u8 ecccdh_SECP192R1_11_test_vector_shared_secret[] = {
 344  	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  };
 346  static const ecdh_test_case ecccdh_SECP192R1_11_test_case = {
 347  	.name = "ECCCDH/SECP192R1 11",
 348  	.ecdh_type = ECCCDH,
 349  	.ec_str_p = &secp192r1_str_params,
 350  	.our_priv_key = ecccdh_SECP192R1_11_test_vector_our_priv_key,
 351  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_our_priv_key),
 352  	.peer_pub_key = ecccdh_SECP192R1_11_test_vector_peer_pub_key,
 353  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_peer_pub_key),
 354  	.exp_our_pub_key = ecccdh_SECP192R1_11_test_vector_our_pub_key,
 355  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_11_test_vector_our_pub_key),
 356  	.exp_shared_secret = ecccdh_SECP192R1_11_test_vector_shared_secret,
 357  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_11_test_vector_shared_secret),
 358  };
 359  #endif /* WITH_CURVE_SECP192R1 */
 360  
 361  #ifdef WITH_CURVE_SECP192R1
 362  #define ECCCDH_SECP192R1_SELF_TEST_12
 363  /*** Tests for ECCCDH/SECP192R1 ***/
 364  static const u8 ecccdh_SECP192R1_12_test_vector_our_priv_key[] = {
 365  	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  };
 367  static const u8 ecccdh_SECP192R1_12_test_vector_peer_pub_key[] = {
 368  	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  };
 370  static const u8 ecccdh_SECP192R1_12_test_vector_our_pub_key[] = {
 371  	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  };
 373  static const u8 ecccdh_SECP192R1_12_test_vector_shared_secret[] = {
 374  	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  };
 376  static const ecdh_test_case ecccdh_SECP192R1_12_test_case = {
 377  	.name = "ECCCDH/SECP192R1 12",
 378  	.ecdh_type = ECCCDH,
 379  	.ec_str_p = &secp192r1_str_params,
 380  	.our_priv_key = ecccdh_SECP192R1_12_test_vector_our_priv_key,
 381  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_our_priv_key),
 382  	.peer_pub_key = ecccdh_SECP192R1_12_test_vector_peer_pub_key,
 383  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_peer_pub_key),
 384  	.exp_our_pub_key = ecccdh_SECP192R1_12_test_vector_our_pub_key,
 385  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_12_test_vector_our_pub_key),
 386  	.exp_shared_secret = ecccdh_SECP192R1_12_test_vector_shared_secret,
 387  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_12_test_vector_shared_secret),
 388  };
 389  #endif /* WITH_CURVE_SECP192R1 */
 390  
 391  #ifdef WITH_CURVE_SECP192R1
 392  #define ECCCDH_SECP192R1_SELF_TEST_13
 393  /*** Tests for ECCCDH/SECP192R1 ***/
 394  static const u8 ecccdh_SECP192R1_13_test_vector_our_priv_key[] = {
 395  	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  };
 397  static const u8 ecccdh_SECP192R1_13_test_vector_peer_pub_key[] = {
 398  	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  };
 400  static const u8 ecccdh_SECP192R1_13_test_vector_our_pub_key[] = {
 401  	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  };
 403  static const u8 ecccdh_SECP192R1_13_test_vector_shared_secret[] = {
 404  	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  };
 406  static const ecdh_test_case ecccdh_SECP192R1_13_test_case = {
 407  	.name = "ECCCDH/SECP192R1 13",
 408  	.ecdh_type = ECCCDH,
 409  	.ec_str_p = &secp192r1_str_params,
 410  	.our_priv_key = ecccdh_SECP192R1_13_test_vector_our_priv_key,
 411  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_our_priv_key),
 412  	.peer_pub_key = ecccdh_SECP192R1_13_test_vector_peer_pub_key,
 413  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_peer_pub_key),
 414  	.exp_our_pub_key = ecccdh_SECP192R1_13_test_vector_our_pub_key,
 415  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_13_test_vector_our_pub_key),
 416  	.exp_shared_secret = ecccdh_SECP192R1_13_test_vector_shared_secret,
 417  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_13_test_vector_shared_secret),
 418  };
 419  #endif /* WITH_CURVE_SECP192R1 */
 420  
 421  #ifdef WITH_CURVE_SECP192R1
 422  #define ECCCDH_SECP192R1_SELF_TEST_14
 423  /*** Tests for ECCCDH/SECP192R1 ***/
 424  static const u8 ecccdh_SECP192R1_14_test_vector_our_priv_key[] = {
 425  	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  };
 427  static const u8 ecccdh_SECP192R1_14_test_vector_peer_pub_key[] = {
 428  	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  };
 430  static const u8 ecccdh_SECP192R1_14_test_vector_our_pub_key[] = {
 431  	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  };
 433  static const u8 ecccdh_SECP192R1_14_test_vector_shared_secret[] = {
 434  	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  };
 436  static const ecdh_test_case ecccdh_SECP192R1_14_test_case = {
 437  	.name = "ECCCDH/SECP192R1 14",
 438  	.ecdh_type = ECCCDH,
 439  	.ec_str_p = &secp192r1_str_params,
 440  	.our_priv_key = ecccdh_SECP192R1_14_test_vector_our_priv_key,
 441  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_our_priv_key),
 442  	.peer_pub_key = ecccdh_SECP192R1_14_test_vector_peer_pub_key,
 443  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_peer_pub_key),
 444  	.exp_our_pub_key = ecccdh_SECP192R1_14_test_vector_our_pub_key,
 445  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_14_test_vector_our_pub_key),
 446  	.exp_shared_secret = ecccdh_SECP192R1_14_test_vector_shared_secret,
 447  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_14_test_vector_shared_secret),
 448  };
 449  #endif /* WITH_CURVE_SECP192R1 */
 450  
 451  #ifdef WITH_CURVE_SECP192R1
 452  #define ECCCDH_SECP192R1_SELF_TEST_15
 453  /*** Tests for ECCCDH/SECP192R1 ***/
 454  static const u8 ecccdh_SECP192R1_15_test_vector_our_priv_key[] = {
 455  	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  };
 457  static const u8 ecccdh_SECP192R1_15_test_vector_peer_pub_key[] = {
 458  	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  };
 460  static const u8 ecccdh_SECP192R1_15_test_vector_our_pub_key[] = {
 461  	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  };
 463  static const u8 ecccdh_SECP192R1_15_test_vector_shared_secret[] = {
 464  	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  };
 466  static const ecdh_test_case ecccdh_SECP192R1_15_test_case = {
 467  	.name = "ECCCDH/SECP192R1 15",
 468  	.ecdh_type = ECCCDH,
 469  	.ec_str_p = &secp192r1_str_params,
 470  	.our_priv_key = ecccdh_SECP192R1_15_test_vector_our_priv_key,
 471  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_our_priv_key),
 472  	.peer_pub_key = ecccdh_SECP192R1_15_test_vector_peer_pub_key,
 473  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_peer_pub_key),
 474  	.exp_our_pub_key = ecccdh_SECP192R1_15_test_vector_our_pub_key,
 475  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_15_test_vector_our_pub_key),
 476  	.exp_shared_secret = ecccdh_SECP192R1_15_test_vector_shared_secret,
 477  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_15_test_vector_shared_secret),
 478  };
 479  #endif /* WITH_CURVE_SECP192R1 */
 480  
 481  #ifdef WITH_CURVE_SECP192R1
 482  #define ECCCDH_SECP192R1_SELF_TEST_16
 483  /*** Tests for ECCCDH/SECP192R1 ***/
 484  static const u8 ecccdh_SECP192R1_16_test_vector_our_priv_key[] = {
 485  	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  };
 487  static const u8 ecccdh_SECP192R1_16_test_vector_peer_pub_key[] = {
 488  	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  };
 490  static const u8 ecccdh_SECP192R1_16_test_vector_our_pub_key[] = {
 491  	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  };
 493  static const u8 ecccdh_SECP192R1_16_test_vector_shared_secret[] = {
 494  	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  };
 496  static const ecdh_test_case ecccdh_SECP192R1_16_test_case = {
 497  	.name = "ECCCDH/SECP192R1 16",
 498  	.ecdh_type = ECCCDH,
 499  	.ec_str_p = &secp192r1_str_params,
 500  	.our_priv_key = ecccdh_SECP192R1_16_test_vector_our_priv_key,
 501  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_our_priv_key),
 502  	.peer_pub_key = ecccdh_SECP192R1_16_test_vector_peer_pub_key,
 503  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_peer_pub_key),
 504  	.exp_our_pub_key = ecccdh_SECP192R1_16_test_vector_our_pub_key,
 505  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_16_test_vector_our_pub_key),
 506  	.exp_shared_secret = ecccdh_SECP192R1_16_test_vector_shared_secret,
 507  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_16_test_vector_shared_secret),
 508  };
 509  #endif /* WITH_CURVE_SECP192R1 */
 510  
 511  #ifdef WITH_CURVE_SECP192R1
 512  #define ECCCDH_SECP192R1_SELF_TEST_17
 513  /*** Tests for ECCCDH/SECP192R1 ***/
 514  static const u8 ecccdh_SECP192R1_17_test_vector_our_priv_key[] = {
 515  	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  };
 517  static const u8 ecccdh_SECP192R1_17_test_vector_peer_pub_key[] = {
 518  	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  };
 520  static const u8 ecccdh_SECP192R1_17_test_vector_our_pub_key[] = {
 521  	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  };
 523  static const u8 ecccdh_SECP192R1_17_test_vector_shared_secret[] = {
 524  	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  };
 526  static const ecdh_test_case ecccdh_SECP192R1_17_test_case = {
 527  	.name = "ECCCDH/SECP192R1 17",
 528  	.ecdh_type = ECCCDH,
 529  	.ec_str_p = &secp192r1_str_params,
 530  	.our_priv_key = ecccdh_SECP192R1_17_test_vector_our_priv_key,
 531  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_our_priv_key),
 532  	.peer_pub_key = ecccdh_SECP192R1_17_test_vector_peer_pub_key,
 533  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_peer_pub_key),
 534  	.exp_our_pub_key = ecccdh_SECP192R1_17_test_vector_our_pub_key,
 535  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_17_test_vector_our_pub_key),
 536  	.exp_shared_secret = ecccdh_SECP192R1_17_test_vector_shared_secret,
 537  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_17_test_vector_shared_secret),
 538  };
 539  #endif /* WITH_CURVE_SECP192R1 */
 540  
 541  #ifdef WITH_CURVE_SECP192R1
 542  #define ECCCDH_SECP192R1_SELF_TEST_18
 543  /*** Tests for ECCCDH/SECP192R1 ***/
 544  static const u8 ecccdh_SECP192R1_18_test_vector_our_priv_key[] = {
 545  	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  };
 547  static const u8 ecccdh_SECP192R1_18_test_vector_peer_pub_key[] = {
 548  	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  };
 550  static const u8 ecccdh_SECP192R1_18_test_vector_our_pub_key[] = {
 551  	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  };
 553  static const u8 ecccdh_SECP192R1_18_test_vector_shared_secret[] = {
 554  	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  };
 556  static const ecdh_test_case ecccdh_SECP192R1_18_test_case = {
 557  	.name = "ECCCDH/SECP192R1 18",
 558  	.ecdh_type = ECCCDH,
 559  	.ec_str_p = &secp192r1_str_params,
 560  	.our_priv_key = ecccdh_SECP192R1_18_test_vector_our_priv_key,
 561  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_our_priv_key),
 562  	.peer_pub_key = ecccdh_SECP192R1_18_test_vector_peer_pub_key,
 563  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_peer_pub_key),
 564  	.exp_our_pub_key = ecccdh_SECP192R1_18_test_vector_our_pub_key,
 565  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_18_test_vector_our_pub_key),
 566  	.exp_shared_secret = ecccdh_SECP192R1_18_test_vector_shared_secret,
 567  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_18_test_vector_shared_secret),
 568  };
 569  #endif /* WITH_CURVE_SECP192R1 */
 570  
 571  #ifdef WITH_CURVE_SECP192R1
 572  #define ECCCDH_SECP192R1_SELF_TEST_19
 573  /*** Tests for ECCCDH/SECP192R1 ***/
 574  static const u8 ecccdh_SECP192R1_19_test_vector_our_priv_key[] = {
 575  	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  };
 577  static const u8 ecccdh_SECP192R1_19_test_vector_peer_pub_key[] = {
 578  	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  };
 580  static const u8 ecccdh_SECP192R1_19_test_vector_our_pub_key[] = {
 581  	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  };
 583  static const u8 ecccdh_SECP192R1_19_test_vector_shared_secret[] = {
 584  	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  };
 586  static const ecdh_test_case ecccdh_SECP192R1_19_test_case = {
 587  	.name = "ECCCDH/SECP192R1 19",
 588  	.ecdh_type = ECCCDH,
 589  	.ec_str_p = &secp192r1_str_params,
 590  	.our_priv_key = ecccdh_SECP192R1_19_test_vector_our_priv_key,
 591  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_our_priv_key),
 592  	.peer_pub_key = ecccdh_SECP192R1_19_test_vector_peer_pub_key,
 593  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_peer_pub_key),
 594  	.exp_our_pub_key = ecccdh_SECP192R1_19_test_vector_our_pub_key,
 595  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_19_test_vector_our_pub_key),
 596  	.exp_shared_secret = ecccdh_SECP192R1_19_test_vector_shared_secret,
 597  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_19_test_vector_shared_secret),
 598  };
 599  #endif /* WITH_CURVE_SECP192R1 */
 600  
 601  #ifdef WITH_CURVE_SECP192R1
 602  #define ECCCDH_SECP192R1_SELF_TEST_20
 603  /*** Tests for ECCCDH/SECP192R1 ***/
 604  static const u8 ecccdh_SECP192R1_20_test_vector_our_priv_key[] = {
 605  	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  };
 607  static const u8 ecccdh_SECP192R1_20_test_vector_peer_pub_key[] = {
 608  	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  };
 610  static const u8 ecccdh_SECP192R1_20_test_vector_our_pub_key[] = {
 611  	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  };
 613  static const u8 ecccdh_SECP192R1_20_test_vector_shared_secret[] = {
 614  	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  };
 616  static const ecdh_test_case ecccdh_SECP192R1_20_test_case = {
 617  	.name = "ECCCDH/SECP192R1 20",
 618  	.ecdh_type = ECCCDH,
 619  	.ec_str_p = &secp192r1_str_params,
 620  	.our_priv_key = ecccdh_SECP192R1_20_test_vector_our_priv_key,
 621  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_our_priv_key),
 622  	.peer_pub_key = ecccdh_SECP192R1_20_test_vector_peer_pub_key,
 623  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_peer_pub_key),
 624  	.exp_our_pub_key = ecccdh_SECP192R1_20_test_vector_our_pub_key,
 625  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_20_test_vector_our_pub_key),
 626  	.exp_shared_secret = ecccdh_SECP192R1_20_test_vector_shared_secret,
 627  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_20_test_vector_shared_secret),
 628  };
 629  #endif /* WITH_CURVE_SECP192R1 */
 630  
 631  #ifdef WITH_CURVE_SECP192R1
 632  #define ECCCDH_SECP192R1_SELF_TEST_21
 633  /*** Tests for ECCCDH/SECP192R1 ***/
 634  static const u8 ecccdh_SECP192R1_21_test_vector_our_priv_key[] = {
 635  	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  };
 637  static const u8 ecccdh_SECP192R1_21_test_vector_peer_pub_key[] = {
 638  	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  };
 640  static const u8 ecccdh_SECP192R1_21_test_vector_our_pub_key[] = {
 641  	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  };
 643  static const u8 ecccdh_SECP192R1_21_test_vector_shared_secret[] = {
 644  	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  };
 646  static const ecdh_test_case ecccdh_SECP192R1_21_test_case = {
 647  	.name = "ECCCDH/SECP192R1 21",
 648  	.ecdh_type = ECCCDH,
 649  	.ec_str_p = &secp192r1_str_params,
 650  	.our_priv_key = ecccdh_SECP192R1_21_test_vector_our_priv_key,
 651  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_our_priv_key),
 652  	.peer_pub_key = ecccdh_SECP192R1_21_test_vector_peer_pub_key,
 653  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_peer_pub_key),
 654  	.exp_our_pub_key = ecccdh_SECP192R1_21_test_vector_our_pub_key,
 655  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_21_test_vector_our_pub_key),
 656  	.exp_shared_secret = ecccdh_SECP192R1_21_test_vector_shared_secret,
 657  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_21_test_vector_shared_secret),
 658  };
 659  #endif /* WITH_CURVE_SECP192R1 */
 660  
 661  #ifdef WITH_CURVE_SECP192R1
 662  #define ECCCDH_SECP192R1_SELF_TEST_22
 663  /*** Tests for ECCCDH/SECP192R1 ***/
 664  static const u8 ecccdh_SECP192R1_22_test_vector_our_priv_key[] = {
 665  	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  };
 667  static const u8 ecccdh_SECP192R1_22_test_vector_peer_pub_key[] = {
 668  	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  };
 670  static const u8 ecccdh_SECP192R1_22_test_vector_our_pub_key[] = {
 671  	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  };
 673  static const u8 ecccdh_SECP192R1_22_test_vector_shared_secret[] = {
 674  	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  };
 676  static const ecdh_test_case ecccdh_SECP192R1_22_test_case = {
 677  	.name = "ECCCDH/SECP192R1 22",
 678  	.ecdh_type = ECCCDH,
 679  	.ec_str_p = &secp192r1_str_params,
 680  	.our_priv_key = ecccdh_SECP192R1_22_test_vector_our_priv_key,
 681  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_our_priv_key),
 682  	.peer_pub_key = ecccdh_SECP192R1_22_test_vector_peer_pub_key,
 683  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_peer_pub_key),
 684  	.exp_our_pub_key = ecccdh_SECP192R1_22_test_vector_our_pub_key,
 685  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_22_test_vector_our_pub_key),
 686  	.exp_shared_secret = ecccdh_SECP192R1_22_test_vector_shared_secret,
 687  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_22_test_vector_shared_secret),
 688  };
 689  #endif /* WITH_CURVE_SECP192R1 */
 690  
 691  #ifdef WITH_CURVE_SECP192R1
 692  #define ECCCDH_SECP192R1_SELF_TEST_23
 693  /*** Tests for ECCCDH/SECP192R1 ***/
 694  static const u8 ecccdh_SECP192R1_23_test_vector_our_priv_key[] = {
 695  	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  };
 697  static const u8 ecccdh_SECP192R1_23_test_vector_peer_pub_key[] = {
 698  	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  };
 700  static const u8 ecccdh_SECP192R1_23_test_vector_our_pub_key[] = {
 701  	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  };
 703  static const u8 ecccdh_SECP192R1_23_test_vector_shared_secret[] = {
 704  	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  };
 706  static const ecdh_test_case ecccdh_SECP192R1_23_test_case = {
 707  	.name = "ECCCDH/SECP192R1 23",
 708  	.ecdh_type = ECCCDH,
 709  	.ec_str_p = &secp192r1_str_params,
 710  	.our_priv_key = ecccdh_SECP192R1_23_test_vector_our_priv_key,
 711  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_our_priv_key),
 712  	.peer_pub_key = ecccdh_SECP192R1_23_test_vector_peer_pub_key,
 713  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_peer_pub_key),
 714  	.exp_our_pub_key = ecccdh_SECP192R1_23_test_vector_our_pub_key,
 715  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_23_test_vector_our_pub_key),
 716  	.exp_shared_secret = ecccdh_SECP192R1_23_test_vector_shared_secret,
 717  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_23_test_vector_shared_secret),
 718  };
 719  #endif /* WITH_CURVE_SECP192R1 */
 720  
 721  #ifdef WITH_CURVE_SECP192R1
 722  #define ECCCDH_SECP192R1_SELF_TEST_24
 723  /*** Tests for ECCCDH/SECP192R1 ***/
 724  static const u8 ecccdh_SECP192R1_24_test_vector_our_priv_key[] = {
 725  	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  };
 727  static const u8 ecccdh_SECP192R1_24_test_vector_peer_pub_key[] = {
 728  	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  };
 730  static const u8 ecccdh_SECP192R1_24_test_vector_our_pub_key[] = {
 731  	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  };
 733  static const u8 ecccdh_SECP192R1_24_test_vector_shared_secret[] = {
 734  	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  };
 736  static const ecdh_test_case ecccdh_SECP192R1_24_test_case = {
 737  	.name = "ECCCDH/SECP192R1 24",
 738  	.ecdh_type = ECCCDH,
 739  	.ec_str_p = &secp192r1_str_params,
 740  	.our_priv_key = ecccdh_SECP192R1_24_test_vector_our_priv_key,
 741  	.our_priv_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_our_priv_key),
 742  	.peer_pub_key = ecccdh_SECP192R1_24_test_vector_peer_pub_key,
 743  	.peer_pub_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_peer_pub_key),
 744  	.exp_our_pub_key = ecccdh_SECP192R1_24_test_vector_our_pub_key,
 745  	.exp_our_pub_key_len = sizeof(ecccdh_SECP192R1_24_test_vector_our_pub_key),
 746  	.exp_shared_secret = ecccdh_SECP192R1_24_test_vector_shared_secret,
 747  	.exp_shared_secret_len = sizeof(ecccdh_SECP192R1_24_test_vector_shared_secret),
 748  };
 749  #endif /* WITH_CURVE_SECP192R1 */
 750  
 751  #ifdef WITH_CURVE_SECP224R1
 752  #define ECCCDH_SECP224R1_SELF_TEST_0
 753  /*** Tests for ECCCDH/SECP224R1 ***/
 754  static const u8 ecccdh_SECP224R1_0_test_vector_our_priv_key[] = {
 755  	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  };
 757  static const u8 ecccdh_SECP224R1_0_test_vector_peer_pub_key[] = {
 758  	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  };
 760  static const u8 ecccdh_SECP224R1_0_test_vector_our_pub_key[] = {
 761  	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  };
 763  static const u8 ecccdh_SECP224R1_0_test_vector_shared_secret[] = {
 764  	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  };
 766  static const ecdh_test_case ecccdh_SECP224R1_0_test_case = {
 767  	.name = "ECCCDH/SECP224R1 0",
 768  	.ecdh_type = ECCCDH,
 769  	.ec_str_p = &secp224r1_str_params,
 770  	.our_priv_key = ecccdh_SECP224R1_0_test_vector_our_priv_key,
 771  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_our_priv_key),
 772  	.peer_pub_key = ecccdh_SECP224R1_0_test_vector_peer_pub_key,
 773  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_peer_pub_key),
 774  	.exp_our_pub_key = ecccdh_SECP224R1_0_test_vector_our_pub_key,
 775  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_0_test_vector_our_pub_key),
 776  	.exp_shared_secret = ecccdh_SECP224R1_0_test_vector_shared_secret,
 777  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_0_test_vector_shared_secret),
 778  };
 779  #endif /* WITH_CURVE_SECP224R1 */
 780  
 781  #ifdef WITH_CURVE_SECP224R1
 782  #define ECCCDH_SECP224R1_SELF_TEST_1
 783  /*** Tests for ECCCDH/SECP224R1 ***/
 784  static const u8 ecccdh_SECP224R1_1_test_vector_our_priv_key[] = {
 785  	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  };
 787  static const u8 ecccdh_SECP224R1_1_test_vector_peer_pub_key[] = {
 788  	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  };
 790  static const u8 ecccdh_SECP224R1_1_test_vector_our_pub_key[] = {
 791  	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  };
 793  static const u8 ecccdh_SECP224R1_1_test_vector_shared_secret[] = {
 794  	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  };
 796  static const ecdh_test_case ecccdh_SECP224R1_1_test_case = {
 797  	.name = "ECCCDH/SECP224R1 1",
 798  	.ecdh_type = ECCCDH,
 799  	.ec_str_p = &secp224r1_str_params,
 800  	.our_priv_key = ecccdh_SECP224R1_1_test_vector_our_priv_key,
 801  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_our_priv_key),
 802  	.peer_pub_key = ecccdh_SECP224R1_1_test_vector_peer_pub_key,
 803  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_peer_pub_key),
 804  	.exp_our_pub_key = ecccdh_SECP224R1_1_test_vector_our_pub_key,
 805  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_1_test_vector_our_pub_key),
 806  	.exp_shared_secret = ecccdh_SECP224R1_1_test_vector_shared_secret,
 807  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_1_test_vector_shared_secret),
 808  };
 809  #endif /* WITH_CURVE_SECP224R1 */
 810  
 811  #ifdef WITH_CURVE_SECP224R1
 812  #define ECCCDH_SECP224R1_SELF_TEST_2
 813  /*** Tests for ECCCDH/SECP224R1 ***/
 814  static const u8 ecccdh_SECP224R1_2_test_vector_our_priv_key[] = {
 815  	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  };
 817  static const u8 ecccdh_SECP224R1_2_test_vector_peer_pub_key[] = {
 818  	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  };
 820  static const u8 ecccdh_SECP224R1_2_test_vector_our_pub_key[] = {
 821  	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  };
 823  static const u8 ecccdh_SECP224R1_2_test_vector_shared_secret[] = {
 824  	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  };
 826  static const ecdh_test_case ecccdh_SECP224R1_2_test_case = {
 827  	.name = "ECCCDH/SECP224R1 2",
 828  	.ecdh_type = ECCCDH,
 829  	.ec_str_p = &secp224r1_str_params,
 830  	.our_priv_key = ecccdh_SECP224R1_2_test_vector_our_priv_key,
 831  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_our_priv_key),
 832  	.peer_pub_key = ecccdh_SECP224R1_2_test_vector_peer_pub_key,
 833  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_peer_pub_key),
 834  	.exp_our_pub_key = ecccdh_SECP224R1_2_test_vector_our_pub_key,
 835  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_2_test_vector_our_pub_key),
 836  	.exp_shared_secret = ecccdh_SECP224R1_2_test_vector_shared_secret,
 837  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_2_test_vector_shared_secret),
 838  };
 839  #endif /* WITH_CURVE_SECP224R1 */
 840  
 841  #ifdef WITH_CURVE_SECP224R1
 842  #define ECCCDH_SECP224R1_SELF_TEST_3
 843  /*** Tests for ECCCDH/SECP224R1 ***/
 844  static const u8 ecccdh_SECP224R1_3_test_vector_our_priv_key[] = {
 845  	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  };
 847  static const u8 ecccdh_SECP224R1_3_test_vector_peer_pub_key[] = {
 848  	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  };
 850  static const u8 ecccdh_SECP224R1_3_test_vector_our_pub_key[] = {
 851  	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  };
 853  static const u8 ecccdh_SECP224R1_3_test_vector_shared_secret[] = {
 854  	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  };
 856  static const ecdh_test_case ecccdh_SECP224R1_3_test_case = {
 857  	.name = "ECCCDH/SECP224R1 3",
 858  	.ecdh_type = ECCCDH,
 859  	.ec_str_p = &secp224r1_str_params,
 860  	.our_priv_key = ecccdh_SECP224R1_3_test_vector_our_priv_key,
 861  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_our_priv_key),
 862  	.peer_pub_key = ecccdh_SECP224R1_3_test_vector_peer_pub_key,
 863  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_peer_pub_key),
 864  	.exp_our_pub_key = ecccdh_SECP224R1_3_test_vector_our_pub_key,
 865  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_3_test_vector_our_pub_key),
 866  	.exp_shared_secret = ecccdh_SECP224R1_3_test_vector_shared_secret,
 867  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_3_test_vector_shared_secret),
 868  };
 869  #endif /* WITH_CURVE_SECP224R1 */
 870  
 871  #ifdef WITH_CURVE_SECP224R1
 872  #define ECCCDH_SECP224R1_SELF_TEST_4
 873  /*** Tests for ECCCDH/SECP224R1 ***/
 874  static const u8 ecccdh_SECP224R1_4_test_vector_our_priv_key[] = {
 875  	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  };
 877  static const u8 ecccdh_SECP224R1_4_test_vector_peer_pub_key[] = {
 878  	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  };
 880  static const u8 ecccdh_SECP224R1_4_test_vector_our_pub_key[] = {
 881  	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  };
 883  static const u8 ecccdh_SECP224R1_4_test_vector_shared_secret[] = {
 884  	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  };
 886  static const ecdh_test_case ecccdh_SECP224R1_4_test_case = {
 887  	.name = "ECCCDH/SECP224R1 4",
 888  	.ecdh_type = ECCCDH,
 889  	.ec_str_p = &secp224r1_str_params,
 890  	.our_priv_key = ecccdh_SECP224R1_4_test_vector_our_priv_key,
 891  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_our_priv_key),
 892  	.peer_pub_key = ecccdh_SECP224R1_4_test_vector_peer_pub_key,
 893  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_peer_pub_key),
 894  	.exp_our_pub_key = ecccdh_SECP224R1_4_test_vector_our_pub_key,
 895  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_4_test_vector_our_pub_key),
 896  	.exp_shared_secret = ecccdh_SECP224R1_4_test_vector_shared_secret,
 897  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_4_test_vector_shared_secret),
 898  };
 899  #endif /* WITH_CURVE_SECP224R1 */
 900  
 901  #ifdef WITH_CURVE_SECP224R1
 902  #define ECCCDH_SECP224R1_SELF_TEST_5
 903  /*** Tests for ECCCDH/SECP224R1 ***/
 904  static const u8 ecccdh_SECP224R1_5_test_vector_our_priv_key[] = {
 905  	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  };
 907  static const u8 ecccdh_SECP224R1_5_test_vector_peer_pub_key[] = {
 908  	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  };
 910  static const u8 ecccdh_SECP224R1_5_test_vector_our_pub_key[] = {
 911  	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  };
 913  static const u8 ecccdh_SECP224R1_5_test_vector_shared_secret[] = {
 914  	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  };
 916  static const ecdh_test_case ecccdh_SECP224R1_5_test_case = {
 917  	.name = "ECCCDH/SECP224R1 5",
 918  	.ecdh_type = ECCCDH,
 919  	.ec_str_p = &secp224r1_str_params,
 920  	.our_priv_key = ecccdh_SECP224R1_5_test_vector_our_priv_key,
 921  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_our_priv_key),
 922  	.peer_pub_key = ecccdh_SECP224R1_5_test_vector_peer_pub_key,
 923  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_peer_pub_key),
 924  	.exp_our_pub_key = ecccdh_SECP224R1_5_test_vector_our_pub_key,
 925  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_5_test_vector_our_pub_key),
 926  	.exp_shared_secret = ecccdh_SECP224R1_5_test_vector_shared_secret,
 927  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_5_test_vector_shared_secret),
 928  };
 929  #endif /* WITH_CURVE_SECP224R1 */
 930  
 931  #ifdef WITH_CURVE_SECP224R1
 932  #define ECCCDH_SECP224R1_SELF_TEST_6
 933  /*** Tests for ECCCDH/SECP224R1 ***/
 934  static const u8 ecccdh_SECP224R1_6_test_vector_our_priv_key[] = {
 935  	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  };
 937  static const u8 ecccdh_SECP224R1_6_test_vector_peer_pub_key[] = {
 938  	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  };
 940  static const u8 ecccdh_SECP224R1_6_test_vector_our_pub_key[] = {
 941  	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  };
 943  static const u8 ecccdh_SECP224R1_6_test_vector_shared_secret[] = {
 944  	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  };
 946  static const ecdh_test_case ecccdh_SECP224R1_6_test_case = {
 947  	.name = "ECCCDH/SECP224R1 6",
 948  	.ecdh_type = ECCCDH,
 949  	.ec_str_p = &secp224r1_str_params,
 950  	.our_priv_key = ecccdh_SECP224R1_6_test_vector_our_priv_key,
 951  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_our_priv_key),
 952  	.peer_pub_key = ecccdh_SECP224R1_6_test_vector_peer_pub_key,
 953  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_peer_pub_key),
 954  	.exp_our_pub_key = ecccdh_SECP224R1_6_test_vector_our_pub_key,
 955  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_6_test_vector_our_pub_key),
 956  	.exp_shared_secret = ecccdh_SECP224R1_6_test_vector_shared_secret,
 957  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_6_test_vector_shared_secret),
 958  };
 959  #endif /* WITH_CURVE_SECP224R1 */
 960  
 961  #ifdef WITH_CURVE_SECP224R1
 962  #define ECCCDH_SECP224R1_SELF_TEST_7
 963  /*** Tests for ECCCDH/SECP224R1 ***/
 964  static const u8 ecccdh_SECP224R1_7_test_vector_our_priv_key[] = {
 965  	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  };
 967  static const u8 ecccdh_SECP224R1_7_test_vector_peer_pub_key[] = {
 968  	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  };
 970  static const u8 ecccdh_SECP224R1_7_test_vector_our_pub_key[] = {
 971  	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  };
 973  static const u8 ecccdh_SECP224R1_7_test_vector_shared_secret[] = {
 974  	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  };
 976  static const ecdh_test_case ecccdh_SECP224R1_7_test_case = {
 977  	.name = "ECCCDH/SECP224R1 7",
 978  	.ecdh_type = ECCCDH,
 979  	.ec_str_p = &secp224r1_str_params,
 980  	.our_priv_key = ecccdh_SECP224R1_7_test_vector_our_priv_key,
 981  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_our_priv_key),
 982  	.peer_pub_key = ecccdh_SECP224R1_7_test_vector_peer_pub_key,
 983  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_peer_pub_key),
 984  	.exp_our_pub_key = ecccdh_SECP224R1_7_test_vector_our_pub_key,
 985  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_7_test_vector_our_pub_key),
 986  	.exp_shared_secret = ecccdh_SECP224R1_7_test_vector_shared_secret,
 987  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_7_test_vector_shared_secret),
 988  };
 989  #endif /* WITH_CURVE_SECP224R1 */
 990  
 991  #ifdef WITH_CURVE_SECP224R1
 992  #define ECCCDH_SECP224R1_SELF_TEST_8
 993  /*** Tests for ECCCDH/SECP224R1 ***/
 994  static const u8 ecccdh_SECP224R1_8_test_vector_our_priv_key[] = {
 995  	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  };
 997  static const u8 ecccdh_SECP224R1_8_test_vector_peer_pub_key[] = {
 998  	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  };
1000  static const u8 ecccdh_SECP224R1_8_test_vector_our_pub_key[] = {
1001  	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  };
1003  static const u8 ecccdh_SECP224R1_8_test_vector_shared_secret[] = {
1004  	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  };
1006  static const ecdh_test_case ecccdh_SECP224R1_8_test_case = {
1007  	.name = "ECCCDH/SECP224R1 8",
1008  	.ecdh_type = ECCCDH,
1009  	.ec_str_p = &secp224r1_str_params,
1010  	.our_priv_key = ecccdh_SECP224R1_8_test_vector_our_priv_key,
1011  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_our_priv_key),
1012  	.peer_pub_key = ecccdh_SECP224R1_8_test_vector_peer_pub_key,
1013  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_peer_pub_key),
1014  	.exp_our_pub_key = ecccdh_SECP224R1_8_test_vector_our_pub_key,
1015  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_8_test_vector_our_pub_key),
1016  	.exp_shared_secret = ecccdh_SECP224R1_8_test_vector_shared_secret,
1017  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_8_test_vector_shared_secret),
1018  };
1019  #endif /* WITH_CURVE_SECP224R1 */
1020  
1021  #ifdef WITH_CURVE_SECP224R1
1022  #define ECCCDH_SECP224R1_SELF_TEST_9
1023  /*** Tests for ECCCDH/SECP224R1 ***/
1024  static const u8 ecccdh_SECP224R1_9_test_vector_our_priv_key[] = {
1025  	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  };
1027  static const u8 ecccdh_SECP224R1_9_test_vector_peer_pub_key[] = {
1028  	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  };
1030  static const u8 ecccdh_SECP224R1_9_test_vector_our_pub_key[] = {
1031  	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  };
1033  static const u8 ecccdh_SECP224R1_9_test_vector_shared_secret[] = {
1034  	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  };
1036  static const ecdh_test_case ecccdh_SECP224R1_9_test_case = {
1037  	.name = "ECCCDH/SECP224R1 9",
1038  	.ecdh_type = ECCCDH,
1039  	.ec_str_p = &secp224r1_str_params,
1040  	.our_priv_key = ecccdh_SECP224R1_9_test_vector_our_priv_key,
1041  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_our_priv_key),
1042  	.peer_pub_key = ecccdh_SECP224R1_9_test_vector_peer_pub_key,
1043  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_peer_pub_key),
1044  	.exp_our_pub_key = ecccdh_SECP224R1_9_test_vector_our_pub_key,
1045  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_9_test_vector_our_pub_key),
1046  	.exp_shared_secret = ecccdh_SECP224R1_9_test_vector_shared_secret,
1047  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_9_test_vector_shared_secret),
1048  };
1049  #endif /* WITH_CURVE_SECP224R1 */
1050  
1051  #ifdef WITH_CURVE_SECP224R1
1052  #define ECCCDH_SECP224R1_SELF_TEST_10
1053  /*** Tests for ECCCDH/SECP224R1 ***/
1054  static const u8 ecccdh_SECP224R1_10_test_vector_our_priv_key[] = {
1055  	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  };
1057  static const u8 ecccdh_SECP224R1_10_test_vector_peer_pub_key[] = {
1058  	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  };
1060  static const u8 ecccdh_SECP224R1_10_test_vector_our_pub_key[] = {
1061  	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  };
1063  static const u8 ecccdh_SECP224R1_10_test_vector_shared_secret[] = {
1064  	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  };
1066  static const ecdh_test_case ecccdh_SECP224R1_10_test_case = {
1067  	.name = "ECCCDH/SECP224R1 10",
1068  	.ecdh_type = ECCCDH,
1069  	.ec_str_p = &secp224r1_str_params,
1070  	.our_priv_key = ecccdh_SECP224R1_10_test_vector_our_priv_key,
1071  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_our_priv_key),
1072  	.peer_pub_key = ecccdh_SECP224R1_10_test_vector_peer_pub_key,
1073  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_peer_pub_key),
1074  	.exp_our_pub_key = ecccdh_SECP224R1_10_test_vector_our_pub_key,
1075  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_10_test_vector_our_pub_key),
1076  	.exp_shared_secret = ecccdh_SECP224R1_10_test_vector_shared_secret,
1077  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_10_test_vector_shared_secret),
1078  };
1079  #endif /* WITH_CURVE_SECP224R1 */
1080  
1081  #ifdef WITH_CURVE_SECP224R1
1082  #define ECCCDH_SECP224R1_SELF_TEST_11
1083  /*** Tests for ECCCDH/SECP224R1 ***/
1084  static const u8 ecccdh_SECP224R1_11_test_vector_our_priv_key[] = {
1085  	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  };
1087  static const u8 ecccdh_SECP224R1_11_test_vector_peer_pub_key[] = {
1088  	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  };
1090  static const u8 ecccdh_SECP224R1_11_test_vector_our_pub_key[] = {
1091  	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  };
1093  static const u8 ecccdh_SECP224R1_11_test_vector_shared_secret[] = {
1094  	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  };
1096  static const ecdh_test_case ecccdh_SECP224R1_11_test_case = {
1097  	.name = "ECCCDH/SECP224R1 11",
1098  	.ecdh_type = ECCCDH,
1099  	.ec_str_p = &secp224r1_str_params,
1100  	.our_priv_key = ecccdh_SECP224R1_11_test_vector_our_priv_key,
1101  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_our_priv_key),
1102  	.peer_pub_key = ecccdh_SECP224R1_11_test_vector_peer_pub_key,
1103  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_peer_pub_key),
1104  	.exp_our_pub_key = ecccdh_SECP224R1_11_test_vector_our_pub_key,
1105  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_11_test_vector_our_pub_key),
1106  	.exp_shared_secret = ecccdh_SECP224R1_11_test_vector_shared_secret,
1107  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_11_test_vector_shared_secret),
1108  };
1109  #endif /* WITH_CURVE_SECP224R1 */
1110  
1111  #ifdef WITH_CURVE_SECP224R1
1112  #define ECCCDH_SECP224R1_SELF_TEST_12
1113  /*** Tests for ECCCDH/SECP224R1 ***/
1114  static const u8 ecccdh_SECP224R1_12_test_vector_our_priv_key[] = {
1115  	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  };
1117  static const u8 ecccdh_SECP224R1_12_test_vector_peer_pub_key[] = {
1118  	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  };
1120  static const u8 ecccdh_SECP224R1_12_test_vector_our_pub_key[] = {
1121  	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  };
1123  static const u8 ecccdh_SECP224R1_12_test_vector_shared_secret[] = {
1124  	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  };
1126  static const ecdh_test_case ecccdh_SECP224R1_12_test_case = {
1127  	.name = "ECCCDH/SECP224R1 12",
1128  	.ecdh_type = ECCCDH,
1129  	.ec_str_p = &secp224r1_str_params,
1130  	.our_priv_key = ecccdh_SECP224R1_12_test_vector_our_priv_key,
1131  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_our_priv_key),
1132  	.peer_pub_key = ecccdh_SECP224R1_12_test_vector_peer_pub_key,
1133  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_peer_pub_key),
1134  	.exp_our_pub_key = ecccdh_SECP224R1_12_test_vector_our_pub_key,
1135  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_12_test_vector_our_pub_key),
1136  	.exp_shared_secret = ecccdh_SECP224R1_12_test_vector_shared_secret,
1137  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_12_test_vector_shared_secret),
1138  };
1139  #endif /* WITH_CURVE_SECP224R1 */
1140  
1141  #ifdef WITH_CURVE_SECP224R1
1142  #define ECCCDH_SECP224R1_SELF_TEST_13
1143  /*** Tests for ECCCDH/SECP224R1 ***/
1144  static const u8 ecccdh_SECP224R1_13_test_vector_our_priv_key[] = {
1145  	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  };
1147  static const u8 ecccdh_SECP224R1_13_test_vector_peer_pub_key[] = {
1148  	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  };
1150  static const u8 ecccdh_SECP224R1_13_test_vector_our_pub_key[] = {
1151  	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  };
1153  static const u8 ecccdh_SECP224R1_13_test_vector_shared_secret[] = {
1154  	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  };
1156  static const ecdh_test_case ecccdh_SECP224R1_13_test_case = {
1157  	.name = "ECCCDH/SECP224R1 13",
1158  	.ecdh_type = ECCCDH,
1159  	.ec_str_p = &secp224r1_str_params,
1160  	.our_priv_key = ecccdh_SECP224R1_13_test_vector_our_priv_key,
1161  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_our_priv_key),
1162  	.peer_pub_key = ecccdh_SECP224R1_13_test_vector_peer_pub_key,
1163  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_peer_pub_key),
1164  	.exp_our_pub_key = ecccdh_SECP224R1_13_test_vector_our_pub_key,
1165  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_13_test_vector_our_pub_key),
1166  	.exp_shared_secret = ecccdh_SECP224R1_13_test_vector_shared_secret,
1167  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_13_test_vector_shared_secret),
1168  };
1169  #endif /* WITH_CURVE_SECP224R1 */
1170  
1171  #ifdef WITH_CURVE_SECP224R1
1172  #define ECCCDH_SECP224R1_SELF_TEST_14
1173  /*** Tests for ECCCDH/SECP224R1 ***/
1174  static const u8 ecccdh_SECP224R1_14_test_vector_our_priv_key[] = {
1175  	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  };
1177  static const u8 ecccdh_SECP224R1_14_test_vector_peer_pub_key[] = {
1178  	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  };
1180  static const u8 ecccdh_SECP224R1_14_test_vector_our_pub_key[] = {
1181  	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  };
1183  static const u8 ecccdh_SECP224R1_14_test_vector_shared_secret[] = {
1184  	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  };
1186  static const ecdh_test_case ecccdh_SECP224R1_14_test_case = {
1187  	.name = "ECCCDH/SECP224R1 14",
1188  	.ecdh_type = ECCCDH,
1189  	.ec_str_p = &secp224r1_str_params,
1190  	.our_priv_key = ecccdh_SECP224R1_14_test_vector_our_priv_key,
1191  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_our_priv_key),
1192  	.peer_pub_key = ecccdh_SECP224R1_14_test_vector_peer_pub_key,
1193  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_peer_pub_key),
1194  	.exp_our_pub_key = ecccdh_SECP224R1_14_test_vector_our_pub_key,
1195  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_14_test_vector_our_pub_key),
1196  	.exp_shared_secret = ecccdh_SECP224R1_14_test_vector_shared_secret,
1197  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_14_test_vector_shared_secret),
1198  };
1199  #endif /* WITH_CURVE_SECP224R1 */
1200  
1201  #ifdef WITH_CURVE_SECP224R1
1202  #define ECCCDH_SECP224R1_SELF_TEST_15
1203  /*** Tests for ECCCDH/SECP224R1 ***/
1204  static const u8 ecccdh_SECP224R1_15_test_vector_our_priv_key[] = {
1205  	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  };
1207  static const u8 ecccdh_SECP224R1_15_test_vector_peer_pub_key[] = {
1208  	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  };
1210  static const u8 ecccdh_SECP224R1_15_test_vector_our_pub_key[] = {
1211  	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  };
1213  static const u8 ecccdh_SECP224R1_15_test_vector_shared_secret[] = {
1214  	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  };
1216  static const ecdh_test_case ecccdh_SECP224R1_15_test_case = {
1217  	.name = "ECCCDH/SECP224R1 15",
1218  	.ecdh_type = ECCCDH,
1219  	.ec_str_p = &secp224r1_str_params,
1220  	.our_priv_key = ecccdh_SECP224R1_15_test_vector_our_priv_key,
1221  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_our_priv_key),
1222  	.peer_pub_key = ecccdh_SECP224R1_15_test_vector_peer_pub_key,
1223  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_peer_pub_key),
1224  	.exp_our_pub_key = ecccdh_SECP224R1_15_test_vector_our_pub_key,
1225  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_15_test_vector_our_pub_key),
1226  	.exp_shared_secret = ecccdh_SECP224R1_15_test_vector_shared_secret,
1227  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_15_test_vector_shared_secret),
1228  };
1229  #endif /* WITH_CURVE_SECP224R1 */
1230  
1231  #ifdef WITH_CURVE_SECP224R1
1232  #define ECCCDH_SECP224R1_SELF_TEST_16
1233  /*** Tests for ECCCDH/SECP224R1 ***/
1234  static const u8 ecccdh_SECP224R1_16_test_vector_our_priv_key[] = {
1235  	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  };
1237  static const u8 ecccdh_SECP224R1_16_test_vector_peer_pub_key[] = {
1238  	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  };
1240  static const u8 ecccdh_SECP224R1_16_test_vector_our_pub_key[] = {
1241  	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  };
1243  static const u8 ecccdh_SECP224R1_16_test_vector_shared_secret[] = {
1244  	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  };
1246  static const ecdh_test_case ecccdh_SECP224R1_16_test_case = {
1247  	.name = "ECCCDH/SECP224R1 16",
1248  	.ecdh_type = ECCCDH,
1249  	.ec_str_p = &secp224r1_str_params,
1250  	.our_priv_key = ecccdh_SECP224R1_16_test_vector_our_priv_key,
1251  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_our_priv_key),
1252  	.peer_pub_key = ecccdh_SECP224R1_16_test_vector_peer_pub_key,
1253  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_peer_pub_key),
1254  	.exp_our_pub_key = ecccdh_SECP224R1_16_test_vector_our_pub_key,
1255  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_16_test_vector_our_pub_key),
1256  	.exp_shared_secret = ecccdh_SECP224R1_16_test_vector_shared_secret,
1257  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_16_test_vector_shared_secret),
1258  };
1259  #endif /* WITH_CURVE_SECP224R1 */
1260  
1261  #ifdef WITH_CURVE_SECP224R1
1262  #define ECCCDH_SECP224R1_SELF_TEST_17
1263  /*** Tests for ECCCDH/SECP224R1 ***/
1264  static const u8 ecccdh_SECP224R1_17_test_vector_our_priv_key[] = {
1265  	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  };
1267  static const u8 ecccdh_SECP224R1_17_test_vector_peer_pub_key[] = {
1268  	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  };
1270  static const u8 ecccdh_SECP224R1_17_test_vector_our_pub_key[] = {
1271  	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  };
1273  static const u8 ecccdh_SECP224R1_17_test_vector_shared_secret[] = {
1274  	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  };
1276  static const ecdh_test_case ecccdh_SECP224R1_17_test_case = {
1277  	.name = "ECCCDH/SECP224R1 17",
1278  	.ecdh_type = ECCCDH,
1279  	.ec_str_p = &secp224r1_str_params,
1280  	.our_priv_key = ecccdh_SECP224R1_17_test_vector_our_priv_key,
1281  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_our_priv_key),
1282  	.peer_pub_key = ecccdh_SECP224R1_17_test_vector_peer_pub_key,
1283  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_peer_pub_key),
1284  	.exp_our_pub_key = ecccdh_SECP224R1_17_test_vector_our_pub_key,
1285  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_17_test_vector_our_pub_key),
1286  	.exp_shared_secret = ecccdh_SECP224R1_17_test_vector_shared_secret,
1287  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_17_test_vector_shared_secret),
1288  };
1289  #endif /* WITH_CURVE_SECP224R1 */
1290  
1291  #ifdef WITH_CURVE_SECP224R1
1292  #define ECCCDH_SECP224R1_SELF_TEST_18
1293  /*** Tests for ECCCDH/SECP224R1 ***/
1294  static const u8 ecccdh_SECP224R1_18_test_vector_our_priv_key[] = {
1295  	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  };
1297  static const u8 ecccdh_SECP224R1_18_test_vector_peer_pub_key[] = {
1298  	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  };
1300  static const u8 ecccdh_SECP224R1_18_test_vector_our_pub_key[] = {
1301  	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  };
1303  static const u8 ecccdh_SECP224R1_18_test_vector_shared_secret[] = {
1304  	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  };
1306  static const ecdh_test_case ecccdh_SECP224R1_18_test_case = {
1307  	.name = "ECCCDH/SECP224R1 18",
1308  	.ecdh_type = ECCCDH,
1309  	.ec_str_p = &secp224r1_str_params,
1310  	.our_priv_key = ecccdh_SECP224R1_18_test_vector_our_priv_key,
1311  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_our_priv_key),
1312  	.peer_pub_key = ecccdh_SECP224R1_18_test_vector_peer_pub_key,
1313  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_peer_pub_key),
1314  	.exp_our_pub_key = ecccdh_SECP224R1_18_test_vector_our_pub_key,
1315  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_18_test_vector_our_pub_key),
1316  	.exp_shared_secret = ecccdh_SECP224R1_18_test_vector_shared_secret,
1317  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_18_test_vector_shared_secret),
1318  };
1319  #endif /* WITH_CURVE_SECP224R1 */
1320  
1321  #ifdef WITH_CURVE_SECP224R1
1322  #define ECCCDH_SECP224R1_SELF_TEST_19
1323  /*** Tests for ECCCDH/SECP224R1 ***/
1324  static const u8 ecccdh_SECP224R1_19_test_vector_our_priv_key[] = {
1325  	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  };
1327  static const u8 ecccdh_SECP224R1_19_test_vector_peer_pub_key[] = {
1328  	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  };
1330  static const u8 ecccdh_SECP224R1_19_test_vector_our_pub_key[] = {
1331  	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  };
1333  static const u8 ecccdh_SECP224R1_19_test_vector_shared_secret[] = {
1334  	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  };
1336  static const ecdh_test_case ecccdh_SECP224R1_19_test_case = {
1337  	.name = "ECCCDH/SECP224R1 19",
1338  	.ecdh_type = ECCCDH,
1339  	.ec_str_p = &secp224r1_str_params,
1340  	.our_priv_key = ecccdh_SECP224R1_19_test_vector_our_priv_key,
1341  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_our_priv_key),
1342  	.peer_pub_key = ecccdh_SECP224R1_19_test_vector_peer_pub_key,
1343  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_peer_pub_key),
1344  	.exp_our_pub_key = ecccdh_SECP224R1_19_test_vector_our_pub_key,
1345  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_19_test_vector_our_pub_key),
1346  	.exp_shared_secret = ecccdh_SECP224R1_19_test_vector_shared_secret,
1347  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_19_test_vector_shared_secret),
1348  };
1349  #endif /* WITH_CURVE_SECP224R1 */
1350  
1351  #ifdef WITH_CURVE_SECP224R1
1352  #define ECCCDH_SECP224R1_SELF_TEST_20
1353  /*** Tests for ECCCDH/SECP224R1 ***/
1354  static const u8 ecccdh_SECP224R1_20_test_vector_our_priv_key[] = {
1355  	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  };
1357  static const u8 ecccdh_SECP224R1_20_test_vector_peer_pub_key[] = {
1358  	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  };
1360  static const u8 ecccdh_SECP224R1_20_test_vector_our_pub_key[] = {
1361  	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  };
1363  static const u8 ecccdh_SECP224R1_20_test_vector_shared_secret[] = {
1364  	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  };
1366  static const ecdh_test_case ecccdh_SECP224R1_20_test_case = {
1367  	.name = "ECCCDH/SECP224R1 20",
1368  	.ecdh_type = ECCCDH,
1369  	.ec_str_p = &secp224r1_str_params,
1370  	.our_priv_key = ecccdh_SECP224R1_20_test_vector_our_priv_key,
1371  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_our_priv_key),
1372  	.peer_pub_key = ecccdh_SECP224R1_20_test_vector_peer_pub_key,
1373  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_peer_pub_key),
1374  	.exp_our_pub_key = ecccdh_SECP224R1_20_test_vector_our_pub_key,
1375  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_20_test_vector_our_pub_key),
1376  	.exp_shared_secret = ecccdh_SECP224R1_20_test_vector_shared_secret,
1377  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_20_test_vector_shared_secret),
1378  };
1379  #endif /* WITH_CURVE_SECP224R1 */
1380  
1381  #ifdef WITH_CURVE_SECP224R1
1382  #define ECCCDH_SECP224R1_SELF_TEST_21
1383  /*** Tests for ECCCDH/SECP224R1 ***/
1384  static const u8 ecccdh_SECP224R1_21_test_vector_our_priv_key[] = {
1385  	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  };
1387  static const u8 ecccdh_SECP224R1_21_test_vector_peer_pub_key[] = {
1388  	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  };
1390  static const u8 ecccdh_SECP224R1_21_test_vector_our_pub_key[] = {
1391  	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  };
1393  static const u8 ecccdh_SECP224R1_21_test_vector_shared_secret[] = {
1394  	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  };
1396  static const ecdh_test_case ecccdh_SECP224R1_21_test_case = {
1397  	.name = "ECCCDH/SECP224R1 21",
1398  	.ecdh_type = ECCCDH,
1399  	.ec_str_p = &secp224r1_str_params,
1400  	.our_priv_key = ecccdh_SECP224R1_21_test_vector_our_priv_key,
1401  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_our_priv_key),
1402  	.peer_pub_key = ecccdh_SECP224R1_21_test_vector_peer_pub_key,
1403  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_peer_pub_key),
1404  	.exp_our_pub_key = ecccdh_SECP224R1_21_test_vector_our_pub_key,
1405  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_21_test_vector_our_pub_key),
1406  	.exp_shared_secret = ecccdh_SECP224R1_21_test_vector_shared_secret,
1407  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_21_test_vector_shared_secret),
1408  };
1409  #endif /* WITH_CURVE_SECP224R1 */
1410  
1411  #ifdef WITH_CURVE_SECP224R1
1412  #define ECCCDH_SECP224R1_SELF_TEST_22
1413  /*** Tests for ECCCDH/SECP224R1 ***/
1414  static const u8 ecccdh_SECP224R1_22_test_vector_our_priv_key[] = {
1415  	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  };
1417  static const u8 ecccdh_SECP224R1_22_test_vector_peer_pub_key[] = {
1418  	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  };
1420  static const u8 ecccdh_SECP224R1_22_test_vector_our_pub_key[] = {
1421  	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  };
1423  static const u8 ecccdh_SECP224R1_22_test_vector_shared_secret[] = {
1424  	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  };
1426  static const ecdh_test_case ecccdh_SECP224R1_22_test_case = {
1427  	.name = "ECCCDH/SECP224R1 22",
1428  	.ecdh_type = ECCCDH,
1429  	.ec_str_p = &secp224r1_str_params,
1430  	.our_priv_key = ecccdh_SECP224R1_22_test_vector_our_priv_key,
1431  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_our_priv_key),
1432  	.peer_pub_key = ecccdh_SECP224R1_22_test_vector_peer_pub_key,
1433  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_peer_pub_key),
1434  	.exp_our_pub_key = ecccdh_SECP224R1_22_test_vector_our_pub_key,
1435  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_22_test_vector_our_pub_key),
1436  	.exp_shared_secret = ecccdh_SECP224R1_22_test_vector_shared_secret,
1437  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_22_test_vector_shared_secret),
1438  };
1439  #endif /* WITH_CURVE_SECP224R1 */
1440  
1441  #ifdef WITH_CURVE_SECP224R1
1442  #define ECCCDH_SECP224R1_SELF_TEST_23
1443  /*** Tests for ECCCDH/SECP224R1 ***/
1444  static const u8 ecccdh_SECP224R1_23_test_vector_our_priv_key[] = {
1445  	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  };
1447  static const u8 ecccdh_SECP224R1_23_test_vector_peer_pub_key[] = {
1448  	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  };
1450  static const u8 ecccdh_SECP224R1_23_test_vector_our_pub_key[] = {
1451  	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  };
1453  static const u8 ecccdh_SECP224R1_23_test_vector_shared_secret[] = {
1454  	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  };
1456  static const ecdh_test_case ecccdh_SECP224R1_23_test_case = {
1457  	.name = "ECCCDH/SECP224R1 23",
1458  	.ecdh_type = ECCCDH,
1459  	.ec_str_p = &secp224r1_str_params,
1460  	.our_priv_key = ecccdh_SECP224R1_23_test_vector_our_priv_key,
1461  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_our_priv_key),
1462  	.peer_pub_key = ecccdh_SECP224R1_23_test_vector_peer_pub_key,
1463  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_peer_pub_key),
1464  	.exp_our_pub_key = ecccdh_SECP224R1_23_test_vector_our_pub_key,
1465  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_23_test_vector_our_pub_key),
1466  	.exp_shared_secret = ecccdh_SECP224R1_23_test_vector_shared_secret,
1467  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_23_test_vector_shared_secret),
1468  };
1469  #endif /* WITH_CURVE_SECP224R1 */
1470  
1471  #ifdef WITH_CURVE_SECP224R1
1472  #define ECCCDH_SECP224R1_SELF_TEST_24
1473  /*** Tests for ECCCDH/SECP224R1 ***/
1474  static const u8 ecccdh_SECP224R1_24_test_vector_our_priv_key[] = {
1475  	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  };
1477  static const u8 ecccdh_SECP224R1_24_test_vector_peer_pub_key[] = {
1478  	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  };
1480  static const u8 ecccdh_SECP224R1_24_test_vector_our_pub_key[] = {
1481  	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  };
1483  static const u8 ecccdh_SECP224R1_24_test_vector_shared_secret[] = {
1484  	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  };
1486  static const ecdh_test_case ecccdh_SECP224R1_24_test_case = {
1487  	.name = "ECCCDH/SECP224R1 24",
1488  	.ecdh_type = ECCCDH,
1489  	.ec_str_p = &secp224r1_str_params,
1490  	.our_priv_key = ecccdh_SECP224R1_24_test_vector_our_priv_key,
1491  	.our_priv_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_our_priv_key),
1492  	.peer_pub_key = ecccdh_SECP224R1_24_test_vector_peer_pub_key,
1493  	.peer_pub_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_peer_pub_key),
1494  	.exp_our_pub_key = ecccdh_SECP224R1_24_test_vector_our_pub_key,
1495  	.exp_our_pub_key_len = sizeof(ecccdh_SECP224R1_24_test_vector_our_pub_key),
1496  	.exp_shared_secret = ecccdh_SECP224R1_24_test_vector_shared_secret,
1497  	.exp_shared_secret_len = sizeof(ecccdh_SECP224R1_24_test_vector_shared_secret),
1498  };
1499  #endif /* WITH_CURVE_SECP224R1 */
1500  
1501  #ifdef WITH_CURVE_SECP256R1
1502  #define ECCCDH_SECP256R1_SELF_TEST_0
1503  /*** Tests for ECCCDH/SECP256R1 ***/
1504  static const u8 ecccdh_SECP256R1_0_test_vector_our_priv_key[] = {
1505  	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  };
1507  static const u8 ecccdh_SECP256R1_0_test_vector_peer_pub_key[] = {
1508  	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  };
1510  static const u8 ecccdh_SECP256R1_0_test_vector_our_pub_key[] = {
1511  	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  };
1513  static const u8 ecccdh_SECP256R1_0_test_vector_shared_secret[] = {
1514  	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  };
1516  static const ecdh_test_case ecccdh_SECP256R1_0_test_case = {
1517  	.name = "ECCCDH/SECP256R1 0",
1518  	.ecdh_type = ECCCDH,
1519  	.ec_str_p = &secp256r1_str_params,
1520  	.our_priv_key = ecccdh_SECP256R1_0_test_vector_our_priv_key,
1521  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_our_priv_key),
1522  	.peer_pub_key = ecccdh_SECP256R1_0_test_vector_peer_pub_key,
1523  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_peer_pub_key),
1524  	.exp_our_pub_key = ecccdh_SECP256R1_0_test_vector_our_pub_key,
1525  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_0_test_vector_our_pub_key),
1526  	.exp_shared_secret = ecccdh_SECP256R1_0_test_vector_shared_secret,
1527  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_0_test_vector_shared_secret),
1528  };
1529  #endif /* WITH_CURVE_SECP256R1 */
1530  
1531  #ifdef WITH_CURVE_SECP256R1
1532  #define ECCCDH_SECP256R1_SELF_TEST_1
1533  /*** Tests for ECCCDH/SECP256R1 ***/
1534  static const u8 ecccdh_SECP256R1_1_test_vector_our_priv_key[] = {
1535  	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  };
1537  static const u8 ecccdh_SECP256R1_1_test_vector_peer_pub_key[] = {
1538  	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  };
1540  static const u8 ecccdh_SECP256R1_1_test_vector_our_pub_key[] = {
1541  	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  };
1543  static const u8 ecccdh_SECP256R1_1_test_vector_shared_secret[] = {
1544  	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  };
1546  static const ecdh_test_case ecccdh_SECP256R1_1_test_case = {
1547  	.name = "ECCCDH/SECP256R1 1",
1548  	.ecdh_type = ECCCDH,
1549  	.ec_str_p = &secp256r1_str_params,
1550  	.our_priv_key = ecccdh_SECP256R1_1_test_vector_our_priv_key,
1551  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_our_priv_key),
1552  	.peer_pub_key = ecccdh_SECP256R1_1_test_vector_peer_pub_key,
1553  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_peer_pub_key),
1554  	.exp_our_pub_key = ecccdh_SECP256R1_1_test_vector_our_pub_key,
1555  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_1_test_vector_our_pub_key),
1556  	.exp_shared_secret = ecccdh_SECP256R1_1_test_vector_shared_secret,
1557  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_1_test_vector_shared_secret),
1558  };
1559  #endif /* WITH_CURVE_SECP256R1 */
1560  
1561  #ifdef WITH_CURVE_SECP256R1
1562  #define ECCCDH_SECP256R1_SELF_TEST_2
1563  /*** Tests for ECCCDH/SECP256R1 ***/
1564  static const u8 ecccdh_SECP256R1_2_test_vector_our_priv_key[] = {
1565  	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  };
1567  static const u8 ecccdh_SECP256R1_2_test_vector_peer_pub_key[] = {
1568  	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  };
1570  static const u8 ecccdh_SECP256R1_2_test_vector_our_pub_key[] = {
1571  	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  };
1573  static const u8 ecccdh_SECP256R1_2_test_vector_shared_secret[] = {
1574  	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  };
1576  static const ecdh_test_case ecccdh_SECP256R1_2_test_case = {
1577  	.name = "ECCCDH/SECP256R1 2",
1578  	.ecdh_type = ECCCDH,
1579  	.ec_str_p = &secp256r1_str_params,
1580  	.our_priv_key = ecccdh_SECP256R1_2_test_vector_our_priv_key,
1581  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_our_priv_key),
1582  	.peer_pub_key = ecccdh_SECP256R1_2_test_vector_peer_pub_key,
1583  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_peer_pub_key),
1584  	.exp_our_pub_key = ecccdh_SECP256R1_2_test_vector_our_pub_key,
1585  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_2_test_vector_our_pub_key),
1586  	.exp_shared_secret = ecccdh_SECP256R1_2_test_vector_shared_secret,
1587  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_2_test_vector_shared_secret),
1588  };
1589  #endif /* WITH_CURVE_SECP256R1 */
1590  
1591  #ifdef WITH_CURVE_SECP256R1
1592  #define ECCCDH_SECP256R1_SELF_TEST_3
1593  /*** Tests for ECCCDH/SECP256R1 ***/
1594  static const u8 ecccdh_SECP256R1_3_test_vector_our_priv_key[] = {
1595  	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  };
1597  static const u8 ecccdh_SECP256R1_3_test_vector_peer_pub_key[] = {
1598  	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  };
1600  static const u8 ecccdh_SECP256R1_3_test_vector_our_pub_key[] = {
1601  	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  };
1603  static const u8 ecccdh_SECP256R1_3_test_vector_shared_secret[] = {
1604  	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  };
1606  static const ecdh_test_case ecccdh_SECP256R1_3_test_case = {
1607  	.name = "ECCCDH/SECP256R1 3",
1608  	.ecdh_type = ECCCDH,
1609  	.ec_str_p = &secp256r1_str_params,
1610  	.our_priv_key = ecccdh_SECP256R1_3_test_vector_our_priv_key,
1611  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_our_priv_key),
1612  	.peer_pub_key = ecccdh_SECP256R1_3_test_vector_peer_pub_key,
1613  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_peer_pub_key),
1614  	.exp_our_pub_key = ecccdh_SECP256R1_3_test_vector_our_pub_key,
1615  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_3_test_vector_our_pub_key),
1616  	.exp_shared_secret = ecccdh_SECP256R1_3_test_vector_shared_secret,
1617  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_3_test_vector_shared_secret),
1618  };
1619  #endif /* WITH_CURVE_SECP256R1 */
1620  
1621  #ifdef WITH_CURVE_SECP256R1
1622  #define ECCCDH_SECP256R1_SELF_TEST_4
1623  /*** Tests for ECCCDH/SECP256R1 ***/
1624  static const u8 ecccdh_SECP256R1_4_test_vector_our_priv_key[] = {
1625  	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  };
1627  static const u8 ecccdh_SECP256R1_4_test_vector_peer_pub_key[] = {
1628  	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  };
1630  static const u8 ecccdh_SECP256R1_4_test_vector_our_pub_key[] = {
1631  	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  };
1633  static const u8 ecccdh_SECP256R1_4_test_vector_shared_secret[] = {
1634  	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  };
1636  static const ecdh_test_case ecccdh_SECP256R1_4_test_case = {
1637  	.name = "ECCCDH/SECP256R1 4",
1638  	.ecdh_type = ECCCDH,
1639  	.ec_str_p = &secp256r1_str_params,
1640  	.our_priv_key = ecccdh_SECP256R1_4_test_vector_our_priv_key,
1641  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_our_priv_key),
1642  	.peer_pub_key = ecccdh_SECP256R1_4_test_vector_peer_pub_key,
1643  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_peer_pub_key),
1644  	.exp_our_pub_key = ecccdh_SECP256R1_4_test_vector_our_pub_key,
1645  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_4_test_vector_our_pub_key),
1646  	.exp_shared_secret = ecccdh_SECP256R1_4_test_vector_shared_secret,
1647  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_4_test_vector_shared_secret),
1648  };
1649  #endif /* WITH_CURVE_SECP256R1 */
1650  
1651  #ifdef WITH_CURVE_SECP256R1
1652  #define ECCCDH_SECP256R1_SELF_TEST_5
1653  /*** Tests for ECCCDH/SECP256R1 ***/
1654  static const u8 ecccdh_SECP256R1_5_test_vector_our_priv_key[] = {
1655  	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  };
1657  static const u8 ecccdh_SECP256R1_5_test_vector_peer_pub_key[] = {
1658  	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  };
1660  static const u8 ecccdh_SECP256R1_5_test_vector_our_pub_key[] = {
1661  	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  };
1663  static const u8 ecccdh_SECP256R1_5_test_vector_shared_secret[] = {
1664  	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  };
1666  static const ecdh_test_case ecccdh_SECP256R1_5_test_case = {
1667  	.name = "ECCCDH/SECP256R1 5",
1668  	.ecdh_type = ECCCDH,
1669  	.ec_str_p = &secp256r1_str_params,
1670  	.our_priv_key = ecccdh_SECP256R1_5_test_vector_our_priv_key,
1671  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_our_priv_key),
1672  	.peer_pub_key = ecccdh_SECP256R1_5_test_vector_peer_pub_key,
1673  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_peer_pub_key),
1674  	.exp_our_pub_key = ecccdh_SECP256R1_5_test_vector_our_pub_key,
1675  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_5_test_vector_our_pub_key),
1676  	.exp_shared_secret = ecccdh_SECP256R1_5_test_vector_shared_secret,
1677  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_5_test_vector_shared_secret),
1678  };
1679  #endif /* WITH_CURVE_SECP256R1 */
1680  
1681  #ifdef WITH_CURVE_SECP256R1
1682  #define ECCCDH_SECP256R1_SELF_TEST_6
1683  /*** Tests for ECCCDH/SECP256R1 ***/
1684  static const u8 ecccdh_SECP256R1_6_test_vector_our_priv_key[] = {
1685  	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  };
1687  static const u8 ecccdh_SECP256R1_6_test_vector_peer_pub_key[] = {
1688  	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  };
1690  static const u8 ecccdh_SECP256R1_6_test_vector_our_pub_key[] = {
1691  	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  };
1693  static const u8 ecccdh_SECP256R1_6_test_vector_shared_secret[] = {
1694  	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  };
1696  static const ecdh_test_case ecccdh_SECP256R1_6_test_case = {
1697  	.name = "ECCCDH/SECP256R1 6",
1698  	.ecdh_type = ECCCDH,
1699  	.ec_str_p = &secp256r1_str_params,
1700  	.our_priv_key = ecccdh_SECP256R1_6_test_vector_our_priv_key,
1701  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_our_priv_key),
1702  	.peer_pub_key = ecccdh_SECP256R1_6_test_vector_peer_pub_key,
1703  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_peer_pub_key),
1704  	.exp_our_pub_key = ecccdh_SECP256R1_6_test_vector_our_pub_key,
1705  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_6_test_vector_our_pub_key),
1706  	.exp_shared_secret = ecccdh_SECP256R1_6_test_vector_shared_secret,
1707  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_6_test_vector_shared_secret),
1708  };
1709  #endif /* WITH_CURVE_SECP256R1 */
1710  
1711  #ifdef WITH_CURVE_SECP256R1
1712  #define ECCCDH_SECP256R1_SELF_TEST_7
1713  /*** Tests for ECCCDH/SECP256R1 ***/
1714  static const u8 ecccdh_SECP256R1_7_test_vector_our_priv_key[] = {
1715  	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  };
1717  static const u8 ecccdh_SECP256R1_7_test_vector_peer_pub_key[] = {
1718  	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  };
1720  static const u8 ecccdh_SECP256R1_7_test_vector_our_pub_key[] = {
1721  	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  };
1723  static const u8 ecccdh_SECP256R1_7_test_vector_shared_secret[] = {
1724  	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  };
1726  static const ecdh_test_case ecccdh_SECP256R1_7_test_case = {
1727  	.name = "ECCCDH/SECP256R1 7",
1728  	.ecdh_type = ECCCDH,
1729  	.ec_str_p = &secp256r1_str_params,
1730  	.our_priv_key = ecccdh_SECP256R1_7_test_vector_our_priv_key,
1731  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_our_priv_key),
1732  	.peer_pub_key = ecccdh_SECP256R1_7_test_vector_peer_pub_key,
1733  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_peer_pub_key),
1734  	.exp_our_pub_key = ecccdh_SECP256R1_7_test_vector_our_pub_key,
1735  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_7_test_vector_our_pub_key),
1736  	.exp_shared_secret = ecccdh_SECP256R1_7_test_vector_shared_secret,
1737  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_7_test_vector_shared_secret),
1738  };
1739  #endif /* WITH_CURVE_SECP256R1 */
1740  
1741  #ifdef WITH_CURVE_SECP256R1
1742  #define ECCCDH_SECP256R1_SELF_TEST_8
1743  /*** Tests for ECCCDH/SECP256R1 ***/
1744  static const u8 ecccdh_SECP256R1_8_test_vector_our_priv_key[] = {
1745  	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  };
1747  static const u8 ecccdh_SECP256R1_8_test_vector_peer_pub_key[] = {
1748  	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  };
1750  static const u8 ecccdh_SECP256R1_8_test_vector_our_pub_key[] = {
1751  	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  };
1753  static const u8 ecccdh_SECP256R1_8_test_vector_shared_secret[] = {
1754  	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  };
1756  static const ecdh_test_case ecccdh_SECP256R1_8_test_case = {
1757  	.name = "ECCCDH/SECP256R1 8",
1758  	.ecdh_type = ECCCDH,
1759  	.ec_str_p = &secp256r1_str_params,
1760  	.our_priv_key = ecccdh_SECP256R1_8_test_vector_our_priv_key,
1761  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_our_priv_key),
1762  	.peer_pub_key = ecccdh_SECP256R1_8_test_vector_peer_pub_key,
1763  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_peer_pub_key),
1764  	.exp_our_pub_key = ecccdh_SECP256R1_8_test_vector_our_pub_key,
1765  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_8_test_vector_our_pub_key),
1766  	.exp_shared_secret = ecccdh_SECP256R1_8_test_vector_shared_secret,
1767  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_8_test_vector_shared_secret),
1768  };
1769  #endif /* WITH_CURVE_SECP256R1 */
1770  
1771  #ifdef WITH_CURVE_SECP256R1
1772  #define ECCCDH_SECP256R1_SELF_TEST_9
1773  /*** Tests for ECCCDH/SECP256R1 ***/
1774  static const u8 ecccdh_SECP256R1_9_test_vector_our_priv_key[] = {
1775  	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  };
1777  static const u8 ecccdh_SECP256R1_9_test_vector_peer_pub_key[] = {
1778  	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  };
1780  static const u8 ecccdh_SECP256R1_9_test_vector_our_pub_key[] = {
1781  	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  };
1783  static const u8 ecccdh_SECP256R1_9_test_vector_shared_secret[] = {
1784  	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  };
1786  static const ecdh_test_case ecccdh_SECP256R1_9_test_case = {
1787  	.name = "ECCCDH/SECP256R1 9",
1788  	.ecdh_type = ECCCDH,
1789  	.ec_str_p = &secp256r1_str_params,
1790  	.our_priv_key = ecccdh_SECP256R1_9_test_vector_our_priv_key,
1791  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_our_priv_key),
1792  	.peer_pub_key = ecccdh_SECP256R1_9_test_vector_peer_pub_key,
1793  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_peer_pub_key),
1794  	.exp_our_pub_key = ecccdh_SECP256R1_9_test_vector_our_pub_key,
1795  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_9_test_vector_our_pub_key),
1796  	.exp_shared_secret = ecccdh_SECP256R1_9_test_vector_shared_secret,
1797  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_9_test_vector_shared_secret),
1798  };
1799  #endif /* WITH_CURVE_SECP256R1 */
1800  
1801  #ifdef WITH_CURVE_SECP256R1
1802  #define ECCCDH_SECP256R1_SELF_TEST_10
1803  /*** Tests for ECCCDH/SECP256R1 ***/
1804  static const u8 ecccdh_SECP256R1_10_test_vector_our_priv_key[] = {
1805  	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  };
1807  static const u8 ecccdh_SECP256R1_10_test_vector_peer_pub_key[] = {
1808  	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  };
1810  static const u8 ecccdh_SECP256R1_10_test_vector_our_pub_key[] = {
1811  	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  };
1813  static const u8 ecccdh_SECP256R1_10_test_vector_shared_secret[] = {
1814  	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  };
1816  static const ecdh_test_case ecccdh_SECP256R1_10_test_case = {
1817  	.name = "ECCCDH/SECP256R1 10",
1818  	.ecdh_type = ECCCDH,
1819  	.ec_str_p = &secp256r1_str_params,
1820  	.our_priv_key = ecccdh_SECP256R1_10_test_vector_our_priv_key,
1821  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_our_priv_key),
1822  	.peer_pub_key = ecccdh_SECP256R1_10_test_vector_peer_pub_key,
1823  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_peer_pub_key),
1824  	.exp_our_pub_key = ecccdh_SECP256R1_10_test_vector_our_pub_key,
1825  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_10_test_vector_our_pub_key),
1826  	.exp_shared_secret = ecccdh_SECP256R1_10_test_vector_shared_secret,
1827  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_10_test_vector_shared_secret),
1828  };
1829  #endif /* WITH_CURVE_SECP256R1 */
1830  
1831  #ifdef WITH_CURVE_SECP256R1
1832  #define ECCCDH_SECP256R1_SELF_TEST_11
1833  /*** Tests for ECCCDH/SECP256R1 ***/
1834  static const u8 ecccdh_SECP256R1_11_test_vector_our_priv_key[] = {
1835  	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  };
1837  static const u8 ecccdh_SECP256R1_11_test_vector_peer_pub_key[] = {
1838  	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  };
1840  static const u8 ecccdh_SECP256R1_11_test_vector_our_pub_key[] = {
1841  	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  };
1843  static const u8 ecccdh_SECP256R1_11_test_vector_shared_secret[] = {
1844  	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  };
1846  static const ecdh_test_case ecccdh_SECP256R1_11_test_case = {
1847  	.name = "ECCCDH/SECP256R1 11",
1848  	.ecdh_type = ECCCDH,
1849  	.ec_str_p = &secp256r1_str_params,
1850  	.our_priv_key = ecccdh_SECP256R1_11_test_vector_our_priv_key,
1851  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_our_priv_key),
1852  	.peer_pub_key = ecccdh_SECP256R1_11_test_vector_peer_pub_key,
1853  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_peer_pub_key),
1854  	.exp_our_pub_key = ecccdh_SECP256R1_11_test_vector_our_pub_key,
1855  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_11_test_vector_our_pub_key),
1856  	.exp_shared_secret = ecccdh_SECP256R1_11_test_vector_shared_secret,
1857  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_11_test_vector_shared_secret),
1858  };
1859  #endif /* WITH_CURVE_SECP256R1 */
1860  
1861  #ifdef WITH_CURVE_SECP256R1
1862  #define ECCCDH_SECP256R1_SELF_TEST_12
1863  /*** Tests for ECCCDH/SECP256R1 ***/
1864  static const u8 ecccdh_SECP256R1_12_test_vector_our_priv_key[] = {
1865  	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  };
1867  static const u8 ecccdh_SECP256R1_12_test_vector_peer_pub_key[] = {
1868  	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  };
1870  static const u8 ecccdh_SECP256R1_12_test_vector_our_pub_key[] = {
1871  	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  };
1873  static const u8 ecccdh_SECP256R1_12_test_vector_shared_secret[] = {
1874  	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  };
1876  static const ecdh_test_case ecccdh_SECP256R1_12_test_case = {
1877  	.name = "ECCCDH/SECP256R1 12",
1878  	.ecdh_type = ECCCDH,
1879  	.ec_str_p = &secp256r1_str_params,
1880  	.our_priv_key = ecccdh_SECP256R1_12_test_vector_our_priv_key,
1881  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_our_priv_key),
1882  	.peer_pub_key = ecccdh_SECP256R1_12_test_vector_peer_pub_key,
1883  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_peer_pub_key),
1884  	.exp_our_pub_key = ecccdh_SECP256R1_12_test_vector_our_pub_key,
1885  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_12_test_vector_our_pub_key),
1886  	.exp_shared_secret = ecccdh_SECP256R1_12_test_vector_shared_secret,
1887  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_12_test_vector_shared_secret),
1888  };
1889  #endif /* WITH_CURVE_SECP256R1 */
1890  
1891  #ifdef WITH_CURVE_SECP256R1
1892  #define ECCCDH_SECP256R1_SELF_TEST_13
1893  /*** Tests for ECCCDH/SECP256R1 ***/
1894  static const u8 ecccdh_SECP256R1_13_test_vector_our_priv_key[] = {
1895  	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  };
1897  static const u8 ecccdh_SECP256R1_13_test_vector_peer_pub_key[] = {
1898  	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  };
1900  static const u8 ecccdh_SECP256R1_13_test_vector_our_pub_key[] = {
1901  	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  };
1903  static const u8 ecccdh_SECP256R1_13_test_vector_shared_secret[] = {
1904  	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  };
1906  static const ecdh_test_case ecccdh_SECP256R1_13_test_case = {
1907  	.name = "ECCCDH/SECP256R1 13",
1908  	.ecdh_type = ECCCDH,
1909  	.ec_str_p = &secp256r1_str_params,
1910  	.our_priv_key = ecccdh_SECP256R1_13_test_vector_our_priv_key,
1911  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_our_priv_key),
1912  	.peer_pub_key = ecccdh_SECP256R1_13_test_vector_peer_pub_key,
1913  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_peer_pub_key),
1914  	.exp_our_pub_key = ecccdh_SECP256R1_13_test_vector_our_pub_key,
1915  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_13_test_vector_our_pub_key),
1916  	.exp_shared_secret = ecccdh_SECP256R1_13_test_vector_shared_secret,
1917  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_13_test_vector_shared_secret),
1918  };
1919  #endif /* WITH_CURVE_SECP256R1 */
1920  
1921  #ifdef WITH_CURVE_SECP256R1
1922  #define ECCCDH_SECP256R1_SELF_TEST_14
1923  /*** Tests for ECCCDH/SECP256R1 ***/
1924  static const u8 ecccdh_SECP256R1_14_test_vector_our_priv_key[] = {
1925  	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  };
1927  static const u8 ecccdh_SECP256R1_14_test_vector_peer_pub_key[] = {
1928  	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  };
1930  static const u8 ecccdh_SECP256R1_14_test_vector_our_pub_key[] = {
1931  	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  };
1933  static const u8 ecccdh_SECP256R1_14_test_vector_shared_secret[] = {
1934  	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  };
1936  static const ecdh_test_case ecccdh_SECP256R1_14_test_case = {
1937  	.name = "ECCCDH/SECP256R1 14",
1938  	.ecdh_type = ECCCDH,
1939  	.ec_str_p = &secp256r1_str_params,
1940  	.our_priv_key = ecccdh_SECP256R1_14_test_vector_our_priv_key,
1941  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_our_priv_key),
1942  	.peer_pub_key = ecccdh_SECP256R1_14_test_vector_peer_pub_key,
1943  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_peer_pub_key),
1944  	.exp_our_pub_key = ecccdh_SECP256R1_14_test_vector_our_pub_key,
1945  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_14_test_vector_our_pub_key),
1946  	.exp_shared_secret = ecccdh_SECP256R1_14_test_vector_shared_secret,
1947  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_14_test_vector_shared_secret),
1948  };
1949  #endif /* WITH_CURVE_SECP256R1 */
1950  
1951  #ifdef WITH_CURVE_SECP256R1
1952  #define ECCCDH_SECP256R1_SELF_TEST_15
1953  /*** Tests for ECCCDH/SECP256R1 ***/
1954  static const u8 ecccdh_SECP256R1_15_test_vector_our_priv_key[] = {
1955  	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  };
1957  static const u8 ecccdh_SECP256R1_15_test_vector_peer_pub_key[] = {
1958  	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  };
1960  static const u8 ecccdh_SECP256R1_15_test_vector_our_pub_key[] = {
1961  	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  };
1963  static const u8 ecccdh_SECP256R1_15_test_vector_shared_secret[] = {
1964  	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  };
1966  static const ecdh_test_case ecccdh_SECP256R1_15_test_case = {
1967  	.name = "ECCCDH/SECP256R1 15",
1968  	.ecdh_type = ECCCDH,
1969  	.ec_str_p = &secp256r1_str_params,
1970  	.our_priv_key = ecccdh_SECP256R1_15_test_vector_our_priv_key,
1971  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_our_priv_key),
1972  	.peer_pub_key = ecccdh_SECP256R1_15_test_vector_peer_pub_key,
1973  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_peer_pub_key),
1974  	.exp_our_pub_key = ecccdh_SECP256R1_15_test_vector_our_pub_key,
1975  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_15_test_vector_our_pub_key),
1976  	.exp_shared_secret = ecccdh_SECP256R1_15_test_vector_shared_secret,
1977  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_15_test_vector_shared_secret),
1978  };
1979  #endif /* WITH_CURVE_SECP256R1 */
1980  
1981  #ifdef WITH_CURVE_SECP256R1
1982  #define ECCCDH_SECP256R1_SELF_TEST_16
1983  /*** Tests for ECCCDH/SECP256R1 ***/
1984  static const u8 ecccdh_SECP256R1_16_test_vector_our_priv_key[] = {
1985  	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  };
1987  static const u8 ecccdh_SECP256R1_16_test_vector_peer_pub_key[] = {
1988  	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  };
1990  static const u8 ecccdh_SECP256R1_16_test_vector_our_pub_key[] = {
1991  	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  };
1993  static const u8 ecccdh_SECP256R1_16_test_vector_shared_secret[] = {
1994  	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  };
1996  static const ecdh_test_case ecccdh_SECP256R1_16_test_case = {
1997  	.name = "ECCCDH/SECP256R1 16",
1998  	.ecdh_type = ECCCDH,
1999  	.ec_str_p = &secp256r1_str_params,
2000  	.our_priv_key = ecccdh_SECP256R1_16_test_vector_our_priv_key,
2001  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_our_priv_key),
2002  	.peer_pub_key = ecccdh_SECP256R1_16_test_vector_peer_pub_key,
2003  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_peer_pub_key),
2004  	.exp_our_pub_key = ecccdh_SECP256R1_16_test_vector_our_pub_key,
2005  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_16_test_vector_our_pub_key),
2006  	.exp_shared_secret = ecccdh_SECP256R1_16_test_vector_shared_secret,
2007  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_16_test_vector_shared_secret),
2008  };
2009  #endif /* WITH_CURVE_SECP256R1 */
2010  
2011  #ifdef WITH_CURVE_SECP256R1
2012  #define ECCCDH_SECP256R1_SELF_TEST_17
2013  /*** Tests for ECCCDH/SECP256R1 ***/
2014  static const u8 ecccdh_SECP256R1_17_test_vector_our_priv_key[] = {
2015  	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  };
2017  static const u8 ecccdh_SECP256R1_17_test_vector_peer_pub_key[] = {
2018  	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  };
2020  static const u8 ecccdh_SECP256R1_17_test_vector_our_pub_key[] = {
2021  	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  };
2023  static const u8 ecccdh_SECP256R1_17_test_vector_shared_secret[] = {
2024  	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  };
2026  static const ecdh_test_case ecccdh_SECP256R1_17_test_case = {
2027  	.name = "ECCCDH/SECP256R1 17",
2028  	.ecdh_type = ECCCDH,
2029  	.ec_str_p = &secp256r1_str_params,
2030  	.our_priv_key = ecccdh_SECP256R1_17_test_vector_our_priv_key,
2031  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_our_priv_key),
2032  	.peer_pub_key = ecccdh_SECP256R1_17_test_vector_peer_pub_key,
2033  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_peer_pub_key),
2034  	.exp_our_pub_key = ecccdh_SECP256R1_17_test_vector_our_pub_key,
2035  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_17_test_vector_our_pub_key),
2036  	.exp_shared_secret = ecccdh_SECP256R1_17_test_vector_shared_secret,
2037  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_17_test_vector_shared_secret),
2038  };
2039  #endif /* WITH_CURVE_SECP256R1 */
2040  
2041  #ifdef WITH_CURVE_SECP256R1
2042  #define ECCCDH_SECP256R1_SELF_TEST_18
2043  /*** Tests for ECCCDH/SECP256R1 ***/
2044  static const u8 ecccdh_SECP256R1_18_test_vector_our_priv_key[] = {
2045  	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  };
2047  static const u8 ecccdh_SECP256R1_18_test_vector_peer_pub_key[] = {
2048  	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  };
2050  static const u8 ecccdh_SECP256R1_18_test_vector_our_pub_key[] = {
2051  	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  };
2053  static const u8 ecccdh_SECP256R1_18_test_vector_shared_secret[] = {
2054  	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  };
2056  static const ecdh_test_case ecccdh_SECP256R1_18_test_case = {
2057  	.name = "ECCCDH/SECP256R1 18",
2058  	.ecdh_type = ECCCDH,
2059  	.ec_str_p = &secp256r1_str_params,
2060  	.our_priv_key = ecccdh_SECP256R1_18_test_vector_our_priv_key,
2061  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_our_priv_key),
2062  	.peer_pub_key = ecccdh_SECP256R1_18_test_vector_peer_pub_key,
2063  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_peer_pub_key),
2064  	.exp_our_pub_key = ecccdh_SECP256R1_18_test_vector_our_pub_key,
2065  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_18_test_vector_our_pub_key),
2066  	.exp_shared_secret = ecccdh_SECP256R1_18_test_vector_shared_secret,
2067  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_18_test_vector_shared_secret),
2068  };
2069  #endif /* WITH_CURVE_SECP256R1 */
2070  
2071  #ifdef WITH_CURVE_SECP256R1
2072  #define ECCCDH_SECP256R1_SELF_TEST_19
2073  /*** Tests for ECCCDH/SECP256R1 ***/
2074  static const u8 ecccdh_SECP256R1_19_test_vector_our_priv_key[] = {
2075  	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  };
2077  static const u8 ecccdh_SECP256R1_19_test_vector_peer_pub_key[] = {
2078  	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  };
2080  static const u8 ecccdh_SECP256R1_19_test_vector_our_pub_key[] = {
2081  	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  };
2083  static const u8 ecccdh_SECP256R1_19_test_vector_shared_secret[] = {
2084  	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  };
2086  static const ecdh_test_case ecccdh_SECP256R1_19_test_case = {
2087  	.name = "ECCCDH/SECP256R1 19",
2088  	.ecdh_type = ECCCDH,
2089  	.ec_str_p = &secp256r1_str_params,
2090  	.our_priv_key = ecccdh_SECP256R1_19_test_vector_our_priv_key,
2091  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_our_priv_key),
2092  	.peer_pub_key = ecccdh_SECP256R1_19_test_vector_peer_pub_key,
2093  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_peer_pub_key),
2094  	.exp_our_pub_key = ecccdh_SECP256R1_19_test_vector_our_pub_key,
2095  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_19_test_vector_our_pub_key),
2096  	.exp_shared_secret = ecccdh_SECP256R1_19_test_vector_shared_secret,
2097  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_19_test_vector_shared_secret),
2098  };
2099  #endif /* WITH_CURVE_SECP256R1 */
2100  
2101  #ifdef WITH_CURVE_SECP256R1
2102  #define ECCCDH_SECP256R1_SELF_TEST_20
2103  /*** Tests for ECCCDH/SECP256R1 ***/
2104  static const u8 ecccdh_SECP256R1_20_test_vector_our_priv_key[] = {
2105  	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  };
2107  static const u8 ecccdh_SECP256R1_20_test_vector_peer_pub_key[] = {
2108  	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  };
2110  static const u8 ecccdh_SECP256R1_20_test_vector_our_pub_key[] = {
2111  	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  };
2113  static const u8 ecccdh_SECP256R1_20_test_vector_shared_secret[] = {
2114  	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  };
2116  static const ecdh_test_case ecccdh_SECP256R1_20_test_case = {
2117  	.name = "ECCCDH/SECP256R1 20",
2118  	.ecdh_type = ECCCDH,
2119  	.ec_str_p = &secp256r1_str_params,
2120  	.our_priv_key = ecccdh_SECP256R1_20_test_vector_our_priv_key,
2121  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_our_priv_key),
2122  	.peer_pub_key = ecccdh_SECP256R1_20_test_vector_peer_pub_key,
2123  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_peer_pub_key),
2124  	.exp_our_pub_key = ecccdh_SECP256R1_20_test_vector_our_pub_key,
2125  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_20_test_vector_our_pub_key),
2126  	.exp_shared_secret = ecccdh_SECP256R1_20_test_vector_shared_secret,
2127  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_20_test_vector_shared_secret),
2128  };
2129  #endif /* WITH_CURVE_SECP256R1 */
2130  
2131  #ifdef WITH_CURVE_SECP256R1
2132  #define ECCCDH_SECP256R1_SELF_TEST_21
2133  /*** Tests for ECCCDH/SECP256R1 ***/
2134  static const u8 ecccdh_SECP256R1_21_test_vector_our_priv_key[] = {
2135  	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  };
2137  static const u8 ecccdh_SECP256R1_21_test_vector_peer_pub_key[] = {
2138  	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  };
2140  static const u8 ecccdh_SECP256R1_21_test_vector_our_pub_key[] = {
2141  	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  };
2143  static const u8 ecccdh_SECP256R1_21_test_vector_shared_secret[] = {
2144  	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  };
2146  static const ecdh_test_case ecccdh_SECP256R1_21_test_case = {
2147  	.name = "ECCCDH/SECP256R1 21",
2148  	.ecdh_type = ECCCDH,
2149  	.ec_str_p = &secp256r1_str_params,
2150  	.our_priv_key = ecccdh_SECP256R1_21_test_vector_our_priv_key,
2151  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_our_priv_key),
2152  	.peer_pub_key = ecccdh_SECP256R1_21_test_vector_peer_pub_key,
2153  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_peer_pub_key),
2154  	.exp_our_pub_key = ecccdh_SECP256R1_21_test_vector_our_pub_key,
2155  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_21_test_vector_our_pub_key),
2156  	.exp_shared_secret = ecccdh_SECP256R1_21_test_vector_shared_secret,
2157  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_21_test_vector_shared_secret),
2158  };
2159  #endif /* WITH_CURVE_SECP256R1 */
2160  
2161  #ifdef WITH_CURVE_SECP256R1
2162  #define ECCCDH_SECP256R1_SELF_TEST_22
2163  /*** Tests for ECCCDH/SECP256R1 ***/
2164  static const u8 ecccdh_SECP256R1_22_test_vector_our_priv_key[] = {
2165  	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  };
2167  static const u8 ecccdh_SECP256R1_22_test_vector_peer_pub_key[] = {
2168  	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  };
2170  static const u8 ecccdh_SECP256R1_22_test_vector_our_pub_key[] = {
2171  	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  };
2173  static const u8 ecccdh_SECP256R1_22_test_vector_shared_secret[] = {
2174  	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  };
2176  static const ecdh_test_case ecccdh_SECP256R1_22_test_case = {
2177  	.name = "ECCCDH/SECP256R1 22",
2178  	.ecdh_type = ECCCDH,
2179  	.ec_str_p = &secp256r1_str_params,
2180  	.our_priv_key = ecccdh_SECP256R1_22_test_vector_our_priv_key,
2181  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_our_priv_key),
2182  	.peer_pub_key = ecccdh_SECP256R1_22_test_vector_peer_pub_key,
2183  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_peer_pub_key),
2184  	.exp_our_pub_key = ecccdh_SECP256R1_22_test_vector_our_pub_key,
2185  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_22_test_vector_our_pub_key),
2186  	.exp_shared_secret = ecccdh_SECP256R1_22_test_vector_shared_secret,
2187  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_22_test_vector_shared_secret),
2188  };
2189  #endif /* WITH_CURVE_SECP256R1 */
2190  
2191  #ifdef WITH_CURVE_SECP256R1
2192  #define ECCCDH_SECP256R1_SELF_TEST_23
2193  /*** Tests for ECCCDH/SECP256R1 ***/
2194  static const u8 ecccdh_SECP256R1_23_test_vector_our_priv_key[] = {
2195  	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  };
2197  static const u8 ecccdh_SECP256R1_23_test_vector_peer_pub_key[] = {
2198  	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  };
2200  static const u8 ecccdh_SECP256R1_23_test_vector_our_pub_key[] = {
2201  	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  };
2203  static const u8 ecccdh_SECP256R1_23_test_vector_shared_secret[] = {
2204  	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  };
2206  static const ecdh_test_case ecccdh_SECP256R1_23_test_case = {
2207  	.name = "ECCCDH/SECP256R1 23",
2208  	.ecdh_type = ECCCDH,
2209  	.ec_str_p = &secp256r1_str_params,
2210  	.our_priv_key = ecccdh_SECP256R1_23_test_vector_our_priv_key,
2211  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_our_priv_key),
2212  	.peer_pub_key = ecccdh_SECP256R1_23_test_vector_peer_pub_key,
2213  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_peer_pub_key),
2214  	.exp_our_pub_key = ecccdh_SECP256R1_23_test_vector_our_pub_key,
2215  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_23_test_vector_our_pub_key),
2216  	.exp_shared_secret = ecccdh_SECP256R1_23_test_vector_shared_secret,
2217  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_23_test_vector_shared_secret),
2218  };
2219  #endif /* WITH_CURVE_SECP256R1 */
2220  
2221  #ifdef WITH_CURVE_SECP256R1
2222  #define ECCCDH_SECP256R1_SELF_TEST_24
2223  /*** Tests for ECCCDH/SECP256R1 ***/
2224  static const u8 ecccdh_SECP256R1_24_test_vector_our_priv_key[] = {
2225  	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  };
2227  static const u8 ecccdh_SECP256R1_24_test_vector_peer_pub_key[] = {
2228  	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  };
2230  static const u8 ecccdh_SECP256R1_24_test_vector_our_pub_key[] = {
2231  	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  };
2233  static const u8 ecccdh_SECP256R1_24_test_vector_shared_secret[] = {
2234  	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  };
2236  static const ecdh_test_case ecccdh_SECP256R1_24_test_case = {
2237  	.name = "ECCCDH/SECP256R1 24",
2238  	.ecdh_type = ECCCDH,
2239  	.ec_str_p = &secp256r1_str_params,
2240  	.our_priv_key = ecccdh_SECP256R1_24_test_vector_our_priv_key,
2241  	.our_priv_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_our_priv_key),
2242  	.peer_pub_key = ecccdh_SECP256R1_24_test_vector_peer_pub_key,
2243  	.peer_pub_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_peer_pub_key),
2244  	.exp_our_pub_key = ecccdh_SECP256R1_24_test_vector_our_pub_key,
2245  	.exp_our_pub_key_len = sizeof(ecccdh_SECP256R1_24_test_vector_our_pub_key),
2246  	.exp_shared_secret = ecccdh_SECP256R1_24_test_vector_shared_secret,
2247  	.exp_shared_secret_len = sizeof(ecccdh_SECP256R1_24_test_vector_shared_secret),
2248  };
2249  #endif /* WITH_CURVE_SECP256R1 */
2250  
2251  #ifdef WITH_CURVE_SECP384R1
2252  #define ECCCDH_SECP384R1_SELF_TEST_0
2253  /*** Tests for ECCCDH/SECP384R1 ***/
2254  static const u8 ecccdh_SECP384R1_0_test_vector_our_priv_key[] = {
2255  	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  };
2257  static const u8 ecccdh_SECP384R1_0_test_vector_peer_pub_key[] = {
2258  	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  };
2260  static const u8 ecccdh_SECP384R1_0_test_vector_our_pub_key[] = {
2261  	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  };
2263  static const u8 ecccdh_SECP384R1_0_test_vector_shared_secret[] = {
2264  	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  };
2266  static const ecdh_test_case ecccdh_SECP384R1_0_test_case = {
2267  	.name = "ECCCDH/SECP384R1 0",
2268  	.ecdh_type = ECCCDH,
2269  	.ec_str_p = &secp384r1_str_params,
2270  	.our_priv_key = ecccdh_SECP384R1_0_test_vector_our_priv_key,
2271  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_our_priv_key),
2272  	.peer_pub_key = ecccdh_SECP384R1_0_test_vector_peer_pub_key,
2273  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_peer_pub_key),
2274  	.exp_our_pub_key = ecccdh_SECP384R1_0_test_vector_our_pub_key,
2275  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_0_test_vector_our_pub_key),
2276  	.exp_shared_secret = ecccdh_SECP384R1_0_test_vector_shared_secret,
2277  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_0_test_vector_shared_secret),
2278  };
2279  #endif /* WITH_CURVE_SECP384R1 */
2280  
2281  #ifdef WITH_CURVE_SECP384R1
2282  #define ECCCDH_SECP384R1_SELF_TEST_1
2283  /*** Tests for ECCCDH/SECP384R1 ***/
2284  static const u8 ecccdh_SECP384R1_1_test_vector_our_priv_key[] = {
2285  	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  };
2287  static const u8 ecccdh_SECP384R1_1_test_vector_peer_pub_key[] = {
2288  	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  };
2290  static const u8 ecccdh_SECP384R1_1_test_vector_our_pub_key[] = {
2291  	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  };
2293  static const u8 ecccdh_SECP384R1_1_test_vector_shared_secret[] = {
2294  	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  };
2296  static const ecdh_test_case ecccdh_SECP384R1_1_test_case = {
2297  	.name = "ECCCDH/SECP384R1 1",
2298  	.ecdh_type = ECCCDH,
2299  	.ec_str_p = &secp384r1_str_params,
2300  	.our_priv_key = ecccdh_SECP384R1_1_test_vector_our_priv_key,
2301  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_our_priv_key),
2302  	.peer_pub_key = ecccdh_SECP384R1_1_test_vector_peer_pub_key,
2303  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_peer_pub_key),
2304  	.exp_our_pub_key = ecccdh_SECP384R1_1_test_vector_our_pub_key,
2305  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_1_test_vector_our_pub_key),
2306  	.exp_shared_secret = ecccdh_SECP384R1_1_test_vector_shared_secret,
2307  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_1_test_vector_shared_secret),
2308  };
2309  #endif /* WITH_CURVE_SECP384R1 */
2310  
2311  #ifdef WITH_CURVE_SECP384R1
2312  #define ECCCDH_SECP384R1_SELF_TEST_2
2313  /*** Tests for ECCCDH/SECP384R1 ***/
2314  static const u8 ecccdh_SECP384R1_2_test_vector_our_priv_key[] = {
2315  	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  };
2317  static const u8 ecccdh_SECP384R1_2_test_vector_peer_pub_key[] = {
2318  	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  };
2320  static const u8 ecccdh_SECP384R1_2_test_vector_our_pub_key[] = {
2321  	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  };
2323  static const u8 ecccdh_SECP384R1_2_test_vector_shared_secret[] = {
2324  	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  };
2326  static const ecdh_test_case ecccdh_SECP384R1_2_test_case = {
2327  	.name = "ECCCDH/SECP384R1 2",
2328  	.ecdh_type = ECCCDH,
2329  	.ec_str_p = &secp384r1_str_params,
2330  	.our_priv_key = ecccdh_SECP384R1_2_test_vector_our_priv_key,
2331  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_our_priv_key),
2332  	.peer_pub_key = ecccdh_SECP384R1_2_test_vector_peer_pub_key,
2333  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_peer_pub_key),
2334  	.exp_our_pub_key = ecccdh_SECP384R1_2_test_vector_our_pub_key,
2335  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_2_test_vector_our_pub_key),
2336  	.exp_shared_secret = ecccdh_SECP384R1_2_test_vector_shared_secret,
2337  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_2_test_vector_shared_secret),
2338  };
2339  #endif /* WITH_CURVE_SECP384R1 */
2340  
2341  #ifdef WITH_CURVE_SECP384R1
2342  #define ECCCDH_SECP384R1_SELF_TEST_3
2343  /*** Tests for ECCCDH/SECP384R1 ***/
2344  static const u8 ecccdh_SECP384R1_3_test_vector_our_priv_key[] = {
2345  	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  };
2347  static const u8 ecccdh_SECP384R1_3_test_vector_peer_pub_key[] = {
2348  	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  };
2350  static const u8 ecccdh_SECP384R1_3_test_vector_our_pub_key[] = {
2351  	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  };
2353  static const u8 ecccdh_SECP384R1_3_test_vector_shared_secret[] = {
2354  	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  };
2356  static const ecdh_test_case ecccdh_SECP384R1_3_test_case = {
2357  	.name = "ECCCDH/SECP384R1 3",
2358  	.ecdh_type = ECCCDH,
2359  	.ec_str_p = &secp384r1_str_params,
2360  	.our_priv_key = ecccdh_SECP384R1_3_test_vector_our_priv_key,
2361  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_our_priv_key),
2362  	.peer_pub_key = ecccdh_SECP384R1_3_test_vector_peer_pub_key,
2363  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_peer_pub_key),
2364  	.exp_our_pub_key = ecccdh_SECP384R1_3_test_vector_our_pub_key,
2365  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_3_test_vector_our_pub_key),
2366  	.exp_shared_secret = ecccdh_SECP384R1_3_test_vector_shared_secret,
2367  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_3_test_vector_shared_secret),
2368  };
2369  #endif /* WITH_CURVE_SECP384R1 */
2370  
2371  #ifdef WITH_CURVE_SECP384R1
2372  #define ECCCDH_SECP384R1_SELF_TEST_4
2373  /*** Tests for ECCCDH/SECP384R1 ***/
2374  static const u8 ecccdh_SECP384R1_4_test_vector_our_priv_key[] = {
2375  	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  };
2377  static const u8 ecccdh_SECP384R1_4_test_vector_peer_pub_key[] = {
2378  	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  };
2380  static const u8 ecccdh_SECP384R1_4_test_vector_our_pub_key[] = {
2381  	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  };
2383  static const u8 ecccdh_SECP384R1_4_test_vector_shared_secret[] = {
2384  	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  };
2386  static const ecdh_test_case ecccdh_SECP384R1_4_test_case = {
2387  	.name = "ECCCDH/SECP384R1 4",
2388  	.ecdh_type = ECCCDH,
2389  	.ec_str_p = &secp384r1_str_params,
2390  	.our_priv_key = ecccdh_SECP384R1_4_test_vector_our_priv_key,
2391  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_our_priv_key),
2392  	.peer_pub_key = ecccdh_SECP384R1_4_test_vector_peer_pub_key,
2393  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_peer_pub_key),
2394  	.exp_our_pub_key = ecccdh_SECP384R1_4_test_vector_our_pub_key,
2395  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_4_test_vector_our_pub_key),
2396  	.exp_shared_secret = ecccdh_SECP384R1_4_test_vector_shared_secret,
2397  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_4_test_vector_shared_secret),
2398  };
2399  #endif /* WITH_CURVE_SECP384R1 */
2400  
2401  #ifdef WITH_CURVE_SECP384R1
2402  #define ECCCDH_SECP384R1_SELF_TEST_5
2403  /*** Tests for ECCCDH/SECP384R1 ***/
2404  static const u8 ecccdh_SECP384R1_5_test_vector_our_priv_key[] = {
2405  	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  };
2407  static const u8 ecccdh_SECP384R1_5_test_vector_peer_pub_key[] = {
2408  	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  };
2410  static const u8 ecccdh_SECP384R1_5_test_vector_our_pub_key[] = {
2411  	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  };
2413  static const u8 ecccdh_SECP384R1_5_test_vector_shared_secret[] = {
2414  	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  };
2416  static const ecdh_test_case ecccdh_SECP384R1_5_test_case = {
2417  	.name = "ECCCDH/SECP384R1 5",
2418  	.ecdh_type = ECCCDH,
2419  	.ec_str_p = &secp384r1_str_params,
2420  	.our_priv_key = ecccdh_SECP384R1_5_test_vector_our_priv_key,
2421  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_our_priv_key),
2422  	.peer_pub_key = ecccdh_SECP384R1_5_test_vector_peer_pub_key,
2423  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_peer_pub_key),
2424  	.exp_our_pub_key = ecccdh_SECP384R1_5_test_vector_our_pub_key,
2425  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_5_test_vector_our_pub_key),
2426  	.exp_shared_secret = ecccdh_SECP384R1_5_test_vector_shared_secret,
2427  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_5_test_vector_shared_secret),
2428  };
2429  #endif /* WITH_CURVE_SECP384R1 */
2430  
2431  #ifdef WITH_CURVE_SECP384R1
2432  #define ECCCDH_SECP384R1_SELF_TEST_6
2433  /*** Tests for ECCCDH/SECP384R1 ***/
2434  static const u8 ecccdh_SECP384R1_6_test_vector_our_priv_key[] = {
2435  	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  };
2437  static const u8 ecccdh_SECP384R1_6_test_vector_peer_pub_key[] = {
2438  	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  };
2440  static const u8 ecccdh_SECP384R1_6_test_vector_our_pub_key[] = {
2441  	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  };
2443  static const u8 ecccdh_SECP384R1_6_test_vector_shared_secret[] = {
2444  	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  };
2446  static const ecdh_test_case ecccdh_SECP384R1_6_test_case = {
2447  	.name = "ECCCDH/SECP384R1 6",
2448  	.ecdh_type = ECCCDH,
2449  	.ec_str_p = &secp384r1_str_params,
2450  	.our_priv_key = ecccdh_SECP384R1_6_test_vector_our_priv_key,
2451  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_our_priv_key),
2452  	.peer_pub_key = ecccdh_SECP384R1_6_test_vector_peer_pub_key,
2453  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_peer_pub_key),
2454  	.exp_our_pub_key = ecccdh_SECP384R1_6_test_vector_our_pub_key,
2455  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_6_test_vector_our_pub_key),
2456  	.exp_shared_secret = ecccdh_SECP384R1_6_test_vector_shared_secret,
2457  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_6_test_vector_shared_secret),
2458  };
2459  #endif /* WITH_CURVE_SECP384R1 */
2460  
2461  #ifdef WITH_CURVE_SECP384R1
2462  #define ECCCDH_SECP384R1_SELF_TEST_7
2463  /*** Tests for ECCCDH/SECP384R1 ***/
2464  static const u8 ecccdh_SECP384R1_7_test_vector_our_priv_key[] = {
2465  	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  };
2467  static const u8 ecccdh_SECP384R1_7_test_vector_peer_pub_key[] = {
2468  	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  };
2470  static const u8 ecccdh_SECP384R1_7_test_vector_our_pub_key[] = {
2471  	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  };
2473  static const u8 ecccdh_SECP384R1_7_test_vector_shared_secret[] = {
2474  	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  };
2476  static const ecdh_test_case ecccdh_SECP384R1_7_test_case = {
2477  	.name = "ECCCDH/SECP384R1 7",
2478  	.ecdh_type = ECCCDH,
2479  	.ec_str_p = &secp384r1_str_params,
2480  	.our_priv_key = ecccdh_SECP384R1_7_test_vector_our_priv_key,
2481  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_our_priv_key),
2482  	.peer_pub_key = ecccdh_SECP384R1_7_test_vector_peer_pub_key,
2483  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_peer_pub_key),
2484  	.exp_our_pub_key = ecccdh_SECP384R1_7_test_vector_our_pub_key,
2485  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_7_test_vector_our_pub_key),
2486  	.exp_shared_secret = ecccdh_SECP384R1_7_test_vector_shared_secret,
2487  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_7_test_vector_shared_secret),
2488  };
2489  #endif /* WITH_CURVE_SECP384R1 */
2490  
2491  #ifdef WITH_CURVE_SECP384R1
2492  #define ECCCDH_SECP384R1_SELF_TEST_8
2493  /*** Tests for ECCCDH/SECP384R1 ***/
2494  static const u8 ecccdh_SECP384R1_8_test_vector_our_priv_key[] = {
2495  	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  };
2497  static const u8 ecccdh_SECP384R1_8_test_vector_peer_pub_key[] = {
2498  	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  };
2500  static const u8 ecccdh_SECP384R1_8_test_vector_our_pub_key[] = {
2501  	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  };
2503  static const u8 ecccdh_SECP384R1_8_test_vector_shared_secret[] = {
2504  	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  };
2506  static const ecdh_test_case ecccdh_SECP384R1_8_test_case = {
2507  	.name = "ECCCDH/SECP384R1 8",
2508  	.ecdh_type = ECCCDH,
2509  	.ec_str_p = &secp384r1_str_params,
2510  	.our_priv_key = ecccdh_SECP384R1_8_test_vector_our_priv_key,
2511  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_our_priv_key),
2512  	.peer_pub_key = ecccdh_SECP384R1_8_test_vector_peer_pub_key,
2513  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_peer_pub_key),
2514  	.exp_our_pub_key = ecccdh_SECP384R1_8_test_vector_our_pub_key,
2515  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_8_test_vector_our_pub_key),
2516  	.exp_shared_secret = ecccdh_SECP384R1_8_test_vector_shared_secret,
2517  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_8_test_vector_shared_secret),
2518  };
2519  #endif /* WITH_CURVE_SECP384R1 */
2520  
2521  #ifdef WITH_CURVE_SECP384R1
2522  #define ECCCDH_SECP384R1_SELF_TEST_9
2523  /*** Tests for ECCCDH/SECP384R1 ***/
2524  static const u8 ecccdh_SECP384R1_9_test_vector_our_priv_key[] = {
2525  	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  };
2527  static const u8 ecccdh_SECP384R1_9_test_vector_peer_pub_key[] = {
2528  	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  };
2530  static const u8 ecccdh_SECP384R1_9_test_vector_our_pub_key[] = {
2531  	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  };
2533  static const u8 ecccdh_SECP384R1_9_test_vector_shared_secret[] = {
2534  	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  };
2536  static const ecdh_test_case ecccdh_SECP384R1_9_test_case = {
2537  	.name = "ECCCDH/SECP384R1 9",
2538  	.ecdh_type = ECCCDH,
2539  	.ec_str_p = &secp384r1_str_params,
2540  	.our_priv_key = ecccdh_SECP384R1_9_test_vector_our_priv_key,
2541  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_our_priv_key),
2542  	.peer_pub_key = ecccdh_SECP384R1_9_test_vector_peer_pub_key,
2543  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_peer_pub_key),
2544  	.exp_our_pub_key = ecccdh_SECP384R1_9_test_vector_our_pub_key,
2545  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_9_test_vector_our_pub_key),
2546  	.exp_shared_secret = ecccdh_SECP384R1_9_test_vector_shared_secret,
2547  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_9_test_vector_shared_secret),
2548  };
2549  #endif /* WITH_CURVE_SECP384R1 */
2550  
2551  #ifdef WITH_CURVE_SECP384R1
2552  #define ECCCDH_SECP384R1_SELF_TEST_10
2553  /*** Tests for ECCCDH/SECP384R1 ***/
2554  static const u8 ecccdh_SECP384R1_10_test_vector_our_priv_key[] = {
2555  	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  };
2557  static const u8 ecccdh_SECP384R1_10_test_vector_peer_pub_key[] = {
2558  	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  };
2560  static const u8 ecccdh_SECP384R1_10_test_vector_our_pub_key[] = {
2561  	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  };
2563  static const u8 ecccdh_SECP384R1_10_test_vector_shared_secret[] = {
2564  	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  };
2566  static const ecdh_test_case ecccdh_SECP384R1_10_test_case = {
2567  	.name = "ECCCDH/SECP384R1 10",
2568  	.ecdh_type = ECCCDH,
2569  	.ec_str_p = &secp384r1_str_params,
2570  	.our_priv_key = ecccdh_SECP384R1_10_test_vector_our_priv_key,
2571  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_our_priv_key),
2572  	.peer_pub_key = ecccdh_SECP384R1_10_test_vector_peer_pub_key,
2573  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_peer_pub_key),
2574  	.exp_our_pub_key = ecccdh_SECP384R1_10_test_vector_our_pub_key,
2575  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_10_test_vector_our_pub_key),
2576  	.exp_shared_secret = ecccdh_SECP384R1_10_test_vector_shared_secret,
2577  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_10_test_vector_shared_secret),
2578  };
2579  #endif /* WITH_CURVE_SECP384R1 */
2580  
2581  #ifdef WITH_CURVE_SECP384R1
2582  #define ECCCDH_SECP384R1_SELF_TEST_11
2583  /*** Tests for ECCCDH/SECP384R1 ***/
2584  static const u8 ecccdh_SECP384R1_11_test_vector_our_priv_key[] = {
2585  	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  };
2587  static const u8 ecccdh_SECP384R1_11_test_vector_peer_pub_key[] = {
2588  	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  };
2590  static const u8 ecccdh_SECP384R1_11_test_vector_our_pub_key[] = {
2591  	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  };
2593  static const u8 ecccdh_SECP384R1_11_test_vector_shared_secret[] = {
2594  	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  };
2596  static const ecdh_test_case ecccdh_SECP384R1_11_test_case = {
2597  	.name = "ECCCDH/SECP384R1 11",
2598  	.ecdh_type = ECCCDH,
2599  	.ec_str_p = &secp384r1_str_params,
2600  	.our_priv_key = ecccdh_SECP384R1_11_test_vector_our_priv_key,
2601  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_our_priv_key),
2602  	.peer_pub_key = ecccdh_SECP384R1_11_test_vector_peer_pub_key,
2603  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_peer_pub_key),
2604  	.exp_our_pub_key = ecccdh_SECP384R1_11_test_vector_our_pub_key,
2605  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_11_test_vector_our_pub_key),
2606  	.exp_shared_secret = ecccdh_SECP384R1_11_test_vector_shared_secret,
2607  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_11_test_vector_shared_secret),
2608  };
2609  #endif /* WITH_CURVE_SECP384R1 */
2610  
2611  #ifdef WITH_CURVE_SECP384R1
2612  #define ECCCDH_SECP384R1_SELF_TEST_12
2613  /*** Tests for ECCCDH/SECP384R1 ***/
2614  static const u8 ecccdh_SECP384R1_12_test_vector_our_priv_key[] = {
2615  	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  };
2617  static const u8 ecccdh_SECP384R1_12_test_vector_peer_pub_key[] = {
2618  	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  };
2620  static const u8 ecccdh_SECP384R1_12_test_vector_our_pub_key[] = {
2621  	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  };
2623  static const u8 ecccdh_SECP384R1_12_test_vector_shared_secret[] = {
2624  	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  };
2626  static const ecdh_test_case ecccdh_SECP384R1_12_test_case = {
2627  	.name = "ECCCDH/SECP384R1 12",
2628  	.ecdh_type = ECCCDH,
2629  	.ec_str_p = &secp384r1_str_params,
2630  	.our_priv_key = ecccdh_SECP384R1_12_test_vector_our_priv_key,
2631  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_our_priv_key),
2632  	.peer_pub_key = ecccdh_SECP384R1_12_test_vector_peer_pub_key,
2633  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_peer_pub_key),
2634  	.exp_our_pub_key = ecccdh_SECP384R1_12_test_vector_our_pub_key,
2635  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_12_test_vector_our_pub_key),
2636  	.exp_shared_secret = ecccdh_SECP384R1_12_test_vector_shared_secret,
2637  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_12_test_vector_shared_secret),
2638  };
2639  #endif /* WITH_CURVE_SECP384R1 */
2640  
2641  #ifdef WITH_CURVE_SECP384R1
2642  #define ECCCDH_SECP384R1_SELF_TEST_13
2643  /*** Tests for ECCCDH/SECP384R1 ***/
2644  static const u8 ecccdh_SECP384R1_13_test_vector_our_priv_key[] = {
2645  	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  };
2647  static const u8 ecccdh_SECP384R1_13_test_vector_peer_pub_key[] = {
2648  	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  };
2650  static const u8 ecccdh_SECP384R1_13_test_vector_our_pub_key[] = {
2651  	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  };
2653  static const u8 ecccdh_SECP384R1_13_test_vector_shared_secret[] = {
2654  	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  };
2656  static const ecdh_test_case ecccdh_SECP384R1_13_test_case = {
2657  	.name = "ECCCDH/SECP384R1 13",
2658  	.ecdh_type = ECCCDH,
2659  	.ec_str_p = &secp384r1_str_params,
2660  	.our_priv_key = ecccdh_SECP384R1_13_test_vector_our_priv_key,
2661  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_our_priv_key),
2662  	.peer_pub_key = ecccdh_SECP384R1_13_test_vector_peer_pub_key,
2663  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_peer_pub_key),
2664  	.exp_our_pub_key = ecccdh_SECP384R1_13_test_vector_our_pub_key,
2665  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_13_test_vector_our_pub_key),
2666  	.exp_shared_secret = ecccdh_SECP384R1_13_test_vector_shared_secret,
2667  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_13_test_vector_shared_secret),
2668  };
2669  #endif /* WITH_CURVE_SECP384R1 */
2670  
2671  #ifdef WITH_CURVE_SECP384R1
2672  #define ECCCDH_SECP384R1_SELF_TEST_14
2673  /*** Tests for ECCCDH/SECP384R1 ***/
2674  static const u8 ecccdh_SECP384R1_14_test_vector_our_priv_key[] = {
2675  	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  };
2677  static const u8 ecccdh_SECP384R1_14_test_vector_peer_pub_key[] = {
2678  	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  };
2680  static const u8 ecccdh_SECP384R1_14_test_vector_our_pub_key[] = {
2681  	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  };
2683  static const u8 ecccdh_SECP384R1_14_test_vector_shared_secret[] = {
2684  	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  };
2686  static const ecdh_test_case ecccdh_SECP384R1_14_test_case = {
2687  	.name = "ECCCDH/SECP384R1 14",
2688  	.ecdh_type = ECCCDH,
2689  	.ec_str_p = &secp384r1_str_params,
2690  	.our_priv_key = ecccdh_SECP384R1_14_test_vector_our_priv_key,
2691  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_our_priv_key),
2692  	.peer_pub_key = ecccdh_SECP384R1_14_test_vector_peer_pub_key,
2693  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_peer_pub_key),
2694  	.exp_our_pub_key = ecccdh_SECP384R1_14_test_vector_our_pub_key,
2695  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_14_test_vector_our_pub_key),
2696  	.exp_shared_secret = ecccdh_SECP384R1_14_test_vector_shared_secret,
2697  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_14_test_vector_shared_secret),
2698  };
2699  #endif /* WITH_CURVE_SECP384R1 */
2700  
2701  #ifdef WITH_CURVE_SECP384R1
2702  #define ECCCDH_SECP384R1_SELF_TEST_15
2703  /*** Tests for ECCCDH/SECP384R1 ***/
2704  static const u8 ecccdh_SECP384R1_15_test_vector_our_priv_key[] = {
2705  	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  };
2707  static const u8 ecccdh_SECP384R1_15_test_vector_peer_pub_key[] = {
2708  	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  };
2710  static const u8 ecccdh_SECP384R1_15_test_vector_our_pub_key[] = {
2711  	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  };
2713  static const u8 ecccdh_SECP384R1_15_test_vector_shared_secret[] = {
2714  	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  };
2716  static const ecdh_test_case ecccdh_SECP384R1_15_test_case = {
2717  	.name = "ECCCDH/SECP384R1 15",
2718  	.ecdh_type = ECCCDH,
2719  	.ec_str_p = &secp384r1_str_params,
2720  	.our_priv_key = ecccdh_SECP384R1_15_test_vector_our_priv_key,
2721  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_our_priv_key),
2722  	.peer_pub_key = ecccdh_SECP384R1_15_test_vector_peer_pub_key,
2723  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_peer_pub_key),
2724  	.exp_our_pub_key = ecccdh_SECP384R1_15_test_vector_our_pub_key,
2725  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_15_test_vector_our_pub_key),
2726  	.exp_shared_secret = ecccdh_SECP384R1_15_test_vector_shared_secret,
2727  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_15_test_vector_shared_secret),
2728  };
2729  #endif /* WITH_CURVE_SECP384R1 */
2730  
2731  #ifdef WITH_CURVE_SECP384R1
2732  #define ECCCDH_SECP384R1_SELF_TEST_16
2733  /*** Tests for ECCCDH/SECP384R1 ***/
2734  static const u8 ecccdh_SECP384R1_16_test_vector_our_priv_key[] = {
2735  	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  };
2737  static const u8 ecccdh_SECP384R1_16_test_vector_peer_pub_key[] = {
2738  	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  };
2740  static const u8 ecccdh_SECP384R1_16_test_vector_our_pub_key[] = {
2741  	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  };
2743  static const u8 ecccdh_SECP384R1_16_test_vector_shared_secret[] = {
2744  	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  };
2746  static const ecdh_test_case ecccdh_SECP384R1_16_test_case = {
2747  	.name = "ECCCDH/SECP384R1 16",
2748  	.ecdh_type = ECCCDH,
2749  	.ec_str_p = &secp384r1_str_params,
2750  	.our_priv_key = ecccdh_SECP384R1_16_test_vector_our_priv_key,
2751  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_our_priv_key),
2752  	.peer_pub_key = ecccdh_SECP384R1_16_test_vector_peer_pub_key,
2753  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_peer_pub_key),
2754  	.exp_our_pub_key = ecccdh_SECP384R1_16_test_vector_our_pub_key,
2755  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_16_test_vector_our_pub_key),
2756  	.exp_shared_secret = ecccdh_SECP384R1_16_test_vector_shared_secret,
2757  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_16_test_vector_shared_secret),
2758  };
2759  #endif /* WITH_CURVE_SECP384R1 */
2760  
2761  #ifdef WITH_CURVE_SECP384R1
2762  #define ECCCDH_SECP384R1_SELF_TEST_17
2763  /*** Tests for ECCCDH/SECP384R1 ***/
2764  static const u8 ecccdh_SECP384R1_17_test_vector_our_priv_key[] = {
2765  	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  };
2767  static const u8 ecccdh_SECP384R1_17_test_vector_peer_pub_key[] = {
2768  	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  };
2770  static const u8 ecccdh_SECP384R1_17_test_vector_our_pub_key[] = {
2771  	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  };
2773  static const u8 ecccdh_SECP384R1_17_test_vector_shared_secret[] = {
2774  	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  };
2776  static const ecdh_test_case ecccdh_SECP384R1_17_test_case = {
2777  	.name = "ECCCDH/SECP384R1 17",
2778  	.ecdh_type = ECCCDH,
2779  	.ec_str_p = &secp384r1_str_params,
2780  	.our_priv_key = ecccdh_SECP384R1_17_test_vector_our_priv_key,
2781  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_our_priv_key),
2782  	.peer_pub_key = ecccdh_SECP384R1_17_test_vector_peer_pub_key,
2783  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_peer_pub_key),
2784  	.exp_our_pub_key = ecccdh_SECP384R1_17_test_vector_our_pub_key,
2785  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_17_test_vector_our_pub_key),
2786  	.exp_shared_secret = ecccdh_SECP384R1_17_test_vector_shared_secret,
2787  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_17_test_vector_shared_secret),
2788  };
2789  #endif /* WITH_CURVE_SECP384R1 */
2790  
2791  #ifdef WITH_CURVE_SECP384R1
2792  #define ECCCDH_SECP384R1_SELF_TEST_18
2793  /*** Tests for ECCCDH/SECP384R1 ***/
2794  static const u8 ecccdh_SECP384R1_18_test_vector_our_priv_key[] = {
2795  	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  };
2797  static const u8 ecccdh_SECP384R1_18_test_vector_peer_pub_key[] = {
2798  	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  };
2800  static const u8 ecccdh_SECP384R1_18_test_vector_our_pub_key[] = {
2801  	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  };
2803  static const u8 ecccdh_SECP384R1_18_test_vector_shared_secret[] = {
2804  	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  };
2806  static const ecdh_test_case ecccdh_SECP384R1_18_test_case = {
2807  	.name = "ECCCDH/SECP384R1 18",
2808  	.ecdh_type = ECCCDH,
2809  	.ec_str_p = &secp384r1_str_params,
2810  	.our_priv_key = ecccdh_SECP384R1_18_test_vector_our_priv_key,
2811  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_our_priv_key),
2812  	.peer_pub_key = ecccdh_SECP384R1_18_test_vector_peer_pub_key,
2813  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_peer_pub_key),
2814  	.exp_our_pub_key = ecccdh_SECP384R1_18_test_vector_our_pub_key,
2815  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_18_test_vector_our_pub_key),
2816  	.exp_shared_secret = ecccdh_SECP384R1_18_test_vector_shared_secret,
2817  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_18_test_vector_shared_secret),
2818  };
2819  #endif /* WITH_CURVE_SECP384R1 */
2820  
2821  #ifdef WITH_CURVE_SECP384R1
2822  #define ECCCDH_SECP384R1_SELF_TEST_19
2823  /*** Tests for ECCCDH/SECP384R1 ***/
2824  static const u8 ecccdh_SECP384R1_19_test_vector_our_priv_key[] = {
2825  	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  };
2827  static const u8 ecccdh_SECP384R1_19_test_vector_peer_pub_key[] = {
2828  	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  };
2830  static const u8 ecccdh_SECP384R1_19_test_vector_our_pub_key[] = {
2831  	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  };
2833  static const u8 ecccdh_SECP384R1_19_test_vector_shared_secret[] = {
2834  	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  };
2836  static const ecdh_test_case ecccdh_SECP384R1_19_test_case = {
2837  	.name = "ECCCDH/SECP384R1 19",
2838  	.ecdh_type = ECCCDH,
2839  	.ec_str_p = &secp384r1_str_params,
2840  	.our_priv_key = ecccdh_SECP384R1_19_test_vector_our_priv_key,
2841  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_our_priv_key),
2842  	.peer_pub_key = ecccdh_SECP384R1_19_test_vector_peer_pub_key,
2843  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_peer_pub_key),
2844  	.exp_our_pub_key = ecccdh_SECP384R1_19_test_vector_our_pub_key,
2845  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_19_test_vector_our_pub_key),
2846  	.exp_shared_secret = ecccdh_SECP384R1_19_test_vector_shared_secret,
2847  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_19_test_vector_shared_secret),
2848  };
2849  #endif /* WITH_CURVE_SECP384R1 */
2850  
2851  #ifdef WITH_CURVE_SECP384R1
2852  #define ECCCDH_SECP384R1_SELF_TEST_20
2853  /*** Tests for ECCCDH/SECP384R1 ***/
2854  static const u8 ecccdh_SECP384R1_20_test_vector_our_priv_key[] = {
2855  	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  };
2857  static const u8 ecccdh_SECP384R1_20_test_vector_peer_pub_key[] = {
2858  	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  };
2860  static const u8 ecccdh_SECP384R1_20_test_vector_our_pub_key[] = {
2861  	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  };
2863  static const u8 ecccdh_SECP384R1_20_test_vector_shared_secret[] = {
2864  	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  };
2866  static const ecdh_test_case ecccdh_SECP384R1_20_test_case = {
2867  	.name = "ECCCDH/SECP384R1 20",
2868  	.ecdh_type = ECCCDH,
2869  	.ec_str_p = &secp384r1_str_params,
2870  	.our_priv_key = ecccdh_SECP384R1_20_test_vector_our_priv_key,
2871  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_our_priv_key),
2872  	.peer_pub_key = ecccdh_SECP384R1_20_test_vector_peer_pub_key,
2873  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_peer_pub_key),
2874  	.exp_our_pub_key = ecccdh_SECP384R1_20_test_vector_our_pub_key,
2875  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_20_test_vector_our_pub_key),
2876  	.exp_shared_secret = ecccdh_SECP384R1_20_test_vector_shared_secret,
2877  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_20_test_vector_shared_secret),
2878  };
2879  #endif /* WITH_CURVE_SECP384R1 */
2880  
2881  #ifdef WITH_CURVE_SECP384R1
2882  #define ECCCDH_SECP384R1_SELF_TEST_21
2883  /*** Tests for ECCCDH/SECP384R1 ***/
2884  static const u8 ecccdh_SECP384R1_21_test_vector_our_priv_key[] = {
2885  	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  };
2887  static const u8 ecccdh_SECP384R1_21_test_vector_peer_pub_key[] = {
2888  	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  };
2890  static const u8 ecccdh_SECP384R1_21_test_vector_our_pub_key[] = {
2891  	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  };
2893  static const u8 ecccdh_SECP384R1_21_test_vector_shared_secret[] = {
2894  	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  };
2896  static const ecdh_test_case ecccdh_SECP384R1_21_test_case = {
2897  	.name = "ECCCDH/SECP384R1 21",
2898  	.ecdh_type = ECCCDH,
2899  	.ec_str_p = &secp384r1_str_params,
2900  	.our_priv_key = ecccdh_SECP384R1_21_test_vector_our_priv_key,
2901  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_our_priv_key),
2902  	.peer_pub_key = ecccdh_SECP384R1_21_test_vector_peer_pub_key,
2903  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_peer_pub_key),
2904  	.exp_our_pub_key = ecccdh_SECP384R1_21_test_vector_our_pub_key,
2905  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_21_test_vector_our_pub_key),
2906  	.exp_shared_secret = ecccdh_SECP384R1_21_test_vector_shared_secret,
2907  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_21_test_vector_shared_secret),
2908  };
2909  #endif /* WITH_CURVE_SECP384R1 */
2910  
2911  #ifdef WITH_CURVE_SECP384R1
2912  #define ECCCDH_SECP384R1_SELF_TEST_22
2913  /*** Tests for ECCCDH/SECP384R1 ***/
2914  static const u8 ecccdh_SECP384R1_22_test_vector_our_priv_key[] = {
2915  	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  };
2917  static const u8 ecccdh_SECP384R1_22_test_vector_peer_pub_key[] = {
2918  	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  };
2920  static const u8 ecccdh_SECP384R1_22_test_vector_our_pub_key[] = {
2921  	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  };
2923  static const u8 ecccdh_SECP384R1_22_test_vector_shared_secret[] = {
2924  	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  };
2926  static const ecdh_test_case ecccdh_SECP384R1_22_test_case = {
2927  	.name = "ECCCDH/SECP384R1 22",
2928  	.ecdh_type = ECCCDH,
2929  	.ec_str_p = &secp384r1_str_params,
2930  	.our_priv_key = ecccdh_SECP384R1_22_test_vector_our_priv_key,
2931  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_our_priv_key),
2932  	.peer_pub_key = ecccdh_SECP384R1_22_test_vector_peer_pub_key,
2933  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_peer_pub_key),
2934  	.exp_our_pub_key = ecccdh_SECP384R1_22_test_vector_our_pub_key,
2935  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_22_test_vector_our_pub_key),
2936  	.exp_shared_secret = ecccdh_SECP384R1_22_test_vector_shared_secret,
2937  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_22_test_vector_shared_secret),
2938  };
2939  #endif /* WITH_CURVE_SECP384R1 */
2940  
2941  #ifdef WITH_CURVE_SECP384R1
2942  #define ECCCDH_SECP384R1_SELF_TEST_23
2943  /*** Tests for ECCCDH/SECP384R1 ***/
2944  static const u8 ecccdh_SECP384R1_23_test_vector_our_priv_key[] = {
2945  	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  };
2947  static const u8 ecccdh_SECP384R1_23_test_vector_peer_pub_key[] = {
2948  	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  };
2950  static const u8 ecccdh_SECP384R1_23_test_vector_our_pub_key[] = {
2951  	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  };
2953  static const u8 ecccdh_SECP384R1_23_test_vector_shared_secret[] = {
2954  	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  };
2956  static const ecdh_test_case ecccdh_SECP384R1_23_test_case = {
2957  	.name = "ECCCDH/SECP384R1 23",
2958  	.ecdh_type = ECCCDH,
2959  	.ec_str_p = &secp384r1_str_params,
2960  	.our_priv_key = ecccdh_SECP384R1_23_test_vector_our_priv_key,
2961  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_our_priv_key),
2962  	.peer_pub_key = ecccdh_SECP384R1_23_test_vector_peer_pub_key,
2963  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_peer_pub_key),
2964  	.exp_our_pub_key = ecccdh_SECP384R1_23_test_vector_our_pub_key,
2965  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_23_test_vector_our_pub_key),
2966  	.exp_shared_secret = ecccdh_SECP384R1_23_test_vector_shared_secret,
2967  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_23_test_vector_shared_secret),
2968  };
2969  #endif /* WITH_CURVE_SECP384R1 */
2970  
2971  #ifdef WITH_CURVE_SECP384R1
2972  #define ECCCDH_SECP384R1_SELF_TEST_24
2973  /*** Tests for ECCCDH/SECP384R1 ***/
2974  static const u8 ecccdh_SECP384R1_24_test_vector_our_priv_key[] = {
2975  	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  };
2977  static const u8 ecccdh_SECP384R1_24_test_vector_peer_pub_key[] = {
2978  	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  };
2980  static const u8 ecccdh_SECP384R1_24_test_vector_our_pub_key[] = {
2981  	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  };
2983  static const u8 ecccdh_SECP384R1_24_test_vector_shared_secret[] = {
2984  	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  };
2986  static const ecdh_test_case ecccdh_SECP384R1_24_test_case = {
2987  	.name = "ECCCDH/SECP384R1 24",
2988  	.ecdh_type = ECCCDH,
2989  	.ec_str_p = &secp384r1_str_params,
2990  	.our_priv_key = ecccdh_SECP384R1_24_test_vector_our_priv_key,
2991  	.our_priv_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_our_priv_key),
2992  	.peer_pub_key = ecccdh_SECP384R1_24_test_vector_peer_pub_key,
2993  	.peer_pub_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_peer_pub_key),
2994  	.exp_our_pub_key = ecccdh_SECP384R1_24_test_vector_our_pub_key,
2995  	.exp_our_pub_key_len = sizeof(ecccdh_SECP384R1_24_test_vector_our_pub_key),
2996  	.exp_shared_secret = ecccdh_SECP384R1_24_test_vector_shared_secret,
2997  	.exp_shared_secret_len = sizeof(ecccdh_SECP384R1_24_test_vector_shared_secret),
2998  };
2999  #endif /* WITH_CURVE_SECP384R1 */
3000  
3001  #ifdef WITH_CURVE_SECP521R1
3002  #define ECCCDH_SECP521R1_SELF_TEST_0
3003  /*** Tests for ECCCDH/SECP521R1 ***/
3004  static const u8 ecccdh_SECP521R1_0_test_vector_our_priv_key[] = {
3005  	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  };
3007  static const u8 ecccdh_SECP521R1_0_test_vector_peer_pub_key[] = {
3008  	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  };
3010  static const u8 ecccdh_SECP521R1_0_test_vector_our_pub_key[] = {
3011  	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  };
3013  static const u8 ecccdh_SECP521R1_0_test_vector_shared_secret[] = {
3014  	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  };
3016  static const ecdh_test_case ecccdh_SECP521R1_0_test_case = {
3017  	.name = "ECCCDH/SECP521R1 0",
3018  	.ecdh_type = ECCCDH,
3019  	.ec_str_p = &secp521r1_str_params,
3020  	.our_priv_key = ecccdh_SECP521R1_0_test_vector_our_priv_key,
3021  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_our_priv_key),
3022  	.peer_pub_key = ecccdh_SECP521R1_0_test_vector_peer_pub_key,
3023  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_peer_pub_key),
3024  	.exp_our_pub_key = ecccdh_SECP521R1_0_test_vector_our_pub_key,
3025  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_0_test_vector_our_pub_key),
3026  	.exp_shared_secret = ecccdh_SECP521R1_0_test_vector_shared_secret,
3027  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_0_test_vector_shared_secret),
3028  };
3029  #endif /* WITH_CURVE_SECP521R1 */
3030  
3031  #ifdef WITH_CURVE_SECP521R1
3032  #define ECCCDH_SECP521R1_SELF_TEST_1
3033  /*** Tests for ECCCDH/SECP521R1 ***/
3034  static const u8 ecccdh_SECP521R1_1_test_vector_our_priv_key[] = {
3035  	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  };
3037  static const u8 ecccdh_SECP521R1_1_test_vector_peer_pub_key[] = {
3038  	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  };
3040  static const u8 ecccdh_SECP521R1_1_test_vector_our_pub_key[] = {
3041  	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  };
3043  static const u8 ecccdh_SECP521R1_1_test_vector_shared_secret[] = {
3044  	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  };
3046  static const ecdh_test_case ecccdh_SECP521R1_1_test_case = {
3047  	.name = "ECCCDH/SECP521R1 1",
3048  	.ecdh_type = ECCCDH,
3049  	.ec_str_p = &secp521r1_str_params,
3050  	.our_priv_key = ecccdh_SECP521R1_1_test_vector_our_priv_key,
3051  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_our_priv_key),
3052  	.peer_pub_key = ecccdh_SECP521R1_1_test_vector_peer_pub_key,
3053  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_peer_pub_key),
3054  	.exp_our_pub_key = ecccdh_SECP521R1_1_test_vector_our_pub_key,
3055  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_1_test_vector_our_pub_key),
3056  	.exp_shared_secret = ecccdh_SECP521R1_1_test_vector_shared_secret,
3057  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_1_test_vector_shared_secret),
3058  };
3059  #endif /* WITH_CURVE_SECP521R1 */
3060  
3061  #ifdef WITH_CURVE_SECP521R1
3062  #define ECCCDH_SECP521R1_SELF_TEST_2
3063  /*** Tests for ECCCDH/SECP521R1 ***/
3064  static const u8 ecccdh_SECP521R1_2_test_vector_our_priv_key[] = {
3065  	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  };
3067  static const u8 ecccdh_SECP521R1_2_test_vector_peer_pub_key[] = {
3068  	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  };
3070  static const u8 ecccdh_SECP521R1_2_test_vector_our_pub_key[] = {
3071  	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  };
3073  static const u8 ecccdh_SECP521R1_2_test_vector_shared_secret[] = {
3074  	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  };
3076  static const ecdh_test_case ecccdh_SECP521R1_2_test_case = {
3077  	.name = "ECCCDH/SECP521R1 2",
3078  	.ecdh_type = ECCCDH,
3079  	.ec_str_p = &secp521r1_str_params,
3080  	.our_priv_key = ecccdh_SECP521R1_2_test_vector_our_priv_key,
3081  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_our_priv_key),
3082  	.peer_pub_key = ecccdh_SECP521R1_2_test_vector_peer_pub_key,
3083  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_peer_pub_key),
3084  	.exp_our_pub_key = ecccdh_SECP521R1_2_test_vector_our_pub_key,
3085  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_2_test_vector_our_pub_key),
3086  	.exp_shared_secret = ecccdh_SECP521R1_2_test_vector_shared_secret,
3087  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_2_test_vector_shared_secret),
3088  };
3089  #endif /* WITH_CURVE_SECP521R1 */
3090  
3091  #ifdef WITH_CURVE_SECP521R1
3092  #define ECCCDH_SECP521R1_SELF_TEST_3
3093  /*** Tests for ECCCDH/SECP521R1 ***/
3094  static const u8 ecccdh_SECP521R1_3_test_vector_our_priv_key[] = {
3095  	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  };
3097  static const u8 ecccdh_SECP521R1_3_test_vector_peer_pub_key[] = {
3098  	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  };
3100  static const u8 ecccdh_SECP521R1_3_test_vector_our_pub_key[] = {
3101  	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  };
3103  static const u8 ecccdh_SECP521R1_3_test_vector_shared_secret[] = {
3104  	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  };
3106  static const ecdh_test_case ecccdh_SECP521R1_3_test_case = {
3107  	.name = "ECCCDH/SECP521R1 3",
3108  	.ecdh_type = ECCCDH,
3109  	.ec_str_p = &secp521r1_str_params,
3110  	.our_priv_key = ecccdh_SECP521R1_3_test_vector_our_priv_key,
3111  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_our_priv_key),
3112  	.peer_pub_key = ecccdh_SECP521R1_3_test_vector_peer_pub_key,
3113  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_peer_pub_key),
3114  	.exp_our_pub_key = ecccdh_SECP521R1_3_test_vector_our_pub_key,
3115  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_3_test_vector_our_pub_key),
3116  	.exp_shared_secret = ecccdh_SECP521R1_3_test_vector_shared_secret,
3117  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_3_test_vector_shared_secret),
3118  };
3119  #endif /* WITH_CURVE_SECP521R1 */
3120  
3121  #ifdef WITH_CURVE_SECP521R1
3122  #define ECCCDH_SECP521R1_SELF_TEST_4
3123  /*** Tests for ECCCDH/SECP521R1 ***/
3124  static const u8 ecccdh_SECP521R1_4_test_vector_our_priv_key[] = {
3125  	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  };
3127  static const u8 ecccdh_SECP521R1_4_test_vector_peer_pub_key[] = {
3128  	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  };
3130  static const u8 ecccdh_SECP521R1_4_test_vector_our_pub_key[] = {
3131  	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  };
3133  static const u8 ecccdh_SECP521R1_4_test_vector_shared_secret[] = {
3134  	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  };
3136  static const ecdh_test_case ecccdh_SECP521R1_4_test_case = {
3137  	.name = "ECCCDH/SECP521R1 4",
3138  	.ecdh_type = ECCCDH,
3139  	.ec_str_p = &secp521r1_str_params,
3140  	.our_priv_key = ecccdh_SECP521R1_4_test_vector_our_priv_key,
3141  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_our_priv_key),
3142  	.peer_pub_key = ecccdh_SECP521R1_4_test_vector_peer_pub_key,
3143  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_peer_pub_key),
3144  	.exp_our_pub_key = ecccdh_SECP521R1_4_test_vector_our_pub_key,
3145  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_4_test_vector_our_pub_key),
3146  	.exp_shared_secret = ecccdh_SECP521R1_4_test_vector_shared_secret,
3147  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_4_test_vector_shared_secret),
3148  };
3149  #endif /* WITH_CURVE_SECP521R1 */
3150  
3151  #ifdef WITH_CURVE_SECP521R1
3152  #define ECCCDH_SECP521R1_SELF_TEST_5
3153  /*** Tests for ECCCDH/SECP521R1 ***/
3154  static const u8 ecccdh_SECP521R1_5_test_vector_our_priv_key[] = {
3155  	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  };
3157  static const u8 ecccdh_SECP521R1_5_test_vector_peer_pub_key[] = {
3158  	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  };
3160  static const u8 ecccdh_SECP521R1_5_test_vector_our_pub_key[] = {
3161  	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  };
3163  static const u8 ecccdh_SECP521R1_5_test_vector_shared_secret[] = {
3164  	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  };
3166  static const ecdh_test_case ecccdh_SECP521R1_5_test_case = {
3167  	.name = "ECCCDH/SECP521R1 5",
3168  	.ecdh_type = ECCCDH,
3169  	.ec_str_p = &secp521r1_str_params,
3170  	.our_priv_key = ecccdh_SECP521R1_5_test_vector_our_priv_key,
3171  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_our_priv_key),
3172  	.peer_pub_key = ecccdh_SECP521R1_5_test_vector_peer_pub_key,
3173  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_peer_pub_key),
3174  	.exp_our_pub_key = ecccdh_SECP521R1_5_test_vector_our_pub_key,
3175  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_5_test_vector_our_pub_key),
3176  	.exp_shared_secret = ecccdh_SECP521R1_5_test_vector_shared_secret,
3177  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_5_test_vector_shared_secret),
3178  };
3179  #endif /* WITH_CURVE_SECP521R1 */
3180  
3181  #ifdef WITH_CURVE_SECP521R1
3182  #define ECCCDH_SECP521R1_SELF_TEST_6
3183  /*** Tests for ECCCDH/SECP521R1 ***/
3184  static const u8 ecccdh_SECP521R1_6_test_vector_our_priv_key[] = {
3185  	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  };
3187  static const u8 ecccdh_SECP521R1_6_test_vector_peer_pub_key[] = {
3188  	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  };
3190  static const u8 ecccdh_SECP521R1_6_test_vector_our_pub_key[] = {
3191  	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  };
3193  static const u8 ecccdh_SECP521R1_6_test_vector_shared_secret[] = {
3194  	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  };
3196  static const ecdh_test_case ecccdh_SECP521R1_6_test_case = {
3197  	.name = "ECCCDH/SECP521R1 6",
3198  	.ecdh_type = ECCCDH,
3199  	.ec_str_p = &secp521r1_str_params,
3200  	.our_priv_key = ecccdh_SECP521R1_6_test_vector_our_priv_key,
3201  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_our_priv_key),
3202  	.peer_pub_key = ecccdh_SECP521R1_6_test_vector_peer_pub_key,
3203  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_peer_pub_key),
3204  	.exp_our_pub_key = ecccdh_SECP521R1_6_test_vector_our_pub_key,
3205  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_6_test_vector_our_pub_key),
3206  	.exp_shared_secret = ecccdh_SECP521R1_6_test_vector_shared_secret,
3207  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_6_test_vector_shared_secret),
3208  };
3209  #endif /* WITH_CURVE_SECP521R1 */
3210  
3211  #ifdef WITH_CURVE_SECP521R1
3212  #define ECCCDH_SECP521R1_SELF_TEST_7
3213  /*** Tests for ECCCDH/SECP521R1 ***/
3214  static const u8 ecccdh_SECP521R1_7_test_vector_our_priv_key[] = {
3215  	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  };
3217  static const u8 ecccdh_SECP521R1_7_test_vector_peer_pub_key[] = {
3218  	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  };
3220  static const u8 ecccdh_SECP521R1_7_test_vector_our_pub_key[] = {
3221  	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  };
3223  static const u8 ecccdh_SECP521R1_7_test_vector_shared_secret[] = {
3224  	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  };
3226  static const ecdh_test_case ecccdh_SECP521R1_7_test_case = {
3227  	.name = "ECCCDH/SECP521R1 7",
3228  	.ecdh_type = ECCCDH,
3229  	.ec_str_p = &secp521r1_str_params,
3230  	.our_priv_key = ecccdh_SECP521R1_7_test_vector_our_priv_key,
3231  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_our_priv_key),
3232  	.peer_pub_key = ecccdh_SECP521R1_7_test_vector_peer_pub_key,
3233  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_peer_pub_key),
3234  	.exp_our_pub_key = ecccdh_SECP521R1_7_test_vector_our_pub_key,
3235  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_7_test_vector_our_pub_key),
3236  	.exp_shared_secret = ecccdh_SECP521R1_7_test_vector_shared_secret,
3237  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_7_test_vector_shared_secret),
3238  };
3239  #endif /* WITH_CURVE_SECP521R1 */
3240  
3241  #ifdef WITH_CURVE_SECP521R1
3242  #define ECCCDH_SECP521R1_SELF_TEST_8
3243  /*** Tests for ECCCDH/SECP521R1 ***/
3244  static const u8 ecccdh_SECP521R1_8_test_vector_our_priv_key[] = {
3245  	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  };
3247  static const u8 ecccdh_SECP521R1_8_test_vector_peer_pub_key[] = {
3248  	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  };
3250  static const u8 ecccdh_SECP521R1_8_test_vector_our_pub_key[] = {
3251  	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  };
3253  static const u8 ecccdh_SECP521R1_8_test_vector_shared_secret[] = {
3254  	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  };
3256  static const ecdh_test_case ecccdh_SECP521R1_8_test_case = {
3257  	.name = "ECCCDH/SECP521R1 8",
3258  	.ecdh_type = ECCCDH,
3259  	.ec_str_p = &secp521r1_str_params,
3260  	.our_priv_key = ecccdh_SECP521R1_8_test_vector_our_priv_key,
3261  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_our_priv_key),
3262  	.peer_pub_key = ecccdh_SECP521R1_8_test_vector_peer_pub_key,
3263  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_peer_pub_key),
3264  	.exp_our_pub_key = ecccdh_SECP521R1_8_test_vector_our_pub_key,
3265  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_8_test_vector_our_pub_key),
3266  	.exp_shared_secret = ecccdh_SECP521R1_8_test_vector_shared_secret,
3267  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_8_test_vector_shared_secret),
3268  };
3269  #endif /* WITH_CURVE_SECP521R1 */
3270  
3271  #ifdef WITH_CURVE_SECP521R1
3272  #define ECCCDH_SECP521R1_SELF_TEST_9
3273  /*** Tests for ECCCDH/SECP521R1 ***/
3274  static const u8 ecccdh_SECP521R1_9_test_vector_our_priv_key[] = {
3275  	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  };
3277  static const u8 ecccdh_SECP521R1_9_test_vector_peer_pub_key[] = {
3278  	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  };
3280  static const u8 ecccdh_SECP521R1_9_test_vector_our_pub_key[] = {
3281  	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  };
3283  static const u8 ecccdh_SECP521R1_9_test_vector_shared_secret[] = {
3284  	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  };
3286  static const ecdh_test_case ecccdh_SECP521R1_9_test_case = {
3287  	.name = "ECCCDH/SECP521R1 9",
3288  	.ecdh_type = ECCCDH,
3289  	.ec_str_p = &secp521r1_str_params,
3290  	.our_priv_key = ecccdh_SECP521R1_9_test_vector_our_priv_key,
3291  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_our_priv_key),
3292  	.peer_pub_key = ecccdh_SECP521R1_9_test_vector_peer_pub_key,
3293  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_peer_pub_key),
3294  	.exp_our_pub_key = ecccdh_SECP521R1_9_test_vector_our_pub_key,
3295  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_9_test_vector_our_pub_key),
3296  	.exp_shared_secret = ecccdh_SECP521R1_9_test_vector_shared_secret,
3297  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_9_test_vector_shared_secret),
3298  };
3299  #endif /* WITH_CURVE_SECP521R1 */
3300  
3301  #ifdef WITH_CURVE_SECP521R1
3302  #define ECCCDH_SECP521R1_SELF_TEST_10
3303  /*** Tests for ECCCDH/SECP521R1 ***/
3304  static const u8 ecccdh_SECP521R1_10_test_vector_our_priv_key[] = {
3305  	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  };
3307  static const u8 ecccdh_SECP521R1_10_test_vector_peer_pub_key[] = {
3308  	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  };
3310  static const u8 ecccdh_SECP521R1_10_test_vector_our_pub_key[] = {
3311  	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  };
3313  static const u8 ecccdh_SECP521R1_10_test_vector_shared_secret[] = {
3314  	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  };
3316  static const ecdh_test_case ecccdh_SECP521R1_10_test_case = {
3317  	.name = "ECCCDH/SECP521R1 10",
3318  	.ecdh_type = ECCCDH,
3319  	.ec_str_p = &secp521r1_str_params,
3320  	.our_priv_key = ecccdh_SECP521R1_10_test_vector_our_priv_key,
3321  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_our_priv_key),
3322  	.peer_pub_key = ecccdh_SECP521R1_10_test_vector_peer_pub_key,
3323  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_peer_pub_key),
3324  	.exp_our_pub_key = ecccdh_SECP521R1_10_test_vector_our_pub_key,
3325  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_10_test_vector_our_pub_key),
3326  	.exp_shared_secret = ecccdh_SECP521R1_10_test_vector_shared_secret,
3327  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_10_test_vector_shared_secret),
3328  };
3329  #endif /* WITH_CURVE_SECP521R1 */
3330  
3331  #ifdef WITH_CURVE_SECP521R1
3332  #define ECCCDH_SECP521R1_SELF_TEST_11
3333  /*** Tests for ECCCDH/SECP521R1 ***/
3334  static const u8 ecccdh_SECP521R1_11_test_vector_our_priv_key[] = {
3335  	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  };
3337  static const u8 ecccdh_SECP521R1_11_test_vector_peer_pub_key[] = {
3338  	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  };
3340  static const u8 ecccdh_SECP521R1_11_test_vector_our_pub_key[] = {
3341  	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  };
3343  static const u8 ecccdh_SECP521R1_11_test_vector_shared_secret[] = {
3344  	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  };
3346  static const ecdh_test_case ecccdh_SECP521R1_11_test_case = {
3347  	.name = "ECCCDH/SECP521R1 11",
3348  	.ecdh_type = ECCCDH,
3349  	.ec_str_p = &secp521r1_str_params,
3350  	.our_priv_key = ecccdh_SECP521R1_11_test_vector_our_priv_key,
3351  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_our_priv_key),
3352  	.peer_pub_key = ecccdh_SECP521R1_11_test_vector_peer_pub_key,
3353  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_peer_pub_key),
3354  	.exp_our_pub_key = ecccdh_SECP521R1_11_test_vector_our_pub_key,
3355  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_11_test_vector_our_pub_key),
3356  	.exp_shared_secret = ecccdh_SECP521R1_11_test_vector_shared_secret,
3357  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_11_test_vector_shared_secret),
3358  };
3359  #endif /* WITH_CURVE_SECP521R1 */
3360  
3361  #ifdef WITH_CURVE_SECP521R1
3362  #define ECCCDH_SECP521R1_SELF_TEST_12
3363  /*** Tests for ECCCDH/SECP521R1 ***/
3364  static const u8 ecccdh_SECP521R1_12_test_vector_our_priv_key[] = {
3365  	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  };
3367  static const u8 ecccdh_SECP521R1_12_test_vector_peer_pub_key[] = {
3368  	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  };
3370  static const u8 ecccdh_SECP521R1_12_test_vector_our_pub_key[] = {
3371  	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  };
3373  static const u8 ecccdh_SECP521R1_12_test_vector_shared_secret[] = {
3374  	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  };
3376  static const ecdh_test_case ecccdh_SECP521R1_12_test_case = {
3377  	.name = "ECCCDH/SECP521R1 12",
3378  	.ecdh_type = ECCCDH,
3379  	.ec_str_p = &secp521r1_str_params,
3380  	.our_priv_key = ecccdh_SECP521R1_12_test_vector_our_priv_key,
3381  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_our_priv_key),
3382  	.peer_pub_key = ecccdh_SECP521R1_12_test_vector_peer_pub_key,
3383  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_peer_pub_key),
3384  	.exp_our_pub_key = ecccdh_SECP521R1_12_test_vector_our_pub_key,
3385  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_12_test_vector_our_pub_key),
3386  	.exp_shared_secret = ecccdh_SECP521R1_12_test_vector_shared_secret,
3387  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_12_test_vector_shared_secret),
3388  };
3389  #endif /* WITH_CURVE_SECP521R1 */
3390  
3391  #ifdef WITH_CURVE_SECP521R1
3392  #define ECCCDH_SECP521R1_SELF_TEST_13
3393  /*** Tests for ECCCDH/SECP521R1 ***/
3394  static const u8 ecccdh_SECP521R1_13_test_vector_our_priv_key[] = {
3395  	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  };
3397  static const u8 ecccdh_SECP521R1_13_test_vector_peer_pub_key[] = {
3398  	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  };
3400  static const u8 ecccdh_SECP521R1_13_test_vector_our_pub_key[] = {
3401  	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  };
3403  static const u8 ecccdh_SECP521R1_13_test_vector_shared_secret[] = {
3404  	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  };
3406  static const ecdh_test_case ecccdh_SECP521R1_13_test_case = {
3407  	.name = "ECCCDH/SECP521R1 13",
3408  	.ecdh_type = ECCCDH,
3409  	.ec_str_p = &secp521r1_str_params,
3410  	.our_priv_key = ecccdh_SECP521R1_13_test_vector_our_priv_key,
3411  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_our_priv_key),
3412  	.peer_pub_key = ecccdh_SECP521R1_13_test_vector_peer_pub_key,
3413  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_peer_pub_key),
3414  	.exp_our_pub_key = ecccdh_SECP521R1_13_test_vector_our_pub_key,
3415  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_13_test_vector_our_pub_key),
3416  	.exp_shared_secret = ecccdh_SECP521R1_13_test_vector_shared_secret,
3417  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_13_test_vector_shared_secret),
3418  };
3419  #endif /* WITH_CURVE_SECP521R1 */
3420  
3421  #ifdef WITH_CURVE_SECP521R1
3422  #define ECCCDH_SECP521R1_SELF_TEST_14
3423  /*** Tests for ECCCDH/SECP521R1 ***/
3424  static const u8 ecccdh_SECP521R1_14_test_vector_our_priv_key[] = {
3425  	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  };
3427  static const u8 ecccdh_SECP521R1_14_test_vector_peer_pub_key[] = {
3428  	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  };
3430  static const u8 ecccdh_SECP521R1_14_test_vector_our_pub_key[] = {
3431  	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  };
3433  static const u8 ecccdh_SECP521R1_14_test_vector_shared_secret[] = {
3434  	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  };
3436  static const ecdh_test_case ecccdh_SECP521R1_14_test_case = {
3437  	.name = "ECCCDH/SECP521R1 14",
3438  	.ecdh_type = ECCCDH,
3439  	.ec_str_p = &secp521r1_str_params,
3440  	.our_priv_key = ecccdh_SECP521R1_14_test_vector_our_priv_key,
3441  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_our_priv_key),
3442  	.peer_pub_key = ecccdh_SECP521R1_14_test_vector_peer_pub_key,
3443  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_peer_pub_key),
3444  	.exp_our_pub_key = ecccdh_SECP521R1_14_test_vector_our_pub_key,
3445  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_14_test_vector_our_pub_key),
3446  	.exp_shared_secret = ecccdh_SECP521R1_14_test_vector_shared_secret,
3447  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_14_test_vector_shared_secret),
3448  };
3449  #endif /* WITH_CURVE_SECP521R1 */
3450  
3451  #ifdef WITH_CURVE_SECP521R1
3452  #define ECCCDH_SECP521R1_SELF_TEST_15
3453  /*** Tests for ECCCDH/SECP521R1 ***/
3454  static const u8 ecccdh_SECP521R1_15_test_vector_our_priv_key[] = {
3455  	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  };
3457  static const u8 ecccdh_SECP521R1_15_test_vector_peer_pub_key[] = {
3458  	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  };
3460  static const u8 ecccdh_SECP521R1_15_test_vector_our_pub_key[] = {
3461  	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  };
3463  static const u8 ecccdh_SECP521R1_15_test_vector_shared_secret[] = {
3464  	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  };
3466  static const ecdh_test_case ecccdh_SECP521R1_15_test_case = {
3467  	.name = "ECCCDH/SECP521R1 15",
3468  	.ecdh_type = ECCCDH,
3469  	.ec_str_p = &secp521r1_str_params,
3470  	.our_priv_key = ecccdh_SECP521R1_15_test_vector_our_priv_key,
3471  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_our_priv_key),
3472  	.peer_pub_key = ecccdh_SECP521R1_15_test_vector_peer_pub_key,
3473  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_peer_pub_key),
3474  	.exp_our_pub_key = ecccdh_SECP521R1_15_test_vector_our_pub_key,
3475  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_15_test_vector_our_pub_key),
3476  	.exp_shared_secret = ecccdh_SECP521R1_15_test_vector_shared_secret,
3477  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_15_test_vector_shared_secret),
3478  };
3479  #endif /* WITH_CURVE_SECP521R1 */
3480  
3481  #ifdef WITH_CURVE_SECP521R1
3482  #define ECCCDH_SECP521R1_SELF_TEST_16
3483  /*** Tests for ECCCDH/SECP521R1 ***/
3484  static const u8 ecccdh_SECP521R1_16_test_vector_our_priv_key[] = {
3485  	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  };
3487  static const u8 ecccdh_SECP521R1_16_test_vector_peer_pub_key[] = {
3488  	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  };
3490  static const u8 ecccdh_SECP521R1_16_test_vector_our_pub_key[] = {
3491  	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  };
3493  static const u8 ecccdh_SECP521R1_16_test_vector_shared_secret[] = {
3494  	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  };
3496  static const ecdh_test_case ecccdh_SECP521R1_16_test_case = {
3497  	.name = "ECCCDH/SECP521R1 16",
3498  	.ecdh_type = ECCCDH,
3499  	.ec_str_p = &secp521r1_str_params,
3500  	.our_priv_key = ecccdh_SECP521R1_16_test_vector_our_priv_key,
3501  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_our_priv_key),
3502  	.peer_pub_key = ecccdh_SECP521R1_16_test_vector_peer_pub_key,
3503  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_peer_pub_key),
3504  	.exp_our_pub_key = ecccdh_SECP521R1_16_test_vector_our_pub_key,
3505  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_16_test_vector_our_pub_key),
3506  	.exp_shared_secret = ecccdh_SECP521R1_16_test_vector_shared_secret,
3507  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_16_test_vector_shared_secret),
3508  };
3509  #endif /* WITH_CURVE_SECP521R1 */
3510  
3511  #ifdef WITH_CURVE_SECP521R1
3512  #define ECCCDH_SECP521R1_SELF_TEST_17
3513  /*** Tests for ECCCDH/SECP521R1 ***/
3514  static const u8 ecccdh_SECP521R1_17_test_vector_our_priv_key[] = {
3515  	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  };
3517  static const u8 ecccdh_SECP521R1_17_test_vector_peer_pub_key[] = {
3518  	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  };
3520  static const u8 ecccdh_SECP521R1_17_test_vector_our_pub_key[] = {
3521  	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  };
3523  static const u8 ecccdh_SECP521R1_17_test_vector_shared_secret[] = {
3524  	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  };
3526  static const ecdh_test_case ecccdh_SECP521R1_17_test_case = {
3527  	.name = "ECCCDH/SECP521R1 17",
3528  	.ecdh_type = ECCCDH,
3529  	.ec_str_p = &secp521r1_str_params,
3530  	.our_priv_key = ecccdh_SECP521R1_17_test_vector_our_priv_key,
3531  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_our_priv_key),
3532  	.peer_pub_key = ecccdh_SECP521R1_17_test_vector_peer_pub_key,
3533  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_peer_pub_key),
3534  	.exp_our_pub_key = ecccdh_SECP521R1_17_test_vector_our_pub_key,
3535  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_17_test_vector_our_pub_key),
3536  	.exp_shared_secret = ecccdh_SECP521R1_17_test_vector_shared_secret,
3537  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_17_test_vector_shared_secret),
3538  };
3539  #endif /* WITH_CURVE_SECP521R1 */
3540  
3541  #ifdef WITH_CURVE_SECP521R1
3542  #define ECCCDH_SECP521R1_SELF_TEST_18
3543  /*** Tests for ECCCDH/SECP521R1 ***/
3544  static const u8 ecccdh_SECP521R1_18_test_vector_our_priv_key[] = {
3545  	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  };
3547  static const u8 ecccdh_SECP521R1_18_test_vector_peer_pub_key[] = {
3548  	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  };
3550  static const u8 ecccdh_SECP521R1_18_test_vector_our_pub_key[] = {
3551  	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  };
3553  static const u8 ecccdh_SECP521R1_18_test_vector_shared_secret[] = {
3554  	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  };
3556  static const ecdh_test_case ecccdh_SECP521R1_18_test_case = {
3557  	.name = "ECCCDH/SECP521R1 18",
3558  	.ecdh_type = ECCCDH,
3559  	.ec_str_p = &secp521r1_str_params,
3560  	.our_priv_key = ecccdh_SECP521R1_18_test_vector_our_priv_key,
3561  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_our_priv_key),
3562  	.peer_pub_key = ecccdh_SECP521R1_18_test_vector_peer_pub_key,
3563  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_peer_pub_key),
3564  	.exp_our_pub_key = ecccdh_SECP521R1_18_test_vector_our_pub_key,
3565  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_18_test_vector_our_pub_key),
3566  	.exp_shared_secret = ecccdh_SECP521R1_18_test_vector_shared_secret,
3567  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_18_test_vector_shared_secret),
3568  };
3569  #endif /* WITH_CURVE_SECP521R1 */
3570  
3571  #ifdef WITH_CURVE_SECP521R1
3572  #define ECCCDH_SECP521R1_SELF_TEST_19
3573  /*** Tests for ECCCDH/SECP521R1 ***/
3574  static const u8 ecccdh_SECP521R1_19_test_vector_our_priv_key[] = {
3575  	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  };
3577  static const u8 ecccdh_SECP521R1_19_test_vector_peer_pub_key[] = {
3578  	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  };
3580  static const u8 ecccdh_SECP521R1_19_test_vector_our_pub_key[] = {
3581  	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  };
3583  static const u8 ecccdh_SECP521R1_19_test_vector_shared_secret[] = {
3584  	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  };
3586  static const ecdh_test_case ecccdh_SECP521R1_19_test_case = {
3587  	.name = "ECCCDH/SECP521R1 19",
3588  	.ecdh_type = ECCCDH,
3589  	.ec_str_p = &secp521r1_str_params,
3590  	.our_priv_key = ecccdh_SECP521R1_19_test_vector_our_priv_key,
3591  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_our_priv_key),
3592  	.peer_pub_key = ecccdh_SECP521R1_19_test_vector_peer_pub_key,
3593  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_peer_pub_key),
3594  	.exp_our_pub_key = ecccdh_SECP521R1_19_test_vector_our_pub_key,
3595  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_19_test_vector_our_pub_key),
3596  	.exp_shared_secret = ecccdh_SECP521R1_19_test_vector_shared_secret,
3597  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_19_test_vector_shared_secret),
3598  };
3599  #endif /* WITH_CURVE_SECP521R1 */
3600  
3601  #ifdef WITH_CURVE_SECP521R1
3602  #define ECCCDH_SECP521R1_SELF_TEST_20
3603  /*** Tests for ECCCDH/SECP521R1 ***/
3604  static const u8 ecccdh_SECP521R1_20_test_vector_our_priv_key[] = {
3605  	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  };
3607  static const u8 ecccdh_SECP521R1_20_test_vector_peer_pub_key[] = {
3608  	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  };
3610  static const u8 ecccdh_SECP521R1_20_test_vector_our_pub_key[] = {
3611  	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  };
3613  static const u8 ecccdh_SECP521R1_20_test_vector_shared_secret[] = {
3614  	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  };
3616  static const ecdh_test_case ecccdh_SECP521R1_20_test_case = {
3617  	.name = "ECCCDH/SECP521R1 20",
3618  	.ecdh_type = ECCCDH,
3619  	.ec_str_p = &secp521r1_str_params,
3620  	.our_priv_key = ecccdh_SECP521R1_20_test_vector_our_priv_key,
3621  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_our_priv_key),
3622  	.peer_pub_key = ecccdh_SECP521R1_20_test_vector_peer_pub_key,
3623  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_peer_pub_key),
3624  	.exp_our_pub_key = ecccdh_SECP521R1_20_test_vector_our_pub_key,
3625  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_20_test_vector_our_pub_key),
3626  	.exp_shared_secret = ecccdh_SECP521R1_20_test_vector_shared_secret,
3627  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_20_test_vector_shared_secret),
3628  };
3629  #endif /* WITH_CURVE_SECP521R1 */
3630  
3631  #ifdef WITH_CURVE_SECP521R1
3632  #define ECCCDH_SECP521R1_SELF_TEST_21
3633  /*** Tests for ECCCDH/SECP521R1 ***/
3634  static const u8 ecccdh_SECP521R1_21_test_vector_our_priv_key[] = {
3635  	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  };
3637  static const u8 ecccdh_SECP521R1_21_test_vector_peer_pub_key[] = {
3638  	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  };
3640  static const u8 ecccdh_SECP521R1_21_test_vector_our_pub_key[] = {
3641  	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  };
3643  static const u8 ecccdh_SECP521R1_21_test_vector_shared_secret[] = {
3644  	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  };
3646  static const ecdh_test_case ecccdh_SECP521R1_21_test_case = {
3647  	.name = "ECCCDH/SECP521R1 21",
3648  	.ecdh_type = ECCCDH,
3649  	.ec_str_p = &secp521r1_str_params,
3650  	.our_priv_key = ecccdh_SECP521R1_21_test_vector_our_priv_key,
3651  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_our_priv_key),
3652  	.peer_pub_key = ecccdh_SECP521R1_21_test_vector_peer_pub_key,
3653  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_peer_pub_key),
3654  	.exp_our_pub_key = ecccdh_SECP521R1_21_test_vector_our_pub_key,
3655  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_21_test_vector_our_pub_key),
3656  	.exp_shared_secret = ecccdh_SECP521R1_21_test_vector_shared_secret,
3657  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_21_test_vector_shared_secret),
3658  };
3659  #endif /* WITH_CURVE_SECP521R1 */
3660  
3661  #ifdef WITH_CURVE_SECP521R1
3662  #define ECCCDH_SECP521R1_SELF_TEST_22
3663  /*** Tests for ECCCDH/SECP521R1 ***/
3664  static const u8 ecccdh_SECP521R1_22_test_vector_our_priv_key[] = {
3665  	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  };
3667  static const u8 ecccdh_SECP521R1_22_test_vector_peer_pub_key[] = {
3668  	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  };
3670  static const u8 ecccdh_SECP521R1_22_test_vector_our_pub_key[] = {
3671  	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  };
3673  static const u8 ecccdh_SECP521R1_22_test_vector_shared_secret[] = {
3674  	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  };
3676  static const ecdh_test_case ecccdh_SECP521R1_22_test_case = {
3677  	.name = "ECCCDH/SECP521R1 22",
3678  	.ecdh_type = ECCCDH,
3679  	.ec_str_p = &secp521r1_str_params,
3680  	.our_priv_key = ecccdh_SECP521R1_22_test_vector_our_priv_key,
3681  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_our_priv_key),
3682  	.peer_pub_key = ecccdh_SECP521R1_22_test_vector_peer_pub_key,
3683  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_peer_pub_key),
3684  	.exp_our_pub_key = ecccdh_SECP521R1_22_test_vector_our_pub_key,
3685  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_22_test_vector_our_pub_key),
3686  	.exp_shared_secret = ecccdh_SECP521R1_22_test_vector_shared_secret,
3687  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_22_test_vector_shared_secret),
3688  };
3689  #endif /* WITH_CURVE_SECP521R1 */
3690  
3691  #ifdef WITH_CURVE_SECP521R1
3692  #define ECCCDH_SECP521R1_SELF_TEST_23
3693  /*** Tests for ECCCDH/SECP521R1 ***/
3694  static const u8 ecccdh_SECP521R1_23_test_vector_our_priv_key[] = {
3695  	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  };
3697  static const u8 ecccdh_SECP521R1_23_test_vector_peer_pub_key[] = {
3698  	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  };
3700  static const u8 ecccdh_SECP521R1_23_test_vector_our_pub_key[] = {
3701  	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  };
3703  static const u8 ecccdh_SECP521R1_23_test_vector_shared_secret[] = {
3704  	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  };
3706  static const ecdh_test_case ecccdh_SECP521R1_23_test_case = {
3707  	.name = "ECCCDH/SECP521R1 23",
3708  	.ecdh_type = ECCCDH,
3709  	.ec_str_p = &secp521r1_str_params,
3710  	.our_priv_key = ecccdh_SECP521R1_23_test_vector_our_priv_key,
3711  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_our_priv_key),
3712  	.peer_pub_key = ecccdh_SECP521R1_23_test_vector_peer_pub_key,
3713  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_peer_pub_key),
3714  	.exp_our_pub_key = ecccdh_SECP521R1_23_test_vector_our_pub_key,
3715  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_23_test_vector_our_pub_key),
3716  	.exp_shared_secret = ecccdh_SECP521R1_23_test_vector_shared_secret,
3717  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_23_test_vector_shared_secret),
3718  };
3719  #endif /* WITH_CURVE_SECP521R1 */
3720  
3721  #ifdef WITH_CURVE_SECP521R1
3722  #define ECCCDH_SECP521R1_SELF_TEST_24
3723  /*** Tests for ECCCDH/SECP521R1 ***/
3724  static const u8 ecccdh_SECP521R1_24_test_vector_our_priv_key[] = {
3725  	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  };
3727  static const u8 ecccdh_SECP521R1_24_test_vector_peer_pub_key[] = {
3728  	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  };
3730  static const u8 ecccdh_SECP521R1_24_test_vector_our_pub_key[] = {
3731  	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  };
3733  static const u8 ecccdh_SECP521R1_24_test_vector_shared_secret[] = {
3734  	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  };
3736  static const ecdh_test_case ecccdh_SECP521R1_24_test_case = {
3737  	.name = "ECCCDH/SECP521R1 24",
3738  	.ecdh_type = ECCCDH,
3739  	.ec_str_p = &secp521r1_str_params,
3740  	.our_priv_key = ecccdh_SECP521R1_24_test_vector_our_priv_key,
3741  	.our_priv_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_our_priv_key),
3742  	.peer_pub_key = ecccdh_SECP521R1_24_test_vector_peer_pub_key,
3743  	.peer_pub_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_peer_pub_key),
3744  	.exp_our_pub_key = ecccdh_SECP521R1_24_test_vector_our_pub_key,
3745  	.exp_our_pub_key_len = sizeof(ecccdh_SECP521R1_24_test_vector_our_pub_key),
3746  	.exp_shared_secret = ecccdh_SECP521R1_24_test_vector_shared_secret,
3747  	.exp_shared_secret_len = sizeof(ecccdh_SECP521R1_24_test_vector_shared_secret),
3748  };
3749  #endif /* WITH_CURVE_SECP521R1 */
3750