blob: aa06ad510b7cf20dde87f26f4cd7786df668f59a [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>
18
19#include "xtest_test.h"
20#include "xtest_helpers.h"
21
22#include <tee_api_types.h>
23#include <ta_crypt.h>
24#include <utee_defines.h>
25#include <util.h>
26
27#include <xtest_4000_data.h>
Cedric Chaumontc7654962015-09-09 14:56:36 +020028#include <nist/186-2ecdsatestvectors.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020029
30#include <assert.h>
31
32static void xtest_tee_test_4001(ADBG_Case_t *Case_p);
33static void xtest_tee_test_4002(ADBG_Case_t *Case_p);
34static void xtest_tee_test_4003_no_xts(ADBG_Case_t *Case_p);
35static void xtest_tee_test_4003_xts(ADBG_Case_t *Case_p);
36static 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);
Pascal Brandc639ac82015-07-02 08:53:34 +020043
44ADBG_CASE_DEFINE(XTEST_TEE_4001, xtest_tee_test_4001,
45 /* Title */
46 "Test TEE Internal API hash operations",
47 /* Short description */
48 "Short description ...",
49 /* Requirement IDs */
50 "TEE-??",
51 /* How to implement */
52 "Description of how to implement ..."
53 );
54
55ADBG_CASE_DEFINE(XTEST_TEE_4002, xtest_tee_test_4002,
56 /* Title */
57 "Test TEE Internal API MAC operations",
58 /* Short description */
59 "Short description ...",
60 /* Requirement IDs */
61 "TEE-??",
62 /* How to implement */
63 "Description of how to implement ..."
64 );
65
66ADBG_CASE_DEFINE(XTEST_TEE_4003_NO_XTS, xtest_tee_test_4003_no_xts,
67 /* Title */
68 "Test TEE Internal API cipher operations without AES XTS",
69 /* Short description */
70 "Short description ...",
71 /* Requirement IDs */
72 "TEE-??",
73 /* How to implement */
74 "Description of how to implement ..."
75 );
76
77ADBG_CASE_DEFINE(XTEST_TEE_4003_XTS, xtest_tee_test_4003_xts,
78 /* Title */
79 "Test TEE Internal API cipher operations for AES XTS",
80 /* Short description */
81 "Short description ...",
82 /* Requirement IDs */
83 "TEE-??",
84 /* How to implement */
85 "Description of how to implement ..."
86 );
87
88ADBG_CASE_DEFINE(XTEST_TEE_4004, xtest_tee_test_4004,
89 /* Title */
90 "Test TEE Internal API get random",
91 /* Short description */
92 "Short description ...",
93 /* Requirement IDs */
94 "TEE-??",
95 /* How to implement */
96 "Description of how to implement ..."
97 );
98
99ADBG_CASE_DEFINE(XTEST_TEE_4005, xtest_tee_test_4005,
100 /* Title */
101 "Test TEE Internal API Authenticated Encryption operations",
102 /* Short description */
103 "Short description ...",
104 /* Requirement IDs */
105 "TEE-??",
106 /* How to implement */
107 "Description of how to implement ..."
108 );
109
110ADBG_CASE_DEFINE(XTEST_TEE_4006, xtest_tee_test_4006,
111 /* Title */
112 "Test TEE Internal API Asymmetric Cipher operations",
113 /* Short description */
114 "Short description ...",
115 /* Requirement IDs */
116 "TEE-??",
117 /* How to implement */
118 "Description of how to implement ..."
119 );
120
121ADBG_CASE_DEFINE(XTEST_TEE_4007, xtest_tee_test_4007,
122 /* Title */
123 "Test TEE Internal API Generate key",
124 /* Short description */
125 "Short description ...",
126 /* Requirement IDs */
127 "TEE-??",
128 /* How to implement */
129 "Description of how to implement ..."
130 );
131
132ADBG_CASE_DEFINE(XTEST_TEE_4008, xtest_tee_test_4008,
133 /* Title */
134 "Test TEE Internal API Derive key",
135 /* Short description */
136 "Short description ...",
137 /* Requirement IDs */
138 "TEE-??",
139 /* How to implement */
140 "Description of how to implement ..."
141 );
142
Pascal Brand2b92b642015-07-16 13:29:42 +0200143ADBG_CASE_DEFINE(XTEST_TEE_4009, xtest_tee_test_4009,
144 /* Title */
145 "Test TEE Internal API Derive key ECDH",
146 /* Short description */
147 "Short description ...",
148 /* Requirement IDs */
149 "TEE-??",
150 /* How to implement */
151 "Description of how to implement ..."
152 );
153
Jens Wiklander70a0b2c2016-05-18 08:39:35 +0200154ADBG_CASE_DEFINE(XTEST_TEE_4010, xtest_tee_test_4010,
155 /* Title */
156 "Test TEE Internal API create transient object (negative)",
157 /* Short description */
158 "Short description ...",
159 /* Requirement IDs */
160 "TEE-??",
161 /* How to implement */
162 "Description of how to implement ..."
163 );
164
Pascal Brandc639ac82015-07-02 08:53:34 +0200165static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
166 TEEC_Session *s,
167 void *buf, size_t blen);
168
169static TEEC_Result ta_crypt_cmd_reset_operation(ADBG_Case_t *c, TEEC_Session *s,
170 TEE_OperationHandle oph)
171{
172 TEEC_Result res;
173 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
174 uint32_t ret_orig;
175
176 assert((uintptr_t)oph <= UINT32_MAX);
177 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
178 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
179 TEEC_NONE);
180 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RESET_OPERATION, &op,
181 &ret_orig);
182 if (res != TEEC_SUCCESS) {
183 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
184 ret_orig);
185 }
186 return res;
187}
188
189static TEEC_Result ta_crypt_cmd_copy_operation(ADBG_Case_t *c,
190 TEEC_Session *s,
191 TEE_OperationHandle dst_oph,
192 TEE_OperationHandle src_oph)
193{
194 TEEC_Result res;
195 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
196 uint32_t ret_orig;
197
198 assert((uintptr_t)dst_oph <= UINT32_MAX);
199 op.params[0].value.a = (uint32_t)(uintptr_t)dst_oph;
200
201 assert((uintptr_t)src_oph <= UINT32_MAX);
202 op.params[0].value.b = (uint32_t)(uintptr_t)src_oph;
203 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
204 TEEC_NONE);
205
206 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_COPY_OPERATION, &op,
207 &ret_orig);
208
209 if (res != TEEC_SUCCESS) {
210 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
211 ret_orig);
212 }
213 return res;
214}
215
216static TEEC_Result ta_crypt_cmd_digest_update(ADBG_Case_t *c, TEEC_Session *s,
217 TEE_OperationHandle oph,
218 const void *chunk,
219 size_t chunk_size)
220{
221 TEEC_Result res;
222 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
223 uint32_t ret_orig;
224
225 assert((uintptr_t)oph <= UINT32_MAX);
226 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
227 op.params[1].tmpref.buffer = (void *)chunk;
228 op.params[1].tmpref.size = chunk_size;
229
230 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
231 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
232 TEEC_NONE);
233
234 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_UPDATE, &op, &ret_orig);
235
236 if (res != TEEC_SUCCESS) {
237 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
238 ret_orig);
239 }
240
241 return res;
242}
243
244static TEEC_Result ta_crypt_cmd_digest_do_final(ADBG_Case_t *c, TEEC_Session *s,
245 TEE_OperationHandle oph,
246 const void *chunk,
247 size_t chunk_len, void *hash,
248 size_t *hash_len)
249{
250 TEEC_Result res;
251 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
252 uint32_t ret_orig;
253
254 assert((uintptr_t)oph <= UINT32_MAX);
255 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
256
257 op.params[1].tmpref.buffer = (void *)chunk;
258 op.params[1].tmpref.size = chunk_len;
259
260 op.params[2].tmpref.buffer = (void *)hash;
261 op.params[2].tmpref.size = *hash_len;
262
263 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
264 TEEC_MEMREF_TEMP_INPUT,
265 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
266
267 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_DO_FINAL, &op,
268 &ret_orig);
269
270 if (res != TEEC_SUCCESS) {
271 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
272 ret_orig);
273 }
274
275 if (res == TEEC_SUCCESS)
276 *hash_len = op.params[2].tmpref.size;
277
278 return res;
279}
280
281static TEE_Result ta_crypt_cmd_set_operation_key2(ADBG_Case_t *c,
282 TEEC_Session *s,
283 TEE_OperationHandle oph,
284 TEE_ObjectHandle key1,
285 TEE_ObjectHandle key2)
286{
287 TEEC_Result res;
288 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
289 uint32_t ret_orig;
290
291 assert((uintptr_t)oph <= UINT32_MAX);
292 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
293
294 assert((uintptr_t)key1 <= UINT32_MAX);
295 op.params[0].value.b = (uint32_t)(uintptr_t)key1;
296
297 assert((uintptr_t)key2 <= UINT32_MAX);
298 op.params[1].value.a = (uint32_t)(uintptr_t)key2;
299 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT,
300 TEEC_NONE, TEEC_NONE);
301
302 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_SET_OPERATION_KEY2, &op,
303 &ret_orig);
304
305 if (res != TEEC_SUCCESS) {
306 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
307 ret_orig);
308 }
309
310 return res;
311}
312
313static TEEC_Result ta_crypt_cmd_mac_init(ADBG_Case_t *c, TEEC_Session *s,
314 TEE_OperationHandle oph,
315 const void *iv, size_t iv_len)
316{
317 TEEC_Result res;
318 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
319 uint32_t ret_orig;
320
321 assert((uintptr_t)oph <= UINT32_MAX);
322 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
323
324 if (iv != NULL) {
325 op.params[1].tmpref.buffer = (void *)iv;
326 op.params[1].tmpref.size = iv_len;
327 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
328 TEEC_MEMREF_TEMP_INPUT,
329 TEEC_NONE, TEEC_NONE);
330 } else {
331 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
332 TEEC_NONE, TEEC_NONE);
333 }
334
335 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_INIT, &op, &ret_orig);
336
337 if (res != TEEC_SUCCESS) {
338 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
339 ret_orig);
340 }
341
342 return res;
343}
344
345static TEEC_Result ta_crypt_cmd_mac_update(ADBG_Case_t *c, TEEC_Session *s,
346 TEE_OperationHandle oph,
347 const void *chunk, size_t chunk_size)
348{
349 TEEC_Result res;
350 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
351 uint32_t ret_orig;
352
353 assert((uintptr_t)oph <= UINT32_MAX);
354 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
355
356 op.params[1].tmpref.buffer = (void *)chunk;
357 op.params[1].tmpref.size = chunk_size;
358
359 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
360 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
361 TEEC_NONE);
362
363 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_UPDATE, &op, &ret_orig);
364
365 if (res != TEEC_SUCCESS) {
366 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
367 ret_orig);
368 }
369
370 return res;
371}
372
373static TEEC_Result ta_crypt_cmd_mac_final_compute(ADBG_Case_t *c,
374 TEEC_Session *s,
375 TEE_OperationHandle oph,
376 const void *chunk,
377 size_t chunk_len,
378 void *hash,
379 size_t *hash_len)
380{
381 TEEC_Result res;
382 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
383 uint32_t ret_orig;
384
385 assert((uintptr_t)oph <= UINT32_MAX);
386 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
387
388 op.params[1].tmpref.buffer = (void *)chunk;
389 op.params[1].tmpref.size = chunk_len;
390
391 op.params[2].tmpref.buffer = (void *)hash;
392 op.params[2].tmpref.size = *hash_len;
393
394 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
395 TEEC_MEMREF_TEMP_INPUT,
396 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
397
398 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_FINAL_COMPUTE, &op,
399 &ret_orig);
400
401 if (res != TEEC_SUCCESS) {
402 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
403 ret_orig);
404 }
405
406 if (res == TEEC_SUCCESS)
407 *hash_len = op.params[2].tmpref.size;
408
409 return res;
410}
411
412static TEEC_Result ta_crypt_cmd_cipher_init(ADBG_Case_t *c, TEEC_Session *s,
413 TEE_OperationHandle oph,
414 const void *iv, size_t iv_len)
415{
416 TEEC_Result res;
417 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
418 uint32_t ret_orig;
419
420 assert((uintptr_t)oph <= UINT32_MAX);
421 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
422
423 if (iv != NULL) {
424 op.params[1].tmpref.buffer = (void *)iv;
425 op.params[1].tmpref.size = iv_len;
426
427 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
428 TEEC_MEMREF_TEMP_INPUT,
429 TEEC_NONE, TEEC_NONE);
430 } else {
431 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
432 TEEC_NONE, TEEC_NONE);
433 }
434
435 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_INIT, &op, &ret_orig);
436
437 if (res != TEEC_SUCCESS) {
438 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
439 ret_orig);
440 }
441
442 return res;
443}
444
445static TEEC_Result ta_crypt_cmd_cipher_update(ADBG_Case_t *c, TEEC_Session *s,
446 TEE_OperationHandle oph,
447 const void *src, size_t src_len,
448 void *dst, size_t *dst_len)
449{
450 TEEC_Result res;
451 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
452 uint32_t ret_orig;
453
454 assert((uintptr_t)oph <= UINT32_MAX);
455 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
456
457 op.params[1].tmpref.buffer = (void *)src;
458 op.params[1].tmpref.size = src_len;
459
460 op.params[2].tmpref.buffer = dst;
461 op.params[2].tmpref.size = *dst_len;
462
463 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
464 TEEC_MEMREF_TEMP_INPUT,
465 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
466
467 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_UPDATE, &op, &ret_orig);
468
469 if (res != TEEC_SUCCESS) {
470 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
471 ret_orig);
472 }
473
474 if (res == TEEC_SUCCESS)
475 *dst_len = op.params[2].tmpref.size;
476
477 return res;
478}
479
480static TEEC_Result ta_crypt_cmd_cipher_do_final(ADBG_Case_t *c,
481 TEEC_Session *s,
482 TEE_OperationHandle oph,
483 const void *src,
484 size_t src_len,
485 void *dst,
486 size_t *dst_len)
487{
488 TEEC_Result res;
489 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
490 uint32_t ret_orig;
491
492 assert((uintptr_t)oph <= UINT32_MAX);
493 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
494
495 op.params[1].tmpref.buffer = (void *)src;
496 op.params[1].tmpref.size = src_len;
497
498 op.params[2].tmpref.buffer = (void *)dst;
499 op.params[2].tmpref.size = *dst_len;
500
501 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
502 TEEC_MEMREF_TEMP_INPUT,
503 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
504
505 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_DO_FINAL, &op,
506 &ret_orig);
507
508 if (res != TEEC_SUCCESS) {
509 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
510 ret_orig);
511 }
512
513 if (res == TEEC_SUCCESS)
514 *dst_len = op.params[2].tmpref.size;
515
516 return res;
517}
518
519static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
520 TEEC_Session *s,
521 void *buf,
522 size_t blen)
523{
524 TEEC_Result res;
525 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
526 uint32_t ret_orig;
527
528 op.params[0].tmpref.buffer = buf;
529 op.params[0].tmpref.size = blen;
530
531 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE,
532 TEEC_NONE, TEEC_NONE);
533
534 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RANDOM_NUMBER_GENEREATE, &op,
535 &ret_orig);
536
537 if (res != TEEC_SUCCESS) {
538 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
539 ret_orig);
540 }
541
542 (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==,
543 op.params[0].tmpref.size);
544 return res;
545}
546
547static TEEC_Result ta_crypt_cmd_ae_init(ADBG_Case_t *c, TEEC_Session *s,
548 TEE_OperationHandle oph,
549 const void *nonce, size_t nonce_len,
550 size_t tag_len, size_t aad_len,
551 size_t payload_len)
552{
553 TEEC_Result res;
554 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
555 uint32_t ret_orig;
556
557 assert((uintptr_t)oph <= UINT32_MAX);
558 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
559 op.params[0].value.b = tag_len;
560
561 op.params[1].tmpref.buffer = (void *)nonce;
562 op.params[1].tmpref.size = nonce_len;
563
564 op.params[2].value.a = aad_len;
565 op.params[2].value.b = payload_len;
566
567 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
568 TEEC_MEMREF_TEMP_INPUT,
Jens Wiklander74a42302015-07-07 01:08:41 +0200569 TEEC_VALUE_INPUT, TEEC_NONE);
Pascal Brandc639ac82015-07-02 08:53:34 +0200570
571 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_INIT, &op, &ret_orig);
572
573 if (res != TEEC_SUCCESS) {
574 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
575 ret_orig);
576 }
577 return res;
578}
579
580static TEEC_Result ta_crypt_cmd_ae_update_aad(ADBG_Case_t *c, TEEC_Session *s,
581 TEE_OperationHandle oph,
582 const void *aad, size_t aad_len)
583{
584 TEEC_Result res;
585 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
586 uint32_t ret_orig;
587
588 assert((uintptr_t)oph <= UINT32_MAX);
589 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
590
591 op.params[1].tmpref.buffer = (void *)aad;
592 op.params[1].tmpref.size = aad_len;
593
594 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
595 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
596 TEEC_NONE);
597
598 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE_AAD, &op, &ret_orig);
599
600 if (res != TEEC_SUCCESS) {
601 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
602 ret_orig);
603 }
604
605 return res;
606}
607
608static TEEC_Result ta_crypt_cmd_ae_update(ADBG_Case_t *c,
609 TEEC_Session *s,
610 TEE_OperationHandle oph,
611 const void *src,
612 size_t src_len,
613 void *dst,
614 size_t *dst_len)
615{
616 TEEC_Result res;
617 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
618 uint32_t ret_orig;
619
620 assert((uintptr_t)oph <= UINT32_MAX);
621 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
622
623 op.params[1].tmpref.buffer = (void *)src;
624 op.params[1].tmpref.size = src_len;
625
626 op.params[2].tmpref.buffer = (void *)dst;
627 op.params[2].tmpref.size = *dst_len;
628
629 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
630 TEEC_MEMREF_TEMP_INPUT,
631 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
632
633 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE, &op, &ret_orig);
634
635 if (res != TEEC_SUCCESS) {
636 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
637 ret_orig);
638 }
639
640 if (res == TEEC_SUCCESS)
641 *dst_len = op.params[2].tmpref.size;
642
643 return res;
644}
645
646static TEEC_Result ta_crypt_cmd_ae_encrypt_final(ADBG_Case_t *c,
647 TEEC_Session *s,
648 TEE_OperationHandle oph,
649 const void *src,
650 size_t src_len, void *dst,
651 size_t *dst_len, void *tag,
652 size_t *tag_len)
653{
654 TEEC_Result res;
655 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
656 uint32_t ret_orig;
657
658 assert((uintptr_t)oph <= UINT32_MAX);
659 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
660
661 op.params[1].tmpref.buffer = (void *)src;
662 op.params[1].tmpref.size = src_len;
663
664 op.params[2].tmpref.buffer = (void *)dst;
665 op.params[2].tmpref.size = *dst_len;
666
667 op.params[3].tmpref.buffer = (void *)tag;
668 op.params[3].tmpref.size = *tag_len;
669
670 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
671 TEEC_MEMREF_TEMP_INPUT,
672 TEEC_MEMREF_TEMP_OUTPUT,
673 TEEC_MEMREF_TEMP_OUTPUT);
674
675 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_ENCRYPT_FINAL, &op,
676 &ret_orig);
677
678 if (res != TEEC_SUCCESS) {
679 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
680 ret_orig);
681 }
682
683 if (res == TEEC_SUCCESS) {
684 *dst_len = op.params[2].tmpref.size;
685 *tag_len = op.params[3].tmpref.size;
686 }
687
688 return res;
689}
690
691static TEEC_Result ta_crypt_cmd_ae_decrypt_final(ADBG_Case_t *c,
692 TEEC_Session *s,
693 TEE_OperationHandle oph,
694 const void *src, size_t src_len,
695 void *dst, size_t *dst_len,
696 const void *tag, size_t tag_len)
697{
698 TEEC_Result res;
699 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
700 uint32_t ret_orig;
701
702 assert((uintptr_t)oph <= UINT32_MAX);
703 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
704
705 op.params[1].tmpref.buffer = (void *)src;
706 op.params[1].tmpref.size = src_len;
707
708 op.params[2].tmpref.buffer = dst;
709 op.params[2].tmpref.size = *dst_len;
710
711 op.params[3].tmpref.buffer = (void *)tag;
712 op.params[3].tmpref.size = tag_len;
713
714 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
715 TEEC_MEMREF_TEMP_INPUT,
716 TEEC_MEMREF_TEMP_OUTPUT,
717 TEEC_MEMREF_TEMP_INPUT);
718
719 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_DECRYPT_FINAL, &op,
720 &ret_orig);
721
722 if (res != TEEC_SUCCESS) {
723 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
724 ret_orig);
725 }
726
727 if (res == TEEC_SUCCESS)
728 *dst_len = op.params[2].tmpref.size;
729
730 return res;
731}
732
733static TEEC_Result ta_crypt_cmd_asymmetric_operate(ADBG_Case_t *c,
734 TEEC_Session *s,
735 TEE_OperationHandle oph,
736 uint32_t cmd,
737 const TEE_Attribute *params,
738 uint32_t paramCount,
739 const void *src,
740 size_t src_len,
741 void *dst,
742 size_t *dst_len)
743{
744 TEEC_Result res;
745 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
746 uint32_t ret_orig;
747 uint8_t *buf;
748 size_t blen;
749
750 res = pack_attrs(params, paramCount, &buf, &blen);
751 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
752 return res;
753
754 assert((uintptr_t)oph <= UINT32_MAX);
755 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
756
757 op.params[1].tmpref.buffer = buf;
758 op.params[1].tmpref.size = blen;
759
760 op.params[2].tmpref.buffer = (void *)src;
761 op.params[2].tmpref.size = src_len;
762
763 op.params[3].tmpref.buffer = dst;
764 op.params[3].tmpref.size = *dst_len;
765
766 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
767 TEEC_MEMREF_TEMP_INPUT,
768 TEEC_MEMREF_TEMP_INPUT,
769 TEEC_MEMREF_TEMP_OUTPUT);
770
771 res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig);
772
773 if (res != TEEC_SUCCESS) {
774 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
775 ret_orig);
776 }
777
778 if (res == TEEC_SUCCESS)
779 *dst_len = op.params[3].tmpref.size;
780
781 free(buf);
782 return res;
783}
784
785static TEEC_Result ta_crypt_cmd_asymmetric_encrypt(ADBG_Case_t *c,
786 TEEC_Session *s,
787 TEE_OperationHandle oph,
788 const TEE_Attribute *params,
789 uint32_t paramCount,
790 const void *src,
791 size_t src_len,
792 void *dst,
793 size_t *dst_len)
794{
795 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
796 TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT,
797 params, paramCount,
798 src, src_len, dst, dst_len);
799}
800
801static TEEC_Result ta_crypt_cmd_asymmetric_decrypt(ADBG_Case_t *c,
802 TEEC_Session *s,
803 TEE_OperationHandle oph,
804 const TEE_Attribute *params,
805 uint32_t paramCount,
806 const void *src,
807 size_t src_len,
808 void *dst,
809 size_t *dst_len)
810{
811 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
812 TA_CRYPT_CMD_ASYMMETRIC_DECRYPT,
813 params, paramCount,
814 src, src_len, dst, dst_len);
815}
816
817static TEEC_Result ta_crypt_cmd_asymmetric_sign(ADBG_Case_t *c,
818 TEEC_Session *s,
819 TEE_OperationHandle oph,
820 const TEE_Attribute *params,
821 uint32_t paramCount,
822 const void *digest,
823 size_t digest_len,
824 void *signature,
825 size_t *signature_len)
826{
827 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
828 TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST, params, paramCount,
829 digest, digest_len, signature, signature_len);
830}
831
832static TEEC_Result ta_crypt_cmd_asymmetric_verify(ADBG_Case_t *c,
833 TEEC_Session *s,
834 TEE_OperationHandle oph,
835 const TEE_Attribute *params,
836 uint32_t paramCount,
837 const void *digest,
838 size_t digest_len,
839 const void *signature,
840 size_t signature_len)
841{
842 TEEC_Result res;
843 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
844 uint32_t ret_orig;
845 uint8_t *buf;
846 size_t blen;
847
848 res = pack_attrs(params, paramCount, &buf, &blen);
849 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
850 return res;
851
852 assert((uintptr_t)oph <= UINT32_MAX);
853 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
854
855 op.params[1].tmpref.buffer = buf;
856 op.params[1].tmpref.size = blen;
857
858 op.params[2].tmpref.buffer = (void *)digest;
859 op.params[2].tmpref.size = digest_len;
860
861 op.params[3].tmpref.buffer = (void *)signature;
862 op.params[3].tmpref.size = signature_len;
863
864 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
865 TEEC_MEMREF_TEMP_INPUT,
866 TEEC_MEMREF_TEMP_INPUT,
867 TEEC_MEMREF_TEMP_INPUT);
868
869 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST,
870 &op, &ret_orig);
871
872 if (res != TEEC_SUCCESS) {
873 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
874 ret_orig);
875 }
876
877 free(buf);
878 return res;
879}
880
881static TEEC_Result ta_crypt_cmd_get_object_value_attribute(ADBG_Case_t *c,
882 TEEC_Session *s,
883 TEE_ObjectHandle o,
884 uint32_t attr_id,
885 uint32_t *valuea,
886 uint32_t *valueb)
887{
888 TEEC_Result res;
889 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
890 uint32_t ret_orig;
891
892 assert((uintptr_t)o <= UINT32_MAX);
893 op.params[0].value.a = (uint32_t)(uintptr_t)o;
894 op.params[0].value.b = attr_id;
895 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT,
896 TEEC_NONE, TEEC_NONE);
897
898 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE,
899 &op, &ret_orig);
900
901 if (res != TEEC_SUCCESS) {
902 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
903 ret_orig);
904 }
905
906 if (res == TEEC_SUCCESS) {
907 *valuea = op.params[1].value.a;
908 *valueb = op.params[1].value.b;
909 }
910
911 return res;
912}
913
914static TEEC_Result ta_crypt_cmd_generate_key(ADBG_Case_t *c,
915 TEEC_Session *s,
916 TEE_ObjectHandle o,
917 uint32_t key_size,
918 const TEE_Attribute *params,
919 uint32_t paramCount)
920{
921 TEEC_Result res;
922 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
923 uint32_t ret_orig;
924 uint8_t *buf;
925 size_t blen;
926
927 res = pack_attrs(params, paramCount, &buf, &blen);
928 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
929 return res;
930
931 assert((uintptr_t)o <= UINT32_MAX);
932 op.params[0].value.a = (uint32_t)(uintptr_t)o;
933 op.params[0].value.b = key_size;
934
935 op.params[1].tmpref.buffer = buf;
936 op.params[1].tmpref.size = blen;
937
938 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
939 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
940 TEEC_NONE);
941
942 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GENERATE_KEY, &op, &ret_orig);
943
944 if (res != TEEC_SUCCESS) {
945 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
946 ret_orig);
947 }
948
949 free(buf);
950 return res;
951}
952
953static const uint8_t hash_data_md5_in1[] = {
954 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
955};
956
957static const uint8_t hash_data_md5_out1[] = {
958 0x61, 0x12, 0x71, 0x83, 0x70, 0x8d, 0x3a, 0xc7,
959 0xf1, 0x9b, 0x66, 0x06, 0xfc, 0xae, 0x7d, 0xf6
960};
961
962static const uint8_t hash_data_sha1_in1[] = {
963 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
964};
965
966static const uint8_t hash_data_sha1_out1[] = {
967 0x4b, 0x98, 0x92, 0xb6, 0x52, 0x72, 0x14, 0xaf,
968 0xc6, 0x55, 0xb8, 0xaa, 0x52, 0xf4, 0xd2, 0x03,
969 0xc1, 0x5e, 0x7c, 0x9c
970};
971
972static const uint8_t hash_data_sha224_in1[] = {
973 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
974};
975
976static const uint8_t hash_data_sha224_out1[] = {
977 0x08, 0x21, 0x69, 0xf9, 0x77, 0x1b, 0x80, 0x15,
978 0xf3, 0x97, 0xae, 0xde, 0x5b, 0xba, 0xa2, 0x72,
979 0x2d, 0x8f, 0x5c, 0x19, 0xfe, 0xd2, 0xe2, 0x68,
980 0x92, 0x49, 0xd8, 0x44
981};
982
983static const uint8_t hash_data_sha256_in1[] = { 'a', 'b', 'c' };
984
985static const uint8_t hash_data_sha256_out1[] = {
986 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
987 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
988 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
989 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
990};
991
992static const uint8_t hash_data_sha256_in2[] = { 'e', 'f', 'g' };
993
994static const uint8_t hash_data_sha256_out2[] = {
995 0xd4, 0xff, 0xe8, 0xe9, 0xee, 0x0b, 0x48, 0xeb,
996 0xa7, 0x16, 0x70, 0x61, 0x23, 0xa7, 0x18, 0x7f,
997 0x32, 0xea, 0xe3, 0xbd, 0xcb, 0x0e, 0x77, 0x63,
998 0xe4, 0x1e, 0x53, 0x32, 0x67, 0xbd, 0x8a, 0x53
999};
1000
1001
1002static const uint8_t hash_data_sha384_in1[] = {
1003 'a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
1004};
1005
1006static const uint8_t hash_data_sha384_out1[] = {
1007 0x4c, 0xab, 0x80, 0x9d, 0x96, 0x84, 0x01, 0x47,
1008 0x67, 0x0a, 0xc1, 0x7a, 0xb6, 0xb9, 0xf7, 0x6e,
1009 0x35, 0xa6, 0xb0, 0x8c, 0xf5, 0x2a, 0x3d, 0x64,
1010 0x9a, 0x8c, 0x7e, 0x0c, 0x55, 0x45, 0xd3, 0x7d,
1011 0x1f, 0x7f, 0x28, 0x34, 0x96, 0x14, 0x44, 0x2a,
1012 0xf5, 0x98, 0xa2, 0x95, 0x24, 0x76, 0x53, 0x97
1013};
1014
1015static const uint8_t hash_data_sha512_in1[] = {
1016 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
1017};
1018
1019static const uint8_t hash_data_sha512_out1[] = {
1020 0x20, 0xd8, 0x64, 0x4f, 0x54, 0xa2, 0x5f, 0x6f,
1021 0x0a, 0xf9, 0xd5, 0x27, 0x7d, 0x17, 0xa8, 0x99,
1022 0x4c, 0x64, 0x3f, 0xd0, 0xf3, 0x83, 0x36, 0xee,
1023 0x93, 0x12, 0x55, 0xcd, 0x2e, 0x12, 0x34, 0xa0,
1024 0xc2, 0xaa, 0xf9, 0xbb, 0x15, 0xc5, 0xe9, 0xfa,
1025 0xf7, 0xa7, 0xda, 0xb8, 0x2f, 0x72, 0xa0, 0x47,
1026 0xe3, 0x02, 0x04, 0xe8, 0xa0, 0x35, 0x0c, 0x96,
1027 0x26, 0xd1, 0xcb, 0x8b, 0x47, 0x45, 0x25, 0xd0
1028};
1029
1030struct xtest_hash_case {
1031 uint32_t algo;
1032 size_t in_incr;
1033 const uint8_t *in;
1034 size_t in_len;
1035 const uint8_t *out;
1036 size_t out_len;
1037};
1038
1039#define XTEST_HASH_CASE(algo, in_incr, in, out) \
1040 { (algo), (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
1041
1042static const struct xtest_hash_case hash_cases[] = {
1043 XTEST_HASH_CASE(TEE_ALG_MD5, 6, hash_data_md5_in1,
1044 hash_data_md5_out1),
1045 XTEST_HASH_CASE(TEE_ALG_SHA1, 3, hash_data_sha1_in1,
1046 hash_data_sha1_out1),
1047 XTEST_HASH_CASE(TEE_ALG_SHA224, 7, hash_data_sha224_in1,
1048 hash_data_sha224_out1),
1049 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in1,
1050 hash_data_sha256_out1),
1051 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in2,
1052 hash_data_sha256_out2),
1053 XTEST_HASH_CASE(TEE_ALG_SHA384, 1, hash_data_sha384_in1,
1054 hash_data_sha384_out1),
1055 XTEST_HASH_CASE(TEE_ALG_SHA512, 1, hash_data_sha512_in1,
1056 hash_data_sha512_out1),
1057};
1058
1059static void xtest_tee_test_4001(ADBG_Case_t *c)
1060{
1061 TEEC_Session session = { 0 };
1062 uint32_t ret_orig;
1063 size_t n;
1064
1065 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1066 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
1067 &ret_orig)))
1068 return;
1069
1070
1071 for (n = 0; n < ARRAY_SIZE(hash_cases); n++) {
1072 TEE_OperationHandle op1;
1073 TEE_OperationHandle op2;
1074 uint8_t out[64];
1075 size_t out_size;
1076
1077 Do_ADBG_BeginSubCase(c, "Hash case %d algo 0x%x",
1078 (int)n, (unsigned int)hash_cases[n].algo);
1079
1080 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1081 ta_crypt_cmd_allocate_operation(c, &session, &op1,
1082 hash_cases[n].algo,
1083 TEE_MODE_DIGEST, 0)))
1084 goto out;
1085
1086 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1087 ta_crypt_cmd_allocate_operation(c, &session, &op2,
1088 hash_cases[n].algo,
1089 TEE_MODE_DIGEST, 0)))
1090 goto out;
1091
1092 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1093 ta_crypt_cmd_digest_update(c, &session, op1,
1094 hash_cases[n].in,
1095 hash_cases[n].in_incr)))
1096 goto out;
1097
1098 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1099 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1100 goto out;
1101
1102 out_size = sizeof(out);
1103 memset(out, 0, sizeof(out));
1104 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1105 ta_crypt_cmd_digest_do_final(c, &session, op2,
1106 hash_cases[n].in + hash_cases[n].in_incr,
1107 hash_cases[n].in_len - hash_cases[n].in_incr,
1108 out, &out_size)))
1109 goto out;
1110
1111 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1112 hash_cases[n].out_len, out, out_size);
1113
1114 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1115 ta_crypt_cmd_reset_operation(c, &session, op1)))
1116 goto out;
1117
1118 out_size = sizeof(out);
1119 memset(out, 0, sizeof(out));
1120 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1121 ta_crypt_cmd_digest_do_final(c, &session, op1,
1122 hash_cases[n].in,
1123 hash_cases[n].in_len, out,
1124 &out_size)))
1125 goto out;
1126
1127 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1128 hash_cases[n].out_len, out, out_size);
1129
Jerome Forissier1e05e262015-07-29 16:09:07 +02001130 /*
1131 * Invoke TEE_DigestDoFinal() a second time to check that state
1132 * was properly reset
1133 */
1134 out_size = sizeof(out);
1135 memset(out, 0, sizeof(out));
1136 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1137 ta_crypt_cmd_digest_do_final(c, &session, op1,
1138 hash_cases[n].in,
1139 hash_cases[n].in_len, out,
1140 &out_size)))
1141 goto out;
1142
1143 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1144 hash_cases[n].out_len, out, out_size);
1145
Pascal Brandc639ac82015-07-02 08:53:34 +02001146 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1147 ta_crypt_cmd_free_operation(c, &session, op1)))
1148 goto out;
1149
1150 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1151 ta_crypt_cmd_free_operation(c, &session, op2)))
1152 goto out;
1153
1154 Do_ADBG_EndSubCase(c, NULL);
1155 }
1156
1157out:
1158 TEEC_CloseSession(&session);
1159}
1160
1161static const uint8_t mac_data_md5_key1[10] = {
1162 0x6B, 0x65, 0x79, /* key */
1163};
1164
1165static const uint8_t mac_data_md5_in1[] = {
1166 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1167 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1168 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1169 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1170 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1171 0x64, 0x6F, 0x67, /* dog */
1172};
1173
1174static const uint8_t mac_data_md5_out1[] = {
1175 0x80, 0x07, 0x07, 0x13, 0x46, 0x3e, 0x77, 0x49,
1176 0xb9, 0x0c, 0x2d, 0xc2, 0x49, 0x11, 0xe2, 0x75
1177};
1178
1179
1180/* generated with scripts/digest_hmac.pl */
1181static const uint8_t mac_data_sha1_key1[10] = {
1182 0x6B, 0x65, 0x79, /* key */
1183};
1184
1185static const uint8_t mac_data_sha1_in1[] = {
1186 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1187 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1188 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1189 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1190 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1191 0x64, 0x6F, 0x67, /* dog */
1192};
1193
1194static const uint8_t mac_data_sha1_out1[] = {
1195 0xDE, 0x7C, 0x9B, 0x85, 0xB8, 0xB7, 0x8A, 0xA6, /* .|...... */
1196 0xBC, 0x8A, 0x7A, 0x36, 0xF7, 0x0A, 0x90, 0x70, /* ..z6...p */
1197 0x1C, 0x9D, 0xB4, 0xD9, /* .... */
1198};
1199
1200static const uint8_t mac_data_sha224_key1[24] = {
1201 0x6B, 0x65, 0x79, /* key */
1202};
1203
1204static const uint8_t mac_data_sha224_in1[] = {
1205 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1206 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1207 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1208 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1209 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1210 0x64, 0x6F, 0x67, /* dog */
1211};
1212
1213static const uint8_t mac_data_sha224_out1[] = {
1214 0x88, 0xFF, 0x8B, 0x54, 0x67, 0x5D, 0x39, 0xB8, /* ...Tg]9. */
1215 0xF7, 0x23, 0x22, 0xE6, 0x5F, 0xF9, 0x45, 0xC5, /* .#"._.E. */
1216 0x2D, 0x96, 0x37, 0x99, 0x88, 0xAD, 0xA2, 0x56, /* -.7....V */
1217 0x39, 0x74, 0x7E, 0x69, /* 9t~i */
1218};
1219
1220
1221static const uint8_t mac_data_sha256_key1[24] = {
1222 'Q', 'W', 'E', 'R', 'T', 'Y'
1223};
1224
1225static const uint8_t mac_data_sha256_in1[] = { 'a', 'b', 'c' };
1226
1227static const uint8_t mac_data_sha256_out1[] = {
1228 0xee, 0x2e, 0x5d, 0x9b, 0x51, 0xe2, 0x9c, 0x1d,
1229 0x49, 0xe9, 0xae, 0x6f, 0x0a, 0xcc, 0x15, 0x18,
1230 0xde, 0x1e, 0xa3, 0x88, 0x8e, 0xee, 0x48, 0xbb,
1231 0x82, 0x77, 0xe9, 0x09, 0x74, 0x4b, 0xa2, 0xf2
1232};
1233
1234/* generated with scripts/digest_hmac.pl */
1235static const uint8_t mac_data_sha256_key2[24] = {
1236 0x6B, 0x65, 0x79, /* key */
1237};
1238
1239static const uint8_t mac_data_sha256_in2[] = {
1240 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1241 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1242 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1243 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1244 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1245 0x64, 0x6F, 0x67, /* dog */
1246};
1247
1248static const uint8_t mac_data_sha256_out2[] = {
1249 0xF7, 0xBC, 0x83, 0xF4, 0x30, 0x53, 0x84, 0x24, /* ....0S.$ */
1250 0xB1, 0x32, 0x98, 0xE6, 0xAA, 0x6F, 0xB1, 0x43, /* .2...o.C */
1251 0xEF, 0x4D, 0x59, 0xA1, 0x49, 0x46, 0x17, 0x59, /* .MY.IF.Y */
1252 0x97, 0x47, 0x9D, 0xBC, 0x2D, 0x1A, 0x3C, 0xD8, /* .G..-.<. */
1253};
1254
1255static const uint8_t mac_data_sha384_key1[32] = {
1256 0x6B, 0x65, 0x79, /* key */
1257};
1258
1259static const uint8_t mac_data_sha384_in1[] = {
1260 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1261 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1262 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1263 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1264 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1265 0x64, 0x6F, 0x67, /* dog */
1266};
1267
1268static const uint8_t mac_data_sha384_out1[] = {
1269 0xD7, 0xF4, 0x72, 0x7E, 0x2C, 0x0B, 0x39, 0xAE, /* ..r~, .9. */
1270 0x0F, 0x1E, 0x40, 0xCC, 0x96, 0xF6, 0x02, 0x42, /* ..@....B */
1271 0xD5, 0xB7, 0x80, 0x18, 0x41, 0xCE, 0xA6, 0xFC, /* ....A... */
1272 0x59, 0x2C, 0x5D, 0x3E, 0x1A, 0xE5, 0x07, 0x00, /* Y, ]>.... */
1273 0x58, 0x2A, 0x96, 0xCF, 0x35, 0xE1, 0xE5, 0x54, /* X...5..T */
1274 0x99, 0x5F, 0xE4, 0xE0, 0x33, 0x81, 0xC2, 0x37, /* ._..3..7 */
1275};
1276
1277static const uint8_t mac_data_sha512_key1[32] = {
1278 0x6B, 0x65, 0x79, /* key */
1279};
1280
1281static const uint8_t mac_data_sha512_in1[] = {
1282 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1283 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1284 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1285 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1286 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1287 0x64, 0x6F, 0x67, /* dog */
1288};
1289
1290static const uint8_t mac_data_sha512_out1[] = {
1291 0xB4, 0x2A, 0xF0, 0x90, 0x57, 0xBA, 0xC1, 0xE2, /* ....W... */
1292 0xD4, 0x17, 0x08, 0xE4, 0x8A, 0x90, 0x2E, 0x09, /* ........ */
1293 0xB5, 0xFF, 0x7F, 0x12, 0xAB, 0x42, 0x8A, 0x4F, /* .....B.O */
1294 0xE8, 0x66, 0x53, 0xC7, 0x3D, 0xD2, 0x48, 0xFB, /* .fS.=.H. */
1295 0x82, 0xF9, 0x48, 0xA5, 0x49, 0xF7, 0xB7, 0x91, /* ..H.I... */
1296 0xA5, 0xB4, 0x19, 0x15, 0xEE, 0x4D, 0x1E, 0xC3, /* .....M.. */
1297 0x93, 0x53, 0x57, 0xE4, 0xE2, 0x31, 0x72, 0x50, /* .SW..1rP */
1298 0xD0, 0x37, 0x2A, 0xFA, 0x2E, 0xBE, 0xEB, 0x3A, /* .7.....: */
1299};
1300
1301
1302/* AES-CBC-MAC */
1303static const uint8_t mac_cbc_vect1_key[] = {
1304 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1305 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1306};
1307
1308static const uint8_t mac_cbc_vect1_data[] = {
1309 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1310 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1311 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1312 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1313 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1314 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1315 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1316 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1317 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1318 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1319 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1320 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1321 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1322 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1323 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1324 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1325 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1326 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1327 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1328 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1329};
1330
1331static const uint8_t mac_cbc_vect1_out[] = {
1332 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1333 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1334};
1335
1336/* DES-CBC-MAC */
1337static const uint8_t mac_cbc_vect2_key[] = {
1338 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1339};
1340
1341#define mac_cbc_vect2_data mac_cbc_vect1_data
1342static const uint8_t mac_cbc_vect2_out[] = {
1343 0xE9, 0x41, 0x46, 0x30, 0x69, 0x32, 0xBD, 0xD6, /* .AF0i2.. */
1344};
1345
1346/* DES3-CBC-MAC */
1347static const uint8_t mac_cbc_vect3_key[] = {
1348 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1349 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1350 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1351};
1352
1353#define mac_cbc_vect3_data mac_cbc_vect2_data
1354static const uint8_t mac_cbc_vect3_out[] = {
1355 0x1C, 0x17, 0xB7, 0xB5, 0x9F, 0x54, 0x9C, 0x63, /* .....T.c */
1356};
1357
1358/* AES-CBC-MAC PKCS#5 pad*/
1359static const uint8_t mac_cbc_vect4_key[] = {
1360 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1361 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1362 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1363 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1364};
1365
1366#define mac_cbc_vect4_data mac_cbc_vect1_data
1367static const uint8_t mac_cbc_vect4_out[] = {
1368 0x0B, 0x46, 0xC7, 0xA2, 0xE1, 0x5A, 0xE2, 0x23, /* .F...Z.# */
1369 0x83, 0x34, 0x1C, 0x86, 0x53, 0xF8, 0x51, 0x24, /* .4..S.Q$ */
1370};
1371
1372/* DES-CBC-MAC PKCS#5 pad*/
1373static const uint8_t mac_cbc_vect5_key[] = {
1374 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1375};
1376
1377#define mac_cbc_vect5_data mac_cbc_vect1_data
1378static const uint8_t mac_cbc_vect5_out[] = {
1379 0x30, 0x81, 0x4F, 0x42, 0x03, 0x7E, 0xD8, 0xA9, /* 0.OB.~.. */
1380};
1381
1382/* DES3-CBC-MAC PKCS#5 pad*/
1383static const uint8_t mac_cbc_vect6_key[] = {
1384 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1385 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1386 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1387};
1388
1389#define mac_cbc_vect6_data mac_cbc_vect1_data
1390static const uint8_t mac_cbc_vect6_out[] = {
1391 0x6E, 0x37, 0x6E, 0x14, 0x5E, 0x21, 0xDD, 0xF8, /* n7n.^!.. */
1392};
1393
1394/* AES-CBC-MAC PKCS#5 pad*/
1395#define mac_cbc_vect7_key mac_cbc_vect4_key
1396static const uint8_t mac_cbc_vect7_data[] = {
1397 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1398 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1399 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1400 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1401 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1402 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1403 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1404 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1405 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1406 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1407 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1408 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1409 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1410 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1411 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1412 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1413 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1414 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1415 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1416 0x74, 0x69, 0x6F, 0x6E, 0x2E, /* tion. */
1417};
1418
1419static const uint8_t mac_cbc_vect7_out[] = {
1420 0xFD, 0x89, 0x35, 0xB3, 0x93, 0x7F, 0xBB, 0xA2, /* ..5..... */
1421 0xFB, 0x65, 0x60, 0xC4, 0x0A, 0x62, 0xA0, 0xF9, /* .e`..b.. */
1422};
1423
1424/* DES-CBC-MAC PKCS#5 pad*/
1425#define mac_cbc_vect8_key mac_cbc_vect5_key
1426#define mac_cbc_vect8_data mac_cbc_vect7_data
1427static const uint8_t mac_cbc_vect8_out[] = {
1428 0x02, 0x2A, 0xA8, 0x2E, 0x47, 0xC6, 0xBB, 0x7C, /* ....G..| */
1429};
1430
1431/* DES3-CBC-MAC PKCS#5 pad*/
1432#define mac_cbc_vect9_key mac_cbc_vect6_key
1433#define mac_cbc_vect9_data mac_cbc_vect7_data
1434static const uint8_t mac_cbc_vect9_out[] = {
1435 0xD4, 0xF7, 0x3E, 0x27, 0x78, 0x0E, 0x1C, 0x79, /* ..>'x..y */
1436};
1437
1438/*
Pascal Brand5c3d8092015-07-23 08:20:26 +02001439 * DES3-CBC-MAC, with key size of 112bit
1440 * out obtained with:
1441 * 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
1442 */
1443/* DES3-CBC-MAC PKCS#5 pad*/
1444static const uint8_t mac_cbc_vect10_key[] = {
1445 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1446 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1447};
1448#define mac_cbc_vect10_data mac_cbc_vect1_data
1449static const uint8_t mac_cbc_vect10_out[] = {
1450 0x30, 0x92, 0x60, 0x99, 0x66, 0xac, 0x8c, 0xa6,
1451};
1452
1453
1454/*
Pascal Brandc639ac82015-07-02 08:53:34 +02001455 * AES-CMAC
1456 * Test vectors from
1457 * http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf
1458 */
1459
1460/* AES-128 */
1461static const uint8_t mac_cmac_vect1_key[] = {
1462 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
1463 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
1464};
1465
1466static const uint8_t mac_cmac_vect1_out[] = {
1467 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28,
1468 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46
1469};
1470
1471#define mac_cmac_vect2_key mac_cmac_vect1_key
1472static const uint8_t mac_cmac_vect2_data[] = {
1473 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1474 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1475};
1476
1477static const uint8_t mac_cmac_vect2_out[] = {
1478 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44,
1479 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c
1480};
1481
1482#define mac_cmac_vect3_key mac_cmac_vect1_key
1483static const uint8_t mac_cmac_vect3_data[] = {
1484 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1485 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1486 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1487 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1488 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1489};
1490
1491static const uint8_t mac_cmac_vect3_out[] = {
1492 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30,
1493 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27
1494};
1495
1496#define mac_cmac_vect4_key mac_cmac_vect1_key
1497static const uint8_t mac_cmac_vect4_data[] = {
1498 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1499 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1500 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1501 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1502 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1503 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1504 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1505 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1506};
1507
1508static const uint8_t mac_cmac_vect4_out[] = {
1509 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92,
1510 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe
1511};
1512
1513/* AES-192 */
1514static const uint8_t mac_cmac_vect5_key[] = {
1515 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
1516 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
1517 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b
1518};
1519
1520static const uint8_t mac_cmac_vect5_out[] = {
1521 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5,
1522 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67
1523};
1524
1525
1526#define mac_cmac_vect6_key mac_cmac_vect5_key
1527static const uint8_t mac_cmac_vect6_data[] = {
1528 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1529 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1530};
1531
1532static const uint8_t mac_cmac_vect6_out[] = {
1533 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90,
1534 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84
1535};
1536
1537#define mac_cmac_vect7_key mac_cmac_vect5_key
1538static const uint8_t mac_cmac_vect7_data[] = {
1539 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1540 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1541 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1542 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1543 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1544};
1545
1546static const uint8_t mac_cmac_vect7_out[] = {
1547 0x8a, 0x1d, 0xe5, 0xbe, 0x2e, 0xb3, 0x1a, 0xad,
1548 0x08, 0x9a, 0x82, 0xe6, 0xee, 0x90, 0x8b, 0x0e
1549};
1550
1551#define mac_cmac_vect8_key mac_cmac_vect5_key
1552static const uint8_t mac_cmac_vect8_data[] = {
1553 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1554 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1555 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1556 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1557 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1558 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1559 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1560 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1561};
1562
1563static const uint8_t mac_cmac_vect8_out[] = {
1564 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79,
1565 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11
1566};
1567
1568/* AES-256 */
1569static const uint8_t mac_cmac_vect9_key[] = {
1570 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
1571 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
1572 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
1573 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4
1574};
1575
1576static const uint8_t mac_cmac_vect9_out[] = {
1577 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e,
1578 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83
1579};
1580
1581#define mac_cmac_vect10_key mac_cmac_vect9_key
1582static const uint8_t mac_cmac_vect10_data[] = {
1583 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1584 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1585};
1586
1587static const uint8_t mac_cmac_vect10_out[] = {
1588 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82,
1589 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c
1590};
1591
1592#define mac_cmac_vect11_key mac_cmac_vect9_key
1593static const uint8_t mac_cmac_vect11_data[] = {
1594 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1595 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1596 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1597 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1598 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1599};
1600
1601static const uint8_t mac_cmac_vect11_out[] = {
1602 0xaa, 0xf3, 0xd8, 0xf1, 0xde, 0x56, 0x40, 0xc2,
1603 0x32, 0xf5, 0xb1, 0x69, 0xb9, 0xc9, 0x11, 0xe6
1604};
1605
1606#define mac_cmac_vect12_key mac_cmac_vect9_key
1607static const uint8_t mac_cmac_vect12_data[] = {
1608 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1609 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1610 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1611 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1612 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1613 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1614 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1615 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1616};
1617
1618static const uint8_t mac_cmac_vect12_out[] = {
1619 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5,
1620 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10
1621};
1622
1623struct xtest_mac_case {
1624 uint32_t algo;
1625 uint32_t key_type;
1626 const uint8_t *key;
1627 size_t key_len;
1628 size_t in_incr;
1629 const uint8_t *in;
1630 size_t in_len;
1631 const uint8_t *out;
1632 size_t out_len;
1633};
1634
1635#define XTEST_MAC_CASE(algo, key_type, key, in_incr, in, out) \
1636 { (algo), (key_type), (key), ARRAY_SIZE(key), \
1637 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
1638
1639#define XTEST_MAC_CBC_CASE(algo, key_type, vect, in_incr) \
1640 XTEST_MAC_CASE((algo), (key_type), \
1641 mac_cbc_ ## vect ## _key, (in_incr), \
1642 mac_cbc_ ## vect ## _data, mac_cbc_ ## vect ## _out)
1643
1644#define XTEST_MAC_CMAC_CASE(vect, in_incr) \
1645 XTEST_MAC_CASE(TEE_ALG_AES_CMAC, TEE_TYPE_AES, \
1646 mac_cmac_ ## vect ## _key, (in_incr), \
1647 mac_cmac_ ## vect ## _data, mac_cmac_ ## vect ## _out)
1648
1649static const struct xtest_mac_case mac_cases[] = {
1650 XTEST_MAC_CASE(TEE_ALG_HMAC_MD5, TEE_TYPE_HMAC_MD5,
1651 mac_data_md5_key1,
1652 4, mac_data_md5_in1, mac_data_md5_out1),
1653 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA1, TEE_TYPE_HMAC_SHA1,
1654 mac_data_sha1_key1,
1655 5, mac_data_sha1_in1, mac_data_sha1_out1),
1656 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA224, TEE_TYPE_HMAC_SHA224,
1657 mac_data_sha224_key1,
1658 8, mac_data_sha224_in1, mac_data_sha224_out1),
1659 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1660 mac_data_sha256_key1,
1661 1, mac_data_sha256_in1, mac_data_sha256_out1),
1662 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1663 mac_data_sha256_key2,
1664 7, mac_data_sha256_in2, mac_data_sha256_out2),
1665 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA384, TEE_TYPE_HMAC_SHA384,
1666 mac_data_sha384_key1,
1667 11, mac_data_sha384_in1, mac_data_sha384_out1),
1668 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA512, TEE_TYPE_HMAC_SHA512,
1669 mac_data_sha512_key1,
1670 13, mac_data_sha512_in1, mac_data_sha512_out1),
1671
1672 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_NOPAD, TEE_TYPE_AES, vect1, 14),
1673 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_NOPAD, TEE_TYPE_DES, vect2, 16),
1674 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_NOPAD, TEE_TYPE_DES3, vect3,
1675 17),
1676 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect4, 11),
1677 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect5, 9),
1678 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect6, 4),
1679 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect7, 3),
1680 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect8, 23),
1681 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect9,
1682 34),
Pascal Brand5c3d8092015-07-23 08:20:26 +02001683 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect10, 4),
Pascal Brandc639ac82015-07-02 08:53:34 +02001684
1685 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect1_key,
1686 ARRAY_SIZE(mac_cmac_vect1_key), 0, NULL, 0, mac_cmac_vect1_out,
1687 ARRAY_SIZE(mac_cmac_vect1_out) },
1688 XTEST_MAC_CMAC_CASE(vect2, 9),
1689 XTEST_MAC_CMAC_CASE(vect3, 9),
1690 XTEST_MAC_CMAC_CASE(vect4, 9),
1691 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect5_key,
1692 ARRAY_SIZE(mac_cmac_vect5_key), 0, NULL, 0, mac_cmac_vect5_out,
1693 ARRAY_SIZE(mac_cmac_vect5_out) },
1694 XTEST_MAC_CMAC_CASE(vect6, 9),
1695 XTEST_MAC_CMAC_CASE(vect7, 9),
1696 XTEST_MAC_CMAC_CASE(vect8, 9),
1697 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect9_key,
1698 ARRAY_SIZE(mac_cmac_vect9_key), 0, NULL, 0, mac_cmac_vect9_out,
1699 ARRAY_SIZE(mac_cmac_vect9_out) },
1700 XTEST_MAC_CMAC_CASE(vect10, 9),
1701 XTEST_MAC_CMAC_CASE(vect11, 9),
1702 XTEST_MAC_CMAC_CASE(vect12, 9),
1703};
1704
1705static void xtest_tee_test_4002(ADBG_Case_t *c)
1706{
1707 TEEC_Session session = { 0 };
1708 TEE_OperationHandle op1;
1709 TEE_OperationHandle op2;
1710 TEE_ObjectHandle key_handle;
1711 uint8_t out[64];
1712 size_t out_size;
1713 uint32_t ret_orig;
1714 size_t n;
1715
1716 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1717 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
1718 &ret_orig)))
1719 return;
1720
1721 for (n = 0; n < ARRAY_SIZE(mac_cases); n++) {
1722 TEE_Attribute key_attr;
1723 size_t key_size;
1724
1725 Do_ADBG_BeginSubCase(c, "MAC case %d algo 0x%x",
1726 (int)n, (unsigned int)mac_cases[n].algo);
1727
1728 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
1729 key_attr.content.ref.buffer = (void *)mac_cases[n].key;
1730 key_attr.content.ref.length = mac_cases[n].key_len;
1731
1732 key_size = key_attr.content.ref.length * 8;
1733 if (mac_cases[n].key_type == TEE_TYPE_DES ||
1734 mac_cases[n].key_type == TEE_TYPE_DES3)
1735 /* Exclude parity in bit size of key */
1736 key_size -= key_size / 8;
1737
1738 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1739 ta_crypt_cmd_allocate_operation(c, &session, &op1,
1740 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1741 goto out;
1742
1743 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1744 ta_crypt_cmd_allocate_operation(c, &session, &op2,
1745 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1746 goto out;
1747
1748 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1749 ta_crypt_cmd_allocate_transient_object(c, &session,
1750 mac_cases[n].key_type, key_size, &key_handle)))
1751 goto out;
1752
1753 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1754 ta_crypt_cmd_populate_transient_object(c, &session,
1755 key_handle, &key_attr, 1)))
1756 goto out;
1757
1758 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1759 ta_crypt_cmd_set_operation_key(c, &session, op1,
1760 key_handle)))
1761 goto out;
1762
1763 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1764 ta_crypt_cmd_free_transient_object(c, &session,
1765 key_handle)))
1766 goto out;
1767
1768 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1769 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1770 goto out;
1771
1772 if (mac_cases[n].in != NULL) {
1773 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1774 ta_crypt_cmd_mac_update(c, &session, op1,
1775 mac_cases[n].in, mac_cases[n].in_incr)))
1776 goto out;
1777 }
1778
1779 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1780 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1781 goto out;
1782
1783 out_size = sizeof(out);
1784 memset(out, 0, sizeof(out));
1785 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1786 ta_crypt_cmd_mac_final_compute(c, &session, op2,
1787 mac_cases[n].in + mac_cases[n].in_incr,
1788 mac_cases [n].in_len - mac_cases[n].in_incr,
1789 out, &out_size)))
1790 goto out;
1791
1792 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1793 mac_cases[n].out_len, out, out_size);
1794
1795 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1796 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1797 goto out;
1798
1799 out_size = sizeof(out);
1800 memset(out, 0, sizeof(out));
1801 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1802 ta_crypt_cmd_mac_final_compute(c, &session, op1,
1803 mac_cases[n].in, mac_cases[n].in_len, out,
1804 &out_size)))
1805 goto out;
1806
1807 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1808 mac_cases[n].out_len, out, out_size);
1809
1810 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1811 ta_crypt_cmd_free_operation(c, &session, op1)))
1812 goto out;
1813
1814 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1815 ta_crypt_cmd_free_operation(c, &session, op2)))
1816 goto out;
1817
1818 Do_ADBG_EndSubCase(c, NULL);
1819 }
1820out:
1821 TEEC_CloseSession(&session);
1822}
1823
1824/* generated with scripts/crypt_aes_cbc_nopad.pl */
1825static const uint8_t ciph_data_aes_key1[] = {
1826 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1827 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1828};
1829
1830static const uint8_t ciph_data_des_key1[] = {
1831 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 /* 01234567 */
1832};
1833
1834static const uint8_t ciph_data_des_key2[] = {
1835 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1836};
1837
1838
1839static const uint8_t ciph_data_des3_key1[] = {
1840 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1841 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1842 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1843};
1844
1845static const uint8_t ciph_data_des3_key2[] = {
1846 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1847 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1848 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1849};
1850
1851static const uint8_t ciph_data_des2_key1[] = {
1852 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1853 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1854};
1855
1856static const uint8_t ciph_data_in1[] = {
1857 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1858 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1859 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1860 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1861 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1862 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1863};
1864
1865static const uint8_t ciph_data_in3[] = {
1866 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1867 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1868 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1869 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1870 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1871 0x43, 0x44, 0x45, 0x46, 0x30, /* CDEF0 */
1872};
1873
1874static const uint8_t ciph_data_128_iv1[] = {
1875 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1876 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */
1877};
1878
1879static const uint8_t ciph_data_64_iv1[] = {
1880 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1881};
1882
1883static const uint8_t ciph_data_in2[] = {
1884 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
1885};
1886
1887static const uint8_t ciph_data_aes_ecb_nopad_out1[] = {
1888 0xA5, 0xBE, 0x14, 0xD5, 0x01, 0x05, 0x24, 0x48, /* ......$H */
1889 0x58, 0x1A, 0x6B, 0x82, 0xD4, 0x41, 0xD2, 0xB3, /* X.k..A.. */
1890 0xBB, 0xF9, 0xAE, 0x37, 0x94, 0xAC, 0x18, 0x50, /* ...7...P */
1891 0x87, 0x09, 0xCC, 0x3F, 0x43, 0xD2, 0xC2, 0xB7, /* ...?C... */
1892 0xD7, 0x6F, 0x84, 0x07, 0xB4, 0x78, 0xCE, 0x34, /* .o...x.4 */
1893 0x48, 0xC9, 0x16, 0x86, 0x42, 0xB8, 0xFF, 0xCF, /* H...B... */
1894};
1895
1896static const uint8_t ciph_data_aes_cbc_nopad_out1[] = {
1897 0x8D, 0x9F, 0x88, 0xD8, 0xAF, 0x9F, 0xC1, 0x3B, /* .......; */
1898 0x02, 0x15, 0x43, 0x6A, 0x8C, 0x1E, 0x34, 0x5C, /* ..Cj..4\ */
1899 0x83, 0xF4, 0x85, 0x3E, 0x43, 0x0F, 0xE5, 0x5F, /* ...>C.._ */
1900 0x81, 0x4C, 0xC0, 0x28, 0x3F, 0xD9, 0x98, 0x53, /* .L.(?..S */
1901 0xB1, 0x44, 0x51, 0x38, 0x21, 0xAB, 0x10, 0xCE, /* .DQ8!... */
1902 0xC2, 0xEC, 0x65, 0x54, 0xDD, 0x5C, 0xEA, 0xDC, /* ..eT.\.. */
1903};
1904
1905static const uint8_t ciph_data_aes_ctr_out1[] = {
1906 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1907 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1908 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1909 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1910 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1911 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1912};
1913
1914static const uint8_t ciph_data_aes_ctr_out2[] = {
1915 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1916 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1917 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1918 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1919 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1920 0x72, 0x0E, 0x3C, 0xD1, 0xA1, /* r.<.. */
1921};
1922
1923static const uint8_t ciph_data_aes_cbc_vect1_key[] = {
1924 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1925 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1926};
1927
1928static const uint8_t ciph_data_aes_cbc_vect1_iv[] = {
1929 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1930 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1931};
1932
1933static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = {
1934 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1935 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1936 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1937 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1938 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1939 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1940 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1941 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1942 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1943 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1944 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1945 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1946 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1947 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1948 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1949 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1950 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1951 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1952 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1953 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1954};
1955
1956static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = {
1957 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */
1958 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */
1959 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */
1960 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */
1961 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */
1962 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */
1963 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */
1964 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */
1965 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */
1966 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */
1967 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */
1968 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */
1969 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */
1970 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */
1971 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */
1972 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */
1973 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */
1974 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */
1975 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1976 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1977};
1978
1979/* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962
1980 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */
1981static const uint8_t ciph_data_aes_cts_vect1_key[] = {
1982 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20,
1983 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69
1984};
1985
1986static const uint8_t ciph_data_aes_cts_vect1_iv[16] = {
1987 0x00
1988};
1989
1990static const uint8_t ciph_data_aes_cts_vect1_ptx[] = {
1991 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1992 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1993 0x20
1994};
1995
1996static const uint8_t ciph_data_aes_cts_vect1_ctx[] = {
1997 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
1998 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
1999 0x97
2000};
2001
2002#define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key
2003#define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv
2004static const uint8_t ciph_data_aes_cts_vect2_ptx[] = {
2005 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2006 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2007 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2008 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20
2009};
2010
2011static const uint8_t ciph_data_aes_cts_vect2_ctx[] = {
2012 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
2013 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
2014 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2015 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
2016};
2017
2018#define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key
2019#define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv
2020static const uint8_t ciph_data_aes_cts_vect3_ptx[] = {
2021 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2022 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2023 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2024 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2025};
2026
2027static const uint8_t ciph_data_aes_cts_vect3_ctx[] = {
2028 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2029 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2030 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2031 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2032};
2033
2034#define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key
2035#define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv
2036static const uint8_t ciph_data_aes_cts_vect4_ptx[] = {
2037 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2038 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2039 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2040 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2041 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2042 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c,
2043};
2044
2045static const uint8_t ciph_data_aes_cts_vect4_ctx[] = {
2046 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2047 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2048 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
2049 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
2050 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2051 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5,
2052};
2053
2054#define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key
2055#define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv
2056static const uint8_t ciph_data_aes_cts_vect5_ptx[] = {
2057 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2058 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2059 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2060 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2061 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2062 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2063};
2064
2065static const uint8_t ciph_data_aes_cts_vect5_ctx[] = {
2066 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2067 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2068 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2069 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2070 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2071 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2072};
2073
2074#define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key
2075#define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv
2076static const uint8_t ciph_data_aes_cts_vect6_ptx[] = {
2077 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2078 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2079 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2080 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2081 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2082 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2083 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74,
2084 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e,
2085};
2086
2087static const uint8_t ciph_data_aes_cts_vect6_ctx[] = {
2088 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2089 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2090 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2091 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2092 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
2093 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
2094 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2095 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2096};
2097
2098static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2099 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2100 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2101 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2102 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2103 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2104 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2105};
2106
2107static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2108 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2109};
2110
2111static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2112 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2113 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2114 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2115 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2116 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2117 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2118};
2119
2120static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2121 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2122 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2123 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2124 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2125 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2126 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2127};
2128
2129static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2130 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2131 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2132 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2133 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2134 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2135 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2136};
2137
2138static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2139 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2140 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2141 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2142 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2143 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2144 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2145};
2146
2147static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2148 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2149 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2150 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2151 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2152 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2153 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2154};
2155
2156struct xtest_ciph_case {
2157 uint32_t algo;
2158 uint32_t mode;
2159 uint32_t key_type;
2160 const uint8_t *key1;
2161 size_t key1_len;
2162 const uint8_t *key2;
2163 size_t key2_len;
2164 const uint8_t *iv;
2165 size_t iv_len;
2166 size_t in_incr;
2167 const uint8_t *in;
2168 size_t in_len;
2169 const uint8_t *out;
2170 size_t out_len;
2171 size_t line;
2172};
2173
2174#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2175 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2176 NULL, 0, NULL, 0, \
2177 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2178 __LINE__ }, \
2179 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2180 NULL, 0, NULL, 0, \
2181 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2182
2183#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2184 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2185 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2186 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2187 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2188 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2189 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2190
2191#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2192 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2193 ciph_data_aes_xts_ ## vect ## _key1, \
2194 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2195 ciph_data_aes_xts_ ## vect ## _key2, \
2196 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2197 ciph_data_aes_xts_ ## vect ## _iv, \
2198 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2199 (in_incr), \
2200 ciph_data_aes_xts_ ## vect ## _ptx, \
2201 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2202 ciph_data_aes_xts_ ## vect ## _ctx, \
2203 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2204 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2205 ciph_data_aes_xts_ ## vect ## _key1, \
2206 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2207 ciph_data_aes_xts_ ## vect ## _key2, \
2208 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2209 ciph_data_aes_xts_ ## vect ## _iv, \
2210 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2211 (in_incr), \
2212 ciph_data_aes_xts_ ## vect ## _ctx, \
2213 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2214 ciph_data_aes_xts_ ## vect ## _ptx, \
2215 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2216
2217#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2218 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2219 ciph_data_aes_cbc_ ## vect ## _key, \
2220 ciph_data_aes_cbc_ ## vect ## _iv, \
2221 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2222 ciph_data_aes_cbc_ ## vect ## _ctx)
2223
2224#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2225 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2226 ciph_data_aes_cts_ ## vect ## _key, \
2227 ciph_data_aes_cts_ ## vect ## _iv, \
2228 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2229 ciph_data_aes_cts_ ## vect ## _ctx)
2230
2231static const struct xtest_ciph_case ciph_cases[] = {
2232 /* AES */
2233 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2234 ciph_data_aes_key1, 11, ciph_data_in1,
2235 ciph_data_aes_ecb_nopad_out1),
2236 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2237 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2238 ciph_data_in1,
2239 ciph_data_aes_cbc_nopad_out1),
2240 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2241 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2242 ciph_data_in1,
2243 ciph_data_aes_ctr_out1),
2244 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2245 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2246 ciph_data_in3,
2247 ciph_data_aes_ctr_out2),
2248
2249 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
2250
2251 /* AES-CTS */
2252 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2253 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2254 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2255 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2256 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2257 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2258 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
2259
2260 /* DES */
2261 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2262 ciph_data_des_key1, 14, ciph_data_in1,
2263 ciph_data_des_ecb_nopad_out1),
2264 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2265 ciph_data_des_key2, 3, ciph_data_in2,
2266 ciph_data_des_ecb_nopad_out2),
2267 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2268 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2269 ciph_data_des_cbc_nopad_out1),
2270
2271 /* DES3 */
2272 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2273 ciph_data_des3_key1, 11, ciph_data_in1,
2274 ciph_data_des3_ecb_nopad_out1),
2275 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2276 ciph_data_des3_key2, 3, ciph_data_in2,
2277 ciph_data_des_ecb_nopad_out2),
2278 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2279 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2280 ciph_data_in1,
2281 ciph_data_des3_cbc_nopad_out1),
2282
2283 /* DES2 */
2284 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2285 ciph_data_des2_key1, 11, ciph_data_in1,
2286 ciph_data_des2_ecb_nopad_out1),
2287 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2288 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2289 ciph_data_in1,
2290 ciph_data_des2_cbc_nopad_out1),
2291};
2292
2293static const struct xtest_ciph_case ciph_cases_xts[] = {
2294 /* AES-XTS */
2295 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2296 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2297 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2298 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2299 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2300 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2301 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2302 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2303 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2304 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2305 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2306 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2307 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2308 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2309 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2310 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2311 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2312 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2313 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
2314};
2315
2316static void xtest_tee_test_4003_no_xts(ADBG_Case_t *c)
2317{
2318 TEEC_Session session = { 0 };
2319 TEE_OperationHandle op;
2320 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2321 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2322 uint8_t out[2048];
2323 size_t out_size;
2324 size_t out_offs;
2325 uint32_t ret_orig;
2326 size_t n;
2327
2328 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2329 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2330 &ret_orig)))
2331 return;
2332
2333 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
2334 TEE_Attribute key_attr;
2335 size_t key_size;
2336 size_t op_key_size;
2337
2338
2339 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2340 (int)n, (unsigned int)ciph_cases[n].algo,
2341 (int)ciph_cases[n].line);
2342
2343 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2344 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2345 key_attr.content.ref.length = ciph_cases[n].key1_len;
2346
2347 key_size = key_attr.content.ref.length * 8;
2348 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2349 ciph_cases[n].key_type == TEE_TYPE_DES3)
2350 /* Exclude parity in bit size of key */
2351 key_size -= key_size / 8;
2352
2353 op_key_size = key_size;
2354 if (ciph_cases[n].key2 != NULL)
2355 op_key_size *= 2;
2356
2357 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2358 ta_crypt_cmd_allocate_operation(c, &session, &op,
2359 ciph_cases[n].algo, ciph_cases[n].mode,
2360 op_key_size)))
2361 goto out;
2362
2363 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2364 ta_crypt_cmd_allocate_transient_object(c, &session,
2365 ciph_cases[n].key_type, key_size,
2366 &key1_handle)))
2367 goto out;
2368
2369 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2370 ta_crypt_cmd_populate_transient_object(c, &session,
2371 key1_handle, &key_attr, 1)))
2372 goto out;
2373
2374 if (ciph_cases[n].key2 != NULL) {
2375 key_attr.content.ref.buffer =
2376 (void *)ciph_cases[n].key2;
2377 key_attr.content.ref.length = ciph_cases[n].key2_len;
2378
2379 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2380 ta_crypt_cmd_allocate_transient_object(c,
2381 &session, ciph_cases[n].key_type,
2382 key_attr.content.ref.length * 8,
2383 &key2_handle)))
2384 goto out;
2385
2386 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2387 ta_crypt_cmd_populate_transient_object(c,
2388 &session, key2_handle, &key_attr, 1)))
2389 goto out;
2390
2391 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2392 ta_crypt_cmd_set_operation_key2(c, &session, op,
2393 key1_handle, key2_handle)))
2394 goto out;
2395 } else {
2396 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2397 ta_crypt_cmd_set_operation_key(c, &session, op,
2398 key1_handle)))
2399 goto out;
2400 }
2401
2402 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2403 ta_crypt_cmd_free_transient_object(c, &session,
2404 key1_handle)))
2405 goto out;
2406 key1_handle = TEE_HANDLE_NULL;
2407
2408 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2409 ta_crypt_cmd_free_transient_object(c, &session,
2410 key2_handle)))
2411 goto out;
2412 key2_handle = TEE_HANDLE_NULL;
2413
2414 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2415 ta_crypt_cmd_cipher_init(c, &session, op,
2416 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2417 goto out;
2418
2419 out_offs = 0;
2420 out_size = sizeof(out);
2421 memset(out, 0, sizeof(out));
2422 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2423 ta_crypt_cmd_cipher_update(c, &session, op,
2424 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2425 &out_size)))
2426 goto out;
2427
2428 out_offs += out_size;
2429 out_size = sizeof(out) - out_offs;
2430
2431 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2432 ta_crypt_cmd_cipher_do_final(c, &session, op,
2433 ciph_cases[n].in + ciph_cases[n].in_incr,
2434 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2435 out + out_offs,
2436 &out_size)))
2437 goto out;
2438
2439 out_offs += out_size;
2440
2441 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2442 ciph_cases[n].out_len, out, out_offs);
2443
2444 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2445 ta_crypt_cmd_free_operation(c, &session, op)))
2446 goto out;
2447
2448 Do_ADBG_EndSubCase(c, NULL);
2449 }
2450out:
2451 TEEC_CloseSession(&session);
2452}
2453
2454/*
2455 * This is a split of the original xtest 4003 as eary version of the ST TEE.
2456 *
2457 * Core did not support xts.
2458 */
2459static void xtest_tee_test_4003_xts(ADBG_Case_t *c)
2460{
2461 TEEC_Session session = { 0 };
2462 TEE_OperationHandle op;
2463 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2464 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2465 uint8_t out[2048];
2466 size_t out_size;
2467 size_t out_offs;
2468 uint32_t ret_orig;
2469 size_t n;
2470
2471 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2472 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2473 &ret_orig)))
2474 return;
2475
2476 for (n = 0; n < ARRAY_SIZE(ciph_cases_xts); n++) {
2477 TEE_Attribute key_attr;
2478 size_t key_size;
2479 size_t op_key_size;
2480
2481 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2482 (int)n,
2483 (unsigned int)ciph_cases_xts[n].algo,
2484 (int)ciph_cases_xts[n].line);
2485
2486 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2487 key_attr.content.ref.buffer = (void *)ciph_cases_xts[n].key1;
2488 key_attr.content.ref.length = ciph_cases_xts[n].key1_len;
2489
2490 key_size = key_attr.content.ref.length * 8;
2491 if (ciph_cases_xts[n].key_type == TEE_TYPE_DES ||
2492 ciph_cases_xts[n].key_type == TEE_TYPE_DES3)
2493 /* Exclude parity in bit size of key */
2494 key_size -= key_size / 8;
2495
2496 op_key_size = key_size;
2497 if (ciph_cases_xts[n].key2 != NULL)
2498 op_key_size *= 2;
2499
2500 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2501 ta_crypt_cmd_allocate_operation(c, &session, &op,
2502 ciph_cases_xts[n].algo, ciph_cases_xts[n].mode,
2503 op_key_size)))
2504 goto out;
2505
2506 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2507 ta_crypt_cmd_allocate_transient_object(c, &session,
2508 ciph_cases_xts[n].key_type, key_size,
2509 &key1_handle)))
2510 goto out;
2511
2512 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2513 ta_crypt_cmd_populate_transient_object(c, &session,
2514 key1_handle, &key_attr, 1)))
2515 goto out;
2516
2517 if (ciph_cases_xts[n].key2 != NULL) {
2518 key_attr.content.ref.buffer =
2519 (void *)ciph_cases_xts[n].key2;
2520
2521 key_attr.content.ref.length =
2522 ciph_cases_xts[n].key2_len;
2523
2524 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2525 ta_crypt_cmd_allocate_transient_object(c,
2526 &session, ciph_cases_xts[n].key_type,
2527 key_attr.content.ref.length * 8,
2528 &key2_handle)))
2529 goto out;
2530
2531 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2532 ta_crypt_cmd_populate_transient_object(c,
2533 &session, key2_handle, &key_attr, 1)))
2534 goto out;
2535
2536 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2537 ta_crypt_cmd_set_operation_key2(c, &session, op,
2538 key1_handle, key2_handle)))
2539 goto out;
2540 } else {
2541 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2542 ta_crypt_cmd_set_operation_key(c, &session, op,
2543 key1_handle)))
2544 goto out;
2545 }
2546
2547 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2548 ta_crypt_cmd_free_transient_object(c, &session,
2549 key1_handle)))
2550 goto out;
2551
2552 key1_handle = TEE_HANDLE_NULL;
2553
2554 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2555 ta_crypt_cmd_free_transient_object(c, &session,
2556 key2_handle)))
2557 goto out;
2558
2559 key2_handle = TEE_HANDLE_NULL;
2560
2561 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_cipher_init(c,
2562 &
2563 session,
2564 op,
2565 ciph_cases_xts
2566 [n].iv, ciph_cases_xts[n].iv_len)))
2567 goto out;
2568
2569 out_offs = 0;
2570 out_size = sizeof(out);
2571 memset(out, 0, sizeof(out));
2572 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2573 ta_crypt_cmd_cipher_update(c, &session, op,
2574 ciph_cases_xts[n].in, ciph_cases_xts[n].in_incr,
2575 out, &out_size)))
2576 goto out;
2577
2578 out_offs += out_size;
2579 out_size = sizeof(out) - out_offs;
2580
2581 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2582 ta_crypt_cmd_cipher_do_final(c, &session, op,
2583 ciph_cases_xts[n].in +
2584 ciph_cases_xts[n].in_incr,
2585 ciph_cases_xts[n].in_len -
2586 ciph_cases_xts[n].in_incr,
2587 out + out_offs,
2588 &out_size)))
2589 goto out;
2590 out_offs += out_size;
2591
2592 (void)ADBG_EXPECT_BUFFER(c, ciph_cases_xts[n].out,
2593 ciph_cases_xts[n].out_len, out,
2594 out_offs);
2595
2596 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2597 ta_crypt_cmd_free_operation(c, &session, op)))
2598 goto out;
2599
2600 Do_ADBG_EndSubCase(c, NULL);
2601 }
2602out:
2603 TEEC_CloseSession(&session);
2604}
2605
2606static void xtest_tee_test_4004(ADBG_Case_t *c)
2607{
2608 TEEC_Session session = { 0 };
2609 uint32_t ret_orig;
2610 uint8_t buf1[45] = { 0 };
2611 uint8_t buf2[45] = { 0 };
2612 static const uint8_t zeros[45] = { 0 };
2613
2614 Do_ADBG_BeginSubCase(c, "TEE get random");
2615 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2616 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2617 &ret_orig)))
2618 return;
2619
2620 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2621 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2622 sizeof(buf1))))
2623 goto out;
2624
2625 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2626 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2627
2628 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2629 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2630 sizeof(buf2))))
2631 goto out;
2632
2633 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2634 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2635
2636 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2637 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2638out:
2639 TEEC_CloseSession(&session);
2640 Do_ADBG_EndSubCase(c, "TEE get random");
2641}
2642
2643
2644struct xtest_ae_case {
2645 uint32_t algo;
2646 uint32_t mode;
2647 uint32_t key_type;
2648 const uint8_t *key;
2649 size_t key_len;
2650 const uint8_t *nonce;
2651 size_t nonce_len;
2652 size_t aad_incr;
2653 const uint8_t *aad;
2654 size_t aad_len;
2655 size_t in_incr;
2656 const uint8_t *ptx;
2657 size_t ptx_len;
2658 const uint8_t *ctx;
2659 size_t ctx_len;
2660 const uint8_t *tag;
2661 size_t tag_len;
2662 size_t line;
2663};
2664
2665
2666#define ARRAY(a) a, ARRAY_SIZE(a)
2667#define NULL_ARRAY(a) NULL, 0
2668
2669#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2670 aad_array, ptx_array, ctx_array) \
2671 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2672 ARRAY(vect ## _nonce), (aad_incr), \
2673 aad_array(vect ## _aad), (in_incr), \
2674 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2675 ARRAY(vect ## _tag), \
2676 __LINE__ }, \
2677 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2678 ARRAY(vect ## _nonce), (aad_incr), \
2679 aad_array(vect ## _aad), (in_incr), \
2680 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2681 ARRAY(vect ## _tag), \
2682 __LINE__ }
2683
2684#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2685 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2686 in_incr, ARRAY, ARRAY, ARRAY)
2687
2688#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2689 aad_array, ptx_array, ctx_array) \
2690 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2691 in_incr, aad_array, ptx_array, ctx_array)
2692
2693
2694
2695static const struct xtest_ae_case ae_cases[] = {
2696 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2697 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2698 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2699
2700 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2701 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2702 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2703 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x20, NULL_ARRAY, ARRAY, ARRAY),
2704 XTEST_AE_CASE_AES_GCM(vect4, 5, 9, ARRAY, ARRAY, ARRAY),
2705 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2706 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2707 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2708 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2709 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2710 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2711 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2712 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2713 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2714 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2715 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2716 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2717 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2718 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
2719};
2720
2721static void xtest_tee_test_4005(ADBG_Case_t *c)
2722{
2723 TEEC_Session session = { 0 };
2724 TEE_OperationHandle op;
2725 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
2726 TEE_Attribute key_attr;
2727 uint8_t out[512];
2728 size_t out_size;
2729 size_t out_offs;
2730 uint32_t ret_orig;
2731 size_t n;
2732
2733 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2734 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2735 &ret_orig)))
2736 return;
2737
2738 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2739 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2740 (int)n, (unsigned int)ae_cases[n].algo,
2741 (int)ae_cases[n].line);
2742
2743 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2744 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2745 key_attr.content.ref.length = ae_cases[n].key_len;
2746
2747 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2748 ta_crypt_cmd_allocate_operation(c, &session, &op,
2749 ae_cases[n].algo, ae_cases[n].mode,
2750 key_attr.content.ref.length * 8)))
2751 goto out;
2752
2753 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2754 ta_crypt_cmd_allocate_transient_object(c, &session,
2755 ae_cases[n].key_type,
2756 key_attr.content.ref.length * 8,
2757 &key_handle)))
2758 goto out;
2759
2760 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2761 ta_crypt_cmd_populate_transient_object(c, &session,
2762 key_handle, &key_attr, 1)))
2763 goto out;
2764
2765 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2766 ta_crypt_cmd_set_operation_key(c, &session, op,
2767 key_handle)))
2768 goto out;
2769
2770 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2771 ta_crypt_cmd_free_transient_object(c, &session,
2772 key_handle)))
2773 goto out;
2774 key_handle = TEE_HANDLE_NULL;
2775
2776 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2777 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2778 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2779 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2780 goto out;
2781
2782 if (ae_cases[n].aad != NULL) {
2783 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2784 ta_crypt_cmd_ae_update_aad(c, &session, op,
2785 ae_cases[n].aad, ae_cases[n].aad_incr)))
2786 goto out;
2787
2788 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2789 ta_crypt_cmd_ae_update_aad(c, &session, op,
2790 ae_cases[n].aad + ae_cases[n].aad_incr,
2791 ae_cases [n].aad_len -
2792 ae_cases[n].aad_incr)))
2793 goto out;
2794 }
2795
2796 out_offs = 0;
2797 out_size = sizeof(out);
2798 memset(out, 0, sizeof(out));
2799 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2800 if (ae_cases[n].ptx != NULL) {
2801 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2802 ta_crypt_cmd_ae_update(c, &session, op,
2803 ae_cases[n].ptx,
2804 ae_cases[n].in_incr, out,
2805 &out_size)))
2806 goto out;
2807 out_offs += out_size;
2808 }
2809 } else {
2810 if (ae_cases[n].ctx != NULL) {
2811 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2812 ta_crypt_cmd_ae_update(c, &session, op,
2813 ae_cases[n].ctx,
2814 ae_cases[n].in_incr, out,
2815 &out_size)))
2816 goto out;
2817 out_offs += out_size;
2818 }
2819 }
2820
2821 out_size = sizeof(out) - out_offs;
2822 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2823 uint8_t out_tag[64];
2824 size_t out_tag_len = MIN(sizeof(out_tag),
2825 ae_cases[n].tag_len);
2826
2827 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2828 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2829 ae_cases[n].ptx + ae_cases[n].in_incr,
2830 ae_cases[n].ptx_len -
2831 ae_cases[n].in_incr,
2832 out + out_offs,
2833 &out_size, out_tag, &out_tag_len)))
2834 goto out;
2835
2836 (void)ADBG_EXPECT_BUFFER(c,
2837 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2838 out_tag_len);
2839
2840 out_offs += out_size;
2841
2842 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2843 ae_cases[n].ctx_len, out, out_offs);
2844 } else {
2845 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2846 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2847 ae_cases[n].ctx + ae_cases[n].in_incr,
2848 ae_cases[n].ctx_len -
2849 ae_cases[n].in_incr,
2850 out + out_offs,
2851 &out_size, ae_cases[n].tag,
2852 ae_cases[n].tag_len)))
2853 goto out;
2854
2855 out_offs += out_size;
2856
2857 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2858 ae_cases[n].ptx_len, out, out_offs);
2859 }
2860
2861 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2862 ta_crypt_cmd_free_operation(c, &session, op)))
2863 goto out;
2864
2865 Do_ADBG_EndSubCase(c, NULL);
2866 }
2867out:
2868 TEEC_CloseSession(&session);
2869}
2870
2871struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002872 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002873 uint32_t algo;
2874 TEE_OperationMode mode;
2875
2876 union {
2877 struct {
2878 const uint8_t *modulus;
2879 size_t modulus_len;
2880
2881 const uint8_t *pub_exp;
2882 size_t pub_exp_len;
2883
2884 const uint8_t *priv_exp;
2885 size_t priv_exp_len;
2886
2887 const uint8_t *prime1; /* q */
2888 size_t prime1_len;
2889 const uint8_t *prime2; /* p */
2890 size_t prime2_len;
2891 const uint8_t *exp1; /* dp */
2892 size_t exp1_len;
2893 const uint8_t *exp2; /* dq */
2894 size_t exp2_len;
2895 const uint8_t *coeff; /* iq */
2896 size_t coeff_len;
2897
2898 int salt_len;
2899 } rsa;
2900 struct {
2901 const uint8_t *prime;
2902 size_t prime_len;
2903 const uint8_t *sub_prime;
2904 size_t sub_prime_len;
2905 const uint8_t *base;
2906 size_t base_len;
2907 const uint8_t *pub_val;
2908 size_t pub_val_len;
2909 const uint8_t *priv_val;
2910 size_t priv_val_len;
2911 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002912 struct {
2913 const uint8_t *private;
2914 size_t private_len;
2915 const uint8_t *public_x;
2916 size_t public_x_len;
2917 const uint8_t *public_y;
2918 size_t public_y_len;
2919 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002920 } params;
2921
2922 const uint8_t *ptx;
2923 size_t ptx_len;
2924 const uint8_t *ctx;
2925 size_t ctx_len;
2926 size_t line;
2927};
2928
2929#define WITHOUT_SALT(x) -1
2930#define WITH_SALT(x) x
2931
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002932#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2933 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002934 ARRAY(vect ## _ptx), \
2935 ARRAY(vect ## _out), \
2936 __LINE__ }
2937
2938#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2939 { .rsa = { \
2940 ARRAY(vect ## _modulus), \
2941 ARRAY(vect ## _pub_exp), \
2942 ARRAY(vect ## _priv_exp), \
2943 opt_crt_array(vect ## _prime1), \
2944 opt_crt_array(vect ## _prime2), \
2945 opt_crt_array(vect ## _exp1), \
2946 opt_crt_array(vect ## _exp2), \
2947 opt_crt_array(vect ## _coeff), \
2948 opt_salt(vect ## _salt_len) \
2949 } }
2950
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002951#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2952 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002953 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2954
2955#define XTEST_AC_DSA_UNION(vect) \
2956 { .dsa = { \
2957 ARRAY(vect ## _prime), \
2958 ARRAY(vect ## _sub_prime), \
2959 ARRAY(vect ## _base), \
2960 ARRAY(vect ## _pub_val), \
2961 ARRAY(vect ## _priv_val), \
2962 } }
2963
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002964#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
2965 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02002966
Pascal Brand3e143ee2015-07-15 17:17:16 +02002967#define XTEST_AC_ECDSA_UNION(vect) \
2968 { .ecdsa = { \
2969 ARRAY(vect ## _private), \
2970 ARRAY(vect ## _public_x), \
2971 ARRAY(vect ## _public_y), \
2972 } }
2973
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002974#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
2975 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02002976
Pascal Brandc639ac82015-07-02 08:53:34 +02002977static const struct xtest_ac_case xtest_ac_cases[] = {
2978 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002979 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002980 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002981 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002982 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002983 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002984 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002985 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002986 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002987 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002988 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002989 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002990 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002991 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002992 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002993 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002994 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002995 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002996 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002997 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002998 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002999 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003000 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003001 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003002 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003003 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003004 ac_rsassa_vect7, NULL_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_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003006 ac_rsassa_vect7, NULL_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_SIGN,
3008 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
3009 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
3010 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02003011
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003012 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003013 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003014 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003015 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003016
3017 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003018 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003019 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003020 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003021
3022 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003023 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003024 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003025 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003026
3027 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003028 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003029 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003030 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
3031
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003032 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3033 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003034 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003035 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003036 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003037
3038 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3039 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003040 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003041 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3042 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003043 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003044
3045 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3046 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003047 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003048 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3049 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003050 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003051
3052 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3053 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003054 ac_rsassa_vect14, NULL_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_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003057 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003058
3059 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3060 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003061 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003062 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3063 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003064 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
3065
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003066 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003067 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003068 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003069 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003070 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003071 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003072 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003073 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003074 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003075 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003076 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003077 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
3078
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003079 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3080 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003081 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003082 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3083 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003084 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003085 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3086 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003087 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003088 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3089 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003090 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003091 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3092 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003093 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003094 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3095 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003096 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
3097
3098 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003099 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003100 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003101 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003102 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003103 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003104 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003105 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003106 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003107 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003108 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003109 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003110 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003111 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003112 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003113 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003114 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003115 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003116 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003117 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003118 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003119 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003120 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003121 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003122 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003123 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003124 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003125 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003126 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003127 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003128 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003129 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003130 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003131 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003132 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003133 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003134 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003135 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003136 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003137 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003138 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003139 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003140 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003141 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003142 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
3143
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003144 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3145 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003146 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003147 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003148 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003149 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3150 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003151 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003152 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3153 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003154 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003155 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3156 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003157 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003158 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3159 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003160 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003161 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3162 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003163 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003164 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3165 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003166 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003167 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3168 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003169 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003170 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3171 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003172 ac_rsassa_vect15, ARRAY, WITH_SALT),
3173
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003174 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003175 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003176 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003177 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003178 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003179 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003180 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003181 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003182 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003183 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003184 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003185 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3186
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003187 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3188 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003189 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003190 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3191 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003192 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003193 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3194 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003195 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003196 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3197 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003198 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003199 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3200 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003201 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003202 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3203 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003204 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3205
3206 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003207 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003208 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3209 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003210 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3211 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3212 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3213 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3214 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3215 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3216 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3217 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3218 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3219 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3220 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3221 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3222 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3223 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3224 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3225 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3226 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3227 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3228 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3229 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3230 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3231 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3232 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3233 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3234 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3235 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3236 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3237 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003238 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3239 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3240 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3241 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3242 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3243 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003244 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3245 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003246 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3247 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3248 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3249 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3250 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3251 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3252 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3253 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3254 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3255 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3256 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3257 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3258 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3259 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3260 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3261 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3262 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3263 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3264 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3265 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3266 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3267 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3268 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3269 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3270 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3271 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3272 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3273 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003274 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003275 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3276 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3277 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3278 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3279 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3280 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3281 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3282 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3283 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3284 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3285 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3286 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3287 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3288 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3289 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3290 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3291 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3292 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3293 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3294 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3295 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3296 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3297 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3298 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3299 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3300 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3301 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3302 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3303 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3304 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003305 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3306 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3307 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3308 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003309 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3310 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003311 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3312 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3313 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3314 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3315 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3316 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3317 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3318 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3319 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3320 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3321 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3322 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3323 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3324 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3325 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3326 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3327 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3328 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3329 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3330 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3331 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3332 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3333 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3334 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3335 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3336 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3337 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3338 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003339 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003340 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3341 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003342 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3343 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3344 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3345 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3346 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3347 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3348 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3349 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3350 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3351 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3352 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3353 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3354 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3355 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3356 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3357 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3358 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3359 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3360 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3361 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3362 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3363 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3364 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3365 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3366 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3367 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3368 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3369 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003370 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3371 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3372 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3373 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3374 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003375 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3376 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003377 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3378 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3379 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3380 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3381 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3382 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3383 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3384 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3385 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3386 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3387 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3388 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3389 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3390 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3391 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3392 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3393 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3394 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3395 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3396 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3397 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3398 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3399 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3400 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3401 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3402 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3403 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3404 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003405 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3406 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003407
3408 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003409 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003410 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003411 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003412 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003413 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003414 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003415 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003416 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003417 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003418 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003419 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003420 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003421 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003422 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003423 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003424 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003425 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003426 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003427 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003428 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003429 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003430 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003431 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003432 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003433 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003434 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003435 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003436 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003437 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003438 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003439 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003440 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003441 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003442 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003443 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003444 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003445 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003446 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003447 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003448 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003449 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003450 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003451 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003452 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003453 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003454 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003455 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003456 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003457 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003458 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003459 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003460 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003461 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003462 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003463 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003464 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003465 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003466 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003467 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003468 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003469 nist_186_2_ecdsa_testvector_15),
3470 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003471 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003472 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003473 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003474 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003475 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003476 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003477 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003478 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003479 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003480 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003481 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003482 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003483 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003484 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003485 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003486 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003487 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003488 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003489 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003490 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003491 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003492 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003493 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003494 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003495 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003496 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003497 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003498 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003499 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003500 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003501 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003502 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003503 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003504 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003505 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003506 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003507 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003508 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003509 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003510 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003511 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003512 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003513 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003514 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003515 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003516 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003517 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003518 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003519 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003520 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003521 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003522 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003523 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003524 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003525 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003526 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003527 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003528 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003529 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003530 nist_186_2_ecdsa_testvector_30),
3531 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003532 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003533 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003534 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003535 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003536 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003537 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003538 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003539 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003540 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003541 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003542 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003543 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003544 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003545 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003546 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003547 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003548 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003549 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003550 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003551 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003552 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003553 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003554 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003555 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003556 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003557 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003558 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003559 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003560 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003561 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003562 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003563 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003564 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003565 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003566 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003567 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003568 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003569 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003570 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003571 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003572 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003573 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003574 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003575 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003576 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003577 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003578 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003579 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003580 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003581 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003582 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003583 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003584 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003585 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003586 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003587 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003588 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003589 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003590 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003591 nist_186_2_ecdsa_testvector_45),
3592 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003593 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003594 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003595 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003596 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003597 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003598 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003599 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003600 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003601 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003602 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003603 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003604 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003605 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003606 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003607 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003608 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003609 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003610 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003611 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003612 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003613 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003614 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003615 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003616 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003617 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003618 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003619 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003620 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003621 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003622 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003623 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003624 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003625 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003626 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003627 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003628 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003629 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003630 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003631 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003632 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003633 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003634 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003635 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003636 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003637 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003638 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003639 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003640 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003641 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003642 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003643 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003644 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003645 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003646 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003647 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003648 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003649 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003650 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003651 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003652 nist_186_2_ecdsa_testvector_60),
3653 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003654 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003655 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003656 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003657 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003658 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003659 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003660 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003661 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003662 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003663 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003664 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003665 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003666 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003667 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003668 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003669 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003670 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003671 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003672 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003673 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003674 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003675 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003676 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003677 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003678 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003679 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003680 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003681 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003682 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003683 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003684 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003685 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003686 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003687 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003688 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003689 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003690 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003691 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003692 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003693 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003694 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003695 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003696 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003697 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003698 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003699 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003700 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003701 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003702 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003703 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003704 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003705 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003706 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003707 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003708 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003709 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003710 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003711 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003712 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003713 nist_186_2_ecdsa_testvector_75),
3714 /* [K-163] - GP NOT SUPPORTED */
3715 /* [K-233] - GP NOT SUPPORTED */
3716 /* [K-283] - GP NOT SUPPORTED */
3717 /* [K-409] - GP NOT SUPPORTED */
3718 /* [K-571] - GP NOT SUPPORTED */
3719 /* [B-163] - GP NOT SUPPORTED */
3720 /* [B-233] - GP NOT SUPPORTED */
3721 /* [B-283] - GP NOT SUPPORTED */
3722 /* [B-409] - GP NOT SUPPORTED */
3723 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003724};
3725
3726static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3727 uint32_t max_key_size, uint32_t key_type,
3728 TEE_Attribute *attrs, size_t num_attrs,
3729 TEE_ObjectHandle *handle)
3730{
3731 size_t n;
3732
3733 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3734 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3735 max_key_size, handle)))
3736 return false;
3737
3738 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3739 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3740 num_attrs)))
3741 return false;
3742
3743 for (n = 0; n < num_attrs; n++) {
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003744 uint8_t out[384];
Pascal Brandc639ac82015-07-02 08:53:34 +02003745 size_t out_size;
3746
3747 out_size = sizeof(out);
3748 memset(out, 0, sizeof(out));
Pascal Brand3e143ee2015-07-15 17:17:16 +02003749
3750 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3751 continue;
3752
Pascal Brandc639ac82015-07-02 08:53:34 +02003753 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3754 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3755 attrs[n].attributeID, out, &out_size)))
3756 return false;
3757
Pascal Brand3e143ee2015-07-15 17:17:16 +02003758 if (out_size < attrs[n].content.ref.length) {
3759 memmove(out + (attrs[n].content.ref.length - out_size),
3760 out,
3761 attrs[n].content.ref.length);
3762 memset(out, 0, attrs[n].content.ref.length - out_size);
3763 out_size = attrs[n].content.ref.length;
3764 }
3765
Pascal Brandc639ac82015-07-02 08:53:34 +02003766 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3767 attrs[n].content.ref.length, out, out_size))
3768 return false;
3769 }
3770
3771 return true;
3772}
3773
3774static void xtest_tee_test_4006(ADBG_Case_t *c)
3775{
3776 TEEC_Session session = { 0 };
3777 TEE_OperationHandle op = TEE_HANDLE_NULL;
3778 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3779 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
3780 TEE_Attribute key_attrs[8];
3781 TEE_Attribute algo_params[1];
3782 size_t num_algo_params;
3783 uint8_t out[512];
3784 size_t out_size;
3785 uint8_t out_enc[512];
3786 size_t out_enc_size;
3787 uint8_t ptx_hash[TEE_MAX_HASH_SIZE];
3788 size_t ptx_hash_size;
3789 size_t max_key_size;
3790 size_t num_key_attrs;
3791 uint32_t ret_orig;
3792 size_t n;
Pascal Brand3e143ee2015-07-15 17:17:16 +02003793 uint32_t curve;
3794 uint32_t hash_algo;
Pascal Brandc639ac82015-07-02 08:53:34 +02003795
3796 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3797 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3798 &ret_orig)))
3799 return;
3800
3801 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3802 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3803
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003804 if (tv->level > level)
3805 continue;
3806
Pascal Brandc639ac82015-07-02 08:53:34 +02003807 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3808 (int)n, (unsigned int)tv->algo,
3809 (int)tv->line);
3810
3811 /*
3812 * When signing or verifying we're working with the hash of
3813 * the payload.
3814 */
3815 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003816 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3817 hash_algo = TEE_ALG_SHA1;
3818 else
3819 hash_algo = TEE_ALG_HASH_ALGO(
3820 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003821
3822 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3823 ta_crypt_cmd_allocate_operation(c, &session,
3824 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3825 goto out;
3826
3827 ptx_hash_size = sizeof(ptx_hash);
3828 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3829 ta_crypt_cmd_digest_do_final(c, & session, op,
3830 tv->ptx, tv->ptx_len, ptx_hash,
3831 &ptx_hash_size)))
3832 goto out;
3833
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003834 /*
3835 * When we use DSA algorithms, the size of the hash we
3836 * consider equals the min between the size of the
3837 * "subprime" in the key and the size of the hash
3838 */
3839 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3840 TEE_MAIN_ALGO_DSA) {
3841 if (tv->params.dsa.sub_prime_len <=
3842 ptx_hash_size)
3843 ptx_hash_size =
3844 tv->params.dsa.sub_prime_len;
3845 }
3846
Pascal Brandc639ac82015-07-02 08:53:34 +02003847 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3848 ta_crypt_cmd_free_operation(c, &session, op)))
3849 goto out;
3850 }
3851
3852 num_algo_params = 0;
3853 num_key_attrs = 0;
3854 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3855 case TEE_MAIN_ALGO_RSA:
3856 if (tv->params.rsa.salt_len > 0) {
3857 algo_params[0].attributeID =
3858 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3859 algo_params[0].content.value.a =
3860 tv->params.rsa.salt_len;
3861 algo_params[0].content.value.b = 0;
3862 num_algo_params = 1;
3863 }
3864
3865 max_key_size = tv->params.rsa.modulus_len * 8;
3866
3867 xtest_add_attr(&num_key_attrs, key_attrs,
3868 TEE_ATTR_RSA_MODULUS,
3869 tv->params.rsa.modulus,
3870 tv->params.rsa.modulus_len);
3871 xtest_add_attr(&num_key_attrs, key_attrs,
3872 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3873 tv->params.rsa.pub_exp,
3874 tv->params.rsa.pub_exp_len);
3875
3876 if (!ADBG_EXPECT_TRUE(c,
3877 create_key(c, &session,
3878 max_key_size,
3879 TEE_TYPE_RSA_PUBLIC_KEY,
3880 key_attrs,
3881 num_key_attrs,
3882 &pub_key_handle)))
3883 goto out;
3884
3885 xtest_add_attr(&num_key_attrs, key_attrs,
3886 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3887 tv->params.rsa.priv_exp,
3888 tv->params.rsa.priv_exp_len);
3889
3890 if (tv->params.rsa.prime1_len != 0) {
3891 xtest_add_attr(&num_key_attrs, key_attrs,
3892 TEE_ATTR_RSA_PRIME1,
3893 tv->params.rsa.prime1,
3894 tv->params.rsa.prime1_len);
3895 }
3896
3897 if (tv->params.rsa.prime2_len != 0) {
3898 xtest_add_attr(&num_key_attrs, key_attrs,
3899 TEE_ATTR_RSA_PRIME2,
3900 tv->params.rsa.prime2,
3901 tv->params.rsa.prime2_len);
3902 }
3903
3904 if (tv->params.rsa.exp1_len != 0) {
3905 xtest_add_attr(&num_key_attrs, key_attrs,
3906 TEE_ATTR_RSA_EXPONENT1,
3907 tv->params.rsa.exp1,
3908 tv->params.rsa.exp1_len);
3909 }
3910
3911 if (tv->params.rsa.exp2_len != 0) {
3912 xtest_add_attr(&num_key_attrs, key_attrs,
3913 TEE_ATTR_RSA_EXPONENT2,
3914 tv->params.rsa.exp2,
3915 tv->params.rsa.exp2_len);
3916 }
3917
3918 if (tv->params.rsa.coeff_len != 0) {
3919 xtest_add_attr(&num_key_attrs, key_attrs,
3920 TEE_ATTR_RSA_COEFFICIENT,
3921 tv->params.rsa.coeff,
3922 tv->params.rsa.coeff_len);
3923 }
3924
3925 if (!ADBG_EXPECT_TRUE(c,
3926 create_key(c, &session,
3927 max_key_size,
3928 TEE_TYPE_RSA_KEYPAIR,
3929 key_attrs,
3930 num_key_attrs,
3931 &priv_key_handle)))
3932 goto out;
3933 break;
3934
3935 case TEE_MAIN_ALGO_DSA:
3936 max_key_size = tv->params.dsa.prime_len * 8;
3937
3938 xtest_add_attr(&num_key_attrs, key_attrs,
3939 TEE_ATTR_DSA_PRIME,
3940 tv->params.dsa.prime,
3941 tv->params.dsa.prime_len);
3942 xtest_add_attr(&num_key_attrs, key_attrs,
3943 TEE_ATTR_DSA_SUBPRIME,
3944 tv->params.dsa.sub_prime,
3945 tv->params.dsa.sub_prime_len);
3946 xtest_add_attr(&num_key_attrs, key_attrs,
3947 TEE_ATTR_DSA_BASE,
3948 tv->params.dsa.base,
3949 tv->params.dsa.base_len);
3950 xtest_add_attr(&num_key_attrs, key_attrs,
3951 TEE_ATTR_DSA_PUBLIC_VALUE,
3952 tv->params.dsa.pub_val,
3953 tv->params.dsa.pub_val_len);
3954
3955 if (!ADBG_EXPECT_TRUE(c,
3956 create_key(c, &session, max_key_size,
3957 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
3958 num_key_attrs, &pub_key_handle)))
3959 goto out;
3960
3961 xtest_add_attr(&num_key_attrs, key_attrs,
3962 TEE_ATTR_DSA_PRIVATE_VALUE,
3963 tv->params.dsa.priv_val,
3964 tv->params.dsa.priv_val_len);
3965
3966 if (!ADBG_EXPECT_TRUE(c,
3967 create_key(c, &session, max_key_size,
3968 TEE_TYPE_DSA_KEYPAIR, key_attrs,
3969 num_key_attrs, &priv_key_handle)))
3970 goto out;
3971 break;
3972
Pascal Brand3e143ee2015-07-15 17:17:16 +02003973 case TEE_MAIN_ALGO_ECDSA:
3974 switch (tv->algo) {
3975 case TEE_ALG_ECDSA_P192:
3976 curve = TEE_ECC_CURVE_NIST_P192;
3977 break;
3978 case TEE_ALG_ECDSA_P224:
3979 curve = TEE_ECC_CURVE_NIST_P224;
3980 break;
3981 case TEE_ALG_ECDSA_P256:
3982 curve = TEE_ECC_CURVE_NIST_P256;
3983 break;
3984 case TEE_ALG_ECDSA_P384:
3985 curve = TEE_ECC_CURVE_NIST_P384;
3986 break;
3987 case TEE_ALG_ECDSA_P521:
3988 curve = TEE_ECC_CURVE_NIST_P521;
3989 break;
3990 default:
3991 curve = 0xFF;
3992 break;
3993 }
3994
3995 if (tv->algo == TEE_ALG_ECDSA_P521)
3996 max_key_size = 521;
3997 else
3998 max_key_size = tv->params.ecdsa.private_len * 8;
3999
4000 xtest_add_attr_value(&num_key_attrs, key_attrs,
4001 TEE_ATTR_ECC_CURVE, curve, 0);
4002 xtest_add_attr(&num_key_attrs, key_attrs,
4003 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4004 tv->params.ecdsa.public_x,
4005 tv->params.ecdsa.public_x_len);
4006 xtest_add_attr(&num_key_attrs, key_attrs,
4007 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4008 tv->params.ecdsa.public_y,
4009 tv->params.ecdsa.public_y_len);
4010
4011 if (!ADBG_EXPECT_TRUE(c,
4012 create_key(c, &session, max_key_size,
4013 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
4014 num_key_attrs, &pub_key_handle)))
4015 goto out;
4016
4017 xtest_add_attr(&num_key_attrs, key_attrs,
4018 TEE_ATTR_ECC_PRIVATE_VALUE,
4019 tv->params.ecdsa.private,
4020 tv->params.ecdsa.private_len);
4021
4022 if (!ADBG_EXPECT_TRUE(c,
4023 create_key(c, &session, max_key_size,
4024 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
4025 num_key_attrs, &priv_key_handle)))
4026 goto out;
4027 break;
4028
Pascal Brandc639ac82015-07-02 08:53:34 +02004029 default:
4030 ADBG_EXPECT_TRUE(c, false);
4031 goto out;
4032 }
4033
4034 out_size = sizeof(out);
4035 memset(out, 0, sizeof(out));
4036 switch (tv->mode) {
4037 case TEE_MODE_ENCRYPT:
4038 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4039 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02004040 &op, tv->algo, TEE_MODE_ENCRYPT,
4041 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02004042 goto out;
4043
4044 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4045 ta_crypt_cmd_set_operation_key(c, &session, op,
4046 pub_key_handle)))
4047 goto out;
4048
4049 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4050 ta_crypt_cmd_free_transient_object(c, &session,
4051 pub_key_handle)))
4052 goto out;
4053 pub_key_handle = TEE_HANDLE_NULL;
4054
4055 out_enc_size = sizeof(out_enc);
4056 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4057 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
4058 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
4059 &out_enc_size)))
4060 goto out;
4061
4062 /*
4063 * A PS which is random is added when formatting the
4064 * message internally of the algorithm so we can't
4065 * verify against precomputed values, instead we use the
4066 * decrypt operation to see that output is correct.
4067 */
4068
4069 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4070 ta_crypt_cmd_free_operation(c, &session, op)))
4071 goto out;
4072
4073 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4074 ta_crypt_cmd_allocate_operation(c, &session,
4075 &op, tv->algo, TEE_MODE_DECRYPT,
4076 max_key_size)))
4077 goto out;
4078
4079 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4080 ta_crypt_cmd_set_operation_key(c, &session, op,
4081 priv_key_handle)))
4082 goto out;
4083
4084 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4085 ta_crypt_cmd_free_transient_object(c, &session,
4086 priv_key_handle)))
4087 goto out;
4088
4089 priv_key_handle = TEE_HANDLE_NULL;
4090
4091 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4092 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4093 NULL, 0, out_enc, out_enc_size, out,
4094 &out_size)))
4095 goto out;
4096
4097 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4098 out_size);
4099 break;
4100
4101 case TEE_MODE_DECRYPT:
4102 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4103 ta_crypt_cmd_allocate_operation(c, &session,
4104 &op, tv->algo, TEE_MODE_DECRYPT,
4105 max_key_size)))
4106 goto out;
4107
4108 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4109 ta_crypt_cmd_set_operation_key(c, &session, op,
4110 priv_key_handle)))
4111 goto out;
4112
4113 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4114 ta_crypt_cmd_free_transient_object(c, &session,
4115 priv_key_handle)))
4116 goto out;
4117
4118 priv_key_handle = TEE_HANDLE_NULL;
4119
4120 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4121 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4122 NULL, 0, tv->ctx, tv->ctx_len, out,
4123 &out_size)))
4124 goto out;
4125
4126 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4127 out_size);
4128 break;
4129
4130 case TEE_MODE_VERIFY:
4131 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4132 ta_crypt_cmd_allocate_operation(c, &session,
4133 &op, tv->algo, TEE_MODE_VERIFY,
4134 max_key_size)))
4135 goto out;
4136
4137 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4138 ta_crypt_cmd_set_operation_key(c, &session, op,
4139 pub_key_handle)))
4140 goto out;
4141
4142 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4143 ta_crypt_cmd_free_transient_object(c, &session,
4144 pub_key_handle)))
4145 goto out;
4146
4147 pub_key_handle = TEE_HANDLE_NULL;
4148
4149 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4150 ta_crypt_cmd_asymmetric_verify(c, &session, op,
4151 algo_params, num_algo_params, ptx_hash,
4152 ptx_hash_size, tv->ctx, tv->ctx_len)))
4153 goto out;
4154 break;
4155
4156 case TEE_MODE_SIGN:
4157 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4158 ta_crypt_cmd_allocate_operation(c, &session,
4159 &op, tv->algo, TEE_MODE_SIGN,
4160 max_key_size)))
4161 goto out;
4162
4163 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4164 ta_crypt_cmd_set_operation_key(c, &session, op,
4165 priv_key_handle)))
4166 goto out;
4167
4168 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4169 ta_crypt_cmd_free_transient_object(c, &session,
4170 priv_key_handle)))
4171 goto out;
4172
4173 priv_key_handle = TEE_HANDLE_NULL;
4174
4175 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4176 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4177 algo_params, num_algo_params, ptx_hash,
4178 ptx_hash_size, out, &out_size)))
4179 goto out;
4180
4181 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4182 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004183 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004184 tv->algo == TEE_ALG_DSA_SHA224 ||
4185 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004186 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4187 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004188 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4189 ta_crypt_cmd_free_operation(c, &session,
4190 op)))
4191 goto out;
4192 /*
4193 * The salt or K is random so we can't verify
4194 * signing against precomputed values, instead
4195 * we use the verify operation to see that
4196 * output is correct.
4197 */
4198 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4199 ta_crypt_cmd_allocate_operation(c,
4200 &session, &op, tv->algo,
4201 TEE_MODE_VERIFY, max_key_size)))
4202 goto out;
4203
4204 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4205 ta_crypt_cmd_set_operation_key(c,
4206 &session, op, pub_key_handle)))
4207 goto out;
4208
4209 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4210 ta_crypt_cmd_free_transient_object(c,
4211 &session, pub_key_handle)))
4212 goto out;
4213
4214 pub_key_handle = TEE_HANDLE_NULL;
4215
4216 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4217 ta_crypt_cmd_asymmetric_verify(c,
4218 &session, op, algo_params,
4219 num_algo_params, ptx_hash,
4220 ptx_hash_size, out, out_size)))
4221 goto out;
4222 } else {
4223 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4224 tv->ctx_len, out,
4225 out_size);
4226 }
4227 break;
4228
4229 default:
4230 break;
4231 }
4232
4233 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4234 ta_crypt_cmd_free_operation(c, &session, op)))
4235 goto out;
4236
4237 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4238 ta_crypt_cmd_free_transient_object(c, &session,
4239 pub_key_handle)))
4240 goto out;
4241 pub_key_handle = TEE_HANDLE_NULL;
4242
4243 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4244 ta_crypt_cmd_free_transient_object(c, &session,
4245 priv_key_handle)))
4246 goto out;
4247
4248 priv_key_handle = TEE_HANDLE_NULL;
4249
4250 Do_ADBG_EndSubCase(c, NULL);
4251 }
4252out:
4253 TEEC_CloseSession(&session);
4254}
4255
4256#define KEY_ATTR(x, y) { #x, (x), y }
4257
4258struct key_attrs {
4259 const char *name;
4260 uint32_t attr;
4261 bool keysize_check;
4262};
4263
4264static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4265 TEE_ObjectHandle key, uint32_t key_size,
4266 struct key_attrs *attrs, size_t num_attrs)
4267{
4268 uint8_t out[2048];
4269 size_t out_size;
4270 size_t n;
4271 size_t m;
4272
4273 for (m = 0; m < num_attrs; m++) {
4274 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4275 out_size = sizeof(out);
4276 memset(out, 0, sizeof(out));
4277 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4278 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4279 key, attrs[m].attr, out, &out_size)))
4280 return false;
4281
4282 if (attrs[m].keysize_check)
4283 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4284 key_size / 8);
4285
4286 if (out_size > 0) {
4287 /* Check that buffer isn't all zeroes */
4288 for (n = 0; n < out_size; n++)
4289 if (out[n] != 0)
4290 break;
4291 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4292 out_size))
4293 return false;
4294 }
4295 } else {
4296 uint32_t a;
4297 uint32_t b;
4298
4299 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4300 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4301 attrs[m].attr, &a, &b)))
4302 return false;
4303 }
4304 }
4305 return true;
4306}
4307
4308static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4309 TEE_ObjectHandle key, uint32_t key_size)
4310{
4311 const struct key_attrs attrs[] = {
4312 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4313 };
4314
4315 return test_keygen_attributes(c, s, key, key_size,
4316 (struct key_attrs *)&attrs,
4317 ARRAY_SIZE(attrs));
4318}
4319
4320
4321static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4322 TEE_ObjectHandle key, uint32_t key_size)
4323{
4324 const struct key_attrs attrs[] = {
4325 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4326 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4327 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4328 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4329 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4330 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4331 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4332 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4333 };
4334
4335 return test_keygen_attributes(c, s, key, key_size,
4336 (struct key_attrs *)&attrs,
4337 ARRAY_SIZE(attrs));
4338}
4339
Pascal Brande61133f2015-07-08 15:38:37 +02004340static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4341 TEE_ObjectHandle key, uint32_t key_size)
4342{
4343 const struct key_attrs attrs[] = {
4344 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4345 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4346 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4347 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4348 };
4349
4350 return test_keygen_attributes(c, s, key, key_size,
4351 (struct key_attrs *)&attrs,
4352 ARRAY_SIZE(attrs));
4353}
4354
Pascal Brandc639ac82015-07-02 08:53:34 +02004355static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4356 uint32_t check_keysize,
4357 TEE_ObjectHandle key, uint32_t key_size)
4358{
4359 const struct key_attrs attrs[] = {
4360 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4361 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4362 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4363 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4364 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4365 };
4366
4367 return test_keygen_attributes(c, s, key, key_size,
4368 (struct key_attrs *)&attrs,
4369 ARRAY_SIZE(attrs));
4370}
4371
4372static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4373 TEE_ObjectHandle key, uint32_t key_size)
4374{
4375 const struct key_attrs attrs[] = {
4376 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4377 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4378 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4379 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4380 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4381 };
4382
4383 return test_keygen_attributes(c, s, key, key_size,
4384 (struct key_attrs *)&attrs,
4385 ARRAY_SIZE(attrs));
4386}
4387
4388static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4389 uint32_t key_type, uint32_t check_keysize,
4390 uint32_t key_size,
4391 TEE_Attribute *params, size_t param_count)
4392{
4393 TEE_ObjectHandle key;
4394 bool ret_val = true;
4395
4396 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4397 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4398 &key)))
4399 return false;
4400
4401 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4402 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4403 param_count)))
4404 return false;
4405
4406 switch (key_type) {
4407 case TEE_TYPE_DES:
4408 case TEE_TYPE_DES3:
4409 ret_val = ADBG_EXPECT_TRUE(c,
4410 test_secret_value(c, s, key,
4411 key_size + key_size / 7));
4412 break;
4413 case TEE_TYPE_AES:
4414 case TEE_TYPE_HMAC_MD5:
4415 case TEE_TYPE_HMAC_SHA1:
4416 case TEE_TYPE_HMAC_SHA224:
4417 case TEE_TYPE_HMAC_SHA256:
4418 case TEE_TYPE_HMAC_SHA384:
4419 case TEE_TYPE_HMAC_SHA512:
4420 case TEE_TYPE_GENERIC_SECRET:
4421 ret_val = ADBG_EXPECT_TRUE(c,
4422 test_secret_value(c, s, key, key_size));
4423 break;
4424
4425 case TEE_TYPE_RSA_KEYPAIR:
4426 ret_val = ADBG_EXPECT_TRUE(c,
4427 test_rsa_key_pair(c, s, key, key_size));
4428 break;
4429
Pascal Brande61133f2015-07-08 15:38:37 +02004430 case TEE_TYPE_ECDSA_KEYPAIR:
4431 case TEE_TYPE_ECDH_KEYPAIR:
4432 ret_val = ADBG_EXPECT_TRUE(c,
4433 test_ecc_key_pair(c, s, key, key_size));
4434 break;
4435
Pascal Brandc639ac82015-07-02 08:53:34 +02004436 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004437 ret_val = ADBG_EXPECT_TRUE(c,
Pascal Brandc639ac82015-07-02 08:53:34 +02004438 test_dh_key_pair(c, s, check_keysize, key,
4439 key_size));
4440 break;
4441
4442 case TEE_TYPE_DSA_KEYPAIR:
4443 ret_val = ADBG_EXPECT_TRUE(c,
4444 test_dsa_key_pair(c, s, key, key_size));
4445 break;
4446
4447 default:
4448 ret_val = false;
4449 break;
4450 }
4451
4452 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4453 ta_crypt_cmd_free_transient_object(c, s, key)))
4454 return false;
4455
4456 return ret_val;
4457}
4458
4459static void xtest_test_keygen_noparams(ADBG_Case_t *c, TEEC_Session *session)
4460{
4461 size_t n;
4462 uint32_t key_size;
4463 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004464 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004465 const char *name;
4466 uint32_t key_type;
4467 uint32_t quanta;
4468 uint32_t min_size;
4469 uint32_t max_size;
4470 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004471 { 0, "AES", TEE_TYPE_AES, 64, 128,
Pascal Brandc639ac82015-07-02 08:53:34 +02004472 256 /* valid sizes 128, 192, 256 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004473 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4474 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
Pascal Brandc639ac82015-07-02 08:53:34 +02004475 168 /* valid sizes 112, 168 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004476 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4477 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4478 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4479 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4480 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4481 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4482 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4483 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004484
4485 /* New tests added to check non-regression of issue #5398 */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004486 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4487 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4488 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4489 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4490 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4491 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4492 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004493 };
4494
4495 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
4496 uint32_t min_size = key_types[n].min_size;
4497 uint32_t max_size = key_types[n].max_size;
4498 uint32_t quanta = key_types[n].quanta;
4499
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004500 if (key_types[n].level > level)
4501 continue;
4502
Pascal Brandc639ac82015-07-02 08:53:34 +02004503 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4504
4505 for (key_size = min_size; key_size <= max_size;
4506 key_size += quanta) {
4507 if (!ADBG_EXPECT_TRUE(c,
4508 generate_and_test_key(c, session, key_types
4509 [n].key_type, 1, key_size, NULL, 0)))
4510 break;
4511 }
4512
4513 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4514 }
4515}
4516
4517static void xtest_test_keygen_dh(ADBG_Case_t *c, TEEC_Session *session)
4518{
4519 size_t n;
4520 size_t param_count;
4521 /*
4522 * Note that the key size parameter is not used when creating the keys
4523 * but specifying these sizes make it possible to test the expected size
4524 * of the private value. This also means that the keysize must match the
4525 * size of p or what is specified in private_bits or the equvivalent
4526 * size of the subprime parameter.
4527 */
4528 TEE_Attribute params[4];
4529
4530#define XTEST_DH_GK_DATA(vect) \
4531 ARRAY(vect ## _p), \
4532 ARRAY(vect ## _g), \
4533 &vect ## _private_bits, \
4534 0, 0
4535#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4536 ARRAY(vect ## _p), \
4537 ARRAY(vect ## _g), \
4538 &vect ## _private_bits, \
4539 ARRAY(vect ## _subprime)
4540 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004541 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004542 uint32_t key_size;
4543 const uint8_t *p;
4544 size_t p_len;
4545 const uint8_t *g;
4546 size_t g_len;
4547 const uint32_t *private_bits;
4548 const uint8_t *subprime;
4549 size_t subprime_len;
4550 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004551 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
4552 { 1, 256, XTEST_DH_GK_DATA(keygen_dh320) },
4553 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
4554 { 1, 256, XTEST_DH_GK_DATA(keygen_dh448) },
4555 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
4556 { 1, 288, XTEST_DH_GK_DATA(keygen_dh576) },
4557 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
4558 { 1, 352, XTEST_DH_GK_DATA(keygen_dh704) },
4559 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
4560 { 1, 416, XTEST_DH_GK_DATA(keygen_dh832) },
4561 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
4562 { 1, 480, XTEST_DH_GK_DATA(keygen_dh960) },
4563 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
4564 { 1, 544, XTEST_DH_GK_DATA(keygen_dh1088) },
4565 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
4566 { 1, 608, XTEST_DH_GK_DATA(keygen_dh1216) },
4567 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
4568 { 1, 672, XTEST_DH_GK_DATA(keygen_dh1344) },
4569 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
4570 { 1, 736, XTEST_DH_GK_DATA(keygen_dh1472) },
4571 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
4572 { 1, 800, XTEST_DH_GK_DATA(keygen_dh1600) },
4573 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
4574 { 1, 864, XTEST_DH_GK_DATA(keygen_dh1728) },
4575 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
4576 { 1, 928, XTEST_DH_GK_DATA(keygen_dh1856) },
4577 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
4578 { 1, 992, XTEST_DH_GK_DATA(keygen_dh1984) },
4579 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
4580 { 1, 256, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004581 };
4582
4583
4584 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004585 if (key_types[n].level > level)
4586 continue;
4587
Pascal Brandc639ac82015-07-02 08:53:34 +02004588 Do_ADBG_BeginSubCase(c,
4589 "Generate DH key %d bits - Private bits = %d",
4590 key_types[n].key_size,
4591 *key_types[n].private_bits);
4592 param_count = 0;
4593
4594 xtest_add_attr(&param_count, params,
4595 TEE_ATTR_DH_PRIME,
4596 key_types[n].p, key_types[n].p_len);
4597
4598 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4599 key_types[n].g, key_types[n].g_len);
4600
4601 if (key_types[n].private_bits != 0) {
4602 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4603
4604 params[param_count].content.value.a =
4605 *key_types[n].private_bits;
4606
4607 params[param_count].content.value.b = 0;
4608 param_count++;
4609 }
4610
4611 if (key_types[n].subprime != 0) {
4612 xtest_add_attr(&param_count, params,
4613 TEE_ATTR_DH_SUBPRIME,
4614 key_types[n].subprime,
4615 key_types[n].subprime_len);
4616 }
4617
4618 if (!ADBG_EXPECT_TRUE(c,
4619 generate_and_test_key(c, session, TEE_TYPE_DH_KEYPAIR,
4620 ((*key_types[n].private_bits) != 0),
4621 key_types[n]. key_size, params, param_count)))
4622 break;
4623
4624 Do_ADBG_EndSubCase(c,
4625 "Generate DH key %d bits - Private bits = %d",
4626 key_types[n].key_size,
4627 *key_types[n].private_bits);
4628 }
4629}
4630
4631static void xtest_test_keygen_dsa(ADBG_Case_t *c, TEEC_Session *session)
4632{
4633 size_t n;
4634 size_t param_count;
4635 TEE_Attribute params[4];
4636
4637#define XTEST_DSA_GK_DATA(vect) \
4638 ARRAY(vect ## _p), \
4639 ARRAY(vect ## _g), \
4640 ARRAY(vect ## _q)
4641 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004642 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004643 uint32_t key_size;
4644 const uint8_t *prime;
4645 size_t prime_len;
4646 const uint8_t *base;
4647 size_t base_len;
4648 const uint8_t *sub_prime;
4649 size_t sub_prime_len;
4650 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004651 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4652 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4653 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4654 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4655 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4656 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4657 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4658 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4659 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4660 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004661 };
4662
4663 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004664 if (key_types[n].level > level)
4665 continue;
4666
Pascal Brandc639ac82015-07-02 08:53:34 +02004667 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4668 key_types[n].key_size);
4669 param_count = 0;
4670
4671
4672 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4673 key_types[n].prime, key_types[n].prime_len);
4674
4675 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4676 key_types[n].sub_prime,
4677 key_types[n].sub_prime_len);
4678
4679 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4680 key_types[n].base, key_types[n].base_len);
4681
4682 if (!ADBG_EXPECT_TRUE(c,
4683 generate_and_test_key(c, session, TEE_TYPE_DSA_KEYPAIR,
4684 1, key_types[n]. key_size, params,
4685 param_count)))
4686 break;
4687
4688 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4689 key_types[n].key_size);
4690 }
4691}
4692
Pascal Brande61133f2015-07-08 15:38:37 +02004693static void xtest_test_keygen_ecc(ADBG_Case_t *c, TEEC_Session *session)
4694{
4695 size_t n;
4696 size_t param_count;
4697 TEE_Attribute params[4];
4698
4699 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004700 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004701 const char *name;
4702 uint32_t algo;
4703 uint32_t curve;
4704 uint32_t key_size;
4705 } key_types[] = {
4706 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004707 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4708 192 },
4709 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4710 224 },
4711 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4712 256 },
4713 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4714 384 },
4715 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4716 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004717
4718 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004719 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4720 192 },
4721 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4722 224 },
4723 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4724 256 },
4725 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4726 384 },
4727 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4728 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004729 };
4730
4731 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004732 if (key_types[n].level > level)
4733 continue;
4734
Pascal Brande61133f2015-07-08 15:38:37 +02004735 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4736 param_count = 0;
4737
4738 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4739 key_types[n].curve, 0);
4740
4741 if (!ADBG_EXPECT_TRUE(c,
4742 generate_and_test_key(c, session, key_types[n].algo,
4743 0, key_types[n].key_size, params,
4744 param_count)))
4745 break;
4746
4747 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4748 }
4749}
4750
Pascal Brandc639ac82015-07-02 08:53:34 +02004751static void xtest_tee_test_4007(ADBG_Case_t *c)
4752{
4753 TEEC_Session session = { 0 };
4754 uint32_t ret_orig;
4755
4756 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4757 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4758 &ret_orig)))
4759 return;
4760
4761 xtest_test_keygen_noparams(c, &session);
4762
4763 xtest_test_keygen_dh(c, &session);
4764
4765 xtest_test_keygen_dsa(c, &session);
4766
Pascal Brande61133f2015-07-08 15:38:37 +02004767 xtest_test_keygen_ecc (c, &session);
4768
Pascal Brandc639ac82015-07-02 08:53:34 +02004769 TEEC_CloseSession(&session);
4770}
4771
4772static void xtest_tee_test_4008(ADBG_Case_t *c)
4773{
4774 TEEC_Session session = { 0 };
4775 uint32_t ret_orig;
4776 TEE_OperationHandle op;
4777 TEE_ObjectHandle key_handle;
4778 TEE_ObjectHandle sv_handle;
4779 TEE_Attribute params[4];
4780 size_t param_count = 0;
4781 uint8_t out[2048];
4782 size_t out_size;
4783
4784 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4785 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4786 &ret_orig)))
4787 return;
4788
4789 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4790
4791 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4792 ta_crypt_cmd_allocate_operation(c, &session, &op,
4793 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4794 derive_key_max_keysize)))
4795 goto out;
4796
4797 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4798 ta_crypt_cmd_allocate_transient_object(c, & session,
4799 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4800 &key_handle)))
4801 goto out;
4802
4803 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4804 ARRAY(derive_key_dh_prime));
4805
4806 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4807 ARRAY(derive_key_dh_base));
4808
4809 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4810 ARRAY(derive_key_dh_public_value));
4811
4812 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4813 ARRAY(derive_key_dh_private_value));
4814
4815 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4816 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4817 params, param_count)))
4818 goto out;
4819
4820 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4821 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4822 goto out;
4823
4824 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4825 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4826 goto out;
4827
4828 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4829 ta_crypt_cmd_allocate_transient_object(c, &session,
4830 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4831 &sv_handle)))
4832 goto out;
4833
Pascal Brand2b92b642015-07-16 13:29:42 +02004834 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004835 param_count = 0;
4836
4837 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4838 ARRAY(derive_key_dh_public_value_2));
4839
4840 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4841 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4842 param_count)))
4843 goto out;
4844
4845 out_size = sizeof(out);
4846 memset(out, 0, sizeof(out));
4847 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4848 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4849 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4850 goto out;
4851
4852 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4853 sizeof(derive_key_dh_shared_secret), out,
4854 out_size))
4855 goto out;
4856
4857 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4858 ta_crypt_cmd_free_operation(c, &session, op)))
4859 goto out;
4860
4861 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4862 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4863 goto out;
4864out:
4865 Do_ADBG_EndSubCase(c, "Derive DH key success");
4866 TEEC_CloseSession(&session);
4867}
Pascal Brand2b92b642015-07-16 13:29:42 +02004868
4869static void xtest_tee_test_4009(ADBG_Case_t *c)
4870{
4871 TEEC_Session session = { 0 };
4872 uint32_t ret_orig;
4873 TEE_OperationHandle op;
4874 TEE_ObjectHandle key_handle;
4875 TEE_ObjectHandle sv_handle;
4876 TEE_Attribute params[4];
4877 size_t param_count = 0;
4878 uint8_t out[2048];
4879 size_t out_size;
4880 uint32_t size_bytes;
Peng Fane13ad9b2015-07-21 11:46:26 +08004881 uint32_t i;
Pascal Brand2b92b642015-07-16 13:29:42 +02004882 struct derive_key_ecdh_t *pt;
4883
4884 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4885 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4886 &ret_orig)))
4887 return;
4888
4889 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
4890 pt = &derive_key_ecdh[i];
4891
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02004892 if (pt->level > level)
4893 continue;
4894
Pascal Brand2b92b642015-07-16 13:29:42 +02004895 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
4896 pt->algo);
4897 size_bytes = (pt->keysize + 7) / 8;
4898 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4899 ta_crypt_cmd_allocate_operation(c, &session, &op,
4900 pt->algo,
4901 TEE_MODE_DERIVE, pt->keysize)))
4902 goto out;
4903
4904 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4905 ta_crypt_cmd_allocate_transient_object(c, & session,
4906 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
4907 &key_handle)))
4908 goto out;
4909
4910 param_count = 0;
4911 xtest_add_attr_value(&param_count, params,
4912 TEE_ATTR_ECC_CURVE, pt->curve, 0);
4913 xtest_add_attr(&param_count, params,
4914 TEE_ATTR_ECC_PRIVATE_VALUE,
4915 pt->private, size_bytes);
4916 /*
4917 * The public value is not used. This is why we provide
4918 * another buffer
4919 */
4920 xtest_add_attr(&param_count, params,
4921 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4922 pt->private, size_bytes);
4923 xtest_add_attr(&param_count, params,
4924 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4925 pt->private, size_bytes);
4926
4927 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4928 ta_crypt_cmd_populate_transient_object(c,
4929 &session,
4930 key_handle, params, param_count)))
4931 goto out;
4932
4933 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4934 ta_crypt_cmd_set_operation_key(c, &session, op,
4935 key_handle)))
4936 goto out;
4937
4938 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4939 ta_crypt_cmd_free_transient_object(c, & session,
4940 key_handle)))
4941 goto out;
4942
4943 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4944 ta_crypt_cmd_allocate_transient_object(c, &session,
4945 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
4946 &sv_handle)))
4947 goto out;
4948
4949 /* reuse but reset params and param-count */
4950 param_count = 0;
4951
4952 xtest_add_attr(&param_count, params,
4953 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4954 pt->public_x, size_bytes);
4955 xtest_add_attr(&param_count, params,
4956 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4957 pt->public_y, size_bytes);
4958
4959 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4960 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
4961 params, param_count)))
4962 goto out;
4963
4964 out_size = sizeof(out);
4965 memset(out, 0, sizeof(out));
4966 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4967 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
4968 sv_handle,
4969 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4970 goto out;
4971
4972 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
4973 out, out_size))
4974 goto out;
4975
4976 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4977 ta_crypt_cmd_free_operation(c, &session, op)))
4978 goto out;
4979
4980 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4981 ta_crypt_cmd_free_transient_object(c, &session,
4982 sv_handle)))
4983 goto out;
4984
4985 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
4986 pt->algo);
4987 }
4988
4989 goto noerror;
4990
4991out:
4992 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
4993
4994noerror:
4995 TEEC_CloseSession(&session);
4996}
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004997
4998static void xtest_tee_test_4010(ADBG_Case_t *c)
4999{
5000 TEEC_Session session = { 0 };
5001 uint32_t ret_orig;
5002 TEE_ObjectHandle o;
5003 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
5004 static const TEE_Attribute attr = {
5005 .attributeID = TEE_ATTR_SECRET_VALUE,
5006 .content.ref.buffer = (void *)large_key,
5007 .content.ref.length = sizeof(large_key),
5008 };
5009
5010 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5011 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
5012 &ret_orig)))
5013 return;
5014
5015 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5016 ta_crypt_cmd_allocate_transient_object(c, &session,
5017 TEE_TYPE_HMAC_SHA256, 1024, &o)))
5018 goto out;
5019
5020 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
5021 ta_crypt_cmd_populate_transient_object(c, &session, o,
5022 &attr, 1));
5023
5024out:
5025 TEEC_CloseSession(&session);
5026}