1/*
2 * lws-api-test-jose - RFC8152 cose_key tests
3 *
4 * Written in 2010-2021 by Andy Green <andy@warmcat.com>
5 *
6 * This file is made available under the Creative Commons CC0 1.0
7 * Universal Public Domain Dedication.
8 *
9 * Raw key CBOR created from descriptions at
10 *
11 * https://github.com/cose-wg/Examples/blob/master/KeySet.txt
12 */
13
14#include <libwebsockets.h>
15#include <stdlib.h>
16#include <fcntl.h>
17
18static int
19key_import_cb(struct lws_cose_key *s, void *user)
20{
21	lwsl_notice("%s: key type %lld\n", __func__, (long long)s->kty);
22
23	return 0;
24}
25
26static const uint8_t
27	cose_key1[] = {
28			0xa6, 0x01, 0x02, 0x02, 0x62,
29			0x31, 0x31, 0x20, 0x01, 0x21,
30			0x58, 0x20, 0xba, 0xc5, 0xb1,
31			0x1c, 0xad, 0x8f, 0x99, 0xf9,
32			0xc7, 0x2b, 0x05, 0xcf, 0x4b,
33			0x9e, 0x26, 0xd2, 0x44, 0xdc,
34			0x18, 0x9f, 0x74, 0x52, 0x28,
35			0x25, 0x5a, 0x21, 0x9a, 0x86,
36			0xd6, 0xa0, 0x9e, 0xff, 0x22,
37			0x58, 0x20, 0x20, 0x13, 0x8b,
38			0xf8, 0x2d, 0xc1, 0xb6, 0xd5,
39			0x62, 0xbe, 0x0f, 0xa5, 0x4a,
40			0xb7, 0x80, 0x4a, 0x3a, 0x64,
41			0xb6, 0xd7, 0x2c, 0xcf, 0xed,
42			0x6b, 0x6f, 0xb6, 0xed, 0x28,
43			0xbb, 0xfc, 0x11, 0x7e, 0x23,
44			0x58, 0x20, 0x57, 0xc9, 0x20,
45			0x77, 0x66, 0x41, 0x46, 0xe8,
46			0x76, 0x76, 0x0c, 0x95, 0x20,
47			0xd0, 0x54, 0xaa, 0x93, 0xc3,
48			0xaf, 0xb0, 0x4e, 0x30, 0x67,
49			0x05, 0xdb, 0x60, 0x90, 0x30,
50			0x85, 0x07, 0xb4, 0xd3 },
51	cose_key2[] = {
52			0xa6, 0x01, 0x02, 0x02, 0x78,
53			0x24, 0x6d, 0x65, 0x72, 0x69,
54			0x61, 0x64, 0x6f, 0x63, 0x2e,
55			0x62, 0x72, 0x61, 0x6e, 0x64,
56			0x79, 0x62, 0x75, 0x63, 0x6b,
57			0x40, 0x62, 0x75, 0x63, 0x6b,
58			0x6c, 0x61, 0x6e, 0x64, 0x2e,
59			0x65, 0x78, 0x61, 0x6d, 0x70,
60			0x6c, 0x65, 0x20, 0x01, 0x21,
61			0x58, 0x20, 0x65, 0xed, 0xa5,
62			0xa1, 0x25, 0x77, 0xc2, 0xba,
63			0xe8, 0x29, 0x43, 0x7f, 0xe3,
64			0x38, 0x70, 0x1a, 0x10, 0xaa,
65			0xa3, 0x75, 0xe1, 0xbb, 0x5b,
66			0x5d, 0xe1, 0x08, 0xde, 0x43,
67			0x9c, 0x08, 0x55, 0x1d, 0x22,
68			0x58, 0x20, 0x1e, 0x52, 0xed,
69			0x75, 0x70, 0x11, 0x63, 0xf7,
70			0xf9, 0xe4, 0x0d, 0xdf, 0x9f,
71			0x34, 0x1b, 0x3d, 0xc9, 0xba,
72			0x86, 0x0a, 0xf7, 0xe0, 0xca,
73			0x7c, 0xa7, 0xe9, 0xee, 0xcd,
74			0x00, 0x84, 0xd1, 0x9c, 0x23,
75			0x58, 0x20, 0xaf, 0xf9, 0x07,
76			0xc9, 0x9f, 0x9a, 0xd3, 0xaa,
77			0xe6, 0xc4, 0xcd, 0xf2, 0x11,
78			0x22, 0xbc, 0xe2, 0xbd, 0x68,
79			0xb5, 0x28, 0x3e, 0x69, 0x07,
80			0x15, 0x4a, 0xd9, 0x11, 0x84,
81			0x0f, 0xa2, 0x08, 0xcf },
82
83	cose_key3[] = { 0xa3, 0x01, 0x04, 0x02, 0x6a,
84			0x6f, 0x75, 0x72, 0x2d, 0x73,
85			0x65, 0x63, 0x72, 0x65, 0x74,
86			0x20, 0x58, 0x20, 0x84, 0x9b,
87			0x57, 0x21, 0x9d, 0xae, 0x48,
88			0xde, 0x64, 0x6d, 0x07, 0xdb,
89			0xb5, 0x33, 0x56, 0x6e, 0x97,
90			0x66, 0x86, 0x45, 0x7c, 0x14,
91			0x91, 0xbe, 0x3a, 0x76, 0xdc,
92			0xea, 0x6c, 0x42, 0x71, 0x88 },
93
94	cose_key4[] = { 0xa6, 0x01, 0x02, 0x02, 0x78,
95			0x1e, 0x62, 0x69, 0x6c, 0x62,
96			0x6f, 0x2e, 0x62, 0x61, 0x67,
97			0x67, 0x69, 0x6e, 0x73, 0x40,
98			0x68, 0x6f, 0x62, 0x62, 0x69,
99			0x74, 0x6f, 0x6e, 0x2e, 0x65,
100			0x78, 0x61, 0x6d, 0x70, 0x6c,
101			0x65, 0x20, 0x03, 0x21, 0x58,
102			0x42, 0x00, 0x72, 0x99, 0x2c,
103			0xb3, 0xac, 0x08, 0xec, 0xf3,
104			0xe5, 0xc6, 0x3d, 0xed, 0xec,
105			0x0d, 0x51, 0xa8, 0xc1, 0xf7,
106			0x9e, 0xf2, 0xf8, 0x2f, 0x94,
107			0xf3, 0xc7, 0x37, 0xbf, 0x5d,
108			0xe7, 0x98, 0x66, 0x71, 0xea,
109			0xc6, 0x25, 0xfe, 0x82, 0x57,
110			0xbb, 0xd0, 0x39, 0x46, 0x44,
111			0xca, 0xaa, 0x3a, 0xaf, 0x8f,
112			0x27, 0xa4, 0x58, 0x5f, 0xbb,
113			0xca, 0xd0, 0xf2, 0x45, 0x76,
114			0x20, 0x08, 0x5e, 0x5c, 0x8f,
115			0x42, 0xad, 0x22, 0x58, 0x42,
116			0x01, 0xdc, 0xa6, 0x94, 0x7b,
117			0xce, 0x88, 0xbc, 0x57, 0x90,
118			0x48, 0x5a, 0xc9, 0x74, 0x27,
119			0x34, 0x2b, 0xc3, 0x5f, 0x88,
120			0x7d, 0x86, 0xd6, 0x5a, 0x08,
121			0x93, 0x77, 0xe2, 0x47, 0xe6,
122			0x0b, 0xaa, 0x55, 0xe4, 0xe8,
123			0x50, 0x1e, 0x2a, 0xda, 0x57,
124			0x24, 0xac, 0x51, 0xd6, 0x90,
125			0x90, 0x08, 0x03, 0x3e, 0xbc,
126			0x10, 0xac, 0x99, 0x9b, 0x9d,
127			0x7f, 0x5c, 0xc2, 0x51, 0x9f,
128			0x3f, 0xe1, 0xea, 0x1d, 0x94,
129			0x75, 0x23, 0x58, 0x42, 0x00,
130			0x08, 0x51, 0x38, 0xdd, 0xab,
131			0xf5, 0xca, 0x97, 0x5f, 0x58,
132			0x60, 0xf9, 0x1a, 0x08, 0xe9,
133			0x1d, 0x6d, 0x5f, 0x9a, 0x76,
134			0xad, 0x40, 0x18, 0x76, 0x6a,
135			0x47, 0x66, 0x80, 0xb5, 0x5c,
136			0xd3, 0x39, 0xe8, 0xab, 0x6c,
137			0x72, 0xb5, 0xfa, 0xcd, 0xb2,
138			0xa2, 0xa5, 0x0a, 0xc2, 0x5b,
139			0xd0, 0x86, 0x64, 0x7d, 0xd3,
140			0xe2, 0xe6, 0xe9, 0x9e, 0x84,
141			0xca, 0x2c, 0x36, 0x09, 0xfd,
142			0xf1, 0x77, 0xfe, 0xb2, 0x6d },
143	cose_key5[] = { 0xa3, 0x01, 0x04, 0x02, 0x6b,
144			0x6f, 0x75, 0x72, 0x2d, 0x73,
145			0x65, 0x63, 0x72, 0x65, 0x74,
146			0x32, 0x20, 0x50, 0x84, 0x9b,
147			0x57, 0x86, 0x45, 0x7c, 0x14,
148			0x91, 0xbe, 0x3a, 0x76, 0xdc,
149			0xea, 0x6c, 0x42, 0x71 },
150
151	cose_key6[] = { 0xa6, 0x01, 0x02, 0x02, 0x78,
152			0x21, 0x70, 0x65, 0x72, 0x65,
153			0x67, 0x72, 0x69, 0x6e, 0x2e,
154			0x74, 0x6f, 0x6f, 0x6b, 0x40,
155			0x74, 0x75, 0x63, 0x6b, 0x62,
156			0x6f, 0x72, 0x6f, 0x75, 0x67,
157			0x68, 0x2e, 0x65, 0x78, 0x61,
158			0x6d, 0x70, 0x6c, 0x65, 0x20,
159			0x01, 0x21, 0x58, 0x20, 0x98,
160			0xf5, 0x0a, 0x4f, 0xf6, 0xc0,
161			0x58, 0x61, 0xc8, 0x86, 0x0d,
162			0x13, 0xa6, 0x38, 0xea, 0x56,
163			0xc3, 0xf5, 0xad, 0x75, 0x90,
164			0xbb, 0xfb, 0xf0, 0x54, 0xe1,
165			0xc7, 0xb4, 0xd9, 0x1d, 0x62,
166			0x80, 0x22, 0x58, 0x20, 0xf0,
167			0x14, 0x00, 0xb0, 0x89, 0x86,
168			0x78, 0x04, 0xb8, 0xe9, 0xfc,
169			0x96, 0xc3, 0x93, 0x21, 0x61,
170			0xf1, 0x93, 0x4f, 0x42, 0x23,
171			0x06, 0x91, 0x70, 0xd9, 0x24,
172			0xb7, 0xe0, 0x3b, 0xf8, 0x22,
173			0xbb, 0x23, 0x58, 0x20, 0x02,
174			0xd1, 0xf7, 0xe6, 0xf2, 0x6c,
175			0x43, 0xd4, 0x86, 0x8d, 0x87,
176			0xce, 0xb2, 0x35, 0x31, 0x61,
177			0x74, 0x0a, 0xac, 0xf1, 0xf7,
178			0x16, 0x36, 0x47, 0x98, 0x4b,
179			0x52, 0x2a, 0x84, 0x8d, 0xf1,
180			0xc3 },
181	cose_key7[] = { 0xa3, 0x01, 0x04, 0x02, 0x58,
182			0x24, 0x30, 0x31, 0x38, 0x63,
183			0x30, 0x61, 0x65, 0x35, 0x2d,
184			0x34, 0x64, 0x39, 0x62, 0x2d,
185			0x34, 0x37, 0x31, 0x62, 0x2d,
186			0x62, 0x66, 0x64, 0x36, 0x2d,
187			0x65, 0x65, 0x66, 0x33, 0x31,
188			0x34, 0x62, 0x63, 0x37, 0x30,
189			0x33, 0x37, 0x20, 0x58, 0x20,
190			0x84, 0x9b, 0x57, 0x21, 0x9d,
191			0xae, 0x48, 0xde, 0x64, 0x6d,
192			0x07, 0xdb, 0xb5, 0x33, 0x56,
193			0x6e, 0x97, 0x66, 0x86, 0x45,
194			0x7c, 0x14, 0x91, 0xbe, 0x3a,
195			0x76, 0xdc, 0xea, 0x6c, 0x42,
196			0x71, 0x88 },
197
198	cose_key8[] = {
199			/* kid "sec-48" for hmac 384 */
200
201			0xa3, 0x01, 0x04, 0x02, 0x66,
202			0x73, 0x65, 0x63, 0x2d, 0x34,
203			0x38, 0x20, 0x58, 0x30, 0x84,
204			0x9b, 0x57, 0x21, 0x9d, 0xae,
205			0x48, 0xde, 0x64, 0x6d, 0x07,
206			0xdb, 0xb5, 0x33, 0x56, 0x6e,
207			0x97, 0x66, 0x86, 0x45, 0x7c,
208			0x14, 0x91, 0xbe, 0x3a, 0x76,
209			0xdc, 0xea, 0x6c, 0x42, 0x71,
210			0x88, 0x00, 0x11, 0x22, 0x33,
211			0x77, 0x88, 0x99, 0xaa, 0x21,
212			0x22, 0x23, 0x24, 0x25, 0x26,
213			0x27, 0x28
214	},
215
216	cose_key9[] = {
217			/* kid "sec-64" for hmac 512 */
218
219			0xa3, 0x01, 0x04, 0x02, 0x46,
220			0x73, 0x65, 0x63, 0x2d, 0x36,
221			0x34, 0x20, 0x58, 0x40, 0x84,
222			0x9b, 0x57, 0x21, 0x9d, 0xae,
223			0x48, 0xde, 0x64, 0x6d, 0x07,
224			0xdb, 0xb5, 0x33, 0x56, 0x6e,
225			0x97, 0x66, 0x86, 0x45, 0x7c,
226			0x14, 0x91, 0xbe, 0x3a, 0x76,
227			0xdc, 0xea, 0x6c, 0x42, 0x71,
228			0x88, 0x00, 0x11, 0x22, 0x33,
229			0x77, 0x88, 0x99, 0xaa, 0x21,
230			0x22, 0x23, 0x24, 0x25, 0x26,
231			0x27, 0x28, 0xaa, 0xbb, 0xcc,
232			0xdd, 0xee, 0xff, 0xa5, 0xa6,
233			0xa7, 0xa8, 0xa9, 0xa0, 0xb1,
234			0xb2, 0xb3, 0xb4,
235	},
236
237	cose_key10[] = { /* kid "11" (again) ed22519 OKP key */
238			0xa5, 0x01, 0x01, 0x02, 0x42,
239			0x31, 0x31, 0x20, 0x06, 0x21,
240			0x58, 0x20, 0xd7, 0x5a, 0x98,
241			0x01, 0x82, 0xb1, 0x0a, 0xb7,
242			0xd5, 0x4b, 0xfe, 0xd3, 0xc9,
243			0x64, 0x07, 0x3a, 0x0e, 0xe1,
244			0x72, 0xf3, 0xda, 0xa6, 0x23,
245			0x25, 0xaf, 0x02, 0x1a, 0x68,
246			0xf7, 0x07, 0x51, 0x1a, 0x23,
247			0x58, 0x20, 0x9d, 0x61, 0xb1,
248			0x9d, 0xef, 0xfd, 0x5a, 0x60,
249			0xba, 0x84, 0x4a, 0xf4, 0x92,
250			0xec, 0x2c, 0xc4, 0x44, 0x49,
251			0xc5, 0x69, 0x7b, 0x32, 0x69,
252			0x19, 0x70, 0x3b, 0xac, 0x03,
253			0x1c, 0xae, 0x7f, 0x60
254	},
255
256	cose_key_set1[] = {
257
258			0x89,
259
260			0xa6, 0x01, 0x02, 0x02, 0x42,
261			0x31, 0x31, 0x20, 0x01, 0x21,
262			0x58, 0x20, 0xba, 0xc5, 0xb1,
263			0x1c, 0xad, 0x8f, 0x99, 0xf9,
264			0xc7, 0x2b, 0x05, 0xcf, 0x4b,
265			0x9e, 0x26, 0xd2, 0x44, 0xdc,
266			0x18, 0x9f, 0x74, 0x52, 0x28,
267			0x25, 0x5a, 0x21, 0x9a, 0x86,
268			0xd6, 0xa0, 0x9e, 0xff, 0x22,
269			0x58, 0x20, 0x20, 0x13, 0x8b,
270			0xf8, 0x2d, 0xc1, 0xb6, 0xd5,
271			0x62, 0xbe, 0x0f, 0xa5, 0x4a,
272			0xb7, 0x80, 0x4a, 0x3a, 0x64,
273			0xb6, 0xd7, 0x2c, 0xcf, 0xed,
274			0x6b, 0x6f, 0xb6, 0xed, 0x28,
275			0xbb, 0xfc, 0x11, 0x7e, 0x23,
276			0x58, 0x20, 0x57, 0xc9, 0x20,
277			0x77, 0x66, 0x41, 0x46, 0xe8,
278			0x76, 0x76, 0x0c, 0x95, 0x20,
279			0xd0, 0x54, 0xaa, 0x93, 0xc3,
280			0xaf, 0xb0, 0x4e, 0x30, 0x67,
281			0x05, 0xdb, 0x60, 0x90, 0x30,
282			0x85, 0x07, 0xb4, 0xd3,
283
284			0xa6, 0x01, 0x02, 0x02, 0x58,
285			0x24, 0x6d, 0x65, 0x72, 0x69,
286			0x61, 0x64, 0x6f, 0x63, 0x2e,
287			0x62, 0x72, 0x61, 0x6e, 0x64,
288			0x79, 0x62, 0x75, 0x63, 0x6b,
289			0x40, 0x62, 0x75, 0x63, 0x6b,
290			0x6c, 0x61, 0x6e, 0x64, 0x2e,
291			0x65, 0x78, 0x61, 0x6d, 0x70,
292			0x6c, 0x65, 0x20, 0x01, 0x21,
293			0x58, 0x20, 0x65, 0xed, 0xa5,
294			0xa1, 0x25, 0x77, 0xc2, 0xba,
295			0xe8, 0x29, 0x43, 0x7f, 0xe3,
296			0x38, 0x70, 0x1a, 0x10, 0xaa,
297			0xa3, 0x75, 0xe1, 0xbb, 0x5b,
298			0x5d, 0xe1, 0x08, 0xde, 0x43,
299			0x9c, 0x08, 0x55, 0x1d, 0x22,
300			0x58, 0x20, 0x1e, 0x52, 0xed,
301			0x75, 0x70, 0x11, 0x63, 0xf7,
302			0xf9, 0xe4, 0x0d, 0xdf, 0x9f,
303			0x34, 0x1b, 0x3d, 0xc9, 0xba,
304			0x86, 0x0a, 0xf7, 0xe0, 0xca,
305			0x7c, 0xa7, 0xe9, 0xee, 0xcd,
306			0x00, 0x84, 0xd1, 0x9c, 0x23,
307			0x58, 0x20, 0xaf, 0xf9, 0x07,
308			0xc9, 0x9f, 0x9a, 0xd3, 0xaa,
309			0xe6, 0xc4, 0xcd, 0xf2, 0x11,
310			0x22, 0xbc, 0xe2, 0xbd, 0x68,
311			0xb5, 0x28, 0x3e, 0x69, 0x07,
312			0x15, 0x4a, 0xd9, 0x11, 0x84,
313			0x0f, 0xa2, 0x08, 0xcf,
314
315			0xa3, 0x01, 0x04, 0x02, 0x4a,
316			0x6f, 0x75, 0x72, 0x2d, 0x73,
317			0x65, 0x63, 0x72, 0x65, 0x74,
318			0x20, 0x58, 0x20, 0x84, 0x9b,
319			0x57, 0x21, 0x9d, 0xae, 0x48,
320			0xde, 0x64, 0x6d, 0x07, 0xdb,
321			0xb5, 0x33, 0x56, 0x6e, 0x97,
322			0x66, 0x86, 0x45, 0x7c, 0x14,
323			0x91, 0xbe, 0x3a, 0x76, 0xdc,
324			0xea, 0x6c, 0x42, 0x71, 0x88,
325
326			0xa6, 0x01, 0x02, 0x02, 0x58,
327			0x1e, 0x62, 0x69, 0x6c, 0x62,
328			0x6f, 0x2e, 0x62, 0x61, 0x67,
329			0x67, 0x69, 0x6e, 0x73, 0x40,
330			0x68, 0x6f, 0x62, 0x62, 0x69,
331			0x74, 0x6f, 0x6e, 0x2e, 0x65,
332			0x78, 0x61, 0x6d, 0x70, 0x6c,
333			0x65, 0x20, 0x03, 0x21, 0x58,
334			0x42, 0x00, 0x72, 0x99, 0x2c,
335			0xb3, 0xac, 0x08, 0xec, 0xf3,
336			0xe5, 0xc6, 0x3d, 0xed, 0xec,
337			0x0d, 0x51, 0xa8, 0xc1, 0xf7,
338			0x9e, 0xf2, 0xf8, 0x2f, 0x94,
339			0xf3, 0xc7, 0x37, 0xbf, 0x5d,
340			0xe7, 0x98, 0x66, 0x71, 0xea,
341			0xc6, 0x25, 0xfe, 0x82, 0x57,
342			0xbb, 0xd0, 0x39, 0x46, 0x44,
343			0xca, 0xaa, 0x3a, 0xaf, 0x8f,
344			0x27, 0xa4, 0x58, 0x5f, 0xbb,
345			0xca, 0xd0, 0xf2, 0x45, 0x76,
346			0x20, 0x08, 0x5e, 0x5c, 0x8f,
347			0x42, 0xad, 0x22, 0x58, 0x42,
348			0x01, 0xdc, 0xa6, 0x94, 0x7b,
349			0xce, 0x88, 0xbc, 0x57, 0x90,
350			0x48, 0x5a, 0xc9, 0x74, 0x27,
351			0x34, 0x2b, 0xc3, 0x5f, 0x88,
352			0x7d, 0x86, 0xd6, 0x5a, 0x08,
353			0x93, 0x77, 0xe2, 0x47, 0xe6,
354			0x0b, 0xaa, 0x55, 0xe4, 0xe8,
355			0x50, 0x1e, 0x2a, 0xda, 0x57,
356			0x24, 0xac, 0x51, 0xd6, 0x90,
357			0x90, 0x08, 0x03, 0x3e, 0xbc,
358			0x10, 0xac, 0x99, 0x9b, 0x9d,
359			0x7f, 0x5c, 0xc2, 0x51, 0x9f,
360			0x3f, 0xe1, 0xea, 0x1d, 0x94,
361			0x75, 0x23, 0x58, 0x42, 0x00,
362			0x08, 0x51, 0x38, 0xdd, 0xab,
363			0xf5, 0xca, 0x97, 0x5f, 0x58,
364			0x60, 0xf9, 0x1a, 0x08, 0xe9,
365			0x1d, 0x6d, 0x5f, 0x9a, 0x76,
366			0xad, 0x40, 0x18, 0x76, 0x6a,
367			0x47, 0x66, 0x80, 0xb5, 0x5c,
368			0xd3, 0x39, 0xe8, 0xab, 0x6c,
369			0x72, 0xb5, 0xfa, 0xcd, 0xb2,
370			0xa2, 0xa5, 0x0a, 0xc2, 0x5b,
371			0xd0, 0x86, 0x64, 0x7d, 0xd3,
372			0xe2, 0xe6, 0xe9, 0x9e, 0x84,
373			0xca, 0x2c, 0x36, 0x09, 0xfd,
374			0xf1, 0x77, 0xfe, 0xb2, 0x6d,
375
376			0xa3, 0x01, 0x04, 0x02, 0x4b,
377			0x6f, 0x75, 0x72, 0x2d, 0x73,
378			0x65, 0x63, 0x72, 0x65, 0x74,
379			0x32, 0x20, 0x50, 0x84, 0x9b,
380			0x57, 0x86, 0x45, 0x7c, 0x14,
381			0x91, 0xbe, 0x3a, 0x76, 0xdc,
382			0xea, 0x6c, 0x42, 0x71,
383
384			0xa6, 0x01, 0x02, 0x02, 0x58,
385			0x21, 0x70, 0x65, 0x72, 0x65,
386			0x67, 0x72, 0x69, 0x6e, 0x2e,
387			0x74, 0x6f, 0x6f, 0x6b, 0x40,
388			0x74, 0x75, 0x63, 0x6b, 0x62,
389			0x6f, 0x72, 0x6f, 0x75, 0x67,
390			0x68, 0x2e, 0x65, 0x78, 0x61,
391			0x6d, 0x70, 0x6c, 0x65, 0x20,
392			0x01, 0x21, 0x58, 0x20, 0x98,
393			0xf5, 0x0a, 0x4f, 0xf6, 0xc0,
394			0x58, 0x61, 0xc8, 0x86, 0x0d,
395			0x13, 0xa6, 0x38, 0xea, 0x56,
396			0xc3, 0xf5, 0xad, 0x75, 0x90,
397			0xbb, 0xfb, 0xf0, 0x54, 0xe1,
398			0xc7, 0xb4, 0xd9, 0x1d, 0x62,
399			0x80, 0x22, 0x58, 0x20, 0xf0,
400			0x14, 0x00, 0xb0, 0x89, 0x86,
401			0x78, 0x04, 0xb8, 0xe9, 0xfc,
402			0x96, 0xc3, 0x93, 0x21, 0x61,
403			0xf1, 0x93, 0x4f, 0x42, 0x23,
404			0x06, 0x91, 0x70, 0xd9, 0x24,
405			0xb7, 0xe0, 0x3b, 0xf8, 0x22,
406			0xbb, 0x23, 0x58, 0x20, 0x02,
407			0xd1, 0xf7, 0xe6, 0xf2, 0x6c,
408			0x43, 0xd4, 0x86, 0x8d, 0x87,
409			0xce, 0xb2, 0x35, 0x31, 0x61,
410			0x74, 0x0a, 0xac, 0xf1, 0xf7,
411			0x16, 0x36, 0x47, 0x98, 0x4b,
412			0x52, 0x2a, 0x84, 0x8d, 0xf1,
413			0xc3,
414
415			0xa3, 0x01, 0x04, 0x02, 0x58,
416			0x24, 0x30, 0x31, 0x38, 0x63,
417			0x30, 0x61, 0x65, 0x35, 0x2d,
418			0x34, 0x64, 0x39, 0x62, 0x2d,
419			0x34, 0x37, 0x31, 0x62, 0x2d,
420			0x62, 0x66, 0x64, 0x36, 0x2d,
421			0x65, 0x65, 0x66, 0x33, 0x31,
422			0x34, 0x62, 0x63, 0x37, 0x30,
423			0x33, 0x37, 0x04, 0x58, 0x20,
424			0x84, 0x9b, 0x57, 0x21, 0x9d,
425			0xae, 0x48, 0xde, 0x64, 0x6d,
426			0x07, 0xdb, 0xb5, 0x33, 0x56,
427			0x6e, 0x97, 0x66, 0x86, 0x45,
428			0x7c, 0x14, 0x91, 0xbe, 0x3a,
429			0x76, 0xdc, 0xea, 0x6c, 0x42,
430			0x71, 0x88,
431
432			/* kid "sec-48" for hmac 384 */
433
434			0xa3, 0x01, 0x04, 0x02, 0x46,
435			0x73, 0x65, 0x63, 0x2d, 0x34,
436			0x38, 0x20, 0x58, 0x30, 0x84,
437			0x9b, 0x57, 0x21, 0x9d, 0xae,
438			0x48, 0xde, 0x64, 0x6d, 0x07,
439			0xdb, 0xb5, 0x33, 0x56, 0x6e,
440			0x97, 0x66, 0x86, 0x45, 0x7c,
441			0x14, 0x91, 0xbe, 0x3a, 0x76,
442			0xdc, 0xea, 0x6c, 0x42, 0x71,
443			0x88, 0x00, 0x11, 0x22, 0x33,
444			0x77, 0x88, 0x99, 0xaa, 0x21,
445			0x22, 0x23, 0x24, 0x25, 0x26,
446			0x27, 0x28,
447
448			/* kid "sec-64" for hmac 512 */
449
450			0xa3, 0x01, 0x04, 0x02, 0x46,
451			0x73, 0x65, 0x63, 0x2d, 0x36,
452			0x34, 0x20, 0x58, 0x40, 0x84,
453			0x9b, 0x57, 0x21, 0x9d, 0xae,
454			0x48, 0xde, 0x64, 0x6d, 0x07,
455			0xdb, 0xb5, 0x33, 0x56, 0x6e,
456			0x97, 0x66, 0x86, 0x45, 0x7c,
457			0x14, 0x91, 0xbe, 0x3a, 0x76,
458			0xdc, 0xea, 0x6c, 0x42, 0x71,
459			0x88, 0x00, 0x11, 0x22, 0x33,
460			0x77, 0x88, 0x99, 0xaa, 0x21,
461			0x22, 0x23, 0x24, 0x25, 0x26,
462			0x27, 0x28, 0xaa, 0xbb, 0xcc,
463			0xdd, 0xee, 0xff, 0xa5, 0xa6,
464			0xa7, 0xa8, 0xa9, 0xa0, 0xb1,
465			0xb2, 0xb3, 0xb4,
466}
467;
468
469struct keyinfo {
470	const uint8_t		*set;
471	size_t			len;
472};
473
474struct keyinfo keyset1 = { cose_key_set1, sizeof(cose_key_set1) },
475		key3 = { cose_key3, sizeof(cose_key3) },
476		key8 = { cose_key8, sizeof(cose_key8) },
477		key9 = { cose_key9, sizeof(cose_key9) },
478		key10 = { cose_key10, sizeof(cose_key10) }
479;
480
481/* key pieces */
482
483static const uint8_t
484	key1_x[] = { 0xba, 0xc5, 0xb1, 0x1c, 0xad,
485			0x8f, 0x99, 0xf9, 0xc7, 0x2b,
486			0x05, 0xcf, 0x4b, 0x9e, 0x26,
487			0xd2, 0x44, 0xdc, 0x18, 0x9f,
488			0x74, 0x52, 0x28, 0x25, 0x5a,
489			0x21, 0x9a, 0x86, 0xd6, 0xa0,
490			0x9e, 0xff },
491	key1_y[] = { 0x20, 0x13, 0x8b, 0xf8, 0x2d,
492			0xc1, 0xb6, 0xd5, 0x62, 0xbe,
493			0x0f, 0xa5, 0x4a, 0xb7, 0x80,
494			0x4a, 0x3a, 0x64, 0xb6, 0xd7,
495			0x2c, 0xcf, 0xed, 0x6b, 0x6f,
496			0xb6, 0xed, 0x28, 0xbb, 0xfc,
497			0x11, 0x7e },
498	key1_d[] = { 0x57, 0xc9, 0x20, 0x77, 0x66,
499			0x41, 0x46, 0xe8, 0x76, 0x76,
500			0x0c, 0x95, 0x20, 0xd0, 0x54,
501			0xaa, 0x93, 0xc3, 0xaf, 0xb0,
502			0x4e, 0x30, 0x67, 0x05, 0xdb,
503			0x60, 0x90, 0x30, 0x85, 0x07,
504			0xb4, 0xd3 },
505
506	key2_x[] = { 0x65, 0xed, 0xa5, 0xa1, 0x25,
507			0x77, 0xc2, 0xba, 0xe8, 0x29,
508			0x43, 0x7f, 0xe3, 0x38, 0x70,
509			0x1a, 0x10, 0xaa, 0xa3, 0x75,
510			0xe1, 0xbb, 0x5b, 0x5d, 0xe1,
511			0x08, 0xde, 0x43, 0x9c, 0x08,
512			0x55, 0x1d },
513	key2_y[] = { 0x1e, 0x52, 0xed, 0x75, 0x70,
514			0x11, 0x63, 0xf7, 0xf9, 0xe4,
515			0x0d, 0xdf, 0x9f, 0x34, 0x1b,
516			0x3d, 0xc9, 0xba, 0x86, 0x0a,
517			0xf7, 0xe0, 0xca, 0x7c, 0xa7,
518			0xe9, 0xee, 0xcd, 0x00, 0x84,
519			0xd1, 0x9c },
520	key2_d[] = { 0xaf, 0xf9, 0x07, 0xc9, 0x9f,
521			0x9a, 0xd3, 0xaa, 0xe6, 0xc4,
522			0xcd, 0xf2, 0x11, 0x22, 0xbc,
523			0xe2, 0xbd, 0x68, 0xb5, 0x28,
524			0x3e, 0x69, 0x07, 0x15, 0x4a,
525			0xd9, 0x11, 0x84, 0x0f, 0xa2,
526			0x08, 0xcf },
527
528	key3_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d,
529			0xae, 0x48, 0xde, 0x64, 0x6d,
530			0x07, 0xdb, 0xb5, 0x33, 0x56,
531			0x6e, 0x97, 0x66, 0x86, 0x45,
532			0x7c, 0x14, 0x91, 0xbe, 0x3a,
533			0x76, 0xdc, 0xea, 0x6c, 0x42,
534			0x71, 0x88 },
535
536	key4_x[] = { 0x00, 0x72, 0x99, 0x2c, 0xb3,
537			0xac, 0x08, 0xec, 0xf3, 0xe5,
538			0xc6, 0x3d, 0xed, 0xec, 0x0d,
539			0x51, 0xa8, 0xc1, 0xf7, 0x9e,
540			0xf2, 0xf8, 0x2f, 0x94, 0xf3,
541			0xc7, 0x37, 0xbf, 0x5d, 0xe7,
542			0x98, 0x66, 0x71, 0xea, 0xc6,
543			0x25, 0xfe, 0x82, 0x57, 0xbb,
544			0xd0, 0x39, 0x46, 0x44, 0xca,
545			0xaa, 0x3a, 0xaf, 0x8f, 0x27,
546			0xa4, 0x58, 0x5f, 0xbb, 0xca,
547			0xd0, 0xf2, 0x45, 0x76, 0x20,
548			0x08, 0x5e, 0x5c, 0x8f, 0x42,
549			0xad },
550	key4_y[] = { 0x01, 0xdc, 0xa6, 0x94, 0x7b,
551			0xce, 0x88, 0xbc, 0x57, 0x90,
552			0x48, 0x5a, 0xc9, 0x74, 0x27,
553			0x34, 0x2b, 0xc3, 0x5f, 0x88,
554			0x7d, 0x86, 0xd6, 0x5a, 0x08,
555			0x93, 0x77, 0xe2, 0x47, 0xe6,
556			0x0b, 0xaa, 0x55, 0xe4, 0xe8,
557			0x50, 0x1e, 0x2a, 0xda, 0x57,
558			0x24, 0xac, 0x51, 0xd6, 0x90,
559			0x90, 0x08, 0x03, 0x3e, 0xbc,
560			0x10, 0xac, 0x99, 0x9b, 0x9d,
561			0x7f, 0x5c, 0xc2, 0x51, 0x9f,
562			0x3f, 0xe1, 0xea, 0x1d, 0x94,
563			0x75 },
564	key4_d[] = { 0x00, 0x08, 0x51, 0x38, 0xdd,
565			0xab, 0xf5, 0xca, 0x97, 0x5f,
566			0x58, 0x60, 0xf9, 0x1a, 0x08,
567			0xe9, 0x1d, 0x6d, 0x5f, 0x9a,
568			0x76, 0xad, 0x40, 0x18, 0x76,
569			0x6a, 0x47, 0x66, 0x80, 0xb5,
570			0x5c, 0xd3, 0x39, 0xe8, 0xab,
571			0x6c, 0x72, 0xb5, 0xfa, 0xcd,
572			0xb2, 0xa2, 0xa5, 0x0a, 0xc2,
573			0x5b, 0xd0, 0x86, 0x64, 0x7d,
574			0xd3, 0xe2, 0xe6, 0xe9, 0x9e,
575			0x84, 0xca, 0x2c, 0x36, 0x09,
576			0xfd, 0xf1, 0x77, 0xfe, 0xb2,
577			0x6d },
578	key5_k[] = { 0x84, 0x9b, 0x57, 0x86, 0x45,
579			0x7c, 0x14, 0x91, 0xbe, 0x3a,
580			0x76, 0xdc, 0xea, 0x6c, 0x42,
581			0x71 },
582
583	key6_x[] = { 0x98, 0xf5, 0x0a, 0x4f, 0xf6,
584			0xc0, 0x58, 0x61, 0xc8, 0x86,
585			0x0d, 0x13, 0xa6, 0x38, 0xea,
586			0x56, 0xc3, 0xf5, 0xad, 0x75,
587			0x90, 0xbb, 0xfb, 0xf0, 0x54,
588			0xe1, 0xc7, 0xb4, 0xd9, 0x1d,
589			0x62, 0x80 },
590	key6_y[] = { 0xf0, 0x14, 0x00, 0xb0, 0x89,
591			0x86, 0x78, 0x04, 0xb8, 0xe9,
592			0xfc, 0x96, 0xc3, 0x93, 0x21,
593			0x61, 0xf1, 0x93, 0x4f, 0x42,
594			0x23, 0x06, 0x91, 0x70, 0xd9,
595			0x24, 0xb7, 0xe0, 0x3b, 0xf8,
596			0x22, 0xbb },
597	key6_d[] = { 0x02, 0xd1, 0xf7, 0xe6, 0xf2,
598			0x6c, 0x43, 0xd4, 0x86, 0x8d,
599			0x87, 0xce, 0xb2, 0x35, 0x31,
600			0x61, 0x74, 0x0a, 0xac, 0xf1,
601			0xf7, 0x16, 0x36, 0x47, 0x98,
602			0x4b, 0x52, 0x2a, 0x84, 0x8d,
603			0xf1, 0xc3 },
604
605	key7_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d,
606			0xae, 0x48, 0xde, 0x64, 0x6d,
607			0x07, 0xdb, 0xb5, 0x33, 0x56,
608			0x6e, 0x97, 0x66, 0x86, 0x45,
609			0x7c, 0x14, 0x91, 0xbe, 0x3a,
610			0x76, 0xdc, 0xea, 0x6c, 0x42,
611			0x71, 0x88 },
612
613	key8_k[] = { 0x84, 0x9b, 0x57, 0x21, 0x9d,
614			0xae, 0x48, 0xde, 0x64, 0x6d,
615			0x07, 0xdb, 0xb5, 0x33, 0x56,
616			0x6e, 0x97, 0x66, 0x86, 0x45,
617			0x7c, 0x14, 0x91, 0xbe, 0x3a,
618			0x76, 0xdc, 0xea, 0x6c, 0x42,
619			0x71, 0x88, 0x00, 0x11, 0x22,
620			0x33, 0x77, 0x88, 0x99, 0xaa,
621			0x21, 0x22, 0x23, 0x24, 0x25,
622			0x26, 0x27, 0x28 },
623
624	key9_k[] = {    0x84, 0x9b, 0x57, 0x21, 0x9d,
625			0xae, 0x48, 0xde, 0x64, 0x6d,
626			0x07, 0xdb, 0xb5, 0x33, 0x56,
627			0x6e, 0x97, 0x66, 0x86, 0x45,
628			0x7c, 0x14, 0x91, 0xbe, 0x3a,
629			0x76, 0xdc, 0xea, 0x6c, 0x42,
630			0x71, 0x88, 0x00, 0x11, 0x22,
631			0x33, 0x77, 0x88, 0x99, 0xaa,
632			0x21, 0x22, 0x23, 0x24, 0x25,
633			0x26, 0x27, 0x28, 0xaa, 0xbb,
634			0xcc, 0xdd, 0xee, 0xff, 0xa5,
635			0xa6, 0xa7, 0xa8, 0xa9, 0xa0,
636			0xb1, 0xb2, 0xb3, 0xb4 }
637#if 0
638			,
639	key10_x[] = {
640			0xd7, 0x5a, 0x98, 0x01, 0x82,
641			0xb1, 0x0a, 0xb7, 0xd5, 0x4b,
642			0xfe, 0xd3, 0xc9, 0x64, 0x07,
643			0x3a, 0x0e, 0xe1, 0x72, 0xf3,
644			0xda, 0xa6, 0x23, 0x25, 0xaf,
645			0x02, 0x1a, 0x68, 0xf7, 0x07,
646			0x51, 0x1a
647	}, key10_d[] = {
648			0x9d, 0x61, 0xb1, 0x9d, 0xef,
649			0xfd, 0x5a, 0x60, 0xba, 0x84,
650			0x4a, 0xf4, 0x92, 0xec, 0x2c,
651			0xc4, 0x44, 0x49, 0xc5, 0x69,
652			0x7b, 0x32, 0x69, 0x19, 0x70,
653			0x3b, 0xac, 0x03, 0x1c, 0xae,
654			0x7f, 0x60
655	}
656#endif
657;
658
659int
660test_cose_keys(struct lws_context *context)
661{
662	struct lws_cose_key *ck;
663	lws_dll2_owner_t set;
664	lws_lec_pctx_t wc;
665	uint8_t buf[4096];
666	int n;
667
668#if 0
669	{
670		int fd = open("set1.cks",
671			      LWS_O_CREAT | LWS_O_TRUNC | LWS_O_WRONLY, 0600);
672
673		if (fd >= 0) {
674			write(fd, cose_key_set1, sizeof(cose_key_set1));
675			close(fd);
676		}
677	}
678#endif
679
680#if 0
681	lws_lec_pctx_t wx;
682	uint8_t dump[8192];
683
684	lws_lec_init(&wx, buf, sizeof(buf));
685
686	if (lws_lec_printf(&wx,
687		"{%d:%d, %d:%.*b, %d:%d, %d:%.*b, %d:%.*b}",
688		LWSCOSE_WKK_KTY, LWSCOSE_WKKTV_OKP,
689		LWSCOSE_WKK_KID, 2, "11",
690		LWSCOSE_WKOKP_CRV, LWSCOSE_WKEC_ED25519,
691		LWSCOSE_WKECKP_X, (int)sizeof(key10_x), key10_x,
692//		LWSCOSE_WKECKP_Y, (int)sizeof(key6_y), key6_y,
693		LWSCOSE_WKECKP_D, (int)sizeof(key10_d), key10_d) !=
694			LWS_LECPCTX_RET_FINISHED)
695		return 1;
696
697	lws_hex_from_byte_array(buf, wx.used, (char *)dump, sizeof(dump));
698	puts((const char *)dump);
699#endif
700#if 0
701	lws_lec_pctx_t wx;
702	uint8_t dump[8192];
703
704	lws_lec_init(&wx, buf, sizeof(buf));
705
706	if (lws_lec_printf(&wx,
707		"{%d:%d, %d:%.*b, %d:%.*b}",
708		LWSCOSE_WKK_KTY, LWSCOSE_WKKTV_SYMMETRIC,
709		LWSCOSE_WKK_KID, 6, "sec-64",
710		-1, (int)sizeof(key9_k), key9_k) !=
711			LWS_LECPCTX_RET_FINISHED)
712		return 1;
713
714	lws_hex_from_byte_array(buf, wx.used, (char *)dump, sizeof(dump));
715	puts((const char *)dump);
716#endif
717
718	/* key1 import */
719
720	lwsl_user("%s: key 1 import\n", __func__);
721
722	ck = lws_cose_key_import(NULL, key_import_cb, NULL, cose_key1, sizeof(cose_key1));
723	if (!ck)
724		return 1;
725
726	if (ck->kty != LWSCOSE_WKKTV_EC2 ||
727	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC ||
728	    ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key1_x) ||
729	    ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key1_y) ||
730	    ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key1_d) ||
731	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key1_x, sizeof(key1_x)) ||
732	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key1_y, sizeof(key1_y)) ||
733	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key1_d, sizeof(key1_d)))
734		goto bail;
735
736	// lws_cose_key_dump(ck);
737
738	/* key 1 export */
739
740	lwsl_user("%s: key 1 export\n", __func__);
741
742	lws_lec_init(&wc, buf, sizeof(buf));
743	n = (int)lws_cose_key_export(ck, &wc, LWSJWKF_EXPORT_PRIVATE);
744	lws_cose_key_destroy(&ck);
745	if (n != LWS_LECPCTX_RET_FINISHED)
746		goto bail;
747
748	// lwsl_hexdump_notice(buf, wc.used);
749
750	/* key2 import */
751
752	lwsl_user("%s: key 2 import\n", __func__);
753
754	ck = lws_cose_key_import(NULL, NULL, NULL, cose_key2, sizeof(cose_key2));
755	if (!ck)
756		return 1;
757
758	if (ck->kty != LWSCOSE_WKKTV_EC2 ||
759	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC ||
760	    ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key2_x) ||
761	    ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key2_y) ||
762	    ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key2_d) ||
763	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key2_x, sizeof(key2_x)) ||
764	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key2_y, sizeof(key2_y)) ||
765	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key2_d, sizeof(key2_d)))
766		goto bail;
767
768	lws_cose_key_destroy(&ck);
769
770	/* key3 import */
771
772	lwsl_user("%s: key 3 import\n", __func__);
773
774	ck = lws_cose_key_import(NULL, NULL, NULL, cose_key3, sizeof(cose_key3));
775	if (!ck) {
776		lwsl_err("%s: key 3 import failed\n", __func__);
777		goto bail;
778	}
779
780	if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC ||
781	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT ||
782	    ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key3_k) ||
783	    memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key3_k, sizeof(key3_k))) {
784		lwsl_err("%s: key 3 checks failed %d %d %d\n", __func__,
785				(int)ck->kty, (int)ck->gencrypto_kty,
786				(int)ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len);
787		goto bail;
788	}
789
790	lws_cose_key_destroy(&ck);
791
792	/* key4 import */
793
794	lwsl_user("%s: key 4 import\n", __func__);
795
796	ck = lws_cose_key_import(NULL, NULL, NULL, cose_key4, sizeof(cose_key4));
797	if (!ck)
798		return 1;
799
800	if (ck->kty != LWSCOSE_WKKTV_EC2 ||
801	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC ||
802	    ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key4_x) ||
803	    ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key4_y) ||
804	    ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key4_d) ||
805	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key4_x, sizeof(key4_x)) ||
806	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key4_y, sizeof(key4_y)) ||
807	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key4_d, sizeof(key4_d)))
808		goto bail;
809
810	lws_cose_key_destroy(&ck);
811
812	/* key5 import */
813
814	lwsl_user("%s: key 5 import\n", __func__);
815
816	ck = lws_cose_key_import(NULL, NULL, NULL, cose_key5, sizeof(cose_key5));
817	if (!ck)
818		return 1;
819
820	if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC ||
821	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT ||
822	    ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key5_k) ||
823	    memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key5_k, sizeof(key5_k)))
824		goto bail;
825
826	lws_cose_key_destroy(&ck);
827
828	/* key6 import */
829
830	lwsl_user("%s: key 6 import\n", __func__);
831
832	ck = lws_cose_key_import(NULL, NULL, NULL, cose_key6, sizeof(cose_key6));
833	if (!ck)
834		return 1;
835
836	if (ck->kty != LWSCOSE_WKKTV_EC2 ||
837	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_EC ||
838	    ck->e[LWS_GENCRYPTO_EC_KEYEL_X].len != sizeof(key6_x) ||
839	    ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].len != sizeof(key6_y) ||
840	    ck->e[LWS_GENCRYPTO_EC_KEYEL_D].len != sizeof(key6_d) ||
841	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_X].buf, key6_x, sizeof(key6_x)) ||
842	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_Y].buf, key6_y, sizeof(key6_y)) ||
843	    memcmp(ck->e[LWS_GENCRYPTO_EC_KEYEL_D].buf, key6_d, sizeof(key6_d)))
844		goto bail;
845
846	lws_cose_key_destroy(&ck);
847
848	/* key7 import */
849
850	lwsl_user("%s: key 7 import\n", __func__);
851
852	ck = lws_cose_key_import(NULL, NULL, NULL, cose_key7, sizeof(cose_key7));
853	if (!ck)
854		return 1;
855
856	if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC ||
857	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT ||
858	    ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key7_k) ||
859	    memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key7_k, sizeof(key7_k)))
860		goto bail;
861
862	lws_cose_key_destroy(&ck);
863
864	/* key8 import */
865
866	lwsl_user("%s: key 8 import\n", __func__);
867
868	ck = lws_cose_key_import(NULL, NULL, NULL, cose_key8, sizeof(cose_key8));
869	if (!ck)
870		return 1;
871
872	if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC ||
873	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT ||
874	    ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key8_k) ||
875	    memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key8_k, sizeof(key8_k)))
876		goto bail;
877
878	lws_cose_key_destroy(&ck);
879
880	/* key9 import */
881
882	lwsl_user("%s: key 9 import\n", __func__);
883
884	ck = lws_cose_key_import(NULL, NULL, NULL, cose_key9, sizeof(cose_key9));
885	if (!ck) {
886		lwsl_err("%s: cose9 import fail\n", __func__);
887		goto bail;
888	}
889
890	if (ck->kty != LWSCOSE_WKKTV_SYMMETRIC ||
891	    ck->gencrypto_kty != LWS_GENCRYPTO_KTY_OCT ||
892	    ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].len != sizeof(key9_k) ||
893	    memcmp(ck->e[LWS_GENCRYPTO_OCT_KEYEL_K].buf, key9_k, sizeof(key9_k))) {
894		lwsl_notice("%s: key9 check fails\n", __func__);
895		goto bail;
896	}
897
898	lws_cose_key_destroy(&ck);
899
900	/* key set 1 */
901
902	lwsl_user("%s: key_set1\n", __func__);
903	lws_dll2_owner_clear(&set);
904	ck = lws_cose_key_import(&set, NULL, NULL, cose_key_set1, sizeof(cose_key_set1));
905	if (!ck)
906		return 1;
907
908	lws_cose_key_set_destroy(&set);
909
910	/* generate */
911
912	ck = lws_cose_key_generate(context, LWSCOSE_WKKTV_EC2,
913				   (1 << LWSCOSE_WKKO_SIGN) |
914				   (1 << LWSCOSE_WKKO_VERIFY) |
915				   (1 << LWSCOSE_WKKO_ENCRYPT) |
916				   (1 << LWSCOSE_WKKO_DECRYPT),
917				   0, "P-256", (const uint8_t *)"the-keyid", 9);
918	if (!ck)
919		return 1;
920
921	// lws_cose_key_dump(ck);
922
923	lws_cose_key_destroy(&ck);
924
925	return 0;
926
927bail:
928	lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__);
929
930	return 1;
931}
932