1 /*
2  * Copyright (c) 2024 Eriptic Technologies.
3  *
4  * SPDX-License-Identifier: Apache-2.0 or MIT
5  */
6 
7 #include <stdint.h>
8 
9 /*
10  * Authentication with Signatures, X.509 Identified by 'x5t'
11  * See RFC9529 Section 2
12  *
13  * EDHOC AEAD algorithm = AES-CCM-16-64-128
14  * EDHOC hash algorithm = SHA-256
15  * EDHOC Message Authentication Code (MAC) length in bytes (Static DH) = 8
16  * EDHOC key exchange algorithm (ECDH curve) = X25519
17  * EDHOC signature algorithm = EdDSA
18  * application AEAD algorithm = AES-CCM-16-64-128
19  * application hash algorithm = SHA-256
20  *
21  */
22 
23 const uint8_t T1_RFC9529__METHOD = 0x00;
24 const uint8_t T1_RFC9529__SUITES_I[] = { 0x00 };
25 uint32_t T1_RFC9529__SUITES_I_LEN = sizeof(T1_RFC9529__SUITES_I);
26 const uint8_t T1_RFC9529__SUITES_R[] = { 0x00 };
27 uint32_t T1_RFC9529__SUITES_R_LEN = sizeof(T1_RFC9529__SUITES_R);
28 const uint8_t T1_RFC9529__X[] = { 0x89, 0x2e, 0xc2, 0x8e, 0x5c, 0xb6, 0x66,
29 				  0x91, 0x08, 0x47, 0x05, 0x39, 0x50, 0x0b,
30 				  0x70, 0x5e, 0x60, 0xd0, 0x08, 0xd3, 0x47,
31 				  0xc5, 0x81, 0x7e, 0xe9, 0xf3, 0x32, 0x7c,
32 				  0x8a, 0x87, 0xbb, 0x03 };
33 uint32_t T1_RFC9529__X_LEN = sizeof(T1_RFC9529__X);
34 const uint8_t T1_RFC9529__G_X[] = { 0x31, 0xf8, 0x2c, 0x7b, 0x5b, 0x9c, 0xbb,
35 				    0xf0, 0xf1, 0x94, 0xd9, 0x13, 0xcc, 0x12,
36 				    0xef, 0x15, 0x32, 0xd3, 0x28, 0xef, 0x32,
37 				    0x63, 0x2a, 0x48, 0x81, 0xa1, 0xc0, 0x70,
38 				    0x1e, 0x23, 0x7f, 0x04 };
39 uint32_t T1_RFC9529__G_X_LEN = sizeof(T1_RFC9529__G_X);
40 const uint8_t T1_RFC9529__Y[] = { 0xe6, 0x9c, 0x23, 0xfb, 0xf8, 0x1b, 0xc4,
41 				  0x35, 0x94, 0x24, 0x46, 0x83, 0x7f, 0xe8,
42 				  0x27, 0xbf, 0x20, 0x6c, 0x8f, 0xa1, 0x0a,
43 				  0x39, 0xdb, 0x47, 0x44, 0x9e, 0x5a, 0x81,
44 				  0x34, 0x21, 0xe1, 0xe8 };
45 uint32_t T1_RFC9529__Y_LEN = sizeof(T1_RFC9529__Y);
46 const uint8_t T1_RFC9529__G_Y[] = { 0xdc, 0x88, 0xd2, 0xd5, 0x1d, 0xa5, 0xed,
47 				    0x67, 0xfc, 0x46, 0x16, 0x35, 0x6b, 0xc8,
48 				    0xca, 0x74, 0xef, 0x9e, 0xbe, 0x8b, 0x38,
49 				    0x7e, 0x62, 0x3a, 0x36, 0x0b, 0xa4, 0x80,
50 				    0xb9, 0xb2, 0x9d, 0x1c };
51 uint32_t T1_RFC9529__G_Y_LEN = sizeof(T1_RFC9529__G_Y);
52 const uint8_t T1_RFC9529__C_I[] = { 0x2d };
53 uint32_t T1_RFC9529__C_I_LEN = sizeof(T1_RFC9529__C_I);
54 const uint8_t T1_RFC9529__C_R[] = { 0x18 };
55 uint32_t T1_RFC9529__C_R_LEN = sizeof(T1_RFC9529__C_R);
56 
57 /*****/
58 const uint8_t T1_RFC9529__SK_I[] = { 0x4c, 0x5b, 0x25, 0x87, 0x8f, 0x50, 0x7c,
59 				     0x6b, 0x9d, 0xae, 0x68, 0xfb, 0xd4, 0xfd,
60 				     0x3f, 0xf9, 0x97, 0x53, 0x3d, 0xb0, 0xaf,
61 				     0x00, 0xb2, 0x5d, 0x32, 0x4e, 0xa2, 0x8e,
62 				     0x6c, 0x21, 0x3b, 0xc8 };
63 uint32_t T1_RFC9529__SK_I_LEN = sizeof(T1_RFC9529__SK_I);
64 const uint8_t T1_RFC9529__PK_I[] = { 0xed, 0x06, 0xa8, 0xae, 0x61, 0xa8, 0x29,
65 				     0xba, 0x5f, 0xa5, 0x45, 0x25, 0xc9, 0xd0,
66 				     0x7f, 0x48, 0xdd, 0x44, 0xa3, 0x02, 0xf4,
67 				     0x3e, 0x0f, 0x23, 0xd8, 0xcc, 0x20, 0xb7,
68 				     0x30, 0x85, 0x14, 0x1e };
69 uint32_t T1_RFC9529__PK_I_LEN = sizeof(T1_RFC9529__PK_I);
70 
71 /*****/
72 const uint8_t T1_RFC9529__SK_R[] = { 0xef, 0x14, 0x0f, 0xf9, 0x00, 0xb0, 0xab,
73 				     0x03, 0xf0, 0xc0, 0x8d, 0x87, 0x9c, 0xbb,
74 				     0xd4, 0xb3, 0x1e, 0xa7, 0x1e, 0x6e, 0x7e,
75 				     0xe7, 0xff, 0xcb, 0x7e, 0x79, 0x55, 0x77,
76 				     0x7a, 0x33, 0x27, 0x99 };
77 uint32_t T1_RFC9529__SK_R_LEN = sizeof(T1_RFC9529__SK_R);
78 const uint8_t T1_RFC9529__PK_R[] = { 0xa1, 0xdb, 0x47, 0xb9, 0x51, 0x84, 0x85,
79 				     0x4a, 0xd1, 0x2a, 0x0c, 0x1a, 0x35, 0x4e,
80 				     0x41, 0x8a, 0xac, 0xe3, 0x3a, 0xa0, 0xf2,
81 				     0xc6, 0x62, 0xc0, 0x0b, 0x3a, 0xc5, 0x5d,
82 				     0xe9, 0x2f, 0x93, 0x59 };
83 uint32_t T1_RFC9529__PK_R_LEN = sizeof(T1_RFC9529__PK_R);
84 /****/
85 
86 const uint8_t T1_RFC9529__ID_CRED_R[] = { 0xa1, 0x18, 0x22, 0x82, 0x2e,
87 					  0x48, 0x79, 0xf2, 0xa4, 0x1b,
88 					  0x51, 0x0c, 0x1f, 0x9b };
89 uint32_t T1_RFC9529__ID_CRED_R_LEN = sizeof(T1_RFC9529__ID_CRED_R);
90 const uint8_t T1_RFC9529__CRED_R[] = {
91 	0x58, 0xf1, 0x30, 0x81, 0xee, 0x30, 0x81, 0xa1, 0xa0, 0x03, 0x02, 0x01,
92 	0x02, 0x02, 0x04, 0x62, 0x31, 0x9e, 0xc4, 0x30, 0x05, 0x06, 0x03, 0x2b,
93 	0x65, 0x70, 0x30, 0x1d, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04,
94 	0x03, 0x0c, 0x12, 0x45, 0x44, 0x48, 0x4f, 0x43, 0x20, 0x52, 0x6f, 0x6f,
95 	0x74, 0x20, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x30, 0x1e, 0x17,
96 	0x0d, 0x32, 0x32, 0x30, 0x33, 0x31, 0x36, 0x30, 0x38, 0x32, 0x34, 0x33,
97 	0x36, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33,
98 	0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06,
99 	0x03, 0x55, 0x04, 0x03, 0x0c, 0x17, 0x45, 0x44, 0x48, 0x4f, 0x43, 0x20,
100 	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x45, 0x64,
101 	0x32, 0x35, 0x35, 0x31, 0x39, 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b,
102 	0x65, 0x70, 0x03, 0x21, 0x00, 0xa1, 0xdb, 0x47, 0xb9, 0x51, 0x84, 0x85,
103 	0x4a, 0xd1, 0x2a, 0x0c, 0x1a, 0x35, 0x4e, 0x41, 0x8a, 0xac, 0xe3, 0x3a,
104 	0xa0, 0xf2, 0xc6, 0x62, 0xc0, 0x0b, 0x3a, 0xc5, 0x5d, 0xe9, 0x2f, 0x93,
105 	0x59, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x41, 0x00, 0xb7,
106 	0x23, 0xbc, 0x01, 0xea, 0xb0, 0x92, 0x8e, 0x8b, 0x2b, 0x6c, 0x98, 0xde,
107 	0x19, 0xcc, 0x38, 0x23, 0xd4, 0x6e, 0x7d, 0x69, 0x87, 0xb0, 0x32, 0x47,
108 	0x8f, 0xec, 0xfa, 0xf1, 0x45, 0x37, 0xa1, 0xaf, 0x14, 0xcc, 0x8b, 0xe8,
109 	0x29, 0xc6, 0xb7, 0x30, 0x44, 0x10, 0x18, 0x37, 0xeb, 0x4a, 0xbc, 0x94,
110 	0x95, 0x65, 0xd8, 0x6d, 0xce, 0x51, 0xcf, 0xae, 0x52, 0xab, 0x82, 0xc1,
111 	0x52, 0xcb, 0x02
112 };
113 uint32_t T1_RFC9529__CRED_R_LEN = sizeof(T1_RFC9529__CRED_R);
114 const uint8_t T1_RFC9529__ID_CRED_I[] = { 0xa1, 0x18, 0x22, 0x82, 0x2e,
115 					  0x48, 0xc2, 0x4a, 0xb2, 0xfd,
116 					  0x76, 0x43, 0xc7, 0x9f };
117 uint32_t T1_RFC9529__ID_CRED_I_LEN = sizeof(T1_RFC9529__ID_CRED_I);
118 const uint8_t T1_RFC9529__CRED_I[] = {
119 	0x58, 0xf1, 0x30, 0x81, 0xee, 0x30, 0x81, 0xa1, 0xa0, 0x03, 0x02, 0x01,
120 	0x02, 0x02, 0x04, 0x62, 0x31, 0x9e, 0xa0, 0x30, 0x05, 0x06, 0x03, 0x2b,
121 	0x65, 0x70, 0x30, 0x1d, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04,
122 	0x03, 0x0c, 0x12, 0x45, 0x44, 0x48, 0x4f, 0x43, 0x20, 0x52, 0x6f, 0x6f,
123 	0x74, 0x20, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x30, 0x1e, 0x17,
124 	0x0d, 0x32, 0x32, 0x30, 0x33, 0x31, 0x36, 0x30, 0x38, 0x32, 0x34, 0x30,
125 	0x30, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33,
126 	0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06,
127 	0x03, 0x55, 0x04, 0x03, 0x0c, 0x17, 0x45, 0x44, 0x48, 0x4f, 0x43, 0x20,
128 	0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x45, 0x64,
129 	0x32, 0x35, 0x35, 0x31, 0x39, 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b,
130 	0x65, 0x70, 0x03, 0x21, 0x00, 0xed, 0x06, 0xa8, 0xae, 0x61, 0xa8, 0x29,
131 	0xba, 0x5f, 0xa5, 0x45, 0x25, 0xc9, 0xd0, 0x7f, 0x48, 0xdd, 0x44, 0xa3,
132 	0x02, 0xf4, 0x3e, 0x0f, 0x23, 0xd8, 0xcc, 0x20, 0xb7, 0x30, 0x85, 0x14,
133 	0x1e, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x41, 0x00, 0x52,
134 	0x12, 0x41, 0xd8, 0xb3, 0xa7, 0x70, 0x99, 0x6b, 0xcf, 0xc9, 0xb9, 0xea,
135 	0xd4, 0xe7, 0xe0, 0xa1, 0xc0, 0xdb, 0x35, 0x3a, 0x3b, 0xdf, 0x29, 0x10,
136 	0xb3, 0x92, 0x75, 0xae, 0x48, 0xb7, 0x56, 0x01, 0x59, 0x81, 0x85, 0x0d,
137 	0x27, 0xdb, 0x67, 0x34, 0xe3, 0x7f, 0x67, 0x21, 0x22, 0x67, 0xdd, 0x05,
138 	0xee, 0xff, 0x27, 0xb9, 0xe7, 0xa8, 0x13, 0xfa, 0x57, 0x4b, 0x72, 0xa0,
139 	0x0b, 0x43, 0x0b
140 };
141 uint32_t T1_RFC9529__CRED_I_LEN = sizeof(T1_RFC9529__CRED_I);
142 
143 const uint8_t T1_RFC9529__MESSAGE_1[] = {
144 	0x00, 0x00, 0x58, 0x20, 0x31, 0xf8, 0x2c, 0x7b, 0x5b, 0x9c,
145 	0xbb, 0xf0, 0xf1, 0x94, 0xd9, 0x13, 0xcc, 0x12, 0xef, 0x15,
146 	0x32, 0xd3, 0x28, 0xef, 0x32, 0x63, 0x2a, 0x48, 0x81, 0xa1,
147 	0xc0, 0x70, 0x1e, 0x23, 0x7f, 0x04, 0x2d
148 };
149 uint32_t T1_RFC9529__MESSAGE_1_LEN = sizeof(T1_RFC9529__MESSAGE_1);
150 
151 const uint8_t T1_RFC9529__MESSAGE_2[] = {
152 	0x58, 0x72, 0xdc, 0x88, 0xd2, 0xd5, 0x1d, 0xa5, 0xed, 0x67, 0xfc, 0x46,
153 	0x16, 0x35, 0x6b, 0xc8, 0xca, 0x74, 0xef, 0x9e, 0xbe, 0x8b, 0x38, 0x7e,
154 	0x62, 0x3a, 0x36, 0x0b, 0xa4, 0x80, 0xb9, 0xb2, 0x9d, 0x1c, 0xbc, 0x26,
155 	0xdd, 0x27, 0x0f, 0xe9, 0xc0, 0x2c, 0x44, 0xce, 0x39, 0x34, 0x79, 0x4b,
156 	0x1c, 0xc6, 0x2b, 0xa2, 0x2f, 0x05, 0x45, 0x9f, 0x8d, 0x35, 0x8c, 0x8d,
157 	0x12, 0x27, 0x5a, 0xc4, 0x2c, 0x5f, 0x96, 0xde, 0xd5, 0xf1, 0x3c, 0xc9,
158 	0x08, 0x4e, 0x5b, 0x20, 0x18, 0x89, 0xa4, 0x5e, 0x5a, 0x60, 0xa5, 0x56,
159 	0x2d, 0xc1, 0x18, 0x61, 0x9c, 0x3d, 0xaa, 0x2f, 0xd9, 0xf4, 0xc9, 0xf4,
160 	0xd6, 0xed, 0xad, 0x10, 0x9d, 0xd4, 0xed, 0xf9, 0x59, 0x62, 0xaa, 0xfb,
161 	0xaf, 0x9a, 0xb3, 0xf4, 0xa1, 0xf6, 0xb9, 0x8f
162 };
163 uint32_t T1_RFC9529__MESSAGE_2_LEN = sizeof(T1_RFC9529__MESSAGE_2);
164 
165 const uint8_t T1_RFC9529__MESSAGE_3[] = {
166 	0x58, 0x58, 0x25, 0xc3, 0x45, 0x88, 0x4a, 0xaa, 0xeb, 0x22, 0xc5, 0x27,
167 	0xf9, 0xb1, 0xd2, 0xb6, 0x78, 0x72, 0x07, 0xe0, 0x16, 0x3c, 0x69, 0xb6,
168 	0x2a, 0x0d, 0x43, 0x92, 0x81, 0x50, 0x42, 0x72, 0x03, 0xc3, 0x16, 0x74,
169 	0xe4, 0x51, 0x4e, 0xa6, 0xe3, 0x83, 0xb5, 0x66, 0xeb, 0x29, 0x76, 0x3e,
170 	0xfe, 0xb0, 0xaf, 0xa5, 0x18, 0x77, 0x6a, 0xe1, 0xc6, 0x5f, 0x85, 0x6d,
171 	0x84, 0xbf, 0x32, 0xaf, 0x3a, 0x78, 0x36, 0x97, 0x04, 0x66, 0xdc, 0xb7,
172 	0x1f, 0x76, 0x74, 0x5d, 0x39, 0xd3, 0x02, 0x5e, 0x77, 0x03, 0xe0, 0xc0,
173 	0x32, 0xeb, 0xad, 0x51, 0x94, 0x7c
174 };
175 uint32_t T1_RFC9529__MESSAGE_3_LEN = sizeof(T1_RFC9529__MESSAGE_3);
176 
177 const uint8_t T1_RFC9529__MESSAGE_4[] = { 0x48, 0x4f, 0x0e, 0xde, 0xe3,
178 					  0x66, 0xe5, 0xc8, 0x83 };
179 uint32_t T1_RFC9529__MESSAGE_4_LEN = sizeof(T1_RFC9529__MESSAGE_4);
180 
181 const uint8_t T1_RFC9529__PRK_out[] = {
182 	0xb7, 0x44, 0xcb, 0x7d, 0x8a, 0x87, 0xcc, 0x04, 0x47, 0xc3, 0x35,
183 	0x0e, 0x16, 0x5b, 0x25, 0x0d, 0xab, 0x12, 0xec, 0x45, 0x33, 0x25,
184 	0xab, 0xb9, 0x22, 0xb3, 0x03, 0x07, 0xe5, 0xc3, 0x68, 0xf0
185 };
186 
187 uint32_t T1_RFC9529__PRK_out_LEN = sizeof(T1_RFC9529__PRK_out);