blob: 906ebf92e8e126587c7840a204edb4bf417b491d [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <stdio.h>
15#include <string.h>
16#include <inttypes.h>
17#include <malloc.h>
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030018#include <time.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020019
20#include "xtest_test.h"
21#include "xtest_helpers.h"
22
23#include <tee_api_types.h>
24#include <ta_crypt.h>
25#include <utee_defines.h>
26#include <util.h>
27
Jerome Forissier213ca8a2017-03-31 11:27:56 +020028#include <regression_4000_data.h>
Cedric Chaumontc7654962015-09-09 14:56:36 +020029#include <nist/186-2ecdsatestvectors.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020030
31#include <assert.h>
32
33static void xtest_tee_test_4001(ADBG_Case_t *Case_p);
34static void xtest_tee_test_4002(ADBG_Case_t *Case_p);
Jerome Forissier23256842018-02-16 09:25:35 +010035static void xtest_tee_test_4003(ADBG_Case_t *Case_p);
Pascal Brandc639ac82015-07-02 08:53:34 +020036static void xtest_tee_test_4004(ADBG_Case_t *Case_p);
37static void xtest_tee_test_4005(ADBG_Case_t *Case_p);
38static void xtest_tee_test_4006(ADBG_Case_t *Case_p);
39static void xtest_tee_test_4007(ADBG_Case_t *Case_p);
40static void xtest_tee_test_4008(ADBG_Case_t *Case_p);
Pascal Brand2b92b642015-07-16 13:29:42 +020041static void xtest_tee_test_4009(ADBG_Case_t *Case_p);
Jens Wiklander70a0b2c2016-05-18 08:39:35 +020042static void xtest_tee_test_4010(ADBG_Case_t *Case_p);
Jens Wiklanderb58916e2016-07-07 15:29:32 +020043static void xtest_tee_test_4011(ADBG_Case_t *Case_p);
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030044#ifdef CFG_SYSTEM_PTA
45static void xtest_tee_test_4012(ADBG_Case_t *Case_p);
46#endif
Pascal Brandc639ac82015-07-02 08:53:34 +020047
Jens Wiklander74abfe32017-01-03 14:17:47 +010048ADBG_CASE_DEFINE(regression, 4001, xtest_tee_test_4001,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010049 "Test TEE Internal API hash operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010050ADBG_CASE_DEFINE(regression, 4002, xtest_tee_test_4002,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010051 "Test TEE Internal API MAC operations");
Jerome Forissier23256842018-02-16 09:25:35 +010052ADBG_CASE_DEFINE(regression, 4003, xtest_tee_test_4003,
53 "Test TEE Internal API cipher operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010054ADBG_CASE_DEFINE(regression, 4004, xtest_tee_test_4004,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010055 "Test TEE Internal API get random");
Jens Wiklander74abfe32017-01-03 14:17:47 +010056ADBG_CASE_DEFINE(regression, 4005, xtest_tee_test_4005,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010057 "Test TEE Internal API Authenticated Encryption operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010058ADBG_CASE_DEFINE(regression, 4006, xtest_tee_test_4006,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010059 "Test TEE Internal API Asymmetric Cipher operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010060ADBG_CASE_DEFINE(regression, 4007, xtest_tee_test_4007,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010061 "Test TEE Internal API Generate key");
Jens Wiklander74abfe32017-01-03 14:17:47 +010062ADBG_CASE_DEFINE(regression, 4008, xtest_tee_test_4008,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010063 "Test TEE Internal API Derive key");
Jens Wiklander74abfe32017-01-03 14:17:47 +010064ADBG_CASE_DEFINE(regression, 4009, xtest_tee_test_4009,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010065 "Test TEE Internal API Derive key ECDH");
Jens Wiklander74abfe32017-01-03 14:17:47 +010066ADBG_CASE_DEFINE(regression, 4010, xtest_tee_test_4010,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010067 "Test TEE Internal API create transient object (negative)");
Jens Wiklander74abfe32017-01-03 14:17:47 +010068ADBG_CASE_DEFINE(regression, 4011, xtest_tee_test_4011,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010069 "Test TEE Internal API Bleichenbacher attack (negative)");
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030070#ifdef CFG_SYSTEM_PTA
71ADBG_CASE_DEFINE(regression, 4012, xtest_tee_test_4012,
72 "Test seeding RNG entropy");
73#endif
Jens Wiklanderb58916e2016-07-07 15:29:32 +020074
Pascal Brandc639ac82015-07-02 08:53:34 +020075static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
76 TEEC_Session *s,
77 void *buf, size_t blen);
78
79static TEEC_Result ta_crypt_cmd_reset_operation(ADBG_Case_t *c, TEEC_Session *s,
80 TEE_OperationHandle oph)
81{
82 TEEC_Result res;
83 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
84 uint32_t ret_orig;
85
86 assert((uintptr_t)oph <= UINT32_MAX);
87 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
88 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
89 TEEC_NONE);
90 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RESET_OPERATION, &op,
91 &ret_orig);
92 if (res != TEEC_SUCCESS) {
93 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
94 ret_orig);
95 }
96 return res;
97}
98
99static TEEC_Result ta_crypt_cmd_copy_operation(ADBG_Case_t *c,
100 TEEC_Session *s,
101 TEE_OperationHandle dst_oph,
102 TEE_OperationHandle src_oph)
103{
104 TEEC_Result res;
105 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
106 uint32_t ret_orig;
107
108 assert((uintptr_t)dst_oph <= UINT32_MAX);
109 op.params[0].value.a = (uint32_t)(uintptr_t)dst_oph;
110
111 assert((uintptr_t)src_oph <= UINT32_MAX);
112 op.params[0].value.b = (uint32_t)(uintptr_t)src_oph;
113 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
114 TEEC_NONE);
115
116 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_COPY_OPERATION, &op,
117 &ret_orig);
118
119 if (res != TEEC_SUCCESS) {
120 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
121 ret_orig);
122 }
123 return res;
124}
125
126static TEEC_Result ta_crypt_cmd_digest_update(ADBG_Case_t *c, TEEC_Session *s,
127 TEE_OperationHandle oph,
128 const void *chunk,
129 size_t chunk_size)
130{
131 TEEC_Result res;
132 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
133 uint32_t ret_orig;
134
135 assert((uintptr_t)oph <= UINT32_MAX);
136 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
137 op.params[1].tmpref.buffer = (void *)chunk;
138 op.params[1].tmpref.size = chunk_size;
139
140 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
141 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
142 TEEC_NONE);
143
144 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_UPDATE, &op, &ret_orig);
145
146 if (res != TEEC_SUCCESS) {
147 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
148 ret_orig);
149 }
150
151 return res;
152}
153
154static TEEC_Result ta_crypt_cmd_digest_do_final(ADBG_Case_t *c, TEEC_Session *s,
155 TEE_OperationHandle oph,
156 const void *chunk,
157 size_t chunk_len, void *hash,
158 size_t *hash_len)
159{
160 TEEC_Result res;
161 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
162 uint32_t ret_orig;
163
164 assert((uintptr_t)oph <= UINT32_MAX);
165 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
166
167 op.params[1].tmpref.buffer = (void *)chunk;
168 op.params[1].tmpref.size = chunk_len;
169
170 op.params[2].tmpref.buffer = (void *)hash;
171 op.params[2].tmpref.size = *hash_len;
172
173 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
174 TEEC_MEMREF_TEMP_INPUT,
175 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
176
177 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_DO_FINAL, &op,
178 &ret_orig);
179
180 if (res != TEEC_SUCCESS) {
181 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
182 ret_orig);
183 }
184
185 if (res == TEEC_SUCCESS)
186 *hash_len = op.params[2].tmpref.size;
187
188 return res;
189}
190
191static TEE_Result ta_crypt_cmd_set_operation_key2(ADBG_Case_t *c,
192 TEEC_Session *s,
193 TEE_OperationHandle oph,
194 TEE_ObjectHandle key1,
195 TEE_ObjectHandle key2)
196{
197 TEEC_Result res;
198 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
199 uint32_t ret_orig;
200
201 assert((uintptr_t)oph <= UINT32_MAX);
202 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
203
204 assert((uintptr_t)key1 <= UINT32_MAX);
205 op.params[0].value.b = (uint32_t)(uintptr_t)key1;
206
207 assert((uintptr_t)key2 <= UINT32_MAX);
208 op.params[1].value.a = (uint32_t)(uintptr_t)key2;
209 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT,
210 TEEC_NONE, TEEC_NONE);
211
212 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_SET_OPERATION_KEY2, &op,
213 &ret_orig);
214
215 if (res != TEEC_SUCCESS) {
216 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
217 ret_orig);
218 }
219
220 return res;
221}
222
223static TEEC_Result ta_crypt_cmd_mac_init(ADBG_Case_t *c, TEEC_Session *s,
224 TEE_OperationHandle oph,
225 const void *iv, size_t iv_len)
226{
227 TEEC_Result res;
228 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
229 uint32_t ret_orig;
230
231 assert((uintptr_t)oph <= UINT32_MAX);
232 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
233
234 if (iv != NULL) {
235 op.params[1].tmpref.buffer = (void *)iv;
236 op.params[1].tmpref.size = iv_len;
237 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
238 TEEC_MEMREF_TEMP_INPUT,
239 TEEC_NONE, TEEC_NONE);
240 } else {
241 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
242 TEEC_NONE, TEEC_NONE);
243 }
244
245 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_INIT, &op, &ret_orig);
246
247 if (res != TEEC_SUCCESS) {
248 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
249 ret_orig);
250 }
251
252 return res;
253}
254
255static TEEC_Result ta_crypt_cmd_mac_update(ADBG_Case_t *c, TEEC_Session *s,
256 TEE_OperationHandle oph,
257 const void *chunk, size_t chunk_size)
258{
259 TEEC_Result res;
260 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
261 uint32_t ret_orig;
262
263 assert((uintptr_t)oph <= UINT32_MAX);
264 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
265
266 op.params[1].tmpref.buffer = (void *)chunk;
267 op.params[1].tmpref.size = chunk_size;
268
269 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
270 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
271 TEEC_NONE);
272
273 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_UPDATE, &op, &ret_orig);
274
275 if (res != TEEC_SUCCESS) {
276 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
277 ret_orig);
278 }
279
280 return res;
281}
282
283static TEEC_Result ta_crypt_cmd_mac_final_compute(ADBG_Case_t *c,
284 TEEC_Session *s,
285 TEE_OperationHandle oph,
286 const void *chunk,
287 size_t chunk_len,
288 void *hash,
289 size_t *hash_len)
290{
291 TEEC_Result res;
292 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
293 uint32_t ret_orig;
294
295 assert((uintptr_t)oph <= UINT32_MAX);
296 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
297
298 op.params[1].tmpref.buffer = (void *)chunk;
299 op.params[1].tmpref.size = chunk_len;
300
301 op.params[2].tmpref.buffer = (void *)hash;
302 op.params[2].tmpref.size = *hash_len;
303
304 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
305 TEEC_MEMREF_TEMP_INPUT,
306 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
307
308 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_FINAL_COMPUTE, &op,
309 &ret_orig);
310
311 if (res != TEEC_SUCCESS) {
312 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
313 ret_orig);
314 }
315
316 if (res == TEEC_SUCCESS)
317 *hash_len = op.params[2].tmpref.size;
318
319 return res;
320}
321
322static TEEC_Result ta_crypt_cmd_cipher_init(ADBG_Case_t *c, TEEC_Session *s,
323 TEE_OperationHandle oph,
324 const void *iv, size_t iv_len)
325{
326 TEEC_Result res;
327 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
328 uint32_t ret_orig;
329
330 assert((uintptr_t)oph <= UINT32_MAX);
331 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
332
333 if (iv != NULL) {
334 op.params[1].tmpref.buffer = (void *)iv;
335 op.params[1].tmpref.size = iv_len;
336
337 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
338 TEEC_MEMREF_TEMP_INPUT,
339 TEEC_NONE, TEEC_NONE);
340 } else {
341 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
342 TEEC_NONE, TEEC_NONE);
343 }
344
345 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_INIT, &op, &ret_orig);
346
347 if (res != TEEC_SUCCESS) {
348 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
349 ret_orig);
350 }
351
352 return res;
353}
354
355static TEEC_Result ta_crypt_cmd_cipher_update(ADBG_Case_t *c, TEEC_Session *s,
356 TEE_OperationHandle oph,
357 const void *src, size_t src_len,
358 void *dst, size_t *dst_len)
359{
360 TEEC_Result res;
361 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
362 uint32_t ret_orig;
363
364 assert((uintptr_t)oph <= UINT32_MAX);
365 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
366
367 op.params[1].tmpref.buffer = (void *)src;
368 op.params[1].tmpref.size = src_len;
369
370 op.params[2].tmpref.buffer = dst;
371 op.params[2].tmpref.size = *dst_len;
372
373 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
374 TEEC_MEMREF_TEMP_INPUT,
375 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
376
377 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_UPDATE, &op, &ret_orig);
378
379 if (res != TEEC_SUCCESS) {
380 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
381 ret_orig);
382 }
383
384 if (res == TEEC_SUCCESS)
385 *dst_len = op.params[2].tmpref.size;
386
387 return res;
388}
389
390static TEEC_Result ta_crypt_cmd_cipher_do_final(ADBG_Case_t *c,
391 TEEC_Session *s,
392 TEE_OperationHandle oph,
393 const void *src,
394 size_t src_len,
395 void *dst,
396 size_t *dst_len)
397{
398 TEEC_Result res;
399 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
400 uint32_t ret_orig;
401
402 assert((uintptr_t)oph <= UINT32_MAX);
403 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
404
405 op.params[1].tmpref.buffer = (void *)src;
406 op.params[1].tmpref.size = src_len;
407
408 op.params[2].tmpref.buffer = (void *)dst;
409 op.params[2].tmpref.size = *dst_len;
410
411 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
412 TEEC_MEMREF_TEMP_INPUT,
413 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
414
415 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_DO_FINAL, &op,
416 &ret_orig);
417
418 if (res != TEEC_SUCCESS) {
419 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
420 ret_orig);
421 }
422
423 if (res == TEEC_SUCCESS)
424 *dst_len = op.params[2].tmpref.size;
425
426 return res;
427}
428
429static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
430 TEEC_Session *s,
431 void *buf,
432 size_t blen)
433{
434 TEEC_Result res;
435 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
436 uint32_t ret_orig;
437
438 op.params[0].tmpref.buffer = buf;
439 op.params[0].tmpref.size = blen;
440
441 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE,
442 TEEC_NONE, TEEC_NONE);
443
444 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RANDOM_NUMBER_GENEREATE, &op,
445 &ret_orig);
446
447 if (res != TEEC_SUCCESS) {
448 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
449 ret_orig);
450 }
451
452 (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==,
453 op.params[0].tmpref.size);
454 return res;
455}
456
457static TEEC_Result ta_crypt_cmd_ae_init(ADBG_Case_t *c, TEEC_Session *s,
458 TEE_OperationHandle oph,
459 const void *nonce, size_t nonce_len,
460 size_t tag_len, size_t aad_len,
461 size_t payload_len)
462{
463 TEEC_Result res;
464 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
465 uint32_t ret_orig;
466
467 assert((uintptr_t)oph <= UINT32_MAX);
468 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
469 op.params[0].value.b = tag_len;
470
471 op.params[1].tmpref.buffer = (void *)nonce;
472 op.params[1].tmpref.size = nonce_len;
473
474 op.params[2].value.a = aad_len;
475 op.params[2].value.b = payload_len;
476
477 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
478 TEEC_MEMREF_TEMP_INPUT,
Jens Wiklander74a42302015-07-07 01:08:41 +0200479 TEEC_VALUE_INPUT, TEEC_NONE);
Pascal Brandc639ac82015-07-02 08:53:34 +0200480
481 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_INIT, &op, &ret_orig);
482
483 if (res != TEEC_SUCCESS) {
484 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
485 ret_orig);
486 }
487 return res;
488}
489
490static TEEC_Result ta_crypt_cmd_ae_update_aad(ADBG_Case_t *c, TEEC_Session *s,
491 TEE_OperationHandle oph,
492 const void *aad, size_t aad_len)
493{
494 TEEC_Result res;
495 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
496 uint32_t ret_orig;
497
498 assert((uintptr_t)oph <= UINT32_MAX);
499 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
500
501 op.params[1].tmpref.buffer = (void *)aad;
502 op.params[1].tmpref.size = aad_len;
503
504 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
505 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
506 TEEC_NONE);
507
508 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE_AAD, &op, &ret_orig);
509
510 if (res != TEEC_SUCCESS) {
511 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
512 ret_orig);
513 }
514
515 return res;
516}
517
518static TEEC_Result ta_crypt_cmd_ae_update(ADBG_Case_t *c,
519 TEEC_Session *s,
520 TEE_OperationHandle oph,
521 const void *src,
522 size_t src_len,
523 void *dst,
524 size_t *dst_len)
525{
526 TEEC_Result res;
527 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
528 uint32_t ret_orig;
529
530 assert((uintptr_t)oph <= UINT32_MAX);
531 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
532
533 op.params[1].tmpref.buffer = (void *)src;
534 op.params[1].tmpref.size = src_len;
535
536 op.params[2].tmpref.buffer = (void *)dst;
537 op.params[2].tmpref.size = *dst_len;
538
539 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
540 TEEC_MEMREF_TEMP_INPUT,
541 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
542
543 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE, &op, &ret_orig);
544
545 if (res != TEEC_SUCCESS) {
546 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
547 ret_orig);
548 }
549
550 if (res == TEEC_SUCCESS)
551 *dst_len = op.params[2].tmpref.size;
552
553 return res;
554}
555
556static TEEC_Result ta_crypt_cmd_ae_encrypt_final(ADBG_Case_t *c,
557 TEEC_Session *s,
558 TEE_OperationHandle oph,
559 const void *src,
560 size_t src_len, void *dst,
561 size_t *dst_len, void *tag,
562 size_t *tag_len)
563{
564 TEEC_Result res;
565 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
566 uint32_t ret_orig;
567
568 assert((uintptr_t)oph <= UINT32_MAX);
569 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
570
571 op.params[1].tmpref.buffer = (void *)src;
572 op.params[1].tmpref.size = src_len;
573
574 op.params[2].tmpref.buffer = (void *)dst;
575 op.params[2].tmpref.size = *dst_len;
576
577 op.params[3].tmpref.buffer = (void *)tag;
578 op.params[3].tmpref.size = *tag_len;
579
580 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
581 TEEC_MEMREF_TEMP_INPUT,
582 TEEC_MEMREF_TEMP_OUTPUT,
583 TEEC_MEMREF_TEMP_OUTPUT);
584
585 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_ENCRYPT_FINAL, &op,
586 &ret_orig);
587
588 if (res != TEEC_SUCCESS) {
589 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
590 ret_orig);
591 }
592
593 if (res == TEEC_SUCCESS) {
594 *dst_len = op.params[2].tmpref.size;
595 *tag_len = op.params[3].tmpref.size;
596 }
597
598 return res;
599}
600
601static TEEC_Result ta_crypt_cmd_ae_decrypt_final(ADBG_Case_t *c,
602 TEEC_Session *s,
603 TEE_OperationHandle oph,
604 const void *src, size_t src_len,
605 void *dst, size_t *dst_len,
606 const void *tag, size_t tag_len)
607{
608 TEEC_Result res;
609 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
610 uint32_t ret_orig;
611
612 assert((uintptr_t)oph <= UINT32_MAX);
613 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
614
615 op.params[1].tmpref.buffer = (void *)src;
616 op.params[1].tmpref.size = src_len;
617
618 op.params[2].tmpref.buffer = dst;
619 op.params[2].tmpref.size = *dst_len;
620
621 op.params[3].tmpref.buffer = (void *)tag;
622 op.params[3].tmpref.size = tag_len;
623
624 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
625 TEEC_MEMREF_TEMP_INPUT,
626 TEEC_MEMREF_TEMP_OUTPUT,
627 TEEC_MEMREF_TEMP_INPUT);
628
629 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_DECRYPT_FINAL, &op,
630 &ret_orig);
631
632 if (res != TEEC_SUCCESS) {
633 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
634 ret_orig);
635 }
636
637 if (res == TEEC_SUCCESS)
638 *dst_len = op.params[2].tmpref.size;
639
640 return res;
641}
642
643static TEEC_Result ta_crypt_cmd_asymmetric_operate(ADBG_Case_t *c,
644 TEEC_Session *s,
645 TEE_OperationHandle oph,
646 uint32_t cmd,
647 const TEE_Attribute *params,
648 uint32_t paramCount,
649 const void *src,
650 size_t src_len,
651 void *dst,
652 size_t *dst_len)
653{
654 TEEC_Result res;
655 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
656 uint32_t ret_orig;
657 uint8_t *buf;
658 size_t blen;
659
660 res = pack_attrs(params, paramCount, &buf, &blen);
661 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
662 return res;
663
664 assert((uintptr_t)oph <= UINT32_MAX);
665 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
666
667 op.params[1].tmpref.buffer = buf;
668 op.params[1].tmpref.size = blen;
669
670 op.params[2].tmpref.buffer = (void *)src;
671 op.params[2].tmpref.size = src_len;
672
673 op.params[3].tmpref.buffer = dst;
674 op.params[3].tmpref.size = *dst_len;
675
676 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
677 TEEC_MEMREF_TEMP_INPUT,
678 TEEC_MEMREF_TEMP_INPUT,
679 TEEC_MEMREF_TEMP_OUTPUT);
680
681 res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig);
682
683 if (res != TEEC_SUCCESS) {
684 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
685 ret_orig);
686 }
687
688 if (res == TEEC_SUCCESS)
689 *dst_len = op.params[3].tmpref.size;
690
691 free(buf);
692 return res;
693}
694
695static TEEC_Result ta_crypt_cmd_asymmetric_encrypt(ADBG_Case_t *c,
696 TEEC_Session *s,
697 TEE_OperationHandle oph,
698 const TEE_Attribute *params,
699 uint32_t paramCount,
700 const void *src,
701 size_t src_len,
702 void *dst,
703 size_t *dst_len)
704{
705 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
706 TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT,
707 params, paramCount,
708 src, src_len, dst, dst_len);
709}
710
711static TEEC_Result ta_crypt_cmd_asymmetric_decrypt(ADBG_Case_t *c,
712 TEEC_Session *s,
713 TEE_OperationHandle oph,
714 const TEE_Attribute *params,
715 uint32_t paramCount,
716 const void *src,
717 size_t src_len,
718 void *dst,
719 size_t *dst_len)
720{
721 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
722 TA_CRYPT_CMD_ASYMMETRIC_DECRYPT,
723 params, paramCount,
724 src, src_len, dst, dst_len);
725}
726
727static TEEC_Result ta_crypt_cmd_asymmetric_sign(ADBG_Case_t *c,
728 TEEC_Session *s,
729 TEE_OperationHandle oph,
730 const TEE_Attribute *params,
731 uint32_t paramCount,
732 const void *digest,
733 size_t digest_len,
734 void *signature,
735 size_t *signature_len)
736{
737 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
738 TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST, params, paramCount,
739 digest, digest_len, signature, signature_len);
740}
741
742static TEEC_Result ta_crypt_cmd_asymmetric_verify(ADBG_Case_t *c,
743 TEEC_Session *s,
744 TEE_OperationHandle oph,
745 const TEE_Attribute *params,
746 uint32_t paramCount,
747 const void *digest,
748 size_t digest_len,
749 const void *signature,
750 size_t signature_len)
751{
752 TEEC_Result res;
753 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
754 uint32_t ret_orig;
755 uint8_t *buf;
756 size_t blen;
757
758 res = pack_attrs(params, paramCount, &buf, &blen);
759 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
760 return res;
761
762 assert((uintptr_t)oph <= UINT32_MAX);
763 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
764
765 op.params[1].tmpref.buffer = buf;
766 op.params[1].tmpref.size = blen;
767
768 op.params[2].tmpref.buffer = (void *)digest;
769 op.params[2].tmpref.size = digest_len;
770
771 op.params[3].tmpref.buffer = (void *)signature;
772 op.params[3].tmpref.size = signature_len;
773
774 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
775 TEEC_MEMREF_TEMP_INPUT,
776 TEEC_MEMREF_TEMP_INPUT,
777 TEEC_MEMREF_TEMP_INPUT);
778
779 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST,
780 &op, &ret_orig);
781
782 if (res != TEEC_SUCCESS) {
783 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
784 ret_orig);
785 }
786
787 free(buf);
788 return res;
789}
790
791static TEEC_Result ta_crypt_cmd_get_object_value_attribute(ADBG_Case_t *c,
792 TEEC_Session *s,
793 TEE_ObjectHandle o,
794 uint32_t attr_id,
795 uint32_t *valuea,
796 uint32_t *valueb)
797{
798 TEEC_Result res;
799 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
800 uint32_t ret_orig;
801
802 assert((uintptr_t)o <= UINT32_MAX);
803 op.params[0].value.a = (uint32_t)(uintptr_t)o;
804 op.params[0].value.b = attr_id;
805 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT,
806 TEEC_NONE, TEEC_NONE);
807
808 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE,
809 &op, &ret_orig);
810
811 if (res != TEEC_SUCCESS) {
812 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
813 ret_orig);
814 }
815
816 if (res == TEEC_SUCCESS) {
817 *valuea = op.params[1].value.a;
818 *valueb = op.params[1].value.b;
819 }
820
821 return res;
822}
823
824static TEEC_Result ta_crypt_cmd_generate_key(ADBG_Case_t *c,
825 TEEC_Session *s,
826 TEE_ObjectHandle o,
827 uint32_t key_size,
828 const TEE_Attribute *params,
829 uint32_t paramCount)
830{
831 TEEC_Result res;
832 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
833 uint32_t ret_orig;
834 uint8_t *buf;
835 size_t blen;
836
837 res = pack_attrs(params, paramCount, &buf, &blen);
838 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
839 return res;
840
841 assert((uintptr_t)o <= UINT32_MAX);
842 op.params[0].value.a = (uint32_t)(uintptr_t)o;
843 op.params[0].value.b = key_size;
844
845 op.params[1].tmpref.buffer = buf;
846 op.params[1].tmpref.size = blen;
847
848 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
849 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
850 TEEC_NONE);
851
852 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GENERATE_KEY, &op, &ret_orig);
853
854 if (res != TEEC_SUCCESS) {
855 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
856 ret_orig);
857 }
858
859 free(buf);
860 return res;
861}
862
863static const uint8_t hash_data_md5_in1[] = {
864 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
865};
866
867static const uint8_t hash_data_md5_out1[] = {
868 0x61, 0x12, 0x71, 0x83, 0x70, 0x8d, 0x3a, 0xc7,
869 0xf1, 0x9b, 0x66, 0x06, 0xfc, 0xae, 0x7d, 0xf6
870};
871
872static const uint8_t hash_data_sha1_in1[] = {
873 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
874};
875
876static const uint8_t hash_data_sha1_out1[] = {
877 0x4b, 0x98, 0x92, 0xb6, 0x52, 0x72, 0x14, 0xaf,
878 0xc6, 0x55, 0xb8, 0xaa, 0x52, 0xf4, 0xd2, 0x03,
879 0xc1, 0x5e, 0x7c, 0x9c
880};
881
882static const uint8_t hash_data_sha224_in1[] = {
883 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
884};
885
886static const uint8_t hash_data_sha224_out1[] = {
887 0x08, 0x21, 0x69, 0xf9, 0x77, 0x1b, 0x80, 0x15,
888 0xf3, 0x97, 0xae, 0xde, 0x5b, 0xba, 0xa2, 0x72,
889 0x2d, 0x8f, 0x5c, 0x19, 0xfe, 0xd2, 0xe2, 0x68,
890 0x92, 0x49, 0xd8, 0x44
891};
892
893static const uint8_t hash_data_sha256_in1[] = { 'a', 'b', 'c' };
894
895static const uint8_t hash_data_sha256_out1[] = {
896 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
897 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
898 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
899 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
900};
901
902static const uint8_t hash_data_sha256_in2[] = { 'e', 'f', 'g' };
903
904static const uint8_t hash_data_sha256_out2[] = {
905 0xd4, 0xff, 0xe8, 0xe9, 0xee, 0x0b, 0x48, 0xeb,
906 0xa7, 0x16, 0x70, 0x61, 0x23, 0xa7, 0x18, 0x7f,
907 0x32, 0xea, 0xe3, 0xbd, 0xcb, 0x0e, 0x77, 0x63,
908 0xe4, 0x1e, 0x53, 0x32, 0x67, 0xbd, 0x8a, 0x53
909};
910
911
912static const uint8_t hash_data_sha384_in1[] = {
913 'a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
914};
915
916static const uint8_t hash_data_sha384_out1[] = {
917 0x4c, 0xab, 0x80, 0x9d, 0x96, 0x84, 0x01, 0x47,
918 0x67, 0x0a, 0xc1, 0x7a, 0xb6, 0xb9, 0xf7, 0x6e,
919 0x35, 0xa6, 0xb0, 0x8c, 0xf5, 0x2a, 0x3d, 0x64,
920 0x9a, 0x8c, 0x7e, 0x0c, 0x55, 0x45, 0xd3, 0x7d,
921 0x1f, 0x7f, 0x28, 0x34, 0x96, 0x14, 0x44, 0x2a,
922 0xf5, 0x98, 0xa2, 0x95, 0x24, 0x76, 0x53, 0x97
923};
924
925static const uint8_t hash_data_sha512_in1[] = {
926 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
927};
928
929static const uint8_t hash_data_sha512_out1[] = {
930 0x20, 0xd8, 0x64, 0x4f, 0x54, 0xa2, 0x5f, 0x6f,
931 0x0a, 0xf9, 0xd5, 0x27, 0x7d, 0x17, 0xa8, 0x99,
932 0x4c, 0x64, 0x3f, 0xd0, 0xf3, 0x83, 0x36, 0xee,
933 0x93, 0x12, 0x55, 0xcd, 0x2e, 0x12, 0x34, 0xa0,
934 0xc2, 0xaa, 0xf9, 0xbb, 0x15, 0xc5, 0xe9, 0xfa,
935 0xf7, 0xa7, 0xda, 0xb8, 0x2f, 0x72, 0xa0, 0x47,
936 0xe3, 0x02, 0x04, 0xe8, 0xa0, 0x35, 0x0c, 0x96,
937 0x26, 0xd1, 0xcb, 0x8b, 0x47, 0x45, 0x25, 0xd0
938};
939
940struct xtest_hash_case {
941 uint32_t algo;
942 size_t in_incr;
943 const uint8_t *in;
944 size_t in_len;
945 const uint8_t *out;
946 size_t out_len;
947};
948
949#define XTEST_HASH_CASE(algo, in_incr, in, out) \
950 { (algo), (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
951
952static const struct xtest_hash_case hash_cases[] = {
953 XTEST_HASH_CASE(TEE_ALG_MD5, 6, hash_data_md5_in1,
954 hash_data_md5_out1),
955 XTEST_HASH_CASE(TEE_ALG_SHA1, 3, hash_data_sha1_in1,
956 hash_data_sha1_out1),
957 XTEST_HASH_CASE(TEE_ALG_SHA224, 7, hash_data_sha224_in1,
958 hash_data_sha224_out1),
959 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in1,
960 hash_data_sha256_out1),
961 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in2,
962 hash_data_sha256_out2),
963 XTEST_HASH_CASE(TEE_ALG_SHA384, 1, hash_data_sha384_in1,
964 hash_data_sha384_out1),
965 XTEST_HASH_CASE(TEE_ALG_SHA512, 1, hash_data_sha512_in1,
966 hash_data_sha512_out1),
967};
968
969static void xtest_tee_test_4001(ADBG_Case_t *c)
970{
971 TEEC_Session session = { 0 };
972 uint32_t ret_orig;
973 size_t n;
974
975 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
976 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
977 &ret_orig)))
978 return;
979
980
981 for (n = 0; n < ARRAY_SIZE(hash_cases); n++) {
982 TEE_OperationHandle op1;
983 TEE_OperationHandle op2;
984 uint8_t out[64];
985 size_t out_size;
986
987 Do_ADBG_BeginSubCase(c, "Hash case %d algo 0x%x",
988 (int)n, (unsigned int)hash_cases[n].algo);
989
990 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
991 ta_crypt_cmd_allocate_operation(c, &session, &op1,
992 hash_cases[n].algo,
993 TEE_MODE_DIGEST, 0)))
994 goto out;
995
996 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
997 ta_crypt_cmd_allocate_operation(c, &session, &op2,
998 hash_cases[n].algo,
999 TEE_MODE_DIGEST, 0)))
1000 goto out;
1001
1002 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1003 ta_crypt_cmd_digest_update(c, &session, op1,
1004 hash_cases[n].in,
1005 hash_cases[n].in_incr)))
1006 goto out;
1007
1008 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1009 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1010 goto out;
1011
1012 out_size = sizeof(out);
1013 memset(out, 0, sizeof(out));
1014 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1015 ta_crypt_cmd_digest_do_final(c, &session, op2,
1016 hash_cases[n].in + hash_cases[n].in_incr,
1017 hash_cases[n].in_len - hash_cases[n].in_incr,
1018 out, &out_size)))
1019 goto out;
1020
1021 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1022 hash_cases[n].out_len, out, out_size);
1023
1024 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1025 ta_crypt_cmd_reset_operation(c, &session, op1)))
1026 goto out;
1027
1028 out_size = sizeof(out);
1029 memset(out, 0, sizeof(out));
1030 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1031 ta_crypt_cmd_digest_do_final(c, &session, op1,
1032 hash_cases[n].in,
1033 hash_cases[n].in_len, out,
1034 &out_size)))
1035 goto out;
1036
1037 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1038 hash_cases[n].out_len, out, out_size);
1039
Jerome Forissier1e05e262015-07-29 16:09:07 +02001040 /*
1041 * Invoke TEE_DigestDoFinal() a second time to check that state
1042 * was properly reset
1043 */
1044 out_size = sizeof(out);
1045 memset(out, 0, sizeof(out));
1046 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1047 ta_crypt_cmd_digest_do_final(c, &session, op1,
1048 hash_cases[n].in,
1049 hash_cases[n].in_len, out,
1050 &out_size)))
1051 goto out;
1052
1053 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1054 hash_cases[n].out_len, out, out_size);
1055
Pascal Brandc639ac82015-07-02 08:53:34 +02001056 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1057 ta_crypt_cmd_free_operation(c, &session, op1)))
1058 goto out;
1059
1060 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1061 ta_crypt_cmd_free_operation(c, &session, op2)))
1062 goto out;
1063
1064 Do_ADBG_EndSubCase(c, NULL);
1065 }
1066
1067out:
1068 TEEC_CloseSession(&session);
1069}
1070
1071static const uint8_t mac_data_md5_key1[10] = {
1072 0x6B, 0x65, 0x79, /* key */
1073};
1074
1075static const uint8_t mac_data_md5_in1[] = {
1076 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1077 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1078 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1079 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1080 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1081 0x64, 0x6F, 0x67, /* dog */
1082};
1083
1084static const uint8_t mac_data_md5_out1[] = {
1085 0x80, 0x07, 0x07, 0x13, 0x46, 0x3e, 0x77, 0x49,
1086 0xb9, 0x0c, 0x2d, 0xc2, 0x49, 0x11, 0xe2, 0x75
1087};
1088
1089
1090/* generated with scripts/digest_hmac.pl */
1091static const uint8_t mac_data_sha1_key1[10] = {
1092 0x6B, 0x65, 0x79, /* key */
1093};
1094
1095static const uint8_t mac_data_sha1_in1[] = {
1096 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1097 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1098 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1099 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1100 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1101 0x64, 0x6F, 0x67, /* dog */
1102};
1103
1104static const uint8_t mac_data_sha1_out1[] = {
1105 0xDE, 0x7C, 0x9B, 0x85, 0xB8, 0xB7, 0x8A, 0xA6, /* .|...... */
1106 0xBC, 0x8A, 0x7A, 0x36, 0xF7, 0x0A, 0x90, 0x70, /* ..z6...p */
1107 0x1C, 0x9D, 0xB4, 0xD9, /* .... */
1108};
1109
1110static const uint8_t mac_data_sha224_key1[24] = {
1111 0x6B, 0x65, 0x79, /* key */
1112};
1113
1114static const uint8_t mac_data_sha224_in1[] = {
1115 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1116 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1117 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1118 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1119 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1120 0x64, 0x6F, 0x67, /* dog */
1121};
1122
1123static const uint8_t mac_data_sha224_out1[] = {
1124 0x88, 0xFF, 0x8B, 0x54, 0x67, 0x5D, 0x39, 0xB8, /* ...Tg]9. */
1125 0xF7, 0x23, 0x22, 0xE6, 0x5F, 0xF9, 0x45, 0xC5, /* .#"._.E. */
1126 0x2D, 0x96, 0x37, 0x99, 0x88, 0xAD, 0xA2, 0x56, /* -.7....V */
1127 0x39, 0x74, 0x7E, 0x69, /* 9t~i */
1128};
1129
1130
1131static const uint8_t mac_data_sha256_key1[24] = {
1132 'Q', 'W', 'E', 'R', 'T', 'Y'
1133};
1134
1135static const uint8_t mac_data_sha256_in1[] = { 'a', 'b', 'c' };
1136
1137static const uint8_t mac_data_sha256_out1[] = {
1138 0xee, 0x2e, 0x5d, 0x9b, 0x51, 0xe2, 0x9c, 0x1d,
1139 0x49, 0xe9, 0xae, 0x6f, 0x0a, 0xcc, 0x15, 0x18,
1140 0xde, 0x1e, 0xa3, 0x88, 0x8e, 0xee, 0x48, 0xbb,
1141 0x82, 0x77, 0xe9, 0x09, 0x74, 0x4b, 0xa2, 0xf2
1142};
1143
1144/* generated with scripts/digest_hmac.pl */
1145static const uint8_t mac_data_sha256_key2[24] = {
1146 0x6B, 0x65, 0x79, /* key */
1147};
1148
1149static const uint8_t mac_data_sha256_in2[] = {
1150 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1151 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1152 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1153 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1154 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1155 0x64, 0x6F, 0x67, /* dog */
1156};
1157
1158static const uint8_t mac_data_sha256_out2[] = {
1159 0xF7, 0xBC, 0x83, 0xF4, 0x30, 0x53, 0x84, 0x24, /* ....0S.$ */
1160 0xB1, 0x32, 0x98, 0xE6, 0xAA, 0x6F, 0xB1, 0x43, /* .2...o.C */
1161 0xEF, 0x4D, 0x59, 0xA1, 0x49, 0x46, 0x17, 0x59, /* .MY.IF.Y */
1162 0x97, 0x47, 0x9D, 0xBC, 0x2D, 0x1A, 0x3C, 0xD8, /* .G..-.<. */
1163};
1164
1165static const uint8_t mac_data_sha384_key1[32] = {
1166 0x6B, 0x65, 0x79, /* key */
1167};
1168
1169static const uint8_t mac_data_sha384_in1[] = {
1170 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1171 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1172 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1173 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1174 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1175 0x64, 0x6F, 0x67, /* dog */
1176};
1177
1178static const uint8_t mac_data_sha384_out1[] = {
1179 0xD7, 0xF4, 0x72, 0x7E, 0x2C, 0x0B, 0x39, 0xAE, /* ..r~, .9. */
1180 0x0F, 0x1E, 0x40, 0xCC, 0x96, 0xF6, 0x02, 0x42, /* ..@....B */
1181 0xD5, 0xB7, 0x80, 0x18, 0x41, 0xCE, 0xA6, 0xFC, /* ....A... */
1182 0x59, 0x2C, 0x5D, 0x3E, 0x1A, 0xE5, 0x07, 0x00, /* Y, ]>.... */
1183 0x58, 0x2A, 0x96, 0xCF, 0x35, 0xE1, 0xE5, 0x54, /* X...5..T */
1184 0x99, 0x5F, 0xE4, 0xE0, 0x33, 0x81, 0xC2, 0x37, /* ._..3..7 */
1185};
1186
1187static const uint8_t mac_data_sha512_key1[32] = {
1188 0x6B, 0x65, 0x79, /* key */
1189};
1190
1191static const uint8_t mac_data_sha512_in1[] = {
1192 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1193 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1194 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1195 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1196 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1197 0x64, 0x6F, 0x67, /* dog */
1198};
1199
1200static const uint8_t mac_data_sha512_out1[] = {
1201 0xB4, 0x2A, 0xF0, 0x90, 0x57, 0xBA, 0xC1, 0xE2, /* ....W... */
1202 0xD4, 0x17, 0x08, 0xE4, 0x8A, 0x90, 0x2E, 0x09, /* ........ */
1203 0xB5, 0xFF, 0x7F, 0x12, 0xAB, 0x42, 0x8A, 0x4F, /* .....B.O */
1204 0xE8, 0x66, 0x53, 0xC7, 0x3D, 0xD2, 0x48, 0xFB, /* .fS.=.H. */
1205 0x82, 0xF9, 0x48, 0xA5, 0x49, 0xF7, 0xB7, 0x91, /* ..H.I... */
1206 0xA5, 0xB4, 0x19, 0x15, 0xEE, 0x4D, 0x1E, 0xC3, /* .....M.. */
1207 0x93, 0x53, 0x57, 0xE4, 0xE2, 0x31, 0x72, 0x50, /* .SW..1rP */
1208 0xD0, 0x37, 0x2A, 0xFA, 0x2E, 0xBE, 0xEB, 0x3A, /* .7.....: */
1209};
1210
1211
1212/* AES-CBC-MAC */
1213static const uint8_t mac_cbc_vect1_key[] = {
1214 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1215 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1216};
1217
1218static const uint8_t mac_cbc_vect1_data[] = {
1219 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1220 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1221 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1222 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1223 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1224 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1225 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1226 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1227 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1228 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1229 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1230 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1231 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1232 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1233 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1234 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1235 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1236 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1237 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1238 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1239};
1240
1241static const uint8_t mac_cbc_vect1_out[] = {
1242 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1243 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1244};
1245
1246/* DES-CBC-MAC */
1247static const uint8_t mac_cbc_vect2_key[] = {
1248 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1249};
1250
1251#define mac_cbc_vect2_data mac_cbc_vect1_data
1252static const uint8_t mac_cbc_vect2_out[] = {
1253 0xE9, 0x41, 0x46, 0x30, 0x69, 0x32, 0xBD, 0xD6, /* .AF0i2.. */
1254};
1255
1256/* DES3-CBC-MAC */
1257static const uint8_t mac_cbc_vect3_key[] = {
1258 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1259 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1260 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1261};
1262
1263#define mac_cbc_vect3_data mac_cbc_vect2_data
1264static const uint8_t mac_cbc_vect3_out[] = {
1265 0x1C, 0x17, 0xB7, 0xB5, 0x9F, 0x54, 0x9C, 0x63, /* .....T.c */
1266};
1267
1268/* AES-CBC-MAC PKCS#5 pad*/
1269static const uint8_t mac_cbc_vect4_key[] = {
1270 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1271 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1272 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1273 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1274};
1275
1276#define mac_cbc_vect4_data mac_cbc_vect1_data
1277static const uint8_t mac_cbc_vect4_out[] = {
1278 0x0B, 0x46, 0xC7, 0xA2, 0xE1, 0x5A, 0xE2, 0x23, /* .F...Z.# */
1279 0x83, 0x34, 0x1C, 0x86, 0x53, 0xF8, 0x51, 0x24, /* .4..S.Q$ */
1280};
1281
1282/* DES-CBC-MAC PKCS#5 pad*/
1283static const uint8_t mac_cbc_vect5_key[] = {
1284 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1285};
1286
1287#define mac_cbc_vect5_data mac_cbc_vect1_data
1288static const uint8_t mac_cbc_vect5_out[] = {
1289 0x30, 0x81, 0x4F, 0x42, 0x03, 0x7E, 0xD8, 0xA9, /* 0.OB.~.. */
1290};
1291
1292/* DES3-CBC-MAC PKCS#5 pad*/
1293static const uint8_t mac_cbc_vect6_key[] = {
1294 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1295 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1296 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1297};
1298
1299#define mac_cbc_vect6_data mac_cbc_vect1_data
1300static const uint8_t mac_cbc_vect6_out[] = {
1301 0x6E, 0x37, 0x6E, 0x14, 0x5E, 0x21, 0xDD, 0xF8, /* n7n.^!.. */
1302};
1303
1304/* AES-CBC-MAC PKCS#5 pad*/
1305#define mac_cbc_vect7_key mac_cbc_vect4_key
1306static const uint8_t mac_cbc_vect7_data[] = {
1307 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1308 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1309 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1310 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1311 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1312 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1313 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1314 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1315 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1316 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1317 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1318 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1319 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1320 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1321 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1322 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1323 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1324 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1325 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1326 0x74, 0x69, 0x6F, 0x6E, 0x2E, /* tion. */
1327};
1328
1329static const uint8_t mac_cbc_vect7_out[] = {
1330 0xFD, 0x89, 0x35, 0xB3, 0x93, 0x7F, 0xBB, 0xA2, /* ..5..... */
1331 0xFB, 0x65, 0x60, 0xC4, 0x0A, 0x62, 0xA0, 0xF9, /* .e`..b.. */
1332};
1333
1334/* DES-CBC-MAC PKCS#5 pad*/
1335#define mac_cbc_vect8_key mac_cbc_vect5_key
1336#define mac_cbc_vect8_data mac_cbc_vect7_data
1337static const uint8_t mac_cbc_vect8_out[] = {
1338 0x02, 0x2A, 0xA8, 0x2E, 0x47, 0xC6, 0xBB, 0x7C, /* ....G..| */
1339};
1340
1341/* DES3-CBC-MAC PKCS#5 pad*/
1342#define mac_cbc_vect9_key mac_cbc_vect6_key
1343#define mac_cbc_vect9_data mac_cbc_vect7_data
1344static const uint8_t mac_cbc_vect9_out[] = {
1345 0xD4, 0xF7, 0x3E, 0x27, 0x78, 0x0E, 0x1C, 0x79, /* ..>'x..y */
1346};
1347
1348/*
Pascal Brand5c3d8092015-07-23 08:20:26 +02001349 * DES3-CBC-MAC, with key size of 112bit
1350 * out obtained with:
1351 * echo -n "Cipher block chaining (CBC) is a common chaining mode in which the previous block's ciphertext is xored with the current block's plaintext before encryption...."|openssl enc -iv 0 -des3 -K 303132333435363738394142434445463031323334353637 |xxd
1352 */
1353/* DES3-CBC-MAC PKCS#5 pad*/
1354static const uint8_t mac_cbc_vect10_key[] = {
1355 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1356 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1357};
1358#define mac_cbc_vect10_data mac_cbc_vect1_data
1359static const uint8_t mac_cbc_vect10_out[] = {
1360 0x30, 0x92, 0x60, 0x99, 0x66, 0xac, 0x8c, 0xa6,
1361};
1362
1363
1364/*
Pascal Brandc639ac82015-07-02 08:53:34 +02001365 * AES-CMAC
1366 * Test vectors from
1367 * http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf
1368 */
1369
1370/* AES-128 */
1371static const uint8_t mac_cmac_vect1_key[] = {
1372 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
1373 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
1374};
1375
1376static const uint8_t mac_cmac_vect1_out[] = {
1377 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28,
1378 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46
1379};
1380
1381#define mac_cmac_vect2_key mac_cmac_vect1_key
1382static const uint8_t mac_cmac_vect2_data[] = {
1383 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1384 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1385};
1386
1387static const uint8_t mac_cmac_vect2_out[] = {
1388 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44,
1389 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c
1390};
1391
1392#define mac_cmac_vect3_key mac_cmac_vect1_key
1393static const uint8_t mac_cmac_vect3_data[] = {
1394 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1395 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1396 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1397 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1398 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1399};
1400
1401static const uint8_t mac_cmac_vect3_out[] = {
1402 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30,
1403 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27
1404};
1405
1406#define mac_cmac_vect4_key mac_cmac_vect1_key
1407static const uint8_t mac_cmac_vect4_data[] = {
1408 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1409 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1410 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1411 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1412 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1413 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1414 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1415 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1416};
1417
1418static const uint8_t mac_cmac_vect4_out[] = {
1419 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92,
1420 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe
1421};
1422
1423/* AES-192 */
1424static const uint8_t mac_cmac_vect5_key[] = {
1425 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
1426 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
1427 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b
1428};
1429
1430static const uint8_t mac_cmac_vect5_out[] = {
1431 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5,
1432 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67
1433};
1434
1435
1436#define mac_cmac_vect6_key mac_cmac_vect5_key
1437static const uint8_t mac_cmac_vect6_data[] = {
1438 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1439 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1440};
1441
1442static const uint8_t mac_cmac_vect6_out[] = {
1443 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90,
1444 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84
1445};
1446
1447#define mac_cmac_vect7_key mac_cmac_vect5_key
1448static const uint8_t mac_cmac_vect7_data[] = {
1449 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1450 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1451 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1452 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1453 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1454};
1455
1456static const uint8_t mac_cmac_vect7_out[] = {
1457 0x8a, 0x1d, 0xe5, 0xbe, 0x2e, 0xb3, 0x1a, 0xad,
1458 0x08, 0x9a, 0x82, 0xe6, 0xee, 0x90, 0x8b, 0x0e
1459};
1460
1461#define mac_cmac_vect8_key mac_cmac_vect5_key
1462static const uint8_t mac_cmac_vect8_data[] = {
1463 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1464 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1465 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1466 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1467 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1468 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1469 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1470 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1471};
1472
1473static const uint8_t mac_cmac_vect8_out[] = {
1474 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79,
1475 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11
1476};
1477
1478/* AES-256 */
1479static const uint8_t mac_cmac_vect9_key[] = {
1480 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
1481 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
1482 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
1483 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4
1484};
1485
1486static const uint8_t mac_cmac_vect9_out[] = {
1487 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e,
1488 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83
1489};
1490
1491#define mac_cmac_vect10_key mac_cmac_vect9_key
1492static const uint8_t mac_cmac_vect10_data[] = {
1493 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1494 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1495};
1496
1497static const uint8_t mac_cmac_vect10_out[] = {
1498 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82,
1499 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c
1500};
1501
1502#define mac_cmac_vect11_key mac_cmac_vect9_key
1503static const uint8_t mac_cmac_vect11_data[] = {
1504 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1505 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1506 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1507 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1508 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1509};
1510
1511static const uint8_t mac_cmac_vect11_out[] = {
1512 0xaa, 0xf3, 0xd8, 0xf1, 0xde, 0x56, 0x40, 0xc2,
1513 0x32, 0xf5, 0xb1, 0x69, 0xb9, 0xc9, 0x11, 0xe6
1514};
1515
1516#define mac_cmac_vect12_key mac_cmac_vect9_key
1517static const uint8_t mac_cmac_vect12_data[] = {
1518 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1519 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1520 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1521 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1522 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1523 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1524 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1525 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1526};
1527
1528static const uint8_t mac_cmac_vect12_out[] = {
1529 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5,
1530 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10
1531};
1532
1533struct xtest_mac_case {
1534 uint32_t algo;
1535 uint32_t key_type;
1536 const uint8_t *key;
1537 size_t key_len;
1538 size_t in_incr;
1539 const uint8_t *in;
1540 size_t in_len;
1541 const uint8_t *out;
1542 size_t out_len;
1543};
1544
1545#define XTEST_MAC_CASE(algo, key_type, key, in_incr, in, out) \
1546 { (algo), (key_type), (key), ARRAY_SIZE(key), \
1547 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
1548
1549#define XTEST_MAC_CBC_CASE(algo, key_type, vect, in_incr) \
1550 XTEST_MAC_CASE((algo), (key_type), \
1551 mac_cbc_ ## vect ## _key, (in_incr), \
1552 mac_cbc_ ## vect ## _data, mac_cbc_ ## vect ## _out)
1553
1554#define XTEST_MAC_CMAC_CASE(vect, in_incr) \
1555 XTEST_MAC_CASE(TEE_ALG_AES_CMAC, TEE_TYPE_AES, \
1556 mac_cmac_ ## vect ## _key, (in_incr), \
1557 mac_cmac_ ## vect ## _data, mac_cmac_ ## vect ## _out)
1558
1559static const struct xtest_mac_case mac_cases[] = {
1560 XTEST_MAC_CASE(TEE_ALG_HMAC_MD5, TEE_TYPE_HMAC_MD5,
1561 mac_data_md5_key1,
1562 4, mac_data_md5_in1, mac_data_md5_out1),
1563 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA1, TEE_TYPE_HMAC_SHA1,
1564 mac_data_sha1_key1,
1565 5, mac_data_sha1_in1, mac_data_sha1_out1),
1566 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA224, TEE_TYPE_HMAC_SHA224,
1567 mac_data_sha224_key1,
1568 8, mac_data_sha224_in1, mac_data_sha224_out1),
1569 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1570 mac_data_sha256_key1,
1571 1, mac_data_sha256_in1, mac_data_sha256_out1),
1572 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1573 mac_data_sha256_key2,
1574 7, mac_data_sha256_in2, mac_data_sha256_out2),
1575 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA384, TEE_TYPE_HMAC_SHA384,
1576 mac_data_sha384_key1,
1577 11, mac_data_sha384_in1, mac_data_sha384_out1),
1578 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA512, TEE_TYPE_HMAC_SHA512,
1579 mac_data_sha512_key1,
1580 13, mac_data_sha512_in1, mac_data_sha512_out1),
1581
1582 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_NOPAD, TEE_TYPE_AES, vect1, 14),
1583 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_NOPAD, TEE_TYPE_DES, vect2, 16),
1584 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_NOPAD, TEE_TYPE_DES3, vect3,
1585 17),
1586 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect4, 11),
1587 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect5, 9),
1588 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect6, 4),
1589 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect7, 3),
1590 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect8, 23),
1591 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect9,
1592 34),
Pascal Brand5c3d8092015-07-23 08:20:26 +02001593 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect10, 4),
Pascal Brandc639ac82015-07-02 08:53:34 +02001594
1595 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect1_key,
1596 ARRAY_SIZE(mac_cmac_vect1_key), 0, NULL, 0, mac_cmac_vect1_out,
1597 ARRAY_SIZE(mac_cmac_vect1_out) },
1598 XTEST_MAC_CMAC_CASE(vect2, 9),
1599 XTEST_MAC_CMAC_CASE(vect3, 9),
1600 XTEST_MAC_CMAC_CASE(vect4, 9),
1601 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect5_key,
1602 ARRAY_SIZE(mac_cmac_vect5_key), 0, NULL, 0, mac_cmac_vect5_out,
1603 ARRAY_SIZE(mac_cmac_vect5_out) },
1604 XTEST_MAC_CMAC_CASE(vect6, 9),
1605 XTEST_MAC_CMAC_CASE(vect7, 9),
1606 XTEST_MAC_CMAC_CASE(vect8, 9),
1607 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect9_key,
1608 ARRAY_SIZE(mac_cmac_vect9_key), 0, NULL, 0, mac_cmac_vect9_out,
1609 ARRAY_SIZE(mac_cmac_vect9_out) },
1610 XTEST_MAC_CMAC_CASE(vect10, 9),
1611 XTEST_MAC_CMAC_CASE(vect11, 9),
1612 XTEST_MAC_CMAC_CASE(vect12, 9),
1613};
1614
1615static void xtest_tee_test_4002(ADBG_Case_t *c)
1616{
1617 TEEC_Session session = { 0 };
1618 TEE_OperationHandle op1;
1619 TEE_OperationHandle op2;
1620 TEE_ObjectHandle key_handle;
1621 uint8_t out[64];
1622 size_t out_size;
1623 uint32_t ret_orig;
1624 size_t n;
1625
1626 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1627 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
1628 &ret_orig)))
1629 return;
1630
1631 for (n = 0; n < ARRAY_SIZE(mac_cases); n++) {
1632 TEE_Attribute key_attr;
1633 size_t key_size;
1634
1635 Do_ADBG_BeginSubCase(c, "MAC case %d algo 0x%x",
1636 (int)n, (unsigned int)mac_cases[n].algo);
1637
1638 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
1639 key_attr.content.ref.buffer = (void *)mac_cases[n].key;
1640 key_attr.content.ref.length = mac_cases[n].key_len;
1641
1642 key_size = key_attr.content.ref.length * 8;
1643 if (mac_cases[n].key_type == TEE_TYPE_DES ||
1644 mac_cases[n].key_type == TEE_TYPE_DES3)
1645 /* Exclude parity in bit size of key */
1646 key_size -= key_size / 8;
1647
1648 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1649 ta_crypt_cmd_allocate_operation(c, &session, &op1,
1650 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1651 goto out;
1652
1653 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1654 ta_crypt_cmd_allocate_operation(c, &session, &op2,
1655 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1656 goto out;
1657
1658 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1659 ta_crypt_cmd_allocate_transient_object(c, &session,
1660 mac_cases[n].key_type, key_size, &key_handle)))
1661 goto out;
1662
1663 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1664 ta_crypt_cmd_populate_transient_object(c, &session,
1665 key_handle, &key_attr, 1)))
1666 goto out;
1667
1668 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1669 ta_crypt_cmd_set_operation_key(c, &session, op1,
1670 key_handle)))
1671 goto out;
1672
1673 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1674 ta_crypt_cmd_free_transient_object(c, &session,
1675 key_handle)))
1676 goto out;
1677
1678 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1679 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1680 goto out;
1681
1682 if (mac_cases[n].in != NULL) {
1683 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1684 ta_crypt_cmd_mac_update(c, &session, op1,
1685 mac_cases[n].in, mac_cases[n].in_incr)))
1686 goto out;
1687 }
1688
1689 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1690 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1691 goto out;
1692
1693 out_size = sizeof(out);
1694 memset(out, 0, sizeof(out));
1695 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1696 ta_crypt_cmd_mac_final_compute(c, &session, op2,
1697 mac_cases[n].in + mac_cases[n].in_incr,
1698 mac_cases [n].in_len - mac_cases[n].in_incr,
1699 out, &out_size)))
1700 goto out;
1701
1702 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1703 mac_cases[n].out_len, out, out_size);
1704
1705 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1706 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1707 goto out;
1708
1709 out_size = sizeof(out);
1710 memset(out, 0, sizeof(out));
1711 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1712 ta_crypt_cmd_mac_final_compute(c, &session, op1,
1713 mac_cases[n].in, mac_cases[n].in_len, out,
1714 &out_size)))
1715 goto out;
1716
1717 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1718 mac_cases[n].out_len, out, out_size);
1719
1720 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1721 ta_crypt_cmd_free_operation(c, &session, op1)))
1722 goto out;
1723
1724 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1725 ta_crypt_cmd_free_operation(c, &session, op2)))
1726 goto out;
1727
1728 Do_ADBG_EndSubCase(c, NULL);
1729 }
1730out:
1731 TEEC_CloseSession(&session);
1732}
1733
Pascal Brandc639ac82015-07-02 08:53:34 +02001734static const uint8_t ciph_data_aes_key1[] = {
1735 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1736 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1737};
1738
Jerome Forissier0780ad42018-06-05 15:02:37 +02001739static const uint8_t ciph_data_aes_key2[] = {
1740 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
1741 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
1742};
1743
Pascal Brandc639ac82015-07-02 08:53:34 +02001744static const uint8_t ciph_data_des_key1[] = {
1745 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 /* 01234567 */
1746};
1747
1748static const uint8_t ciph_data_des_key2[] = {
1749 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1750};
1751
1752
1753static const uint8_t ciph_data_des3_key1[] = {
1754 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1755 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1756 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1757};
1758
1759static const uint8_t ciph_data_des3_key2[] = {
1760 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1761 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1762 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1763};
1764
1765static const uint8_t ciph_data_des2_key1[] = {
1766 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1767 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1768};
1769
1770static const uint8_t ciph_data_in1[] = {
1771 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1772 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1773 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1774 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1775 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1776 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1777};
1778
1779static const uint8_t ciph_data_in3[] = {
1780 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1781 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1782 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1783 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1784 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1785 0x43, 0x44, 0x45, 0x46, 0x30, /* CDEF0 */
1786};
1787
Jerome Forissier45218eb2018-04-11 13:03:26 +02001788static const uint8_t ciph_data_in4[] = {
1789 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1790 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1791 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1792 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1793 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1794 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1795 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1796 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1797};
1798
Jerome Forissier0780ad42018-06-05 15:02:37 +02001799static const uint8_t ciph_data_in5[] = {
1800 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1801 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1802 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1803 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1804 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1805 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1806 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1807 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1808 0x01, 0x01, 0x01
1809};
1810
Pascal Brandc639ac82015-07-02 08:53:34 +02001811static const uint8_t ciph_data_128_iv1[] = {
1812 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1813 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */
1814};
1815
Jerome Forissier0780ad42018-06-05 15:02:37 +02001816static const uint8_t ciph_data_128_iv2[] = {
1817 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
1818 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
1819};
1820
Pascal Brandc639ac82015-07-02 08:53:34 +02001821static const uint8_t ciph_data_64_iv1[] = {
1822 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1823};
1824
1825static const uint8_t ciph_data_in2[] = {
1826 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
1827};
1828
1829static const uint8_t ciph_data_aes_ecb_nopad_out1[] = {
1830 0xA5, 0xBE, 0x14, 0xD5, 0x01, 0x05, 0x24, 0x48, /* ......$H */
1831 0x58, 0x1A, 0x6B, 0x82, 0xD4, 0x41, 0xD2, 0xB3, /* X.k..A.. */
1832 0xBB, 0xF9, 0xAE, 0x37, 0x94, 0xAC, 0x18, 0x50, /* ...7...P */
1833 0x87, 0x09, 0xCC, 0x3F, 0x43, 0xD2, 0xC2, 0xB7, /* ...?C... */
1834 0xD7, 0x6F, 0x84, 0x07, 0xB4, 0x78, 0xCE, 0x34, /* .o...x.4 */
1835 0x48, 0xC9, 0x16, 0x86, 0x42, 0xB8, 0xFF, 0xCF, /* H...B... */
1836};
1837
1838static const uint8_t ciph_data_aes_cbc_nopad_out1[] = {
1839 0x8D, 0x9F, 0x88, 0xD8, 0xAF, 0x9F, 0xC1, 0x3B, /* .......; */
1840 0x02, 0x15, 0x43, 0x6A, 0x8C, 0x1E, 0x34, 0x5C, /* ..Cj..4\ */
1841 0x83, 0xF4, 0x85, 0x3E, 0x43, 0x0F, 0xE5, 0x5F, /* ...>C.._ */
1842 0x81, 0x4C, 0xC0, 0x28, 0x3F, 0xD9, 0x98, 0x53, /* .L.(?..S */
1843 0xB1, 0x44, 0x51, 0x38, 0x21, 0xAB, 0x10, 0xCE, /* .DQ8!... */
1844 0xC2, 0xEC, 0x65, 0x54, 0xDD, 0x5C, 0xEA, 0xDC, /* ..eT.\.. */
1845};
1846
1847static const uint8_t ciph_data_aes_ctr_out1[] = {
1848 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1849 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1850 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1851 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1852 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1853 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1854};
1855
1856static const uint8_t ciph_data_aes_ctr_out2[] = {
1857 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1858 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1859 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1860 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1861 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1862 0x72, 0x0E, 0x3C, 0xD1, 0xA1, /* r.<.. */
1863};
1864
Jerome Forissier45218eb2018-04-11 13:03:26 +02001865static const uint8_t ciph_data_aes_ctr_out4[] = {
1866 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1867 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1868 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1869 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1870 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1871 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1872 0x9F, 0xD7, 0x0C, 0x92, 0xD4, 0xA5, 0x9D, 0x06, /* ........ */
1873 0x01, 0x80, 0x38, 0xCD, 0xC2, 0x71, 0x5D, 0x4A, /* ..8..q]J */
1874};
1875
Jerome Forissier0780ad42018-06-05 15:02:37 +02001876static const uint8_t ciph_data_aes_ctr_out5[] = {
1877 0xbb, 0xfe, 0x07, 0x04, 0x1c, 0x8e, 0x09, 0x61,
1878 0xfb, 0xb1, 0x7c, 0xa5, 0x4d, 0x2b, 0x30, 0xf6,
1879 0x26, 0x9e, 0xff, 0x61, 0x18, 0x47, 0xc6, 0x06,
1880 0x81, 0x02, 0x84, 0xcd, 0x9c, 0x4b, 0x6d, 0x21,
1881 0xe2, 0x64, 0xa6, 0x50, 0x7f, 0x28, 0x81, 0x6f,
1882 0x29, 0xda, 0xd5, 0x56, 0x3f, 0x46, 0xac, 0xca,
1883 0x37, 0xe7, 0x77, 0x36, 0xbc, 0x76, 0x39, 0x57,
1884 0xaa, 0x67, 0x1b, 0x2a, 0xe6, 0x36, 0x57, 0x6d,
1885 0x2a, 0xb8, 0x77
1886};
1887
Pascal Brandc639ac82015-07-02 08:53:34 +02001888static const uint8_t ciph_data_aes_cbc_vect1_key[] = {
1889 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1890 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1891};
1892
1893static const uint8_t ciph_data_aes_cbc_vect1_iv[] = {
1894 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1895 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1896};
1897
1898static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = {
1899 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1900 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1901 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1902 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1903 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1904 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1905 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1906 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1907 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1908 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1909 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1910 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1911 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1912 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1913 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1914 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1915 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1916 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1917 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1918 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1919};
1920
1921static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = {
1922 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */
1923 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */
1924 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */
1925 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */
1926 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */
1927 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */
1928 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */
1929 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */
1930 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */
1931 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */
1932 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */
1933 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */
1934 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */
1935 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */
1936 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */
1937 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */
1938 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */
1939 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */
1940 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1941 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1942};
1943
1944/* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962
1945 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */
1946static const uint8_t ciph_data_aes_cts_vect1_key[] = {
1947 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20,
1948 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69
1949};
1950
1951static const uint8_t ciph_data_aes_cts_vect1_iv[16] = {
1952 0x00
1953};
1954
1955static const uint8_t ciph_data_aes_cts_vect1_ptx[] = {
1956 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1957 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1958 0x20
1959};
1960
1961static const uint8_t ciph_data_aes_cts_vect1_ctx[] = {
1962 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
1963 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
1964 0x97
1965};
1966
1967#define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key
1968#define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv
1969static const uint8_t ciph_data_aes_cts_vect2_ptx[] = {
1970 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1971 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1972 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1973 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20
1974};
1975
1976static const uint8_t ciph_data_aes_cts_vect2_ctx[] = {
1977 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
1978 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
1979 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1980 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
1981};
1982
1983#define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key
1984#define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv
1985static const uint8_t ciph_data_aes_cts_vect3_ptx[] = {
1986 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1987 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1988 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1989 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1990};
1991
1992static const uint8_t ciph_data_aes_cts_vect3_ctx[] = {
1993 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1994 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1995 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1996 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1997};
1998
1999#define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key
2000#define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv
2001static const uint8_t ciph_data_aes_cts_vect4_ptx[] = {
2002 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2003 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2004 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2005 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2006 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2007 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c,
2008};
2009
2010static const uint8_t ciph_data_aes_cts_vect4_ctx[] = {
2011 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2012 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2013 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
2014 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
2015 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2016 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5,
2017};
2018
2019#define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key
2020#define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv
2021static const uint8_t ciph_data_aes_cts_vect5_ptx[] = {
2022 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2023 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2024 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2025 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2026 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2027 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2028};
2029
2030static const uint8_t ciph_data_aes_cts_vect5_ctx[] = {
2031 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2032 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2033 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2034 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2035 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2036 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2037};
2038
2039#define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key
2040#define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv
2041static const uint8_t ciph_data_aes_cts_vect6_ptx[] = {
2042 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2043 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2044 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2045 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2046 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2047 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2048 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74,
2049 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e,
2050};
2051
2052static const uint8_t ciph_data_aes_cts_vect6_ctx[] = {
2053 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2054 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2055 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2056 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2057 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
2058 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
2059 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2060 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2061};
2062
Jerome Forissiered00e162017-01-20 09:22:52 +01002063/*
2064 * Test case for https://github.com/OP-TEE/optee_os/issues/1203
2065 * 80 bytes of data, processed in two steps (32 + 48).
2066 */
2067
2068#define ciph_data_aes_cts_issue1203_key ciph_data_aes_cts_vect1_key
2069
2070static const uint8_t ciph_data_aes_cts_issue1203_iv[] = {
2071 0x5b, 0x11, 0x7b, 0xf9, 0x83, 0x6a, 0x01, 0x27,
2072 0x1d, 0x2a, 0xae, 0x0a, 0xd3, 0x27, 0x35, 0x81,
2073};
2074
2075static const uint8_t ciph_data_aes_cts_issue1203_ptx[] = {
2076 0x33, 0x2a, 0xf4, 0x8c, 0x18, 0xa1, 0x30, 0x7c,
2077 0xa7, 0x52, 0x76, 0xca, 0xa6, 0x68, 0xad, 0xf6,
2078 0x1e, 0xba, 0xc9, 0x66, 0x66, 0x52, 0x1a, 0xe7,
2079 0x3e, 0xbc, 0xba, 0x60, 0x95, 0x71, 0x04, 0x5e,
2080 0xb4, 0xb7, 0x10, 0xd7, 0x93, 0x6d, 0x5f, 0x9a,
2081 0xb8, 0xbb, 0x6b, 0xb0, 0x6d, 0x47, 0x93, 0x41,
2082 0x29, 0x21, 0xf2, 0x84, 0xf5, 0xb2, 0xf2, 0x6d,
2083 0xbe, 0xe5, 0x8a, 0x2b, 0x58, 0x8d, 0x1b, 0x5e,
2084 0x41, 0x04, 0xba, 0x9e, 0x92, 0xe9, 0x52, 0xb6,
2085 0x8b, 0x1e, 0x36, 0x72, 0x91, 0xe4, 0x56, 0x66,
2086};
2087
2088/*
2089 * Ciphertext was generated by an online tool for AES CBC.
2090 * Since the input size is a multiple of the block size, and the ciphertext
2091 * format is CS3, the output is the same as plain AES CBC with the last
2092 * two blocks swapped.
2093 */
2094static const uint8_t ciph_data_aes_cts_issue1203_ctx[] = {
2095 0x6c, 0xfe, 0xef, 0x6a, 0x1c, 0x8f, 0xd3, 0xc3,
2096 0x66, 0xc4, 0xd9, 0x0e, 0xbe, 0x24, 0x17, 0x3f,
2097 0xcd, 0x19, 0xc9, 0xd2, 0x10, 0x3f, 0xcf, 0xdc,
2098 0xe9, 0x05, 0xab, 0xd5, 0x1a, 0x31, 0x41, 0x77,
2099 0x3b, 0xd7, 0x6a, 0x26, 0xae, 0x0d, 0xc9, 0x47,
2100 0x77, 0xd4, 0xa7, 0xd5, 0x73, 0x88, 0x9e, 0xde,
2101 0x72, 0x66, 0xe0, 0xe2, 0x3d, 0x62, 0x91, 0x22,
2102 0xae, 0x11, 0x01, 0x97, 0x22, 0x6a, 0x45, 0xa9,
2103 0xba, 0x56, 0xd2, 0xbc, 0x55, 0x2d, 0x99, 0x4d,
2104 0x3d, 0x22, 0x27, 0x9a, 0xac, 0x66, 0x2f, 0xf5,
2105};
2106
Pascal Brandc639ac82015-07-02 08:53:34 +02002107static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2108 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2109 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2110 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2111 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2112 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2113 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2114};
2115
2116static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2117 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2118};
2119
2120static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2121 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2122 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2123 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2124 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2125 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2126 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2127};
2128
2129static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2130 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2131 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2132 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2133 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2134 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2135 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2136};
2137
2138static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2139 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2140 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2141 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2142 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2143 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2144 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2145};
2146
2147static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2148 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2149 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2150 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2151 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2152 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2153 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2154};
2155
2156static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2157 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2158 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2159 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2160 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2161 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2162 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2163};
2164
2165struct xtest_ciph_case {
2166 uint32_t algo;
2167 uint32_t mode;
2168 uint32_t key_type;
2169 const uint8_t *key1;
2170 size_t key1_len;
2171 const uint8_t *key2;
2172 size_t key2_len;
2173 const uint8_t *iv;
2174 size_t iv_len;
2175 size_t in_incr;
2176 const uint8_t *in;
2177 size_t in_len;
2178 const uint8_t *out;
2179 size_t out_len;
2180 size_t line;
2181};
2182
2183#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2184 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2185 NULL, 0, NULL, 0, \
2186 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2187 __LINE__ }, \
2188 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2189 NULL, 0, NULL, 0, \
2190 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2191
2192#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2193 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2194 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2195 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2196 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2197 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2198 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2199
2200#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2201 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2202 ciph_data_aes_xts_ ## vect ## _key1, \
2203 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2204 ciph_data_aes_xts_ ## vect ## _key2, \
2205 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2206 ciph_data_aes_xts_ ## vect ## _iv, \
2207 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2208 (in_incr), \
2209 ciph_data_aes_xts_ ## vect ## _ptx, \
2210 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2211 ciph_data_aes_xts_ ## vect ## _ctx, \
2212 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2213 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2214 ciph_data_aes_xts_ ## vect ## _key1, \
2215 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2216 ciph_data_aes_xts_ ## vect ## _key2, \
2217 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2218 ciph_data_aes_xts_ ## vect ## _iv, \
2219 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2220 (in_incr), \
2221 ciph_data_aes_xts_ ## vect ## _ctx, \
2222 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2223 ciph_data_aes_xts_ ## vect ## _ptx, \
2224 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2225
2226#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2227 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2228 ciph_data_aes_cbc_ ## vect ## _key, \
2229 ciph_data_aes_cbc_ ## vect ## _iv, \
2230 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2231 ciph_data_aes_cbc_ ## vect ## _ctx)
2232
2233#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2234 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2235 ciph_data_aes_cts_ ## vect ## _key, \
2236 ciph_data_aes_cts_ ## vect ## _iv, \
2237 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2238 ciph_data_aes_cts_ ## vect ## _ctx)
2239
2240static const struct xtest_ciph_case ciph_cases[] = {
2241 /* AES */
2242 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2243 ciph_data_aes_key1, 11, ciph_data_in1,
2244 ciph_data_aes_ecb_nopad_out1),
2245 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2246 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2247 ciph_data_in1,
2248 ciph_data_aes_cbc_nopad_out1),
2249 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2250 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2251 ciph_data_in1,
2252 ciph_data_aes_ctr_out1),
2253 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2254 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2255 ciph_data_in3,
2256 ciph_data_aes_ctr_out2),
Jens Wiklander692efd12018-01-19 09:52:00 +01002257 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2258 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2259 ciph_data_in3,
2260 ciph_data_aes_ctr_out2),
Jerome Forissier45218eb2018-04-11 13:03:26 +02002261 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2262 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2263 ciph_data_in4,
2264 ciph_data_aes_ctr_out4),
Jerome Forissier0780ad42018-06-05 15:02:37 +02002265 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2266 ciph_data_aes_key2, ciph_data_128_iv2, 11,
2267 ciph_data_in5,
2268 ciph_data_aes_ctr_out5),
Pascal Brandc639ac82015-07-02 08:53:34 +02002269
2270 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
2271
2272 /* AES-CTS */
2273 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2274 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2275 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2276 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2277 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2278 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2279 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
Jerome Forissiered00e162017-01-20 09:22:52 +01002280 XTEST_CIPH_CASE_AES_CTS(issue1203, 32),
Pascal Brandc639ac82015-07-02 08:53:34 +02002281
2282 /* DES */
2283 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2284 ciph_data_des_key1, 14, ciph_data_in1,
2285 ciph_data_des_ecb_nopad_out1),
2286 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2287 ciph_data_des_key2, 3, ciph_data_in2,
2288 ciph_data_des_ecb_nopad_out2),
2289 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2290 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2291 ciph_data_des_cbc_nopad_out1),
2292
2293 /* DES3 */
2294 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2295 ciph_data_des3_key1, 11, ciph_data_in1,
2296 ciph_data_des3_ecb_nopad_out1),
2297 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2298 ciph_data_des3_key2, 3, ciph_data_in2,
2299 ciph_data_des_ecb_nopad_out2),
2300 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2301 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2302 ciph_data_in1,
2303 ciph_data_des3_cbc_nopad_out1),
2304
2305 /* DES2 */
2306 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2307 ciph_data_des2_key1, 11, ciph_data_in1,
2308 ciph_data_des2_ecb_nopad_out1),
2309 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2310 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2311 ciph_data_in1,
2312 ciph_data_des2_cbc_nopad_out1),
Pascal Brandc639ac82015-07-02 08:53:34 +02002313
Pascal Brandc639ac82015-07-02 08:53:34 +02002314 /* AES-XTS */
2315 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2316 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2317 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2318 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2319 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2320 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2321 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2322 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2323 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2324 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2325 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2326 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2327 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2328 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2329 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2330 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2331 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2332 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2333 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
2334};
2335
Jerome Forissier23256842018-02-16 09:25:35 +01002336static void xtest_tee_test_4003(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02002337{
2338 TEEC_Session session = { 0 };
2339 TEE_OperationHandle op;
2340 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2341 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2342 uint8_t out[2048];
2343 size_t out_size;
2344 size_t out_offs;
2345 uint32_t ret_orig;
2346 size_t n;
2347
2348 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2349 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2350 &ret_orig)))
2351 return;
2352
2353 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
2354 TEE_Attribute key_attr;
2355 size_t key_size;
2356 size_t op_key_size;
2357
2358
2359 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2360 (int)n, (unsigned int)ciph_cases[n].algo,
2361 (int)ciph_cases[n].line);
2362
2363 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2364 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2365 key_attr.content.ref.length = ciph_cases[n].key1_len;
2366
2367 key_size = key_attr.content.ref.length * 8;
2368 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2369 ciph_cases[n].key_type == TEE_TYPE_DES3)
2370 /* Exclude parity in bit size of key */
2371 key_size -= key_size / 8;
2372
2373 op_key_size = key_size;
2374 if (ciph_cases[n].key2 != NULL)
2375 op_key_size *= 2;
2376
2377 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2378 ta_crypt_cmd_allocate_operation(c, &session, &op,
2379 ciph_cases[n].algo, ciph_cases[n].mode,
2380 op_key_size)))
2381 goto out;
2382
2383 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2384 ta_crypt_cmd_allocate_transient_object(c, &session,
2385 ciph_cases[n].key_type, key_size,
2386 &key1_handle)))
2387 goto out;
2388
2389 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2390 ta_crypt_cmd_populate_transient_object(c, &session,
2391 key1_handle, &key_attr, 1)))
2392 goto out;
2393
2394 if (ciph_cases[n].key2 != NULL) {
2395 key_attr.content.ref.buffer =
2396 (void *)ciph_cases[n].key2;
2397 key_attr.content.ref.length = ciph_cases[n].key2_len;
2398
2399 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2400 ta_crypt_cmd_allocate_transient_object(c,
2401 &session, ciph_cases[n].key_type,
2402 key_attr.content.ref.length * 8,
2403 &key2_handle)))
2404 goto out;
2405
2406 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2407 ta_crypt_cmd_populate_transient_object(c,
2408 &session, key2_handle, &key_attr, 1)))
2409 goto out;
2410
2411 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2412 ta_crypt_cmd_set_operation_key2(c, &session, op,
2413 key1_handle, key2_handle)))
2414 goto out;
2415 } else {
2416 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2417 ta_crypt_cmd_set_operation_key(c, &session, op,
2418 key1_handle)))
2419 goto out;
2420 }
2421
2422 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2423 ta_crypt_cmd_free_transient_object(c, &session,
2424 key1_handle)))
2425 goto out;
2426 key1_handle = TEE_HANDLE_NULL;
2427
2428 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2429 ta_crypt_cmd_free_transient_object(c, &session,
2430 key2_handle)))
2431 goto out;
2432 key2_handle = TEE_HANDLE_NULL;
2433
2434 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2435 ta_crypt_cmd_cipher_init(c, &session, op,
2436 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2437 goto out;
2438
2439 out_offs = 0;
2440 out_size = sizeof(out);
2441 memset(out, 0, sizeof(out));
2442 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2443 ta_crypt_cmd_cipher_update(c, &session, op,
2444 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2445 &out_size)))
2446 goto out;
2447
Jerome Forissierd2d94b42017-06-02 16:39:34 +02002448 if (ciph_cases[n].algo == TEE_ALG_AES_CTR)
2449 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
2450 ciph_cases[n].in_incr);
2451
Pascal Brandc639ac82015-07-02 08:53:34 +02002452 out_offs += out_size;
2453 out_size = sizeof(out) - out_offs;
2454
2455 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2456 ta_crypt_cmd_cipher_do_final(c, &session, op,
2457 ciph_cases[n].in + ciph_cases[n].in_incr,
2458 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2459 out + out_offs,
2460 &out_size)))
2461 goto out;
2462
2463 out_offs += out_size;
2464
2465 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2466 ciph_cases[n].out_len, out, out_offs);
2467
2468 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2469 ta_crypt_cmd_free_operation(c, &session, op)))
2470 goto out;
2471
2472 Do_ADBG_EndSubCase(c, NULL);
2473 }
2474out:
2475 TEEC_CloseSession(&session);
2476}
2477
Pascal Brandc639ac82015-07-02 08:53:34 +02002478static void xtest_tee_test_4004(ADBG_Case_t *c)
2479{
2480 TEEC_Session session = { 0 };
2481 uint32_t ret_orig;
2482 uint8_t buf1[45] = { 0 };
2483 uint8_t buf2[45] = { 0 };
2484 static const uint8_t zeros[45] = { 0 };
2485
2486 Do_ADBG_BeginSubCase(c, "TEE get random");
2487 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2488 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2489 &ret_orig)))
2490 return;
2491
2492 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2493 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2494 sizeof(buf1))))
2495 goto out;
2496
2497 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2498 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2499
2500 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2501 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2502 sizeof(buf2))))
2503 goto out;
2504
2505 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2506 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2507
2508 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2509 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2510out:
2511 TEEC_CloseSession(&session);
2512 Do_ADBG_EndSubCase(c, "TEE get random");
2513}
2514
2515
2516struct xtest_ae_case {
2517 uint32_t algo;
2518 uint32_t mode;
2519 uint32_t key_type;
2520 const uint8_t *key;
2521 size_t key_len;
2522 const uint8_t *nonce;
2523 size_t nonce_len;
2524 size_t aad_incr;
2525 const uint8_t *aad;
2526 size_t aad_len;
2527 size_t in_incr;
2528 const uint8_t *ptx;
2529 size_t ptx_len;
2530 const uint8_t *ctx;
2531 size_t ctx_len;
2532 const uint8_t *tag;
2533 size_t tag_len;
2534 size_t line;
2535};
2536
2537
2538#define ARRAY(a) a, ARRAY_SIZE(a)
2539#define NULL_ARRAY(a) NULL, 0
2540
2541#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2542 aad_array, ptx_array, ctx_array) \
2543 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2544 ARRAY(vect ## _nonce), (aad_incr), \
2545 aad_array(vect ## _aad), (in_incr), \
2546 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2547 ARRAY(vect ## _tag), \
2548 __LINE__ }, \
2549 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2550 ARRAY(vect ## _nonce), (aad_incr), \
2551 aad_array(vect ## _aad), (in_incr), \
2552 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2553 ARRAY(vect ## _tag), \
2554 __LINE__ }
2555
2556#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2557 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2558 in_incr, ARRAY, ARRAY, ARRAY)
2559
2560#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2561 aad_array, ptx_array, ctx_array) \
2562 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2563 in_incr, aad_array, ptx_array, ctx_array)
2564
2565
2566
2567static const struct xtest_ae_case ae_cases[] = {
2568 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2569 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2570 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2571
2572 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2573 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2574 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
Jens Wiklander9fc63f52017-11-10 11:13:26 +01002575 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY),
2576 XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY),
Pascal Brandc639ac82015-07-02 08:53:34 +02002577 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2578 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2579 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2580 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2581 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2582 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2583 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2584 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2585 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2586 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2587 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2588 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2589 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2590 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
Jens Wiklanderf6efe242017-11-06 13:16:43 +01002591#ifdef CFG_GCM_NIST_VECTORS
2592#include "gcmDecrypt128.h"
2593#include "gcmDecrypt192.h"
2594#include "gcmDecrypt256.h"
2595#include "gcmEncryptExtIV128.h"
2596#include "gcmEncryptExtIV192.h"
2597#include "gcmEncryptExtIV256.h"
2598#endif
Pascal Brandc639ac82015-07-02 08:53:34 +02002599};
2600
2601static void xtest_tee_test_4005(ADBG_Case_t *c)
2602{
2603 TEEC_Session session = { 0 };
2604 TEE_OperationHandle op;
2605 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
2606 TEE_Attribute key_attr;
2607 uint8_t out[512];
2608 size_t out_size;
2609 size_t out_offs;
2610 uint32_t ret_orig;
2611 size_t n;
2612
2613 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2614 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2615 &ret_orig)))
2616 return;
2617
2618 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2619 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2620 (int)n, (unsigned int)ae_cases[n].algo,
2621 (int)ae_cases[n].line);
2622
2623 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2624 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2625 key_attr.content.ref.length = ae_cases[n].key_len;
2626
2627 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2628 ta_crypt_cmd_allocate_operation(c, &session, &op,
2629 ae_cases[n].algo, ae_cases[n].mode,
2630 key_attr.content.ref.length * 8)))
2631 goto out;
2632
2633 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2634 ta_crypt_cmd_allocate_transient_object(c, &session,
2635 ae_cases[n].key_type,
2636 key_attr.content.ref.length * 8,
2637 &key_handle)))
2638 goto out;
2639
2640 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2641 ta_crypt_cmd_populate_transient_object(c, &session,
2642 key_handle, &key_attr, 1)))
2643 goto out;
2644
2645 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2646 ta_crypt_cmd_set_operation_key(c, &session, op,
2647 key_handle)))
2648 goto out;
2649
2650 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2651 ta_crypt_cmd_free_transient_object(c, &session,
2652 key_handle)))
2653 goto out;
2654 key_handle = TEE_HANDLE_NULL;
2655
2656 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2657 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2658 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2659 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2660 goto out;
2661
2662 if (ae_cases[n].aad != NULL) {
2663 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2664 ta_crypt_cmd_ae_update_aad(c, &session, op,
2665 ae_cases[n].aad, ae_cases[n].aad_incr)))
2666 goto out;
2667
2668 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2669 ta_crypt_cmd_ae_update_aad(c, &session, op,
2670 ae_cases[n].aad + ae_cases[n].aad_incr,
2671 ae_cases [n].aad_len -
2672 ae_cases[n].aad_incr)))
2673 goto out;
2674 }
2675
2676 out_offs = 0;
2677 out_size = sizeof(out);
2678 memset(out, 0, sizeof(out));
2679 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2680 if (ae_cases[n].ptx != NULL) {
2681 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2682 ta_crypt_cmd_ae_update(c, &session, op,
2683 ae_cases[n].ptx,
2684 ae_cases[n].in_incr, out,
2685 &out_size)))
2686 goto out;
2687 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002688 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2689 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2690 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002691 }
2692 } else {
2693 if (ae_cases[n].ctx != NULL) {
2694 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2695 ta_crypt_cmd_ae_update(c, &session, op,
2696 ae_cases[n].ctx,
2697 ae_cases[n].in_incr, out,
2698 &out_size)))
2699 goto out;
2700 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002701 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2702 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2703 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002704 }
2705 }
2706
2707 out_size = sizeof(out) - out_offs;
2708 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2709 uint8_t out_tag[64];
2710 size_t out_tag_len = MIN(sizeof(out_tag),
2711 ae_cases[n].tag_len);
2712
2713 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2714 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2715 ae_cases[n].ptx + ae_cases[n].in_incr,
2716 ae_cases[n].ptx_len -
2717 ae_cases[n].in_incr,
2718 out + out_offs,
2719 &out_size, out_tag, &out_tag_len)))
2720 goto out;
2721
2722 (void)ADBG_EXPECT_BUFFER(c,
2723 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2724 out_tag_len);
2725
2726 out_offs += out_size;
2727
2728 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2729 ae_cases[n].ctx_len, out, out_offs);
2730 } else {
2731 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2732 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2733 ae_cases[n].ctx + ae_cases[n].in_incr,
2734 ae_cases[n].ctx_len -
2735 ae_cases[n].in_incr,
2736 out + out_offs,
2737 &out_size, ae_cases[n].tag,
2738 ae_cases[n].tag_len)))
2739 goto out;
2740
2741 out_offs += out_size;
2742
2743 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2744 ae_cases[n].ptx_len, out, out_offs);
2745 }
2746
2747 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2748 ta_crypt_cmd_free_operation(c, &session, op)))
2749 goto out;
2750
2751 Do_ADBG_EndSubCase(c, NULL);
2752 }
2753out:
2754 TEEC_CloseSession(&session);
2755}
2756
2757struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002758 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002759 uint32_t algo;
2760 TEE_OperationMode mode;
2761
2762 union {
2763 struct {
2764 const uint8_t *modulus;
2765 size_t modulus_len;
2766
2767 const uint8_t *pub_exp;
2768 size_t pub_exp_len;
2769
2770 const uint8_t *priv_exp;
2771 size_t priv_exp_len;
2772
2773 const uint8_t *prime1; /* q */
2774 size_t prime1_len;
2775 const uint8_t *prime2; /* p */
2776 size_t prime2_len;
2777 const uint8_t *exp1; /* dp */
2778 size_t exp1_len;
2779 const uint8_t *exp2; /* dq */
2780 size_t exp2_len;
2781 const uint8_t *coeff; /* iq */
2782 size_t coeff_len;
2783
2784 int salt_len;
2785 } rsa;
2786 struct {
2787 const uint8_t *prime;
2788 size_t prime_len;
2789 const uint8_t *sub_prime;
2790 size_t sub_prime_len;
2791 const uint8_t *base;
2792 size_t base_len;
2793 const uint8_t *pub_val;
2794 size_t pub_val_len;
2795 const uint8_t *priv_val;
2796 size_t priv_val_len;
2797 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002798 struct {
2799 const uint8_t *private;
2800 size_t private_len;
2801 const uint8_t *public_x;
2802 size_t public_x_len;
2803 const uint8_t *public_y;
2804 size_t public_y_len;
2805 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002806 } params;
2807
2808 const uint8_t *ptx;
2809 size_t ptx_len;
2810 const uint8_t *ctx;
2811 size_t ctx_len;
2812 size_t line;
2813};
2814
2815#define WITHOUT_SALT(x) -1
2816#define WITH_SALT(x) x
2817
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002818#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2819 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002820 ARRAY(vect ## _ptx), \
2821 ARRAY(vect ## _out), \
2822 __LINE__ }
2823
2824#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2825 { .rsa = { \
2826 ARRAY(vect ## _modulus), \
2827 ARRAY(vect ## _pub_exp), \
2828 ARRAY(vect ## _priv_exp), \
2829 opt_crt_array(vect ## _prime1), \
2830 opt_crt_array(vect ## _prime2), \
2831 opt_crt_array(vect ## _exp1), \
2832 opt_crt_array(vect ## _exp2), \
2833 opt_crt_array(vect ## _coeff), \
2834 opt_salt(vect ## _salt_len) \
2835 } }
2836
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002837#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2838 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002839 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2840
2841#define XTEST_AC_DSA_UNION(vect) \
2842 { .dsa = { \
2843 ARRAY(vect ## _prime), \
2844 ARRAY(vect ## _sub_prime), \
2845 ARRAY(vect ## _base), \
2846 ARRAY(vect ## _pub_val), \
2847 ARRAY(vect ## _priv_val), \
2848 } }
2849
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002850#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
2851 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02002852
Pascal Brand3e143ee2015-07-15 17:17:16 +02002853#define XTEST_AC_ECDSA_UNION(vect) \
2854 { .ecdsa = { \
2855 ARRAY(vect ## _private), \
2856 ARRAY(vect ## _public_x), \
2857 ARRAY(vect ## _public_y), \
2858 } }
2859
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002860#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
2861 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02002862
Pascal Brandc639ac82015-07-02 08:53:34 +02002863static const struct xtest_ac_case xtest_ac_cases[] = {
2864 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002865 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002866 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002867 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002868 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002869 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002870 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002871 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002872 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jerome Forissiere576f052018-03-23 21:24:21 +08002873 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
2874 ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT),
2875 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
2876 ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT),
Jerome Forissier0451e372018-03-27 00:10:23 +08002877 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
2878 ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT),
2879 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
2880 ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002881 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002882 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002883 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002884 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002885 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002886 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002887 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002888 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002889 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002890 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002891 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002892 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002893 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002894 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002895 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002896 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002897 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002898 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002899 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002900 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002901 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
2902 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
2903 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
2904 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02002905
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002906 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002907 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002908 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002909 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002910
2911 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002912 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002913 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002914 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002915
2916 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002917 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002918 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002919 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002920
2921 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002922 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002923 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002924 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
2925
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002926 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
2927 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002928 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002929 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002930 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002931
2932 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2933 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002934 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002935 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2936 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002937 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002938
2939 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2940 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002941 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002942 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2943 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002944 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002945
2946 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2947 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002948 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002949 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2950 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002951 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002952
2953 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2954 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002955 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002956 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2957 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002958 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
2959
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002960 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002961 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002962 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002963 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002964 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002965 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002966 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002967 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002968 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002969 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002970 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002971 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
2972
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002973 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2974 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002975 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002976 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2977 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002978 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002979 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2980 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002981 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002982 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2983 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002984 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002985 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2986 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002987 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002988 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2989 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002990 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
2991
2992 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002993 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002994 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002995 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002996 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002997 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002998 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002999 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003000 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003001 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003002 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003003 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003004 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003005 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003006 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003007 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003008 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003009 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003010 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003011 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003012 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003013 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003014 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003015 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003016 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003017 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003018 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003019 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003020 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003021 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003022 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003023 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003024 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003025 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003026 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003027 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003028 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003029 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003030 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003031 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003032 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003033 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003034 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003035 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003036 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
3037
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003038 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3039 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003040 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003041 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003042 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003043 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3044 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003045 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003046 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3047 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003048 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003049 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3050 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003051 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003052 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3053 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003054 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003055 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3056 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003057 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003058 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3059 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003060 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003061 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3062 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003063 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003064 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3065 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003066 ac_rsassa_vect15, ARRAY, WITH_SALT),
3067
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003068 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003069 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003070 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003071 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003072 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003073 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003074 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003075 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003076 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003077 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003078 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003079 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3080
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003081 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3082 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003083 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003084 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3085 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003086 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003087 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3088 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003089 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003090 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3091 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003092 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003093 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3094 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003095 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003096 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3097 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003098 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3099
3100 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003101 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003102 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3103 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003104 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3105 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3106 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3107 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3108 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3109 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3110 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3111 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3112 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3113 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3114 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3115 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3116 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3117 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3118 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3119 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3120 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3121 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3122 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3123 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3124 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3125 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3126 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3127 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3128 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3129 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3130 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3131 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003132 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3133 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3134 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3135 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3136 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3137 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003138 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3139 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003140 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3141 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3142 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3143 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3144 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3145 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3146 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3147 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3148 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3149 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3150 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3151 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3152 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3153 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3154 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3155 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3156 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3157 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3158 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3159 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3160 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3161 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3162 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3163 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3164 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3165 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3166 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3167 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003168 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003169 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3170 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3171 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3172 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3173 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3174 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3175 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3176 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3177 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3178 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3179 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3180 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3181 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3182 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3183 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3184 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3185 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3186 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3187 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3188 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3189 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3190 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3191 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3192 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3193 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3194 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3195 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3196 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3197 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3198 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003199 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3200 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3201 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3202 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003203 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3204 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003205 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3206 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3207 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3208 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3209 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3210 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3211 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3212 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3213 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3214 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3215 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3216 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3217 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3218 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3219 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3220 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3221 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3222 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3223 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3224 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3225 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3226 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3227 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3228 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3229 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3230 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3231 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3232 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003233 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003234 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3235 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003236 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3237 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3238 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3239 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3240 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3241 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3242 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3243 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3244 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3245 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3246 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3247 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3248 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3249 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3250 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3251 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3252 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3253 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3254 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3255 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3256 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3257 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3258 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3259 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3260 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3261 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3262 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3263 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003264 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3265 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3266 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3267 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3268 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003269 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3270 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003271 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3272 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3273 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3274 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3275 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3276 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3277 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3278 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3279 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3280 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3281 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3282 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3283 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3284 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3285 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3286 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3287 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3288 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3289 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3290 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3291 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3292 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3293 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3294 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3295 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3296 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3297 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3298 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003299 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3300 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003301
3302 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003303 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003304 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003305 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003306 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003307 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003308 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003309 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003310 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003311 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003312 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003313 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003314 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003315 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003316 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003317 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003318 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003319 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003320 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003321 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003322 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003323 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003324 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003325 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003326 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003327 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003328 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003329 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003330 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003331 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003332 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003333 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003334 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003335 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003336 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003337 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003338 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003339 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003340 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003341 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003342 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003343 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003344 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003345 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003346 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003347 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003348 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003349 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003350 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003351 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003352 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003353 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003354 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003355 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003356 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003357 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003358 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003359 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003360 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003361 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003362 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003363 nist_186_2_ecdsa_testvector_15),
3364 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003365 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003366 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003367 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003368 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003369 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003370 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003371 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003372 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003373 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003374 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003375 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003376 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003377 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003378 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003379 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003380 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003381 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003382 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003383 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003384 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003385 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003386 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003387 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003388 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003389 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003390 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003391 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003392 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003393 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003394 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003395 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003396 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003397 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003398 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003399 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003400 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003401 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003402 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003403 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003404 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003405 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003406 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003407 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003408 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003409 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003410 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003411 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003412 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003413 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003414 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003415 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003416 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003417 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003418 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003419 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003420 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003421 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003422 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003423 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003424 nist_186_2_ecdsa_testvector_30),
3425 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003426 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003427 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003428 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003429 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003430 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003431 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003432 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003433 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003434 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003435 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003436 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003437 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003438 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003439 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003440 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003441 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003442 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003443 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003444 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003445 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003446 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003447 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003448 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003449 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003450 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003451 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003452 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003453 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003454 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003455 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003456 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003457 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003458 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003459 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003460 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003461 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003462 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003463 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003464 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003465 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003466 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003467 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003468 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003469 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003470 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003471 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003472 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003473 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003474 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003475 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003476 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003477 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003478 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003479 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003480 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003481 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003482 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003483 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003484 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003485 nist_186_2_ecdsa_testvector_45),
3486 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003487 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003488 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003489 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003490 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003491 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003492 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003493 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003494 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003495 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003496 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003497 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003498 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003499 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003500 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003501 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003502 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003503 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003504 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003505 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003506 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003507 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003508 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003509 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003510 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003511 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003512 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003513 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003514 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003515 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003516 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003517 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003518 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003519 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003520 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003521 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003522 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003523 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003524 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003525 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003526 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003527 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003528 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003529 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003530 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003531 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003532 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003533 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003534 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003535 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003536 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003537 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003538 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003539 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003540 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003541 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003542 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003543 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003544 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003545 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003546 nist_186_2_ecdsa_testvector_60),
3547 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003548 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003549 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003550 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003551 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003552 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003553 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003554 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003555 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003556 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003557 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003558 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003559 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003560 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003561 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003562 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003563 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003564 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003565 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003566 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003567 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003568 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003569 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003570 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003571 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003572 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003573 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003574 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003575 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003576 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003577 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003578 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003579 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003580 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003581 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003582 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003583 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003584 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003585 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003586 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003587 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003588 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003589 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003590 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003591 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003592 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003593 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003594 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003595 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003596 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003597 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003598 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003599 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003600 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003601 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003602 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003603 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003604 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003605 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003606 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003607 nist_186_2_ecdsa_testvector_75),
3608 /* [K-163] - GP NOT SUPPORTED */
3609 /* [K-233] - GP NOT SUPPORTED */
3610 /* [K-283] - GP NOT SUPPORTED */
3611 /* [K-409] - GP NOT SUPPORTED */
3612 /* [K-571] - GP NOT SUPPORTED */
3613 /* [B-163] - GP NOT SUPPORTED */
3614 /* [B-233] - GP NOT SUPPORTED */
3615 /* [B-283] - GP NOT SUPPORTED */
3616 /* [B-409] - GP NOT SUPPORTED */
3617 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003618};
3619
3620static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3621 uint32_t max_key_size, uint32_t key_type,
3622 TEE_Attribute *attrs, size_t num_attrs,
3623 TEE_ObjectHandle *handle)
3624{
3625 size_t n;
3626
3627 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3628 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3629 max_key_size, handle)))
3630 return false;
3631
3632 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3633 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3634 num_attrs)))
3635 return false;
3636
3637 for (n = 0; n < num_attrs; n++) {
Jerome Forissier0451e372018-03-27 00:10:23 +08003638 uint8_t out[512];
Pascal Brandc639ac82015-07-02 08:53:34 +02003639 size_t out_size;
3640
3641 out_size = sizeof(out);
3642 memset(out, 0, sizeof(out));
Pascal Brand3e143ee2015-07-15 17:17:16 +02003643
3644 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3645 continue;
3646
Pascal Brandc639ac82015-07-02 08:53:34 +02003647 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3648 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3649 attrs[n].attributeID, out, &out_size)))
3650 return false;
3651
Pascal Brand3e143ee2015-07-15 17:17:16 +02003652 if (out_size < attrs[n].content.ref.length) {
3653 memmove(out + (attrs[n].content.ref.length - out_size),
3654 out,
3655 attrs[n].content.ref.length);
3656 memset(out, 0, attrs[n].content.ref.length - out_size);
3657 out_size = attrs[n].content.ref.length;
3658 }
3659
Pascal Brandc639ac82015-07-02 08:53:34 +02003660 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3661 attrs[n].content.ref.length, out, out_size))
3662 return false;
3663 }
3664
3665 return true;
3666}
3667
3668static void xtest_tee_test_4006(ADBG_Case_t *c)
3669{
3670 TEEC_Session session = { 0 };
3671 TEE_OperationHandle op = TEE_HANDLE_NULL;
3672 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3673 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
3674 TEE_Attribute key_attrs[8];
3675 TEE_Attribute algo_params[1];
3676 size_t num_algo_params;
3677 uint8_t out[512];
3678 size_t out_size;
3679 uint8_t out_enc[512];
3680 size_t out_enc_size;
3681 uint8_t ptx_hash[TEE_MAX_HASH_SIZE];
3682 size_t ptx_hash_size;
3683 size_t max_key_size;
3684 size_t num_key_attrs;
3685 uint32_t ret_orig;
3686 size_t n;
Pascal Brand3e143ee2015-07-15 17:17:16 +02003687 uint32_t curve;
3688 uint32_t hash_algo;
Pascal Brandc639ac82015-07-02 08:53:34 +02003689
3690 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3691 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3692 &ret_orig)))
3693 return;
3694
3695 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3696 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3697
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003698 if (tv->level > level)
3699 continue;
3700
Pascal Brandc639ac82015-07-02 08:53:34 +02003701 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3702 (int)n, (unsigned int)tv->algo,
3703 (int)tv->line);
3704
3705 /*
3706 * When signing or verifying we're working with the hash of
3707 * the payload.
3708 */
3709 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003710 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3711 hash_algo = TEE_ALG_SHA1;
3712 else
3713 hash_algo = TEE_ALG_HASH_ALGO(
3714 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003715
3716 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3717 ta_crypt_cmd_allocate_operation(c, &session,
3718 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3719 goto out;
3720
3721 ptx_hash_size = sizeof(ptx_hash);
3722 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3723 ta_crypt_cmd_digest_do_final(c, & session, op,
3724 tv->ptx, tv->ptx_len, ptx_hash,
3725 &ptx_hash_size)))
3726 goto out;
3727
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003728 /*
3729 * When we use DSA algorithms, the size of the hash we
3730 * consider equals the min between the size of the
3731 * "subprime" in the key and the size of the hash
3732 */
3733 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3734 TEE_MAIN_ALGO_DSA) {
3735 if (tv->params.dsa.sub_prime_len <=
3736 ptx_hash_size)
3737 ptx_hash_size =
3738 tv->params.dsa.sub_prime_len;
3739 }
3740
Pascal Brandc639ac82015-07-02 08:53:34 +02003741 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3742 ta_crypt_cmd_free_operation(c, &session, op)))
3743 goto out;
3744 }
3745
3746 num_algo_params = 0;
3747 num_key_attrs = 0;
3748 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3749 case TEE_MAIN_ALGO_RSA:
3750 if (tv->params.rsa.salt_len > 0) {
3751 algo_params[0].attributeID =
3752 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3753 algo_params[0].content.value.a =
3754 tv->params.rsa.salt_len;
3755 algo_params[0].content.value.b = 0;
3756 num_algo_params = 1;
3757 }
3758
3759 max_key_size = tv->params.rsa.modulus_len * 8;
3760
3761 xtest_add_attr(&num_key_attrs, key_attrs,
3762 TEE_ATTR_RSA_MODULUS,
3763 tv->params.rsa.modulus,
3764 tv->params.rsa.modulus_len);
3765 xtest_add_attr(&num_key_attrs, key_attrs,
3766 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3767 tv->params.rsa.pub_exp,
3768 tv->params.rsa.pub_exp_len);
3769
3770 if (!ADBG_EXPECT_TRUE(c,
3771 create_key(c, &session,
3772 max_key_size,
3773 TEE_TYPE_RSA_PUBLIC_KEY,
3774 key_attrs,
3775 num_key_attrs,
3776 &pub_key_handle)))
3777 goto out;
3778
3779 xtest_add_attr(&num_key_attrs, key_attrs,
3780 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3781 tv->params.rsa.priv_exp,
3782 tv->params.rsa.priv_exp_len);
3783
3784 if (tv->params.rsa.prime1_len != 0) {
3785 xtest_add_attr(&num_key_attrs, key_attrs,
3786 TEE_ATTR_RSA_PRIME1,
3787 tv->params.rsa.prime1,
3788 tv->params.rsa.prime1_len);
3789 }
3790
3791 if (tv->params.rsa.prime2_len != 0) {
3792 xtest_add_attr(&num_key_attrs, key_attrs,
3793 TEE_ATTR_RSA_PRIME2,
3794 tv->params.rsa.prime2,
3795 tv->params.rsa.prime2_len);
3796 }
3797
3798 if (tv->params.rsa.exp1_len != 0) {
3799 xtest_add_attr(&num_key_attrs, key_attrs,
3800 TEE_ATTR_RSA_EXPONENT1,
3801 tv->params.rsa.exp1,
3802 tv->params.rsa.exp1_len);
3803 }
3804
3805 if (tv->params.rsa.exp2_len != 0) {
3806 xtest_add_attr(&num_key_attrs, key_attrs,
3807 TEE_ATTR_RSA_EXPONENT2,
3808 tv->params.rsa.exp2,
3809 tv->params.rsa.exp2_len);
3810 }
3811
3812 if (tv->params.rsa.coeff_len != 0) {
3813 xtest_add_attr(&num_key_attrs, key_attrs,
3814 TEE_ATTR_RSA_COEFFICIENT,
3815 tv->params.rsa.coeff,
3816 tv->params.rsa.coeff_len);
3817 }
3818
3819 if (!ADBG_EXPECT_TRUE(c,
3820 create_key(c, &session,
3821 max_key_size,
3822 TEE_TYPE_RSA_KEYPAIR,
3823 key_attrs,
3824 num_key_attrs,
3825 &priv_key_handle)))
3826 goto out;
3827 break;
3828
3829 case TEE_MAIN_ALGO_DSA:
3830 max_key_size = tv->params.dsa.prime_len * 8;
3831
3832 xtest_add_attr(&num_key_attrs, key_attrs,
3833 TEE_ATTR_DSA_PRIME,
3834 tv->params.dsa.prime,
3835 tv->params.dsa.prime_len);
3836 xtest_add_attr(&num_key_attrs, key_attrs,
3837 TEE_ATTR_DSA_SUBPRIME,
3838 tv->params.dsa.sub_prime,
3839 tv->params.dsa.sub_prime_len);
3840 xtest_add_attr(&num_key_attrs, key_attrs,
3841 TEE_ATTR_DSA_BASE,
3842 tv->params.dsa.base,
3843 tv->params.dsa.base_len);
3844 xtest_add_attr(&num_key_attrs, key_attrs,
3845 TEE_ATTR_DSA_PUBLIC_VALUE,
3846 tv->params.dsa.pub_val,
3847 tv->params.dsa.pub_val_len);
3848
3849 if (!ADBG_EXPECT_TRUE(c,
3850 create_key(c, &session, max_key_size,
3851 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
3852 num_key_attrs, &pub_key_handle)))
3853 goto out;
3854
3855 xtest_add_attr(&num_key_attrs, key_attrs,
3856 TEE_ATTR_DSA_PRIVATE_VALUE,
3857 tv->params.dsa.priv_val,
3858 tv->params.dsa.priv_val_len);
3859
3860 if (!ADBG_EXPECT_TRUE(c,
3861 create_key(c, &session, max_key_size,
3862 TEE_TYPE_DSA_KEYPAIR, key_attrs,
3863 num_key_attrs, &priv_key_handle)))
3864 goto out;
3865 break;
3866
Pascal Brand3e143ee2015-07-15 17:17:16 +02003867 case TEE_MAIN_ALGO_ECDSA:
3868 switch (tv->algo) {
3869 case TEE_ALG_ECDSA_P192:
3870 curve = TEE_ECC_CURVE_NIST_P192;
3871 break;
3872 case TEE_ALG_ECDSA_P224:
3873 curve = TEE_ECC_CURVE_NIST_P224;
3874 break;
3875 case TEE_ALG_ECDSA_P256:
3876 curve = TEE_ECC_CURVE_NIST_P256;
3877 break;
3878 case TEE_ALG_ECDSA_P384:
3879 curve = TEE_ECC_CURVE_NIST_P384;
3880 break;
3881 case TEE_ALG_ECDSA_P521:
3882 curve = TEE_ECC_CURVE_NIST_P521;
3883 break;
3884 default:
3885 curve = 0xFF;
3886 break;
3887 }
3888
3889 if (tv->algo == TEE_ALG_ECDSA_P521)
3890 max_key_size = 521;
3891 else
3892 max_key_size = tv->params.ecdsa.private_len * 8;
3893
3894 xtest_add_attr_value(&num_key_attrs, key_attrs,
3895 TEE_ATTR_ECC_CURVE, curve, 0);
3896 xtest_add_attr(&num_key_attrs, key_attrs,
3897 TEE_ATTR_ECC_PUBLIC_VALUE_X,
3898 tv->params.ecdsa.public_x,
3899 tv->params.ecdsa.public_x_len);
3900 xtest_add_attr(&num_key_attrs, key_attrs,
3901 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
3902 tv->params.ecdsa.public_y,
3903 tv->params.ecdsa.public_y_len);
3904
3905 if (!ADBG_EXPECT_TRUE(c,
3906 create_key(c, &session, max_key_size,
3907 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
3908 num_key_attrs, &pub_key_handle)))
3909 goto out;
3910
3911 xtest_add_attr(&num_key_attrs, key_attrs,
3912 TEE_ATTR_ECC_PRIVATE_VALUE,
3913 tv->params.ecdsa.private,
3914 tv->params.ecdsa.private_len);
3915
3916 if (!ADBG_EXPECT_TRUE(c,
3917 create_key(c, &session, max_key_size,
3918 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
3919 num_key_attrs, &priv_key_handle)))
3920 goto out;
3921 break;
3922
Pascal Brandc639ac82015-07-02 08:53:34 +02003923 default:
3924 ADBG_EXPECT_TRUE(c, false);
3925 goto out;
3926 }
3927
3928 out_size = sizeof(out);
3929 memset(out, 0, sizeof(out));
3930 switch (tv->mode) {
3931 case TEE_MODE_ENCRYPT:
3932 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3933 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02003934 &op, tv->algo, TEE_MODE_ENCRYPT,
3935 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02003936 goto out;
3937
3938 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3939 ta_crypt_cmd_set_operation_key(c, &session, op,
3940 pub_key_handle)))
3941 goto out;
3942
3943 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3944 ta_crypt_cmd_free_transient_object(c, &session,
3945 pub_key_handle)))
3946 goto out;
3947 pub_key_handle = TEE_HANDLE_NULL;
3948
3949 out_enc_size = sizeof(out_enc);
3950 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3951 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
3952 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
3953 &out_enc_size)))
3954 goto out;
3955
3956 /*
3957 * A PS which is random is added when formatting the
3958 * message internally of the algorithm so we can't
3959 * verify against precomputed values, instead we use the
3960 * decrypt operation to see that output is correct.
3961 */
3962
3963 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3964 ta_crypt_cmd_free_operation(c, &session, op)))
3965 goto out;
3966
3967 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3968 ta_crypt_cmd_allocate_operation(c, &session,
3969 &op, tv->algo, TEE_MODE_DECRYPT,
3970 max_key_size)))
3971 goto out;
3972
3973 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3974 ta_crypt_cmd_set_operation_key(c, &session, op,
3975 priv_key_handle)))
3976 goto out;
3977
3978 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3979 ta_crypt_cmd_free_transient_object(c, &session,
3980 priv_key_handle)))
3981 goto out;
3982
3983 priv_key_handle = TEE_HANDLE_NULL;
3984
3985 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3986 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
3987 NULL, 0, out_enc, out_enc_size, out,
3988 &out_size)))
3989 goto out;
3990
3991 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
3992 out_size);
3993 break;
3994
3995 case TEE_MODE_DECRYPT:
3996 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3997 ta_crypt_cmd_allocate_operation(c, &session,
3998 &op, tv->algo, TEE_MODE_DECRYPT,
3999 max_key_size)))
4000 goto out;
4001
4002 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4003 ta_crypt_cmd_set_operation_key(c, &session, op,
4004 priv_key_handle)))
4005 goto out;
4006
4007 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4008 ta_crypt_cmd_free_transient_object(c, &session,
4009 priv_key_handle)))
4010 goto out;
4011
4012 priv_key_handle = TEE_HANDLE_NULL;
4013
4014 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4015 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4016 NULL, 0, tv->ctx, tv->ctx_len, out,
4017 &out_size)))
4018 goto out;
4019
4020 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4021 out_size);
4022 break;
4023
4024 case TEE_MODE_VERIFY:
4025 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4026 ta_crypt_cmd_allocate_operation(c, &session,
4027 &op, tv->algo, TEE_MODE_VERIFY,
4028 max_key_size)))
4029 goto out;
4030
4031 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4032 ta_crypt_cmd_set_operation_key(c, &session, op,
4033 pub_key_handle)))
4034 goto out;
4035
4036 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4037 ta_crypt_cmd_free_transient_object(c, &session,
4038 pub_key_handle)))
4039 goto out;
4040
4041 pub_key_handle = TEE_HANDLE_NULL;
4042
4043 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4044 ta_crypt_cmd_asymmetric_verify(c, &session, op,
4045 algo_params, num_algo_params, ptx_hash,
4046 ptx_hash_size, tv->ctx, tv->ctx_len)))
4047 goto out;
4048 break;
4049
4050 case TEE_MODE_SIGN:
4051 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4052 ta_crypt_cmd_allocate_operation(c, &session,
4053 &op, tv->algo, TEE_MODE_SIGN,
4054 max_key_size)))
4055 goto out;
4056
4057 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4058 ta_crypt_cmd_set_operation_key(c, &session, op,
4059 priv_key_handle)))
4060 goto out;
4061
4062 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4063 ta_crypt_cmd_free_transient_object(c, &session,
4064 priv_key_handle)))
4065 goto out;
4066
4067 priv_key_handle = TEE_HANDLE_NULL;
4068
4069 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4070 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4071 algo_params, num_algo_params, ptx_hash,
4072 ptx_hash_size, out, &out_size)))
4073 goto out;
4074
4075 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4076 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004077 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004078 tv->algo == TEE_ALG_DSA_SHA224 ||
4079 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004080 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4081 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004082 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4083 ta_crypt_cmd_free_operation(c, &session,
4084 op)))
4085 goto out;
4086 /*
4087 * The salt or K is random so we can't verify
4088 * signing against precomputed values, instead
4089 * we use the verify operation to see that
4090 * output is correct.
4091 */
4092 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4093 ta_crypt_cmd_allocate_operation(c,
4094 &session, &op, tv->algo,
4095 TEE_MODE_VERIFY, max_key_size)))
4096 goto out;
4097
4098 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4099 ta_crypt_cmd_set_operation_key(c,
4100 &session, op, pub_key_handle)))
4101 goto out;
4102
4103 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4104 ta_crypt_cmd_free_transient_object(c,
4105 &session, pub_key_handle)))
4106 goto out;
4107
4108 pub_key_handle = TEE_HANDLE_NULL;
4109
4110 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4111 ta_crypt_cmd_asymmetric_verify(c,
4112 &session, op, algo_params,
4113 num_algo_params, ptx_hash,
4114 ptx_hash_size, out, out_size)))
4115 goto out;
4116 } else {
4117 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4118 tv->ctx_len, out,
4119 out_size);
4120 }
4121 break;
4122
4123 default:
4124 break;
4125 }
4126
4127 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4128 ta_crypt_cmd_free_operation(c, &session, op)))
4129 goto out;
4130
4131 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4132 ta_crypt_cmd_free_transient_object(c, &session,
4133 pub_key_handle)))
4134 goto out;
4135 pub_key_handle = TEE_HANDLE_NULL;
4136
4137 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4138 ta_crypt_cmd_free_transient_object(c, &session,
4139 priv_key_handle)))
4140 goto out;
4141
4142 priv_key_handle = TEE_HANDLE_NULL;
4143
4144 Do_ADBG_EndSubCase(c, NULL);
4145 }
4146out:
4147 TEEC_CloseSession(&session);
4148}
4149
4150#define KEY_ATTR(x, y) { #x, (x), y }
4151
4152struct key_attrs {
4153 const char *name;
4154 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004155 /*
4156 * When keysize_check != 0: size of attribute is checked
4157 * Expected value is key_size bits except for DH in which case it is
4158 * the value of keysize_check.
4159 */
4160 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004161};
4162
4163static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4164 TEE_ObjectHandle key, uint32_t key_size,
4165 struct key_attrs *attrs, size_t num_attrs)
4166{
4167 uint8_t out[2048];
4168 size_t out_size;
4169 size_t n;
4170 size_t m;
4171
4172 for (m = 0; m < num_attrs; m++) {
4173 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4174 out_size = sizeof(out);
4175 memset(out, 0, sizeof(out));
4176 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4177 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4178 key, attrs[m].attr, out, &out_size)))
4179 return false;
4180
4181 if (attrs[m].keysize_check)
4182 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4183 key_size / 8);
4184
4185 if (out_size > 0) {
4186 /* Check that buffer isn't all zeroes */
4187 for (n = 0; n < out_size; n++)
4188 if (out[n] != 0)
4189 break;
4190 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4191 out_size))
4192 return false;
4193 }
4194 } else {
4195 uint32_t a;
4196 uint32_t b;
4197
4198 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4199 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4200 attrs[m].attr, &a, &b)))
4201 return false;
4202 }
4203 }
4204 return true;
4205}
4206
4207static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4208 TEE_ObjectHandle key, uint32_t key_size)
4209{
4210 const struct key_attrs attrs[] = {
4211 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4212 };
4213
4214 return test_keygen_attributes(c, s, key, key_size,
4215 (struct key_attrs *)&attrs,
4216 ARRAY_SIZE(attrs));
4217}
4218
4219
4220static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4221 TEE_ObjectHandle key, uint32_t key_size)
4222{
4223 const struct key_attrs attrs[] = {
4224 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4225 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4226 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4227 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4228 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4229 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4230 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4231 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4232 };
4233
4234 return test_keygen_attributes(c, s, key, key_size,
4235 (struct key_attrs *)&attrs,
4236 ARRAY_SIZE(attrs));
4237}
4238
Pascal Brande61133f2015-07-08 15:38:37 +02004239static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4240 TEE_ObjectHandle key, uint32_t key_size)
4241{
4242 const struct key_attrs attrs[] = {
4243 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4244 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4245 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4246 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4247 };
4248
4249 return test_keygen_attributes(c, s, key, key_size,
4250 (struct key_attrs *)&attrs,
4251 ARRAY_SIZE(attrs));
4252}
4253
Pascal Brandc639ac82015-07-02 08:53:34 +02004254static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004255 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004256{
4257 const struct key_attrs attrs[] = {
4258 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4259 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4260 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4261 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4262 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4263 };
4264
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004265 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004266 (struct key_attrs *)&attrs,
4267 ARRAY_SIZE(attrs));
4268}
4269
4270static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4271 TEE_ObjectHandle key, uint32_t key_size)
4272{
4273 const struct key_attrs attrs[] = {
4274 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4275 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4276 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4277 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4278 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4279 };
4280
4281 return test_keygen_attributes(c, s, key, key_size,
4282 (struct key_attrs *)&attrs,
4283 ARRAY_SIZE(attrs));
4284}
4285
4286static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4287 uint32_t key_type, uint32_t check_keysize,
4288 uint32_t key_size,
4289 TEE_Attribute *params, size_t param_count)
4290{
4291 TEE_ObjectHandle key;
4292 bool ret_val = true;
4293
4294 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4295 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4296 &key)))
4297 return false;
4298
4299 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4300 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4301 param_count)))
4302 return false;
4303
4304 switch (key_type) {
4305 case TEE_TYPE_DES:
4306 case TEE_TYPE_DES3:
4307 ret_val = ADBG_EXPECT_TRUE(c,
4308 test_secret_value(c, s, key,
4309 key_size + key_size / 7));
4310 break;
4311 case TEE_TYPE_AES:
4312 case TEE_TYPE_HMAC_MD5:
4313 case TEE_TYPE_HMAC_SHA1:
4314 case TEE_TYPE_HMAC_SHA224:
4315 case TEE_TYPE_HMAC_SHA256:
4316 case TEE_TYPE_HMAC_SHA384:
4317 case TEE_TYPE_HMAC_SHA512:
4318 case TEE_TYPE_GENERIC_SECRET:
4319 ret_val = ADBG_EXPECT_TRUE(c,
4320 test_secret_value(c, s, key, key_size));
4321 break;
4322
4323 case TEE_TYPE_RSA_KEYPAIR:
4324 ret_val = ADBG_EXPECT_TRUE(c,
4325 test_rsa_key_pair(c, s, key, key_size));
4326 break;
4327
Pascal Brande61133f2015-07-08 15:38:37 +02004328 case TEE_TYPE_ECDSA_KEYPAIR:
4329 case TEE_TYPE_ECDH_KEYPAIR:
4330 ret_val = ADBG_EXPECT_TRUE(c,
4331 test_ecc_key_pair(c, s, key, key_size));
4332 break;
4333
Pascal Brandc639ac82015-07-02 08:53:34 +02004334 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004335 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004336 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004337 break;
4338
4339 case TEE_TYPE_DSA_KEYPAIR:
4340 ret_val = ADBG_EXPECT_TRUE(c,
4341 test_dsa_key_pair(c, s, key, key_size));
4342 break;
4343
4344 default:
4345 ret_val = false;
4346 break;
4347 }
4348
4349 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4350 ta_crypt_cmd_free_transient_object(c, s, key)))
4351 return false;
4352
4353 return ret_val;
4354}
4355
4356static void xtest_test_keygen_noparams(ADBG_Case_t *c, TEEC_Session *session)
4357{
4358 size_t n;
4359 uint32_t key_size;
4360 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004361 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004362 const char *name;
4363 uint32_t key_type;
4364 uint32_t quanta;
4365 uint32_t min_size;
4366 uint32_t max_size;
4367 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004368 { 0, "AES", TEE_TYPE_AES, 64, 128,
Pascal Brandc639ac82015-07-02 08:53:34 +02004369 256 /* valid sizes 128, 192, 256 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004370 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4371 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
Pascal Brandc639ac82015-07-02 08:53:34 +02004372 168 /* valid sizes 112, 168 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004373 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4374 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4375 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4376 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4377 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4378 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4379 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4380 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004381
4382 /* New tests added to check non-regression of issue #5398 */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004383 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4384 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4385 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4386 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4387 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4388 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4389 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004390 };
4391
4392 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
4393 uint32_t min_size = key_types[n].min_size;
4394 uint32_t max_size = key_types[n].max_size;
4395 uint32_t quanta = key_types[n].quanta;
4396
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004397 if (key_types[n].level > level)
4398 continue;
4399
Pascal Brandc639ac82015-07-02 08:53:34 +02004400 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4401
4402 for (key_size = min_size; key_size <= max_size;
4403 key_size += quanta) {
4404 if (!ADBG_EXPECT_TRUE(c,
4405 generate_and_test_key(c, session, key_types
4406 [n].key_type, 1, key_size, NULL, 0)))
4407 break;
4408 }
4409
4410 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4411 }
4412}
4413
4414static void xtest_test_keygen_dh(ADBG_Case_t *c, TEEC_Session *session)
4415{
4416 size_t n;
4417 size_t param_count;
4418 /*
4419 * Note that the key size parameter is not used when creating the keys
4420 * but specifying these sizes make it possible to test the expected size
4421 * of the private value. This also means that the keysize must match the
4422 * size of p or what is specified in private_bits or the equvivalent
4423 * size of the subprime parameter.
4424 */
4425 TEE_Attribute params[4];
4426
4427#define XTEST_DH_GK_DATA(vect) \
4428 ARRAY(vect ## _p), \
4429 ARRAY(vect ## _g), \
4430 &vect ## _private_bits, \
4431 0, 0
4432#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4433 ARRAY(vect ## _p), \
4434 ARRAY(vect ## _g), \
4435 &vect ## _private_bits, \
4436 ARRAY(vect ## _subprime)
4437 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004438 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004439 uint32_t key_size;
4440 const uint8_t *p;
4441 size_t p_len;
4442 const uint8_t *g;
4443 size_t g_len;
4444 const uint32_t *private_bits;
4445 const uint8_t *subprime;
4446 size_t subprime_len;
4447 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004448 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004449 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004450 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004451 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004452 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004453 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004454 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004455 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004456 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004457 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004458 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004459 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004460 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004461 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004462 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004463 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004464 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004465 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004466 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004467 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004468 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004469 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004470 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004471 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004472 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004473 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004474 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004475 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004476 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004477 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004478 };
4479
4480
4481 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004482 if (key_types[n].level > level)
4483 continue;
4484
Pascal Brandc639ac82015-07-02 08:53:34 +02004485 Do_ADBG_BeginSubCase(c,
4486 "Generate DH key %d bits - Private bits = %d",
4487 key_types[n].key_size,
4488 *key_types[n].private_bits);
4489 param_count = 0;
4490
4491 xtest_add_attr(&param_count, params,
4492 TEE_ATTR_DH_PRIME,
4493 key_types[n].p, key_types[n].p_len);
4494
4495 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4496 key_types[n].g, key_types[n].g_len);
4497
4498 if (key_types[n].private_bits != 0) {
4499 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4500
4501 params[param_count].content.value.a =
4502 *key_types[n].private_bits;
4503
4504 params[param_count].content.value.b = 0;
4505 param_count++;
4506 }
4507
4508 if (key_types[n].subprime != 0) {
4509 xtest_add_attr(&param_count, params,
4510 TEE_ATTR_DH_SUBPRIME,
4511 key_types[n].subprime,
4512 key_types[n].subprime_len);
4513 }
4514
4515 if (!ADBG_EXPECT_TRUE(c,
4516 generate_and_test_key(c, session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004517 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004518 key_types[n]. key_size, params, param_count)))
4519 break;
4520
4521 Do_ADBG_EndSubCase(c,
4522 "Generate DH key %d bits - Private bits = %d",
4523 key_types[n].key_size,
4524 *key_types[n].private_bits);
4525 }
4526}
4527
4528static void xtest_test_keygen_dsa(ADBG_Case_t *c, TEEC_Session *session)
4529{
4530 size_t n;
4531 size_t param_count;
4532 TEE_Attribute params[4];
4533
4534#define XTEST_DSA_GK_DATA(vect) \
4535 ARRAY(vect ## _p), \
4536 ARRAY(vect ## _g), \
4537 ARRAY(vect ## _q)
4538 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004539 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004540 uint32_t key_size;
4541 const uint8_t *prime;
4542 size_t prime_len;
4543 const uint8_t *base;
4544 size_t base_len;
4545 const uint8_t *sub_prime;
4546 size_t sub_prime_len;
4547 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004548 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4549 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4550 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4551 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4552 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4553 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4554 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4555 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4556 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4557 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004558 };
4559
4560 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004561 if (key_types[n].level > level)
4562 continue;
4563
Pascal Brandc639ac82015-07-02 08:53:34 +02004564 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4565 key_types[n].key_size);
4566 param_count = 0;
4567
4568
4569 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4570 key_types[n].prime, key_types[n].prime_len);
4571
4572 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4573 key_types[n].sub_prime,
4574 key_types[n].sub_prime_len);
4575
4576 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4577 key_types[n].base, key_types[n].base_len);
4578
4579 if (!ADBG_EXPECT_TRUE(c,
4580 generate_and_test_key(c, session, TEE_TYPE_DSA_KEYPAIR,
4581 1, key_types[n]. key_size, params,
4582 param_count)))
4583 break;
4584
4585 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4586 key_types[n].key_size);
4587 }
4588}
4589
Pascal Brande61133f2015-07-08 15:38:37 +02004590static void xtest_test_keygen_ecc(ADBG_Case_t *c, TEEC_Session *session)
4591{
4592 size_t n;
4593 size_t param_count;
4594 TEE_Attribute params[4];
4595
4596 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004597 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004598 const char *name;
4599 uint32_t algo;
4600 uint32_t curve;
4601 uint32_t key_size;
4602 } key_types[] = {
4603 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004604 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4605 192 },
4606 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4607 224 },
4608 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4609 256 },
4610 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4611 384 },
4612 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4613 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004614
4615 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004616 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4617 192 },
4618 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4619 224 },
4620 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4621 256 },
4622 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4623 384 },
4624 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4625 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004626 };
4627
4628 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004629 if (key_types[n].level > level)
4630 continue;
4631
Pascal Brande61133f2015-07-08 15:38:37 +02004632 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4633 param_count = 0;
4634
4635 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4636 key_types[n].curve, 0);
4637
4638 if (!ADBG_EXPECT_TRUE(c,
4639 generate_and_test_key(c, session, key_types[n].algo,
4640 0, key_types[n].key_size, params,
4641 param_count)))
4642 break;
4643
4644 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4645 }
4646}
4647
Pascal Brandc639ac82015-07-02 08:53:34 +02004648static void xtest_tee_test_4007(ADBG_Case_t *c)
4649{
4650 TEEC_Session session = { 0 };
4651 uint32_t ret_orig;
4652
4653 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4654 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4655 &ret_orig)))
4656 return;
4657
4658 xtest_test_keygen_noparams(c, &session);
4659
4660 xtest_test_keygen_dh(c, &session);
4661
4662 xtest_test_keygen_dsa(c, &session);
4663
Pascal Brande61133f2015-07-08 15:38:37 +02004664 xtest_test_keygen_ecc (c, &session);
4665
Pascal Brandc639ac82015-07-02 08:53:34 +02004666 TEEC_CloseSession(&session);
4667}
4668
4669static void xtest_tee_test_4008(ADBG_Case_t *c)
4670{
4671 TEEC_Session session = { 0 };
4672 uint32_t ret_orig;
4673 TEE_OperationHandle op;
4674 TEE_ObjectHandle key_handle;
4675 TEE_ObjectHandle sv_handle;
4676 TEE_Attribute params[4];
4677 size_t param_count = 0;
4678 uint8_t out[2048];
4679 size_t out_size;
4680
4681 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4682 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4683 &ret_orig)))
4684 return;
4685
4686 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4687
4688 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4689 ta_crypt_cmd_allocate_operation(c, &session, &op,
4690 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4691 derive_key_max_keysize)))
4692 goto out;
4693
4694 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4695 ta_crypt_cmd_allocate_transient_object(c, & session,
4696 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4697 &key_handle)))
4698 goto out;
4699
4700 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4701 ARRAY(derive_key_dh_prime));
4702
4703 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4704 ARRAY(derive_key_dh_base));
4705
4706 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4707 ARRAY(derive_key_dh_public_value));
4708
4709 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4710 ARRAY(derive_key_dh_private_value));
4711
4712 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4713 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4714 params, param_count)))
4715 goto out;
4716
4717 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4718 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4719 goto out;
4720
4721 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4722 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4723 goto out;
4724
4725 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4726 ta_crypt_cmd_allocate_transient_object(c, &session,
4727 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4728 &sv_handle)))
4729 goto out;
4730
Pascal Brand2b92b642015-07-16 13:29:42 +02004731 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004732 param_count = 0;
4733
4734 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4735 ARRAY(derive_key_dh_public_value_2));
4736
4737 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4738 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4739 param_count)))
4740 goto out;
4741
4742 out_size = sizeof(out);
4743 memset(out, 0, sizeof(out));
4744 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4745 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4746 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4747 goto out;
4748
4749 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4750 sizeof(derive_key_dh_shared_secret), out,
4751 out_size))
4752 goto out;
4753
4754 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4755 ta_crypt_cmd_free_operation(c, &session, op)))
4756 goto out;
4757
4758 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4759 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4760 goto out;
4761out:
4762 Do_ADBG_EndSubCase(c, "Derive DH key success");
4763 TEEC_CloseSession(&session);
4764}
Pascal Brand2b92b642015-07-16 13:29:42 +02004765
4766static void xtest_tee_test_4009(ADBG_Case_t *c)
4767{
4768 TEEC_Session session = { 0 };
4769 uint32_t ret_orig;
4770 TEE_OperationHandle op;
4771 TEE_ObjectHandle key_handle;
4772 TEE_ObjectHandle sv_handle;
4773 TEE_Attribute params[4];
4774 size_t param_count = 0;
4775 uint8_t out[2048];
4776 size_t out_size;
4777 uint32_t size_bytes;
Peng Fane13ad9b2015-07-21 11:46:26 +08004778 uint32_t i;
Pascal Brand2b92b642015-07-16 13:29:42 +02004779 struct derive_key_ecdh_t *pt;
4780
4781 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4782 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4783 &ret_orig)))
4784 return;
4785
4786 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
4787 pt = &derive_key_ecdh[i];
4788
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02004789 if (pt->level > level)
4790 continue;
4791
Pascal Brand2b92b642015-07-16 13:29:42 +02004792 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
4793 pt->algo);
4794 size_bytes = (pt->keysize + 7) / 8;
4795 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4796 ta_crypt_cmd_allocate_operation(c, &session, &op,
4797 pt->algo,
4798 TEE_MODE_DERIVE, pt->keysize)))
4799 goto out;
4800
4801 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4802 ta_crypt_cmd_allocate_transient_object(c, & session,
4803 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
4804 &key_handle)))
4805 goto out;
4806
4807 param_count = 0;
4808 xtest_add_attr_value(&param_count, params,
4809 TEE_ATTR_ECC_CURVE, pt->curve, 0);
4810 xtest_add_attr(&param_count, params,
4811 TEE_ATTR_ECC_PRIVATE_VALUE,
4812 pt->private, size_bytes);
4813 /*
4814 * The public value is not used. This is why we provide
4815 * another buffer
4816 */
4817 xtest_add_attr(&param_count, params,
4818 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4819 pt->private, size_bytes);
4820 xtest_add_attr(&param_count, params,
4821 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4822 pt->private, size_bytes);
4823
4824 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4825 ta_crypt_cmd_populate_transient_object(c,
4826 &session,
4827 key_handle, params, param_count)))
4828 goto out;
4829
4830 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4831 ta_crypt_cmd_set_operation_key(c, &session, op,
4832 key_handle)))
4833 goto out;
4834
4835 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4836 ta_crypt_cmd_free_transient_object(c, & session,
4837 key_handle)))
4838 goto out;
4839
4840 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4841 ta_crypt_cmd_allocate_transient_object(c, &session,
4842 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
4843 &sv_handle)))
4844 goto out;
4845
4846 /* reuse but reset params and param-count */
4847 param_count = 0;
4848
4849 xtest_add_attr(&param_count, params,
4850 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4851 pt->public_x, size_bytes);
4852 xtest_add_attr(&param_count, params,
4853 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4854 pt->public_y, size_bytes);
4855
4856 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4857 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
4858 params, param_count)))
4859 goto out;
4860
4861 out_size = sizeof(out);
4862 memset(out, 0, sizeof(out));
4863 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4864 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
4865 sv_handle,
4866 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4867 goto out;
4868
4869 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
4870 out, out_size))
4871 goto out;
4872
4873 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4874 ta_crypt_cmd_free_operation(c, &session, op)))
4875 goto out;
4876
4877 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4878 ta_crypt_cmd_free_transient_object(c, &session,
4879 sv_handle)))
4880 goto out;
4881
4882 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
4883 pt->algo);
4884 }
4885
4886 goto noerror;
4887
4888out:
4889 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
4890
4891noerror:
4892 TEEC_CloseSession(&session);
4893}
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004894
4895static void xtest_tee_test_4010(ADBG_Case_t *c)
4896{
4897 TEEC_Session session = { 0 };
4898 uint32_t ret_orig;
4899 TEE_ObjectHandle o;
4900 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
4901 static const TEE_Attribute attr = {
4902 .attributeID = TEE_ATTR_SECRET_VALUE,
4903 .content.ref.buffer = (void *)large_key,
4904 .content.ref.length = sizeof(large_key),
4905 };
4906
4907 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4908 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4909 &ret_orig)))
4910 return;
4911
4912 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4913 ta_crypt_cmd_allocate_transient_object(c, &session,
4914 TEE_TYPE_HMAC_SHA256, 1024, &o)))
4915 goto out;
4916
4917 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
4918 ta_crypt_cmd_populate_transient_object(c, &session, o,
4919 &attr, 1));
4920
4921out:
4922 TEEC_CloseSession(&session);
4923}
Jens Wiklanderb58916e2016-07-07 15:29:32 +02004924
4925static void xtest_tee_test_4011(ADBG_Case_t *c)
4926{
4927 TEEC_Session s = { 0 };
4928 size_t key_size = 512;
4929 TEE_ObjectHandle key;
4930 TEE_OperationHandle ops;
4931 TEE_OperationHandle opv;
4932 TEE_OperationHandle ope;
4933 TEE_OperationHandle opd;
4934 uint32_t ret_orig;
4935 uint8_t in[TEE_SHA1_HASH_SIZE];
4936 uint8_t out[1024];
4937 uint8_t tmp[1024];
4938 size_t out_size;
4939 size_t tmp_size;
4940 size_t n;
4941 size_t m;
4942 size_t i = 0;
4943
4944 /* Setup session, initialize message to sign, create a keypair */
4945 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
4946 &crypt_user_ta_uuid, NULL, &ret_orig)))
4947 return;
4948 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
4949 &s, in, sizeof(in))))
4950 goto out;
4951 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
4952 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
4953 goto out;
4954 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
4955 key, key_size, NULL, 0)))
4956 goto out;
4957
4958 /* Allocate operations for sign, verify, encrypt and decrypt */
4959 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4960 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
4961 key_size)))
4962 goto out;
4963 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4964 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
4965 key_size)))
4966 goto out;
4967 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4968 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
4969 goto out;
4970 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4971 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
4972 goto out;
4973
4974 /* Assign the keypair to all operations */
4975 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4976 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
4977 goto out;
4978 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4979 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
4980 goto out;
4981 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4982 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
4983 goto out;
4984 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4985 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
4986 goto out;
4987
4988 /*
4989 * The core of the test case is inspired by the one in libtomcrypt:
4990 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
4991 *
4992 * Testcase for Bleichenbacher attack
4993 *
4994 * (1) Create a valid signature
4995 * (2) Check that it can be verified
4996 * (3) Transform the package to fetch plain text (using the encrypt
4997 * operation in GP TEE Internal API)
4998 * (4) Forge the structure of PKCS#1-EMSA encoded data
4999 * (4.1) Search for start and end of the padding string
5000 * (4.2) Move the signature to the front of the padding string
5001 * (4.3) Zero the message until the end
5002 * (5) Transform the package back (using the decrypt operation in
5003 * GP TEE Internal API)
5004 * (6) The result should not be valid if the implementation is robust.
5005 */
5006
5007
5008 for (i = 0; i < 9; i++) {
5009 Do_ADBG_Log("Iteration %zu", i);
5010
5011 /* 1 */
5012 out_size = sizeof(out);
5013 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5014 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
5015 in, sizeof(in), out, &out_size)))
5016 goto out;
5017
5018 /* 2 */
5019 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5020 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5021 in, sizeof(in), out, out_size)))
5022 goto out;
5023
5024 /* 3 */
5025 tmp_size = sizeof(tmp);
5026 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5027 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
5028 out, out_size, tmp, &tmp_size)))
5029 goto out;
5030
5031 /* 4.1 */
5032 for (n = 0; n < tmp_size; n++)
5033 if (tmp[n] == 0xff)
5034 break;
5035 for (m = n + 1; m < tmp_size; m++)
5036 if (tmp[m] != 0xff)
5037 break;
5038 /* 4.2 */
5039 memmove(tmp + n + i, tmp + m, tmp_size - m);
5040 /* 4.3 */
5041 for (n = n + tmp_size - m + i; n < tmp_size; n++)
5042 tmp[n] = 0;
5043
5044 /* 5 */
5045 out_size = sizeof(out);
5046 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5047 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
5048 tmp, tmp_size, out, &out_size)))
5049 goto out;
5050
5051 /* 6 */
5052 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
5053 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5054 in, sizeof(in), out, out_size)))
5055 goto out;
5056 }
5057
5058out:
5059 TEEC_CloseSession(&s);
5060}
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005061
5062
5063#ifdef CFG_SYSTEM_PTA
5064static void xtest_tee_test_4012(ADBG_Case_t *c)
5065{
5066 TEEC_Session session = { 0 };
5067 uint32_t ret_orig;
5068 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
5069 /* Fortuna PRNG requires seed <= 32 bytes */
5070 uint8_t pool_input[32] = {};
5071 time_t t;
5072 struct tm tm_local;
5073
5074 t = time(NULL);
5075 tm_local = *localtime(&t);
5076
5077 memcpy((void *)pool_input, (void *)&tm_local,
5078 sizeof(pool_input) < sizeof(tm_local) ?
5079 sizeof(pool_input) : sizeof(tm_local));
5080
5081
5082 op.params[0].tmpref.buffer = pool_input;
5083 op.params[0].tmpref.size = sizeof(pool_input);
5084 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
5085 TEEC_NONE,
5086 TEEC_NONE,
5087 TEEC_NONE);
5088 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5089 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
5090 &ret_orig)))
5091 return;
5092
5093 (void)ADBG_EXPECT_TEEC_SUCCESS(c,
5094 TEEC_InvokeCommand(&session,
5095 TA_CRYPT_CMD_SEED_RNG_POOL,
5096 &op,
5097 &ret_orig));
5098 TEEC_CloseSession(&session);
5099}
5100#endif