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