1 /* 2 * Copyright (C) 2021 - This file is part of libecc project 3 * 4 * Authors: 5 * Ryad BENADJILA <ryadbenadjila@gmail.com> 6 * Arnaud EBALARD <arnaud.ebalard@ssi.gouv.fr> 7 * 8 * This software is licensed under a dual BSD and GPL v2 license. 9 * See LICENSE file at the root folder of the project. 10 */ 11 12 #ifdef WITH_CURVE_WEI25519 13 14 /***** Test vectors from RFC7748 ****/ 15 static const u8 x25519_WEI25519_0_our_priv_key[] = { 16 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d, 0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45, 0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a, 0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a, 17 }; 18 19 static const u8 x25519_WEI25519_0_peer_pub_key[] = { 20 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4, 0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37, 0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d, 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f, 21 }; 22 23 static const u8 x25519_WEI25519_0_our_pub_key[] = { 24 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54, 0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a, 0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4, 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a, 25 }; 26 27 static const u8 x25519_WEI25519_0_shared_secret[] = { 28 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1, 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25, 0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33, 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42, 29 }; 30 31 static const ecdh_test_case x25519_WEI25519_0_test_case = { 32 .name = "X25519/WEI25519 0", 33 .ecdh_type = X25519, 34 .ec_str_p = &wei25519_str_params, 35 .our_priv_key = x25519_WEI25519_0_our_priv_key, 36 .our_priv_key_len = sizeof(x25519_WEI25519_0_our_priv_key), 37 .peer_pub_key = x25519_WEI25519_0_peer_pub_key, 38 .peer_pub_key_len = sizeof(x25519_WEI25519_0_peer_pub_key), 39 .exp_our_pub_key = x25519_WEI25519_0_our_pub_key, 40 .exp_our_pub_key_len = sizeof(x25519_WEI25519_0_our_pub_key), 41 .exp_shared_secret = x25519_WEI25519_0_shared_secret, 42 .exp_shared_secret_len = sizeof(x25519_WEI25519_0_shared_secret), 43 }; 44 /******************/ 45 46 static const u8 x25519_WEI25519_1_our_priv_key[] = { 47 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b, 0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6, 0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd, 0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb, 48 }; 49 50 static const u8 x25519_WEI25519_1_peer_pub_key[] = { 51 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54, 0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a, 0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4, 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a, 52 }; 53 54 static const u8 x25519_WEI25519_1_our_pub_key[] = { 55 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4, 0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37, 0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d, 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f, 56 }; 57 58 static const u8 x25519_WEI25519_1_shared_secret[] = { 59 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1, 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25, 0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33, 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42, 60 }; 61 62 static const ecdh_test_case x25519_WEI25519_1_test_case = { 63 .name = "X25519/WEI25519 1", 64 .ecdh_type = X25519, 65 .ec_str_p = &wei25519_str_params, 66 .our_priv_key = x25519_WEI25519_1_our_priv_key, 67 .our_priv_key_len = sizeof(x25519_WEI25519_1_our_priv_key), 68 .peer_pub_key = x25519_WEI25519_1_peer_pub_key, 69 .peer_pub_key_len = sizeof(x25519_WEI25519_1_peer_pub_key), 70 .exp_our_pub_key = x25519_WEI25519_1_our_pub_key, 71 .exp_our_pub_key_len = sizeof(x25519_WEI25519_1_our_pub_key), 72 .exp_shared_secret = x25519_WEI25519_1_shared_secret, 73 .exp_shared_secret_len = sizeof(x25519_WEI25519_1_shared_secret), 74 }; 75 76 77 /***** Test vectors from https://tools.ietf.org/id/draft-ietf-ipsecme-safecurves-03.xml ****/ 78 /******************/ 79 80 static const u8 x25519_WEI25519_2_our_priv_key[] = { 81 0x75, 0x1f, 0xb4, 0x30, 0x86, 0x55, 0xb4, 0x76, 0xb6, 0x78, 0x9b, 0x73, 0x25, 0xf9, 0xea, 0x8c, 0xdd, 0xd1, 0x6a, 0x58, 0x53, 0x3f, 0xf6, 0xd9, 0xe6, 0x00, 0x09, 0x46, 0x4a, 0x5f, 0x9d, 0x94, 82 }; 83 84 static const u8 x25519_WEI25519_2_peer_pub_key[] = { 85 0x0b, 0xe7, 0xc1, 0xf5, 0xaa, 0xd8, 0x7d, 0x7e, 0x44, 0x86, 0x62, 0x67, 0x32, 0x98, 0xa4, 0x43, 0x47, 0x8b, 0x85, 0x97, 0x45, 0x17, 0x9e, 0xaf, 0x56, 0x4c, 0x79, 0xc0, 0xef, 0x6e, 0xee, 0x25, 86 }; 87 88 static const u8 x25519_WEI25519_2_our_pub_key[] = { 89 0x48, 0xd5, 0xdd, 0xd4, 0x06, 0x12, 0x57, 0xba, 0x16, 0x6f, 0xa3, 0xf9, 0xbb, 0xdb, 0x74, 0xf1, 0xa4, 0xe8, 0x1c, 0x08, 0x93, 0x84, 0xfa, 0x77, 0xf7, 0x90, 0x70, 0x9f, 0x0d, 0xfb, 0xc7, 0x66, 90 }; 91 92 static const u8 x25519_WEI25519_2_shared_secret[] = { 93 0xc7, 0x49, 0x50, 0x60, 0x7a, 0x12, 0x32, 0x7f, 0x32, 0x04, 0xd9, 0x4b, 0x68, 0x25, 0xbf, 0xb0, 0x68, 0xb7, 0xf8, 0x31, 0x9a, 0x9e, 0x37, 0x08, 0xed, 0x3d, 0x43, 0xce, 0x81, 0x30, 0xc9, 0x50, 94 }; 95 96 static const ecdh_test_case x25519_WEI25519_2_test_case = { 97 .name = "X25519/WEI25519 2", 98 .ecdh_type = X25519, 99 .ec_str_p = &wei25519_str_params, 100 .our_priv_key = x25519_WEI25519_2_our_priv_key, 101 .our_priv_key_len = sizeof(x25519_WEI25519_2_our_priv_key), 102 .peer_pub_key = x25519_WEI25519_2_peer_pub_key, 103 .peer_pub_key_len = sizeof(x25519_WEI25519_2_peer_pub_key), 104 .exp_our_pub_key = x25519_WEI25519_2_our_pub_key, 105 .exp_our_pub_key_len = sizeof(x25519_WEI25519_2_our_pub_key), 106 .exp_shared_secret = x25519_WEI25519_2_shared_secret, 107 .exp_shared_secret_len = sizeof(x25519_WEI25519_2_shared_secret), 108 }; 109 110 /******************/ 111 112 static const u8 x25519_WEI25519_3_our_priv_key[] = { 113 0x0a, 0x54, 0x64, 0x52, 0x53, 0x29, 0x0d, 0x60, 0xdd, 0xad, 0xd0, 0xe0, 0x30, 0xba, 0xcd, 0x9e, 0x55, 0x01, 0xef, 0xdc, 0x22, 0x07, 0x55, 0xa1, 0xe9, 0x78, 0xf1, 0xb8, 0x39, 0xa0, 0x56, 0x88, 114 }; 115 116 static const u8 x25519_WEI25519_3_peer_pub_key[] = { 117 0x48, 0xd5, 0xdd, 0xd4, 0x06, 0x12, 0x57, 0xba, 0x16, 0x6f, 0xa3, 0xf9, 0xbb, 0xdb, 0x74, 0xf1, 0xa4, 0xe8, 0x1c, 0x08, 0x93, 0x84, 0xfa, 0x77, 0xf7, 0x90, 0x70, 0x9f, 0x0d, 0xfb, 0xc7, 0x66, 118 }; 119 120 static const u8 x25519_WEI25519_3_our_pub_key[] = { 121 0x0b, 0xe7, 0xc1, 0xf5, 0xaa, 0xd8, 0x7d, 0x7e, 0x44, 0x86, 0x62, 0x67, 0x32, 0x98, 0xa4, 0x43, 0x47, 0x8b, 0x85, 0x97, 0x45, 0x17, 0x9e, 0xaf, 0x56, 0x4c, 0x79, 0xc0, 0xef, 0x6e, 0xee, 0x25, 122 }; 123 124 static const u8 x25519_WEI25519_3_shared_secret[] = { 125 0xc7, 0x49, 0x50, 0x60, 0x7a, 0x12, 0x32, 0x7f, 0x32, 0x04, 0xd9, 0x4b, 0x68, 0x25, 0xbf, 0xb0, 0x68, 0xb7, 0xf8, 0x31, 0x9a, 0x9e, 0x37, 0x08, 0xed, 0x3d, 0x43, 0xce, 0x81, 0x30, 0xc9, 0x50, 126 }; 127 128 static const ecdh_test_case x25519_WEI25519_3_test_case = { 129 .name = "X25519/WEI25519 3", 130 .ecdh_type = X25519, 131 .ec_str_p = &wei25519_str_params, 132 .our_priv_key = x25519_WEI25519_3_our_priv_key, 133 .our_priv_key_len = sizeof(x25519_WEI25519_3_our_priv_key), 134 .peer_pub_key = x25519_WEI25519_3_peer_pub_key, 135 .peer_pub_key_len = sizeof(x25519_WEI25519_3_peer_pub_key), 136 .exp_our_pub_key = x25519_WEI25519_3_our_pub_key, 137 .exp_our_pub_key_len = sizeof(x25519_WEI25519_3_our_pub_key), 138 .exp_shared_secret = x25519_WEI25519_3_shared_secret, 139 .exp_shared_secret_len = sizeof(x25519_WEI25519_3_shared_secret), 140 }; 141 142 #endif 143