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