xref: /freebsd/crypto/libecc/src/tests/x25519_test_vectors.h (revision f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
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