blob: 96dc141ccc6fe0911fd0e45c7fcaa91c8fee9661 [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <stdio.h>
15#include <string.h>
16#include <inttypes.h>
17#include <malloc.h>
18
19#include "xtest_test.h"
20#include "xtest_helpers.h"
21
22#include <tee_api_types.h>
23#include <ta_crypt.h>
24#include <utee_defines.h>
25#include <util.h>
26
Jerome Forissier213ca8a2017-03-31 11:27:56 +020027#include <regression_4000_data.h>
Cedric Chaumontc7654962015-09-09 14:56:36 +020028#include <nist/186-2ecdsatestvectors.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020029
30#include <assert.h>
31
32static void xtest_tee_test_4001(ADBG_Case_t *Case_p);
33static void xtest_tee_test_4002(ADBG_Case_t *Case_p);
Jerome Forissier23256842018-02-16 09:25:35 +010034static void xtest_tee_test_4003(ADBG_Case_t *Case_p);
Pascal Brandc639ac82015-07-02 08:53:34 +020035static void xtest_tee_test_4004(ADBG_Case_t *Case_p);
36static void xtest_tee_test_4005(ADBG_Case_t *Case_p);
37static void xtest_tee_test_4006(ADBG_Case_t *Case_p);
38static void xtest_tee_test_4007(ADBG_Case_t *Case_p);
39static void xtest_tee_test_4008(ADBG_Case_t *Case_p);
Pascal Brand2b92b642015-07-16 13:29:42 +020040static void xtest_tee_test_4009(ADBG_Case_t *Case_p);
Jens Wiklander70a0b2c2016-05-18 08:39:35 +020041static void xtest_tee_test_4010(ADBG_Case_t *Case_p);
Jens Wiklanderb58916e2016-07-07 15:29:32 +020042static void xtest_tee_test_4011(ADBG_Case_t *Case_p);
Pascal Brandc639ac82015-07-02 08:53:34 +020043
Jens Wiklander74abfe32017-01-03 14:17:47 +010044ADBG_CASE_DEFINE(regression, 4001, xtest_tee_test_4001,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010045 "Test TEE Internal API hash operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010046ADBG_CASE_DEFINE(regression, 4002, xtest_tee_test_4002,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010047 "Test TEE Internal API MAC operations");
Jerome Forissier23256842018-02-16 09:25:35 +010048ADBG_CASE_DEFINE(regression, 4003, xtest_tee_test_4003,
49 "Test TEE Internal API cipher operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010050ADBG_CASE_DEFINE(regression, 4004, xtest_tee_test_4004,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010051 "Test TEE Internal API get random");
Jens Wiklander74abfe32017-01-03 14:17:47 +010052ADBG_CASE_DEFINE(regression, 4005, xtest_tee_test_4005,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010053 "Test TEE Internal API Authenticated Encryption operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010054ADBG_CASE_DEFINE(regression, 4006, xtest_tee_test_4006,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010055 "Test TEE Internal API Asymmetric Cipher operations");
Jens Wiklander74abfe32017-01-03 14:17:47 +010056ADBG_CASE_DEFINE(regression, 4007, xtest_tee_test_4007,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010057 "Test TEE Internal API Generate key");
Jens Wiklander74abfe32017-01-03 14:17:47 +010058ADBG_CASE_DEFINE(regression, 4008, xtest_tee_test_4008,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010059 "Test TEE Internal API Derive key");
Jens Wiklander74abfe32017-01-03 14:17:47 +010060ADBG_CASE_DEFINE(regression, 4009, xtest_tee_test_4009,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010061 "Test TEE Internal API Derive key ECDH");
Jens Wiklander74abfe32017-01-03 14:17:47 +010062ADBG_CASE_DEFINE(regression, 4010, xtest_tee_test_4010,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010063 "Test TEE Internal API create transient object (negative)");
Jens Wiklander74abfe32017-01-03 14:17:47 +010064ADBG_CASE_DEFINE(regression, 4011, xtest_tee_test_4011,
Jens Wiklander25a57fe2016-12-26 21:46:24 +010065 "Test TEE Internal API Bleichenbacher attack (negative)");
Jens Wiklanderb58916e2016-07-07 15:29:32 +020066
Pascal Brandc639ac82015-07-02 08:53:34 +020067static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
68 TEEC_Session *s,
69 void *buf, size_t blen);
70
71static TEEC_Result ta_crypt_cmd_reset_operation(ADBG_Case_t *c, TEEC_Session *s,
72 TEE_OperationHandle oph)
73{
74 TEEC_Result res;
75 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
76 uint32_t ret_orig;
77
78 assert((uintptr_t)oph <= UINT32_MAX);
79 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
80 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
81 TEEC_NONE);
82 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RESET_OPERATION, &op,
83 &ret_orig);
84 if (res != TEEC_SUCCESS) {
85 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
86 ret_orig);
87 }
88 return res;
89}
90
91static TEEC_Result ta_crypt_cmd_copy_operation(ADBG_Case_t *c,
92 TEEC_Session *s,
93 TEE_OperationHandle dst_oph,
94 TEE_OperationHandle src_oph)
95{
96 TEEC_Result res;
97 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
98 uint32_t ret_orig;
99
100 assert((uintptr_t)dst_oph <= UINT32_MAX);
101 op.params[0].value.a = (uint32_t)(uintptr_t)dst_oph;
102
103 assert((uintptr_t)src_oph <= UINT32_MAX);
104 op.params[0].value.b = (uint32_t)(uintptr_t)src_oph;
105 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
106 TEEC_NONE);
107
108 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_COPY_OPERATION, &op,
109 &ret_orig);
110
111 if (res != TEEC_SUCCESS) {
112 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
113 ret_orig);
114 }
115 return res;
116}
117
118static TEEC_Result ta_crypt_cmd_digest_update(ADBG_Case_t *c, TEEC_Session *s,
119 TEE_OperationHandle oph,
120 const void *chunk,
121 size_t chunk_size)
122{
123 TEEC_Result res;
124 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
125 uint32_t ret_orig;
126
127 assert((uintptr_t)oph <= UINT32_MAX);
128 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
129 op.params[1].tmpref.buffer = (void *)chunk;
130 op.params[1].tmpref.size = chunk_size;
131
132 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
133 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
134 TEEC_NONE);
135
136 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_UPDATE, &op, &ret_orig);
137
138 if (res != TEEC_SUCCESS) {
139 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
140 ret_orig);
141 }
142
143 return res;
144}
145
146static TEEC_Result ta_crypt_cmd_digest_do_final(ADBG_Case_t *c, TEEC_Session *s,
147 TEE_OperationHandle oph,
148 const void *chunk,
149 size_t chunk_len, void *hash,
150 size_t *hash_len)
151{
152 TEEC_Result res;
153 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
154 uint32_t ret_orig;
155
156 assert((uintptr_t)oph <= UINT32_MAX);
157 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
158
159 op.params[1].tmpref.buffer = (void *)chunk;
160 op.params[1].tmpref.size = chunk_len;
161
162 op.params[2].tmpref.buffer = (void *)hash;
163 op.params[2].tmpref.size = *hash_len;
164
165 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
166 TEEC_MEMREF_TEMP_INPUT,
167 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
168
169 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_DO_FINAL, &op,
170 &ret_orig);
171
172 if (res != TEEC_SUCCESS) {
173 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
174 ret_orig);
175 }
176
177 if (res == TEEC_SUCCESS)
178 *hash_len = op.params[2].tmpref.size;
179
180 return res;
181}
182
183static TEE_Result ta_crypt_cmd_set_operation_key2(ADBG_Case_t *c,
184 TEEC_Session *s,
185 TEE_OperationHandle oph,
186 TEE_ObjectHandle key1,
187 TEE_ObjectHandle key2)
188{
189 TEEC_Result res;
190 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
191 uint32_t ret_orig;
192
193 assert((uintptr_t)oph <= UINT32_MAX);
194 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
195
196 assert((uintptr_t)key1 <= UINT32_MAX);
197 op.params[0].value.b = (uint32_t)(uintptr_t)key1;
198
199 assert((uintptr_t)key2 <= UINT32_MAX);
200 op.params[1].value.a = (uint32_t)(uintptr_t)key2;
201 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT,
202 TEEC_NONE, TEEC_NONE);
203
204 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_SET_OPERATION_KEY2, &op,
205 &ret_orig);
206
207 if (res != TEEC_SUCCESS) {
208 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
209 ret_orig);
210 }
211
212 return res;
213}
214
215static TEEC_Result ta_crypt_cmd_mac_init(ADBG_Case_t *c, TEEC_Session *s,
216 TEE_OperationHandle oph,
217 const void *iv, size_t iv_len)
218{
219 TEEC_Result res;
220 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
221 uint32_t ret_orig;
222
223 assert((uintptr_t)oph <= UINT32_MAX);
224 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
225
226 if (iv != NULL) {
227 op.params[1].tmpref.buffer = (void *)iv;
228 op.params[1].tmpref.size = iv_len;
229 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
230 TEEC_MEMREF_TEMP_INPUT,
231 TEEC_NONE, TEEC_NONE);
232 } else {
233 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
234 TEEC_NONE, TEEC_NONE);
235 }
236
237 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_INIT, &op, &ret_orig);
238
239 if (res != TEEC_SUCCESS) {
240 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
241 ret_orig);
242 }
243
244 return res;
245}
246
247static TEEC_Result ta_crypt_cmd_mac_update(ADBG_Case_t *c, TEEC_Session *s,
248 TEE_OperationHandle oph,
249 const void *chunk, size_t chunk_size)
250{
251 TEEC_Result res;
252 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
253 uint32_t ret_orig;
254
255 assert((uintptr_t)oph <= UINT32_MAX);
256 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
257
258 op.params[1].tmpref.buffer = (void *)chunk;
259 op.params[1].tmpref.size = chunk_size;
260
261 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
262 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
263 TEEC_NONE);
264
265 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_UPDATE, &op, &ret_orig);
266
267 if (res != TEEC_SUCCESS) {
268 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
269 ret_orig);
270 }
271
272 return res;
273}
274
275static TEEC_Result ta_crypt_cmd_mac_final_compute(ADBG_Case_t *c,
276 TEEC_Session *s,
277 TEE_OperationHandle oph,
278 const void *chunk,
279 size_t chunk_len,
280 void *hash,
281 size_t *hash_len)
282{
283 TEEC_Result res;
284 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
285 uint32_t ret_orig;
286
287 assert((uintptr_t)oph <= UINT32_MAX);
288 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
289
290 op.params[1].tmpref.buffer = (void *)chunk;
291 op.params[1].tmpref.size = chunk_len;
292
293 op.params[2].tmpref.buffer = (void *)hash;
294 op.params[2].tmpref.size = *hash_len;
295
296 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
297 TEEC_MEMREF_TEMP_INPUT,
298 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
299
300 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_FINAL_COMPUTE, &op,
301 &ret_orig);
302
303 if (res != TEEC_SUCCESS) {
304 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
305 ret_orig);
306 }
307
308 if (res == TEEC_SUCCESS)
309 *hash_len = op.params[2].tmpref.size;
310
311 return res;
312}
313
314static TEEC_Result ta_crypt_cmd_cipher_init(ADBG_Case_t *c, TEEC_Session *s,
315 TEE_OperationHandle oph,
316 const void *iv, size_t iv_len)
317{
318 TEEC_Result res;
319 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
320 uint32_t ret_orig;
321
322 assert((uintptr_t)oph <= UINT32_MAX);
323 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
324
325 if (iv != NULL) {
326 op.params[1].tmpref.buffer = (void *)iv;
327 op.params[1].tmpref.size = iv_len;
328
329 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
330 TEEC_MEMREF_TEMP_INPUT,
331 TEEC_NONE, TEEC_NONE);
332 } else {
333 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
334 TEEC_NONE, TEEC_NONE);
335 }
336
337 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_INIT, &op, &ret_orig);
338
339 if (res != TEEC_SUCCESS) {
340 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
341 ret_orig);
342 }
343
344 return res;
345}
346
347static TEEC_Result ta_crypt_cmd_cipher_update(ADBG_Case_t *c, TEEC_Session *s,
348 TEE_OperationHandle oph,
349 const void *src, size_t src_len,
350 void *dst, 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 = 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_UPDATE, &op, &ret_orig);
370
371 if (res != TEEC_SUCCESS) {
372 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
373 ret_orig);
374 }
375
376 if (res == TEEC_SUCCESS)
377 *dst_len = op.params[2].tmpref.size;
378
379 return res;
380}
381
382static TEEC_Result ta_crypt_cmd_cipher_do_final(ADBG_Case_t *c,
383 TEEC_Session *s,
384 TEE_OperationHandle oph,
385 const void *src,
386 size_t src_len,
387 void *dst,
388 size_t *dst_len)
389{
390 TEEC_Result res;
391 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
392 uint32_t ret_orig;
393
394 assert((uintptr_t)oph <= UINT32_MAX);
395 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
396
397 op.params[1].tmpref.buffer = (void *)src;
398 op.params[1].tmpref.size = src_len;
399
400 op.params[2].tmpref.buffer = (void *)dst;
401 op.params[2].tmpref.size = *dst_len;
402
403 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
404 TEEC_MEMREF_TEMP_INPUT,
405 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
406
407 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_DO_FINAL, &op,
408 &ret_orig);
409
410 if (res != TEEC_SUCCESS) {
411 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
412 ret_orig);
413 }
414
415 if (res == TEEC_SUCCESS)
416 *dst_len = op.params[2].tmpref.size;
417
418 return res;
419}
420
421static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
422 TEEC_Session *s,
423 void *buf,
424 size_t blen)
425{
426 TEEC_Result res;
427 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
428 uint32_t ret_orig;
429
430 op.params[0].tmpref.buffer = buf;
431 op.params[0].tmpref.size = blen;
432
433 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE,
434 TEEC_NONE, TEEC_NONE);
435
436 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RANDOM_NUMBER_GENEREATE, &op,
437 &ret_orig);
438
439 if (res != TEEC_SUCCESS) {
440 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
441 ret_orig);
442 }
443
444 (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==,
445 op.params[0].tmpref.size);
446 return res;
447}
448
449static TEEC_Result ta_crypt_cmd_ae_init(ADBG_Case_t *c, TEEC_Session *s,
450 TEE_OperationHandle oph,
451 const void *nonce, size_t nonce_len,
452 size_t tag_len, size_t aad_len,
453 size_t payload_len)
454{
455 TEEC_Result res;
456 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
457 uint32_t ret_orig;
458
459 assert((uintptr_t)oph <= UINT32_MAX);
460 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
461 op.params[0].value.b = tag_len;
462
463 op.params[1].tmpref.buffer = (void *)nonce;
464 op.params[1].tmpref.size = nonce_len;
465
466 op.params[2].value.a = aad_len;
467 op.params[2].value.b = payload_len;
468
469 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
470 TEEC_MEMREF_TEMP_INPUT,
Jens Wiklander74a42302015-07-07 01:08:41 +0200471 TEEC_VALUE_INPUT, TEEC_NONE);
Pascal Brandc639ac82015-07-02 08:53:34 +0200472
473 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_INIT, &op, &ret_orig);
474
475 if (res != TEEC_SUCCESS) {
476 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
477 ret_orig);
478 }
479 return res;
480}
481
482static TEEC_Result ta_crypt_cmd_ae_update_aad(ADBG_Case_t *c, TEEC_Session *s,
483 TEE_OperationHandle oph,
484 const void *aad, size_t aad_len)
485{
486 TEEC_Result res;
487 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
488 uint32_t ret_orig;
489
490 assert((uintptr_t)oph <= UINT32_MAX);
491 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
492
493 op.params[1].tmpref.buffer = (void *)aad;
494 op.params[1].tmpref.size = aad_len;
495
496 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
497 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
498 TEEC_NONE);
499
500 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE_AAD, &op, &ret_orig);
501
502 if (res != TEEC_SUCCESS) {
503 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
504 ret_orig);
505 }
506
507 return res;
508}
509
510static TEEC_Result ta_crypt_cmd_ae_update(ADBG_Case_t *c,
511 TEEC_Session *s,
512 TEE_OperationHandle oph,
513 const void *src,
514 size_t src_len,
515 void *dst,
516 size_t *dst_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.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
532 TEEC_MEMREF_TEMP_INPUT,
533 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
534
535 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE, &op, &ret_orig);
536
537 if (res != TEEC_SUCCESS) {
538 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
539 ret_orig);
540 }
541
542 if (res == TEEC_SUCCESS)
543 *dst_len = op.params[2].tmpref.size;
544
545 return res;
546}
547
548static TEEC_Result ta_crypt_cmd_ae_encrypt_final(ADBG_Case_t *c,
549 TEEC_Session *s,
550 TEE_OperationHandle oph,
551 const void *src,
552 size_t src_len, void *dst,
553 size_t *dst_len, void *tag,
554 size_t *tag_len)
555{
556 TEEC_Result res;
557 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
558 uint32_t ret_orig;
559
560 assert((uintptr_t)oph <= UINT32_MAX);
561 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
562
563 op.params[1].tmpref.buffer = (void *)src;
564 op.params[1].tmpref.size = src_len;
565
566 op.params[2].tmpref.buffer = (void *)dst;
567 op.params[2].tmpref.size = *dst_len;
568
569 op.params[3].tmpref.buffer = (void *)tag;
570 op.params[3].tmpref.size = *tag_len;
571
572 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
573 TEEC_MEMREF_TEMP_INPUT,
574 TEEC_MEMREF_TEMP_OUTPUT,
575 TEEC_MEMREF_TEMP_OUTPUT);
576
577 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_ENCRYPT_FINAL, &op,
578 &ret_orig);
579
580 if (res != TEEC_SUCCESS) {
581 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
582 ret_orig);
583 }
584
585 if (res == TEEC_SUCCESS) {
586 *dst_len = op.params[2].tmpref.size;
587 *tag_len = op.params[3].tmpref.size;
588 }
589
590 return res;
591}
592
593static TEEC_Result ta_crypt_cmd_ae_decrypt_final(ADBG_Case_t *c,
594 TEEC_Session *s,
595 TEE_OperationHandle oph,
596 const void *src, size_t src_len,
597 void *dst, size_t *dst_len,
598 const void *tag, size_t tag_len)
599{
600 TEEC_Result res;
601 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
602 uint32_t ret_orig;
603
604 assert((uintptr_t)oph <= UINT32_MAX);
605 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
606
607 op.params[1].tmpref.buffer = (void *)src;
608 op.params[1].tmpref.size = src_len;
609
610 op.params[2].tmpref.buffer = dst;
611 op.params[2].tmpref.size = *dst_len;
612
613 op.params[3].tmpref.buffer = (void *)tag;
614 op.params[3].tmpref.size = tag_len;
615
616 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
617 TEEC_MEMREF_TEMP_INPUT,
618 TEEC_MEMREF_TEMP_OUTPUT,
619 TEEC_MEMREF_TEMP_INPUT);
620
621 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_DECRYPT_FINAL, &op,
622 &ret_orig);
623
624 if (res != TEEC_SUCCESS) {
625 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
626 ret_orig);
627 }
628
629 if (res == TEEC_SUCCESS)
630 *dst_len = op.params[2].tmpref.size;
631
632 return res;
633}
634
635static TEEC_Result ta_crypt_cmd_asymmetric_operate(ADBG_Case_t *c,
636 TEEC_Session *s,
637 TEE_OperationHandle oph,
638 uint32_t cmd,
639 const TEE_Attribute *params,
640 uint32_t paramCount,
641 const void *src,
642 size_t src_len,
643 void *dst,
644 size_t *dst_len)
645{
646 TEEC_Result res;
647 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
648 uint32_t ret_orig;
649 uint8_t *buf;
650 size_t blen;
651
652 res = pack_attrs(params, paramCount, &buf, &blen);
653 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
654 return res;
655
656 assert((uintptr_t)oph <= UINT32_MAX);
657 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
658
659 op.params[1].tmpref.buffer = buf;
660 op.params[1].tmpref.size = blen;
661
662 op.params[2].tmpref.buffer = (void *)src;
663 op.params[2].tmpref.size = src_len;
664
665 op.params[3].tmpref.buffer = dst;
666 op.params[3].tmpref.size = *dst_len;
667
668 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
669 TEEC_MEMREF_TEMP_INPUT,
670 TEEC_MEMREF_TEMP_INPUT,
671 TEEC_MEMREF_TEMP_OUTPUT);
672
673 res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig);
674
675 if (res != TEEC_SUCCESS) {
676 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
677 ret_orig);
678 }
679
680 if (res == TEEC_SUCCESS)
681 *dst_len = op.params[3].tmpref.size;
682
683 free(buf);
684 return res;
685}
686
687static TEEC_Result ta_crypt_cmd_asymmetric_encrypt(ADBG_Case_t *c,
688 TEEC_Session *s,
689 TEE_OperationHandle oph,
690 const TEE_Attribute *params,
691 uint32_t paramCount,
692 const void *src,
693 size_t src_len,
694 void *dst,
695 size_t *dst_len)
696{
697 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
698 TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT,
699 params, paramCount,
700 src, src_len, dst, dst_len);
701}
702
703static TEEC_Result ta_crypt_cmd_asymmetric_decrypt(ADBG_Case_t *c,
704 TEEC_Session *s,
705 TEE_OperationHandle oph,
706 const TEE_Attribute *params,
707 uint32_t paramCount,
708 const void *src,
709 size_t src_len,
710 void *dst,
711 size_t *dst_len)
712{
713 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
714 TA_CRYPT_CMD_ASYMMETRIC_DECRYPT,
715 params, paramCount,
716 src, src_len, dst, dst_len);
717}
718
719static TEEC_Result ta_crypt_cmd_asymmetric_sign(ADBG_Case_t *c,
720 TEEC_Session *s,
721 TEE_OperationHandle oph,
722 const TEE_Attribute *params,
723 uint32_t paramCount,
724 const void *digest,
725 size_t digest_len,
726 void *signature,
727 size_t *signature_len)
728{
729 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
730 TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST, params, paramCount,
731 digest, digest_len, signature, signature_len);
732}
733
734static TEEC_Result ta_crypt_cmd_asymmetric_verify(ADBG_Case_t *c,
735 TEEC_Session *s,
736 TEE_OperationHandle oph,
737 const TEE_Attribute *params,
738 uint32_t paramCount,
739 const void *digest,
740 size_t digest_len,
741 const void *signature,
742 size_t signature_len)
743{
744 TEEC_Result res;
745 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
746 uint32_t ret_orig;
747 uint8_t *buf;
748 size_t blen;
749
750 res = pack_attrs(params, paramCount, &buf, &blen);
751 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
752 return res;
753
754 assert((uintptr_t)oph <= UINT32_MAX);
755 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
756
757 op.params[1].tmpref.buffer = buf;
758 op.params[1].tmpref.size = blen;
759
760 op.params[2].tmpref.buffer = (void *)digest;
761 op.params[2].tmpref.size = digest_len;
762
763 op.params[3].tmpref.buffer = (void *)signature;
764 op.params[3].tmpref.size = signature_len;
765
766 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
767 TEEC_MEMREF_TEMP_INPUT,
768 TEEC_MEMREF_TEMP_INPUT,
769 TEEC_MEMREF_TEMP_INPUT);
770
771 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST,
772 &op, &ret_orig);
773
774 if (res != TEEC_SUCCESS) {
775 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
776 ret_orig);
777 }
778
779 free(buf);
780 return res;
781}
782
783static TEEC_Result ta_crypt_cmd_get_object_value_attribute(ADBG_Case_t *c,
784 TEEC_Session *s,
785 TEE_ObjectHandle o,
786 uint32_t attr_id,
787 uint32_t *valuea,
788 uint32_t *valueb)
789{
790 TEEC_Result res;
791 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
792 uint32_t ret_orig;
793
794 assert((uintptr_t)o <= UINT32_MAX);
795 op.params[0].value.a = (uint32_t)(uintptr_t)o;
796 op.params[0].value.b = attr_id;
797 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT,
798 TEEC_NONE, TEEC_NONE);
799
800 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE,
801 &op, &ret_orig);
802
803 if (res != TEEC_SUCCESS) {
804 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
805 ret_orig);
806 }
807
808 if (res == TEEC_SUCCESS) {
809 *valuea = op.params[1].value.a;
810 *valueb = op.params[1].value.b;
811 }
812
813 return res;
814}
815
816static TEEC_Result ta_crypt_cmd_generate_key(ADBG_Case_t *c,
817 TEEC_Session *s,
818 TEE_ObjectHandle o,
819 uint32_t key_size,
820 const TEE_Attribute *params,
821 uint32_t paramCount)
822{
823 TEEC_Result res;
824 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
825 uint32_t ret_orig;
826 uint8_t *buf;
827 size_t blen;
828
829 res = pack_attrs(params, paramCount, &buf, &blen);
830 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
831 return res;
832
833 assert((uintptr_t)o <= UINT32_MAX);
834 op.params[0].value.a = (uint32_t)(uintptr_t)o;
835 op.params[0].value.b = key_size;
836
837 op.params[1].tmpref.buffer = buf;
838 op.params[1].tmpref.size = blen;
839
840 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
841 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
842 TEEC_NONE);
843
844 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GENERATE_KEY, &op, &ret_orig);
845
846 if (res != TEEC_SUCCESS) {
847 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
848 ret_orig);
849 }
850
851 free(buf);
852 return res;
853}
854
855static const uint8_t hash_data_md5_in1[] = {
856 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
857};
858
859static const uint8_t hash_data_md5_out1[] = {
860 0x61, 0x12, 0x71, 0x83, 0x70, 0x8d, 0x3a, 0xc7,
861 0xf1, 0x9b, 0x66, 0x06, 0xfc, 0xae, 0x7d, 0xf6
862};
863
864static const uint8_t hash_data_sha1_in1[] = {
865 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
866};
867
868static const uint8_t hash_data_sha1_out1[] = {
869 0x4b, 0x98, 0x92, 0xb6, 0x52, 0x72, 0x14, 0xaf,
870 0xc6, 0x55, 0xb8, 0xaa, 0x52, 0xf4, 0xd2, 0x03,
871 0xc1, 0x5e, 0x7c, 0x9c
872};
873
874static const uint8_t hash_data_sha224_in1[] = {
875 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
876};
877
878static const uint8_t hash_data_sha224_out1[] = {
879 0x08, 0x21, 0x69, 0xf9, 0x77, 0x1b, 0x80, 0x15,
880 0xf3, 0x97, 0xae, 0xde, 0x5b, 0xba, 0xa2, 0x72,
881 0x2d, 0x8f, 0x5c, 0x19, 0xfe, 0xd2, 0xe2, 0x68,
882 0x92, 0x49, 0xd8, 0x44
883};
884
885static const uint8_t hash_data_sha256_in1[] = { 'a', 'b', 'c' };
886
887static const uint8_t hash_data_sha256_out1[] = {
888 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
889 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
890 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
891 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
892};
893
894static const uint8_t hash_data_sha256_in2[] = { 'e', 'f', 'g' };
895
896static const uint8_t hash_data_sha256_out2[] = {
897 0xd4, 0xff, 0xe8, 0xe9, 0xee, 0x0b, 0x48, 0xeb,
898 0xa7, 0x16, 0x70, 0x61, 0x23, 0xa7, 0x18, 0x7f,
899 0x32, 0xea, 0xe3, 0xbd, 0xcb, 0x0e, 0x77, 0x63,
900 0xe4, 0x1e, 0x53, 0x32, 0x67, 0xbd, 0x8a, 0x53
901};
902
903
904static const uint8_t hash_data_sha384_in1[] = {
905 'a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
906};
907
908static const uint8_t hash_data_sha384_out1[] = {
909 0x4c, 0xab, 0x80, 0x9d, 0x96, 0x84, 0x01, 0x47,
910 0x67, 0x0a, 0xc1, 0x7a, 0xb6, 0xb9, 0xf7, 0x6e,
911 0x35, 0xa6, 0xb0, 0x8c, 0xf5, 0x2a, 0x3d, 0x64,
912 0x9a, 0x8c, 0x7e, 0x0c, 0x55, 0x45, 0xd3, 0x7d,
913 0x1f, 0x7f, 0x28, 0x34, 0x96, 0x14, 0x44, 0x2a,
914 0xf5, 0x98, 0xa2, 0x95, 0x24, 0x76, 0x53, 0x97
915};
916
917static const uint8_t hash_data_sha512_in1[] = {
918 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
919};
920
921static const uint8_t hash_data_sha512_out1[] = {
922 0x20, 0xd8, 0x64, 0x4f, 0x54, 0xa2, 0x5f, 0x6f,
923 0x0a, 0xf9, 0xd5, 0x27, 0x7d, 0x17, 0xa8, 0x99,
924 0x4c, 0x64, 0x3f, 0xd0, 0xf3, 0x83, 0x36, 0xee,
925 0x93, 0x12, 0x55, 0xcd, 0x2e, 0x12, 0x34, 0xa0,
926 0xc2, 0xaa, 0xf9, 0xbb, 0x15, 0xc5, 0xe9, 0xfa,
927 0xf7, 0xa7, 0xda, 0xb8, 0x2f, 0x72, 0xa0, 0x47,
928 0xe3, 0x02, 0x04, 0xe8, 0xa0, 0x35, 0x0c, 0x96,
929 0x26, 0xd1, 0xcb, 0x8b, 0x47, 0x45, 0x25, 0xd0
930};
931
932struct xtest_hash_case {
933 uint32_t algo;
934 size_t in_incr;
935 const uint8_t *in;
936 size_t in_len;
937 const uint8_t *out;
938 size_t out_len;
939};
940
941#define XTEST_HASH_CASE(algo, in_incr, in, out) \
942 { (algo), (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
943
944static const struct xtest_hash_case hash_cases[] = {
945 XTEST_HASH_CASE(TEE_ALG_MD5, 6, hash_data_md5_in1,
946 hash_data_md5_out1),
947 XTEST_HASH_CASE(TEE_ALG_SHA1, 3, hash_data_sha1_in1,
948 hash_data_sha1_out1),
949 XTEST_HASH_CASE(TEE_ALG_SHA224, 7, hash_data_sha224_in1,
950 hash_data_sha224_out1),
951 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in1,
952 hash_data_sha256_out1),
953 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in2,
954 hash_data_sha256_out2),
955 XTEST_HASH_CASE(TEE_ALG_SHA384, 1, hash_data_sha384_in1,
956 hash_data_sha384_out1),
957 XTEST_HASH_CASE(TEE_ALG_SHA512, 1, hash_data_sha512_in1,
958 hash_data_sha512_out1),
959};
960
961static void xtest_tee_test_4001(ADBG_Case_t *c)
962{
963 TEEC_Session session = { 0 };
964 uint32_t ret_orig;
965 size_t n;
966
967 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
968 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
969 &ret_orig)))
970 return;
971
972
973 for (n = 0; n < ARRAY_SIZE(hash_cases); n++) {
974 TEE_OperationHandle op1;
975 TEE_OperationHandle op2;
976 uint8_t out[64];
977 size_t out_size;
978
979 Do_ADBG_BeginSubCase(c, "Hash case %d algo 0x%x",
980 (int)n, (unsigned int)hash_cases[n].algo);
981
982 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
983 ta_crypt_cmd_allocate_operation(c, &session, &op1,
984 hash_cases[n].algo,
985 TEE_MODE_DIGEST, 0)))
986 goto out;
987
988 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
989 ta_crypt_cmd_allocate_operation(c, &session, &op2,
990 hash_cases[n].algo,
991 TEE_MODE_DIGEST, 0)))
992 goto out;
993
994 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
995 ta_crypt_cmd_digest_update(c, &session, op1,
996 hash_cases[n].in,
997 hash_cases[n].in_incr)))
998 goto out;
999
1000 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1001 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1002 goto out;
1003
1004 out_size = sizeof(out);
1005 memset(out, 0, sizeof(out));
1006 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1007 ta_crypt_cmd_digest_do_final(c, &session, op2,
1008 hash_cases[n].in + hash_cases[n].in_incr,
1009 hash_cases[n].in_len - hash_cases[n].in_incr,
1010 out, &out_size)))
1011 goto out;
1012
1013 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1014 hash_cases[n].out_len, out, out_size);
1015
1016 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1017 ta_crypt_cmd_reset_operation(c, &session, op1)))
1018 goto out;
1019
1020 out_size = sizeof(out);
1021 memset(out, 0, sizeof(out));
1022 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1023 ta_crypt_cmd_digest_do_final(c, &session, op1,
1024 hash_cases[n].in,
1025 hash_cases[n].in_len, out,
1026 &out_size)))
1027 goto out;
1028
1029 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1030 hash_cases[n].out_len, out, out_size);
1031
Jerome Forissier1e05e262015-07-29 16:09:07 +02001032 /*
1033 * Invoke TEE_DigestDoFinal() a second time to check that state
1034 * was properly reset
1035 */
1036 out_size = sizeof(out);
1037 memset(out, 0, sizeof(out));
1038 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1039 ta_crypt_cmd_digest_do_final(c, &session, op1,
1040 hash_cases[n].in,
1041 hash_cases[n].in_len, out,
1042 &out_size)))
1043 goto out;
1044
1045 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1046 hash_cases[n].out_len, out, out_size);
1047
Pascal Brandc639ac82015-07-02 08:53:34 +02001048 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1049 ta_crypt_cmd_free_operation(c, &session, op1)))
1050 goto out;
1051
1052 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1053 ta_crypt_cmd_free_operation(c, &session, op2)))
1054 goto out;
1055
1056 Do_ADBG_EndSubCase(c, NULL);
1057 }
1058
1059out:
1060 TEEC_CloseSession(&session);
1061}
1062
1063static const uint8_t mac_data_md5_key1[10] = {
1064 0x6B, 0x65, 0x79, /* key */
1065};
1066
1067static const uint8_t mac_data_md5_in1[] = {
1068 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1069 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1070 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1071 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1072 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1073 0x64, 0x6F, 0x67, /* dog */
1074};
1075
1076static const uint8_t mac_data_md5_out1[] = {
1077 0x80, 0x07, 0x07, 0x13, 0x46, 0x3e, 0x77, 0x49,
1078 0xb9, 0x0c, 0x2d, 0xc2, 0x49, 0x11, 0xe2, 0x75
1079};
1080
1081
1082/* generated with scripts/digest_hmac.pl */
1083static const uint8_t mac_data_sha1_key1[10] = {
1084 0x6B, 0x65, 0x79, /* key */
1085};
1086
1087static const uint8_t mac_data_sha1_in1[] = {
1088 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1089 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1090 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1091 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1092 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1093 0x64, 0x6F, 0x67, /* dog */
1094};
1095
1096static const uint8_t mac_data_sha1_out1[] = {
1097 0xDE, 0x7C, 0x9B, 0x85, 0xB8, 0xB7, 0x8A, 0xA6, /* .|...... */
1098 0xBC, 0x8A, 0x7A, 0x36, 0xF7, 0x0A, 0x90, 0x70, /* ..z6...p */
1099 0x1C, 0x9D, 0xB4, 0xD9, /* .... */
1100};
1101
1102static const uint8_t mac_data_sha224_key1[24] = {
1103 0x6B, 0x65, 0x79, /* key */
1104};
1105
1106static const uint8_t mac_data_sha224_in1[] = {
1107 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1108 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1109 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1110 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1111 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1112 0x64, 0x6F, 0x67, /* dog */
1113};
1114
1115static const uint8_t mac_data_sha224_out1[] = {
1116 0x88, 0xFF, 0x8B, 0x54, 0x67, 0x5D, 0x39, 0xB8, /* ...Tg]9. */
1117 0xF7, 0x23, 0x22, 0xE6, 0x5F, 0xF9, 0x45, 0xC5, /* .#"._.E. */
1118 0x2D, 0x96, 0x37, 0x99, 0x88, 0xAD, 0xA2, 0x56, /* -.7....V */
1119 0x39, 0x74, 0x7E, 0x69, /* 9t~i */
1120};
1121
1122
1123static const uint8_t mac_data_sha256_key1[24] = {
1124 'Q', 'W', 'E', 'R', 'T', 'Y'
1125};
1126
1127static const uint8_t mac_data_sha256_in1[] = { 'a', 'b', 'c' };
1128
1129static const uint8_t mac_data_sha256_out1[] = {
1130 0xee, 0x2e, 0x5d, 0x9b, 0x51, 0xe2, 0x9c, 0x1d,
1131 0x49, 0xe9, 0xae, 0x6f, 0x0a, 0xcc, 0x15, 0x18,
1132 0xde, 0x1e, 0xa3, 0x88, 0x8e, 0xee, 0x48, 0xbb,
1133 0x82, 0x77, 0xe9, 0x09, 0x74, 0x4b, 0xa2, 0xf2
1134};
1135
1136/* generated with scripts/digest_hmac.pl */
1137static const uint8_t mac_data_sha256_key2[24] = {
1138 0x6B, 0x65, 0x79, /* key */
1139};
1140
1141static const uint8_t mac_data_sha256_in2[] = {
1142 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1143 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1144 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1145 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1146 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1147 0x64, 0x6F, 0x67, /* dog */
1148};
1149
1150static const uint8_t mac_data_sha256_out2[] = {
1151 0xF7, 0xBC, 0x83, 0xF4, 0x30, 0x53, 0x84, 0x24, /* ....0S.$ */
1152 0xB1, 0x32, 0x98, 0xE6, 0xAA, 0x6F, 0xB1, 0x43, /* .2...o.C */
1153 0xEF, 0x4D, 0x59, 0xA1, 0x49, 0x46, 0x17, 0x59, /* .MY.IF.Y */
1154 0x97, 0x47, 0x9D, 0xBC, 0x2D, 0x1A, 0x3C, 0xD8, /* .G..-.<. */
1155};
1156
1157static const uint8_t mac_data_sha384_key1[32] = {
1158 0x6B, 0x65, 0x79, /* key */
1159};
1160
1161static const uint8_t mac_data_sha384_in1[] = {
1162 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1163 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1164 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1165 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1166 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1167 0x64, 0x6F, 0x67, /* dog */
1168};
1169
1170static const uint8_t mac_data_sha384_out1[] = {
1171 0xD7, 0xF4, 0x72, 0x7E, 0x2C, 0x0B, 0x39, 0xAE, /* ..r~, .9. */
1172 0x0F, 0x1E, 0x40, 0xCC, 0x96, 0xF6, 0x02, 0x42, /* ..@....B */
1173 0xD5, 0xB7, 0x80, 0x18, 0x41, 0xCE, 0xA6, 0xFC, /* ....A... */
1174 0x59, 0x2C, 0x5D, 0x3E, 0x1A, 0xE5, 0x07, 0x00, /* Y, ]>.... */
1175 0x58, 0x2A, 0x96, 0xCF, 0x35, 0xE1, 0xE5, 0x54, /* X...5..T */
1176 0x99, 0x5F, 0xE4, 0xE0, 0x33, 0x81, 0xC2, 0x37, /* ._..3..7 */
1177};
1178
1179static const uint8_t mac_data_sha512_key1[32] = {
1180 0x6B, 0x65, 0x79, /* key */
1181};
1182
1183static const uint8_t mac_data_sha512_in1[] = {
1184 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1185 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1186 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1187 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1188 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1189 0x64, 0x6F, 0x67, /* dog */
1190};
1191
1192static const uint8_t mac_data_sha512_out1[] = {
1193 0xB4, 0x2A, 0xF0, 0x90, 0x57, 0xBA, 0xC1, 0xE2, /* ....W... */
1194 0xD4, 0x17, 0x08, 0xE4, 0x8A, 0x90, 0x2E, 0x09, /* ........ */
1195 0xB5, 0xFF, 0x7F, 0x12, 0xAB, 0x42, 0x8A, 0x4F, /* .....B.O */
1196 0xE8, 0x66, 0x53, 0xC7, 0x3D, 0xD2, 0x48, 0xFB, /* .fS.=.H. */
1197 0x82, 0xF9, 0x48, 0xA5, 0x49, 0xF7, 0xB7, 0x91, /* ..H.I... */
1198 0xA5, 0xB4, 0x19, 0x15, 0xEE, 0x4D, 0x1E, 0xC3, /* .....M.. */
1199 0x93, 0x53, 0x57, 0xE4, 0xE2, 0x31, 0x72, 0x50, /* .SW..1rP */
1200 0xD0, 0x37, 0x2A, 0xFA, 0x2E, 0xBE, 0xEB, 0x3A, /* .7.....: */
1201};
1202
1203
1204/* AES-CBC-MAC */
1205static const uint8_t mac_cbc_vect1_key[] = {
1206 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1207 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1208};
1209
1210static const uint8_t mac_cbc_vect1_data[] = {
1211 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1212 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1213 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1214 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1215 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1216 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1217 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1218 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1219 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1220 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1221 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1222 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1223 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1224 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1225 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1226 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1227 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1228 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1229 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1230 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1231};
1232
1233static const uint8_t mac_cbc_vect1_out[] = {
1234 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1235 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1236};
1237
1238/* DES-CBC-MAC */
1239static const uint8_t mac_cbc_vect2_key[] = {
1240 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1241};
1242
1243#define mac_cbc_vect2_data mac_cbc_vect1_data
1244static const uint8_t mac_cbc_vect2_out[] = {
1245 0xE9, 0x41, 0x46, 0x30, 0x69, 0x32, 0xBD, 0xD6, /* .AF0i2.. */
1246};
1247
1248/* DES3-CBC-MAC */
1249static const uint8_t mac_cbc_vect3_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_vect3_data mac_cbc_vect2_data
1256static const uint8_t mac_cbc_vect3_out[] = {
1257 0x1C, 0x17, 0xB7, 0xB5, 0x9F, 0x54, 0x9C, 0x63, /* .....T.c */
1258};
1259
1260/* AES-CBC-MAC PKCS#5 pad*/
1261static const uint8_t mac_cbc_vect4_key[] = {
1262 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1263 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1264 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1265 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1266};
1267
1268#define mac_cbc_vect4_data mac_cbc_vect1_data
1269static const uint8_t mac_cbc_vect4_out[] = {
1270 0x0B, 0x46, 0xC7, 0xA2, 0xE1, 0x5A, 0xE2, 0x23, /* .F...Z.# */
1271 0x83, 0x34, 0x1C, 0x86, 0x53, 0xF8, 0x51, 0x24, /* .4..S.Q$ */
1272};
1273
1274/* DES-CBC-MAC PKCS#5 pad*/
1275static const uint8_t mac_cbc_vect5_key[] = {
1276 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1277};
1278
1279#define mac_cbc_vect5_data mac_cbc_vect1_data
1280static const uint8_t mac_cbc_vect5_out[] = {
1281 0x30, 0x81, 0x4F, 0x42, 0x03, 0x7E, 0xD8, 0xA9, /* 0.OB.~.. */
1282};
1283
1284/* DES3-CBC-MAC PKCS#5 pad*/
1285static const uint8_t mac_cbc_vect6_key[] = {
1286 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1287 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1288 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1289};
1290
1291#define mac_cbc_vect6_data mac_cbc_vect1_data
1292static const uint8_t mac_cbc_vect6_out[] = {
1293 0x6E, 0x37, 0x6E, 0x14, 0x5E, 0x21, 0xDD, 0xF8, /* n7n.^!.. */
1294};
1295
1296/* AES-CBC-MAC PKCS#5 pad*/
1297#define mac_cbc_vect7_key mac_cbc_vect4_key
1298static const uint8_t mac_cbc_vect7_data[] = {
1299 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1300 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1301 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1302 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1303 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1304 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1305 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1306 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1307 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1308 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1309 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1310 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1311 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1312 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1313 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1314 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1315 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1316 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1317 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1318 0x74, 0x69, 0x6F, 0x6E, 0x2E, /* tion. */
1319};
1320
1321static const uint8_t mac_cbc_vect7_out[] = {
1322 0xFD, 0x89, 0x35, 0xB3, 0x93, 0x7F, 0xBB, 0xA2, /* ..5..... */
1323 0xFB, 0x65, 0x60, 0xC4, 0x0A, 0x62, 0xA0, 0xF9, /* .e`..b.. */
1324};
1325
1326/* DES-CBC-MAC PKCS#5 pad*/
1327#define mac_cbc_vect8_key mac_cbc_vect5_key
1328#define mac_cbc_vect8_data mac_cbc_vect7_data
1329static const uint8_t mac_cbc_vect8_out[] = {
1330 0x02, 0x2A, 0xA8, 0x2E, 0x47, 0xC6, 0xBB, 0x7C, /* ....G..| */
1331};
1332
1333/* DES3-CBC-MAC PKCS#5 pad*/
1334#define mac_cbc_vect9_key mac_cbc_vect6_key
1335#define mac_cbc_vect9_data mac_cbc_vect7_data
1336static const uint8_t mac_cbc_vect9_out[] = {
1337 0xD4, 0xF7, 0x3E, 0x27, 0x78, 0x0E, 0x1C, 0x79, /* ..>'x..y */
1338};
1339
1340/*
Pascal Brand5c3d8092015-07-23 08:20:26 +02001341 * DES3-CBC-MAC, with key size of 112bit
1342 * out obtained with:
1343 * 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
1344 */
1345/* DES3-CBC-MAC PKCS#5 pad*/
1346static const uint8_t mac_cbc_vect10_key[] = {
1347 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1348 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1349};
1350#define mac_cbc_vect10_data mac_cbc_vect1_data
1351static const uint8_t mac_cbc_vect10_out[] = {
1352 0x30, 0x92, 0x60, 0x99, 0x66, 0xac, 0x8c, 0xa6,
1353};
1354
1355
1356/*
Pascal Brandc639ac82015-07-02 08:53:34 +02001357 * AES-CMAC
1358 * Test vectors from
1359 * http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf
1360 */
1361
1362/* AES-128 */
1363static const uint8_t mac_cmac_vect1_key[] = {
1364 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
1365 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
1366};
1367
1368static const uint8_t mac_cmac_vect1_out[] = {
1369 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28,
1370 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46
1371};
1372
1373#define mac_cmac_vect2_key mac_cmac_vect1_key
1374static const uint8_t mac_cmac_vect2_data[] = {
1375 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1376 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1377};
1378
1379static const uint8_t mac_cmac_vect2_out[] = {
1380 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44,
1381 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c
1382};
1383
1384#define mac_cmac_vect3_key mac_cmac_vect1_key
1385static const uint8_t mac_cmac_vect3_data[] = {
1386 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1387 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1388 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1389 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1390 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1391};
1392
1393static const uint8_t mac_cmac_vect3_out[] = {
1394 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30,
1395 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27
1396};
1397
1398#define mac_cmac_vect4_key mac_cmac_vect1_key
1399static const uint8_t mac_cmac_vect4_data[] = {
1400 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1401 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1402 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1403 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1404 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1405 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1406 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1407 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1408};
1409
1410static const uint8_t mac_cmac_vect4_out[] = {
1411 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92,
1412 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe
1413};
1414
1415/* AES-192 */
1416static const uint8_t mac_cmac_vect5_key[] = {
1417 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
1418 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
1419 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b
1420};
1421
1422static const uint8_t mac_cmac_vect5_out[] = {
1423 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5,
1424 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67
1425};
1426
1427
1428#define mac_cmac_vect6_key mac_cmac_vect5_key
1429static const uint8_t mac_cmac_vect6_data[] = {
1430 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1431 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1432};
1433
1434static const uint8_t mac_cmac_vect6_out[] = {
1435 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90,
1436 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84
1437};
1438
1439#define mac_cmac_vect7_key mac_cmac_vect5_key
1440static const uint8_t mac_cmac_vect7_data[] = {
1441 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1442 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1443 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1444 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1445 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1446};
1447
1448static const uint8_t mac_cmac_vect7_out[] = {
1449 0x8a, 0x1d, 0xe5, 0xbe, 0x2e, 0xb3, 0x1a, 0xad,
1450 0x08, 0x9a, 0x82, 0xe6, 0xee, 0x90, 0x8b, 0x0e
1451};
1452
1453#define mac_cmac_vect8_key mac_cmac_vect5_key
1454static const uint8_t mac_cmac_vect8_data[] = {
1455 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1456 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1457 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1458 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1459 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1460 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1461 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1462 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1463};
1464
1465static const uint8_t mac_cmac_vect8_out[] = {
1466 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79,
1467 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11
1468};
1469
1470/* AES-256 */
1471static const uint8_t mac_cmac_vect9_key[] = {
1472 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
1473 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
1474 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
1475 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4
1476};
1477
1478static const uint8_t mac_cmac_vect9_out[] = {
1479 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e,
1480 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83
1481};
1482
1483#define mac_cmac_vect10_key mac_cmac_vect9_key
1484static const uint8_t mac_cmac_vect10_data[] = {
1485 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1486 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1487};
1488
1489static const uint8_t mac_cmac_vect10_out[] = {
1490 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82,
1491 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c
1492};
1493
1494#define mac_cmac_vect11_key mac_cmac_vect9_key
1495static const uint8_t mac_cmac_vect11_data[] = {
1496 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1497 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1498 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1499 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1500 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1501};
1502
1503static const uint8_t mac_cmac_vect11_out[] = {
1504 0xaa, 0xf3, 0xd8, 0xf1, 0xde, 0x56, 0x40, 0xc2,
1505 0x32, 0xf5, 0xb1, 0x69, 0xb9, 0xc9, 0x11, 0xe6
1506};
1507
1508#define mac_cmac_vect12_key mac_cmac_vect9_key
1509static const uint8_t mac_cmac_vect12_data[] = {
1510 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1511 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1512 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1513 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1514 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1515 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1516 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1517 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1518};
1519
1520static const uint8_t mac_cmac_vect12_out[] = {
1521 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5,
1522 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10
1523};
1524
1525struct xtest_mac_case {
1526 uint32_t algo;
1527 uint32_t key_type;
1528 const uint8_t *key;
1529 size_t key_len;
1530 size_t in_incr;
1531 const uint8_t *in;
1532 size_t in_len;
1533 const uint8_t *out;
1534 size_t out_len;
1535};
1536
1537#define XTEST_MAC_CASE(algo, key_type, key, in_incr, in, out) \
1538 { (algo), (key_type), (key), ARRAY_SIZE(key), \
1539 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
1540
1541#define XTEST_MAC_CBC_CASE(algo, key_type, vect, in_incr) \
1542 XTEST_MAC_CASE((algo), (key_type), \
1543 mac_cbc_ ## vect ## _key, (in_incr), \
1544 mac_cbc_ ## vect ## _data, mac_cbc_ ## vect ## _out)
1545
1546#define XTEST_MAC_CMAC_CASE(vect, in_incr) \
1547 XTEST_MAC_CASE(TEE_ALG_AES_CMAC, TEE_TYPE_AES, \
1548 mac_cmac_ ## vect ## _key, (in_incr), \
1549 mac_cmac_ ## vect ## _data, mac_cmac_ ## vect ## _out)
1550
1551static const struct xtest_mac_case mac_cases[] = {
1552 XTEST_MAC_CASE(TEE_ALG_HMAC_MD5, TEE_TYPE_HMAC_MD5,
1553 mac_data_md5_key1,
1554 4, mac_data_md5_in1, mac_data_md5_out1),
1555 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA1, TEE_TYPE_HMAC_SHA1,
1556 mac_data_sha1_key1,
1557 5, mac_data_sha1_in1, mac_data_sha1_out1),
1558 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA224, TEE_TYPE_HMAC_SHA224,
1559 mac_data_sha224_key1,
1560 8, mac_data_sha224_in1, mac_data_sha224_out1),
1561 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1562 mac_data_sha256_key1,
1563 1, mac_data_sha256_in1, mac_data_sha256_out1),
1564 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1565 mac_data_sha256_key2,
1566 7, mac_data_sha256_in2, mac_data_sha256_out2),
1567 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA384, TEE_TYPE_HMAC_SHA384,
1568 mac_data_sha384_key1,
1569 11, mac_data_sha384_in1, mac_data_sha384_out1),
1570 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA512, TEE_TYPE_HMAC_SHA512,
1571 mac_data_sha512_key1,
1572 13, mac_data_sha512_in1, mac_data_sha512_out1),
1573
1574 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_NOPAD, TEE_TYPE_AES, vect1, 14),
1575 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_NOPAD, TEE_TYPE_DES, vect2, 16),
1576 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_NOPAD, TEE_TYPE_DES3, vect3,
1577 17),
1578 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect4, 11),
1579 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect5, 9),
1580 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect6, 4),
1581 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect7, 3),
1582 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect8, 23),
1583 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect9,
1584 34),
Pascal Brand5c3d8092015-07-23 08:20:26 +02001585 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect10, 4),
Pascal Brandc639ac82015-07-02 08:53:34 +02001586
1587 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect1_key,
1588 ARRAY_SIZE(mac_cmac_vect1_key), 0, NULL, 0, mac_cmac_vect1_out,
1589 ARRAY_SIZE(mac_cmac_vect1_out) },
1590 XTEST_MAC_CMAC_CASE(vect2, 9),
1591 XTEST_MAC_CMAC_CASE(vect3, 9),
1592 XTEST_MAC_CMAC_CASE(vect4, 9),
1593 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect5_key,
1594 ARRAY_SIZE(mac_cmac_vect5_key), 0, NULL, 0, mac_cmac_vect5_out,
1595 ARRAY_SIZE(mac_cmac_vect5_out) },
1596 XTEST_MAC_CMAC_CASE(vect6, 9),
1597 XTEST_MAC_CMAC_CASE(vect7, 9),
1598 XTEST_MAC_CMAC_CASE(vect8, 9),
1599 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect9_key,
1600 ARRAY_SIZE(mac_cmac_vect9_key), 0, NULL, 0, mac_cmac_vect9_out,
1601 ARRAY_SIZE(mac_cmac_vect9_out) },
1602 XTEST_MAC_CMAC_CASE(vect10, 9),
1603 XTEST_MAC_CMAC_CASE(vect11, 9),
1604 XTEST_MAC_CMAC_CASE(vect12, 9),
1605};
1606
1607static void xtest_tee_test_4002(ADBG_Case_t *c)
1608{
1609 TEEC_Session session = { 0 };
1610 TEE_OperationHandle op1;
1611 TEE_OperationHandle op2;
1612 TEE_ObjectHandle key_handle;
1613 uint8_t out[64];
1614 size_t out_size;
1615 uint32_t ret_orig;
1616 size_t n;
1617
1618 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1619 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
1620 &ret_orig)))
1621 return;
1622
1623 for (n = 0; n < ARRAY_SIZE(mac_cases); n++) {
1624 TEE_Attribute key_attr;
1625 size_t key_size;
1626
1627 Do_ADBG_BeginSubCase(c, "MAC case %d algo 0x%x",
1628 (int)n, (unsigned int)mac_cases[n].algo);
1629
1630 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
1631 key_attr.content.ref.buffer = (void *)mac_cases[n].key;
1632 key_attr.content.ref.length = mac_cases[n].key_len;
1633
1634 key_size = key_attr.content.ref.length * 8;
1635 if (mac_cases[n].key_type == TEE_TYPE_DES ||
1636 mac_cases[n].key_type == TEE_TYPE_DES3)
1637 /* Exclude parity in bit size of key */
1638 key_size -= key_size / 8;
1639
1640 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1641 ta_crypt_cmd_allocate_operation(c, &session, &op1,
1642 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1643 goto out;
1644
1645 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1646 ta_crypt_cmd_allocate_operation(c, &session, &op2,
1647 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1648 goto out;
1649
1650 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1651 ta_crypt_cmd_allocate_transient_object(c, &session,
1652 mac_cases[n].key_type, key_size, &key_handle)))
1653 goto out;
1654
1655 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1656 ta_crypt_cmd_populate_transient_object(c, &session,
1657 key_handle, &key_attr, 1)))
1658 goto out;
1659
1660 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1661 ta_crypt_cmd_set_operation_key(c, &session, op1,
1662 key_handle)))
1663 goto out;
1664
1665 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1666 ta_crypt_cmd_free_transient_object(c, &session,
1667 key_handle)))
1668 goto out;
1669
1670 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1671 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1672 goto out;
1673
1674 if (mac_cases[n].in != NULL) {
1675 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1676 ta_crypt_cmd_mac_update(c, &session, op1,
1677 mac_cases[n].in, mac_cases[n].in_incr)))
1678 goto out;
1679 }
1680
1681 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1682 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1683 goto out;
1684
1685 out_size = sizeof(out);
1686 memset(out, 0, sizeof(out));
1687 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1688 ta_crypt_cmd_mac_final_compute(c, &session, op2,
1689 mac_cases[n].in + mac_cases[n].in_incr,
1690 mac_cases [n].in_len - mac_cases[n].in_incr,
1691 out, &out_size)))
1692 goto out;
1693
1694 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1695 mac_cases[n].out_len, out, out_size);
1696
1697 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1698 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1699 goto out;
1700
1701 out_size = sizeof(out);
1702 memset(out, 0, sizeof(out));
1703 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1704 ta_crypt_cmd_mac_final_compute(c, &session, op1,
1705 mac_cases[n].in, mac_cases[n].in_len, out,
1706 &out_size)))
1707 goto out;
1708
1709 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1710 mac_cases[n].out_len, out, out_size);
1711
1712 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1713 ta_crypt_cmd_free_operation(c, &session, op1)))
1714 goto out;
1715
1716 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1717 ta_crypt_cmd_free_operation(c, &session, op2)))
1718 goto out;
1719
1720 Do_ADBG_EndSubCase(c, NULL);
1721 }
1722out:
1723 TEEC_CloseSession(&session);
1724}
1725
1726/* generated with scripts/crypt_aes_cbc_nopad.pl */
1727static const uint8_t ciph_data_aes_key1[] = {
1728 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1729 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1730};
1731
1732static const uint8_t ciph_data_des_key1[] = {
1733 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 /* 01234567 */
1734};
1735
1736static const uint8_t ciph_data_des_key2[] = {
1737 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1738};
1739
1740
1741static const uint8_t ciph_data_des3_key1[] = {
1742 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1743 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1744 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1745};
1746
1747static const uint8_t ciph_data_des3_key2[] = {
1748 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1749 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1750 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1751};
1752
1753static const uint8_t ciph_data_des2_key1[] = {
1754 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1755 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1756};
1757
1758static const uint8_t ciph_data_in1[] = {
1759 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1760 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1761 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1762 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1763 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1764 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1765};
1766
1767static const uint8_t ciph_data_in3[] = {
1768 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1769 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1770 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1771 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1772 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1773 0x43, 0x44, 0x45, 0x46, 0x30, /* CDEF0 */
1774};
1775
1776static const uint8_t ciph_data_128_iv1[] = {
1777 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1778 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */
1779};
1780
1781static 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
1825static const uint8_t ciph_data_aes_cbc_vect1_key[] = {
1826 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1827 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1828};
1829
1830static const uint8_t ciph_data_aes_cbc_vect1_iv[] = {
1831 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1832 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1833};
1834
1835static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = {
1836 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1837 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1838 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1839 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1840 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1841 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1842 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1843 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1844 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1845 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1846 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1847 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1848 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1849 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1850 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1851 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1852 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1853 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1854 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1855 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1856};
1857
1858static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = {
1859 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */
1860 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */
1861 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */
1862 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */
1863 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */
1864 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */
1865 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */
1866 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */
1867 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */
1868 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */
1869 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */
1870 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */
1871 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */
1872 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */
1873 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */
1874 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */
1875 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */
1876 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */
1877 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1878 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1879};
1880
1881/* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962
1882 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */
1883static const uint8_t ciph_data_aes_cts_vect1_key[] = {
1884 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20,
1885 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69
1886};
1887
1888static const uint8_t ciph_data_aes_cts_vect1_iv[16] = {
1889 0x00
1890};
1891
1892static const uint8_t ciph_data_aes_cts_vect1_ptx[] = {
1893 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1894 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1895 0x20
1896};
1897
1898static const uint8_t ciph_data_aes_cts_vect1_ctx[] = {
1899 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
1900 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
1901 0x97
1902};
1903
1904#define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key
1905#define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv
1906static const uint8_t ciph_data_aes_cts_vect2_ptx[] = {
1907 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1908 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1909 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1910 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20
1911};
1912
1913static const uint8_t ciph_data_aes_cts_vect2_ctx[] = {
1914 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
1915 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
1916 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1917 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
1918};
1919
1920#define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key
1921#define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv
1922static const uint8_t ciph_data_aes_cts_vect3_ptx[] = {
1923 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1924 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1925 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1926 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1927};
1928
1929static const uint8_t ciph_data_aes_cts_vect3_ctx[] = {
1930 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1931 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1932 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1933 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1934};
1935
1936#define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key
1937#define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv
1938static const uint8_t ciph_data_aes_cts_vect4_ptx[] = {
1939 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1940 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1941 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1942 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1943 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1944 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c,
1945};
1946
1947static const uint8_t ciph_data_aes_cts_vect4_ctx[] = {
1948 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1949 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1950 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
1951 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
1952 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1953 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5,
1954};
1955
1956#define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key
1957#define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv
1958static const uint8_t ciph_data_aes_cts_vect5_ptx[] = {
1959 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1960 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1961 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1962 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1963 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1964 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
1965};
1966
1967static const uint8_t ciph_data_aes_cts_vect5_ctx[] = {
1968 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1969 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1970 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
1971 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
1972 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1973 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1974};
1975
1976#define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key
1977#define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv
1978static const uint8_t ciph_data_aes_cts_vect6_ptx[] = {
1979 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1980 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1981 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1982 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1983 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1984 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
1985 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74,
1986 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e,
1987};
1988
1989static const uint8_t ciph_data_aes_cts_vect6_ctx[] = {
1990 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1991 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1992 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1993 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1994 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
1995 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
1996 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
1997 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
1998};
1999
Jerome Forissiered00e162017-01-20 09:22:52 +01002000/*
2001 * Test case for https://github.com/OP-TEE/optee_os/issues/1203
2002 * 80 bytes of data, processed in two steps (32 + 48).
2003 */
2004
2005#define ciph_data_aes_cts_issue1203_key ciph_data_aes_cts_vect1_key
2006
2007static const uint8_t ciph_data_aes_cts_issue1203_iv[] = {
2008 0x5b, 0x11, 0x7b, 0xf9, 0x83, 0x6a, 0x01, 0x27,
2009 0x1d, 0x2a, 0xae, 0x0a, 0xd3, 0x27, 0x35, 0x81,
2010};
2011
2012static const uint8_t ciph_data_aes_cts_issue1203_ptx[] = {
2013 0x33, 0x2a, 0xf4, 0x8c, 0x18, 0xa1, 0x30, 0x7c,
2014 0xa7, 0x52, 0x76, 0xca, 0xa6, 0x68, 0xad, 0xf6,
2015 0x1e, 0xba, 0xc9, 0x66, 0x66, 0x52, 0x1a, 0xe7,
2016 0x3e, 0xbc, 0xba, 0x60, 0x95, 0x71, 0x04, 0x5e,
2017 0xb4, 0xb7, 0x10, 0xd7, 0x93, 0x6d, 0x5f, 0x9a,
2018 0xb8, 0xbb, 0x6b, 0xb0, 0x6d, 0x47, 0x93, 0x41,
2019 0x29, 0x21, 0xf2, 0x84, 0xf5, 0xb2, 0xf2, 0x6d,
2020 0xbe, 0xe5, 0x8a, 0x2b, 0x58, 0x8d, 0x1b, 0x5e,
2021 0x41, 0x04, 0xba, 0x9e, 0x92, 0xe9, 0x52, 0xb6,
2022 0x8b, 0x1e, 0x36, 0x72, 0x91, 0xe4, 0x56, 0x66,
2023};
2024
2025/*
2026 * Ciphertext was generated by an online tool for AES CBC.
2027 * Since the input size is a multiple of the block size, and the ciphertext
2028 * format is CS3, the output is the same as plain AES CBC with the last
2029 * two blocks swapped.
2030 */
2031static const uint8_t ciph_data_aes_cts_issue1203_ctx[] = {
2032 0x6c, 0xfe, 0xef, 0x6a, 0x1c, 0x8f, 0xd3, 0xc3,
2033 0x66, 0xc4, 0xd9, 0x0e, 0xbe, 0x24, 0x17, 0x3f,
2034 0xcd, 0x19, 0xc9, 0xd2, 0x10, 0x3f, 0xcf, 0xdc,
2035 0xe9, 0x05, 0xab, 0xd5, 0x1a, 0x31, 0x41, 0x77,
2036 0x3b, 0xd7, 0x6a, 0x26, 0xae, 0x0d, 0xc9, 0x47,
2037 0x77, 0xd4, 0xa7, 0xd5, 0x73, 0x88, 0x9e, 0xde,
2038 0x72, 0x66, 0xe0, 0xe2, 0x3d, 0x62, 0x91, 0x22,
2039 0xae, 0x11, 0x01, 0x97, 0x22, 0x6a, 0x45, 0xa9,
2040 0xba, 0x56, 0xd2, 0xbc, 0x55, 0x2d, 0x99, 0x4d,
2041 0x3d, 0x22, 0x27, 0x9a, 0xac, 0x66, 0x2f, 0xf5,
2042};
2043
Pascal Brandc639ac82015-07-02 08:53:34 +02002044static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2045 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2046 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2047 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2048 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2049 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2050 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2051};
2052
2053static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2054 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2055};
2056
2057static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2058 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2059 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2060 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2061 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2062 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2063 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2064};
2065
2066static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2067 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2068 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2069 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2070 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2071 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2072 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2073};
2074
2075static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2076 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2077 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2078 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2079 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2080 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2081 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2082};
2083
2084static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2085 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2086 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2087 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2088 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2089 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2090 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2091};
2092
2093static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2094 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2095 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2096 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2097 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2098 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2099 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2100};
2101
2102struct xtest_ciph_case {
2103 uint32_t algo;
2104 uint32_t mode;
2105 uint32_t key_type;
2106 const uint8_t *key1;
2107 size_t key1_len;
2108 const uint8_t *key2;
2109 size_t key2_len;
2110 const uint8_t *iv;
2111 size_t iv_len;
2112 size_t in_incr;
2113 const uint8_t *in;
2114 size_t in_len;
2115 const uint8_t *out;
2116 size_t out_len;
2117 size_t line;
2118};
2119
2120#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2121 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2122 NULL, 0, NULL, 0, \
2123 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2124 __LINE__ }, \
2125 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2126 NULL, 0, NULL, 0, \
2127 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2128
2129#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2130 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2131 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2132 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2133 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2134 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2135 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2136
2137#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2138 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2139 ciph_data_aes_xts_ ## vect ## _key1, \
2140 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2141 ciph_data_aes_xts_ ## vect ## _key2, \
2142 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2143 ciph_data_aes_xts_ ## vect ## _iv, \
2144 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2145 (in_incr), \
2146 ciph_data_aes_xts_ ## vect ## _ptx, \
2147 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2148 ciph_data_aes_xts_ ## vect ## _ctx, \
2149 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2150 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2151 ciph_data_aes_xts_ ## vect ## _key1, \
2152 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2153 ciph_data_aes_xts_ ## vect ## _key2, \
2154 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2155 ciph_data_aes_xts_ ## vect ## _iv, \
2156 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2157 (in_incr), \
2158 ciph_data_aes_xts_ ## vect ## _ctx, \
2159 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2160 ciph_data_aes_xts_ ## vect ## _ptx, \
2161 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2162
2163#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2164 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2165 ciph_data_aes_cbc_ ## vect ## _key, \
2166 ciph_data_aes_cbc_ ## vect ## _iv, \
2167 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2168 ciph_data_aes_cbc_ ## vect ## _ctx)
2169
2170#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2171 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2172 ciph_data_aes_cts_ ## vect ## _key, \
2173 ciph_data_aes_cts_ ## vect ## _iv, \
2174 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2175 ciph_data_aes_cts_ ## vect ## _ctx)
2176
2177static const struct xtest_ciph_case ciph_cases[] = {
2178 /* AES */
2179 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2180 ciph_data_aes_key1, 11, ciph_data_in1,
2181 ciph_data_aes_ecb_nopad_out1),
2182 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2183 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2184 ciph_data_in1,
2185 ciph_data_aes_cbc_nopad_out1),
2186 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2187 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2188 ciph_data_in1,
2189 ciph_data_aes_ctr_out1),
2190 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2191 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2192 ciph_data_in3,
2193 ciph_data_aes_ctr_out2),
Jens Wiklander692efd12018-01-19 09:52:00 +01002194 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2195 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2196 ciph_data_in3,
2197 ciph_data_aes_ctr_out2),
Pascal Brandc639ac82015-07-02 08:53:34 +02002198
2199 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
2200
2201 /* AES-CTS */
2202 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2203 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2204 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2205 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2206 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2207 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2208 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
Jerome Forissiered00e162017-01-20 09:22:52 +01002209 XTEST_CIPH_CASE_AES_CTS(issue1203, 32),
Pascal Brandc639ac82015-07-02 08:53:34 +02002210
2211 /* DES */
2212 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2213 ciph_data_des_key1, 14, ciph_data_in1,
2214 ciph_data_des_ecb_nopad_out1),
2215 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2216 ciph_data_des_key2, 3, ciph_data_in2,
2217 ciph_data_des_ecb_nopad_out2),
2218 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2219 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2220 ciph_data_des_cbc_nopad_out1),
2221
2222 /* DES3 */
2223 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2224 ciph_data_des3_key1, 11, ciph_data_in1,
2225 ciph_data_des3_ecb_nopad_out1),
2226 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2227 ciph_data_des3_key2, 3, ciph_data_in2,
2228 ciph_data_des_ecb_nopad_out2),
2229 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2230 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2231 ciph_data_in1,
2232 ciph_data_des3_cbc_nopad_out1),
2233
2234 /* DES2 */
2235 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2236 ciph_data_des2_key1, 11, ciph_data_in1,
2237 ciph_data_des2_ecb_nopad_out1),
2238 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2239 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2240 ciph_data_in1,
2241 ciph_data_des2_cbc_nopad_out1),
Pascal Brandc639ac82015-07-02 08:53:34 +02002242
Pascal Brandc639ac82015-07-02 08:53:34 +02002243 /* AES-XTS */
2244 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2245 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2246 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2247 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2248 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2249 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2250 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2251 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2252 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2253 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2254 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2255 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2256 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2257 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2258 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2259 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2260 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2261 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2262 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
2263};
2264
Jerome Forissier23256842018-02-16 09:25:35 +01002265static void xtest_tee_test_4003(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02002266{
2267 TEEC_Session session = { 0 };
2268 TEE_OperationHandle op;
2269 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2270 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2271 uint8_t out[2048];
2272 size_t out_size;
2273 size_t out_offs;
2274 uint32_t ret_orig;
2275 size_t n;
2276
2277 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2278 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2279 &ret_orig)))
2280 return;
2281
2282 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
2283 TEE_Attribute key_attr;
2284 size_t key_size;
2285 size_t op_key_size;
2286
2287
2288 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2289 (int)n, (unsigned int)ciph_cases[n].algo,
2290 (int)ciph_cases[n].line);
2291
2292 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2293 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2294 key_attr.content.ref.length = ciph_cases[n].key1_len;
2295
2296 key_size = key_attr.content.ref.length * 8;
2297 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2298 ciph_cases[n].key_type == TEE_TYPE_DES3)
2299 /* Exclude parity in bit size of key */
2300 key_size -= key_size / 8;
2301
2302 op_key_size = key_size;
2303 if (ciph_cases[n].key2 != NULL)
2304 op_key_size *= 2;
2305
2306 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2307 ta_crypt_cmd_allocate_operation(c, &session, &op,
2308 ciph_cases[n].algo, ciph_cases[n].mode,
2309 op_key_size)))
2310 goto out;
2311
2312 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2313 ta_crypt_cmd_allocate_transient_object(c, &session,
2314 ciph_cases[n].key_type, key_size,
2315 &key1_handle)))
2316 goto out;
2317
2318 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2319 ta_crypt_cmd_populate_transient_object(c, &session,
2320 key1_handle, &key_attr, 1)))
2321 goto out;
2322
2323 if (ciph_cases[n].key2 != NULL) {
2324 key_attr.content.ref.buffer =
2325 (void *)ciph_cases[n].key2;
2326 key_attr.content.ref.length = ciph_cases[n].key2_len;
2327
2328 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2329 ta_crypt_cmd_allocate_transient_object(c,
2330 &session, ciph_cases[n].key_type,
2331 key_attr.content.ref.length * 8,
2332 &key2_handle)))
2333 goto out;
2334
2335 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2336 ta_crypt_cmd_populate_transient_object(c,
2337 &session, key2_handle, &key_attr, 1)))
2338 goto out;
2339
2340 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2341 ta_crypt_cmd_set_operation_key2(c, &session, op,
2342 key1_handle, key2_handle)))
2343 goto out;
2344 } else {
2345 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2346 ta_crypt_cmd_set_operation_key(c, &session, op,
2347 key1_handle)))
2348 goto out;
2349 }
2350
2351 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2352 ta_crypt_cmd_free_transient_object(c, &session,
2353 key1_handle)))
2354 goto out;
2355 key1_handle = TEE_HANDLE_NULL;
2356
2357 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2358 ta_crypt_cmd_free_transient_object(c, &session,
2359 key2_handle)))
2360 goto out;
2361 key2_handle = TEE_HANDLE_NULL;
2362
2363 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2364 ta_crypt_cmd_cipher_init(c, &session, op,
2365 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2366 goto out;
2367
2368 out_offs = 0;
2369 out_size = sizeof(out);
2370 memset(out, 0, sizeof(out));
2371 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2372 ta_crypt_cmd_cipher_update(c, &session, op,
2373 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2374 &out_size)))
2375 goto out;
2376
Jerome Forissierd2d94b42017-06-02 16:39:34 +02002377 if (ciph_cases[n].algo == TEE_ALG_AES_CTR)
2378 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
2379 ciph_cases[n].in_incr);
2380
Pascal Brandc639ac82015-07-02 08:53:34 +02002381 out_offs += out_size;
2382 out_size = sizeof(out) - out_offs;
2383
2384 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2385 ta_crypt_cmd_cipher_do_final(c, &session, op,
2386 ciph_cases[n].in + ciph_cases[n].in_incr,
2387 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2388 out + out_offs,
2389 &out_size)))
2390 goto out;
2391
2392 out_offs += out_size;
2393
2394 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2395 ciph_cases[n].out_len, out, out_offs);
2396
2397 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2398 ta_crypt_cmd_free_operation(c, &session, op)))
2399 goto out;
2400
2401 Do_ADBG_EndSubCase(c, NULL);
2402 }
2403out:
2404 TEEC_CloseSession(&session);
2405}
2406
Pascal Brandc639ac82015-07-02 08:53:34 +02002407static void xtest_tee_test_4004(ADBG_Case_t *c)
2408{
2409 TEEC_Session session = { 0 };
2410 uint32_t ret_orig;
2411 uint8_t buf1[45] = { 0 };
2412 uint8_t buf2[45] = { 0 };
2413 static const uint8_t zeros[45] = { 0 };
2414
2415 Do_ADBG_BeginSubCase(c, "TEE get random");
2416 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2417 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2418 &ret_orig)))
2419 return;
2420
2421 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2422 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2423 sizeof(buf1))))
2424 goto out;
2425
2426 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2427 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2428
2429 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2430 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2431 sizeof(buf2))))
2432 goto out;
2433
2434 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2435 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2436
2437 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2438 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2439out:
2440 TEEC_CloseSession(&session);
2441 Do_ADBG_EndSubCase(c, "TEE get random");
2442}
2443
2444
2445struct xtest_ae_case {
2446 uint32_t algo;
2447 uint32_t mode;
2448 uint32_t key_type;
2449 const uint8_t *key;
2450 size_t key_len;
2451 const uint8_t *nonce;
2452 size_t nonce_len;
2453 size_t aad_incr;
2454 const uint8_t *aad;
2455 size_t aad_len;
2456 size_t in_incr;
2457 const uint8_t *ptx;
2458 size_t ptx_len;
2459 const uint8_t *ctx;
2460 size_t ctx_len;
2461 const uint8_t *tag;
2462 size_t tag_len;
2463 size_t line;
2464};
2465
2466
2467#define ARRAY(a) a, ARRAY_SIZE(a)
2468#define NULL_ARRAY(a) NULL, 0
2469
2470#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2471 aad_array, ptx_array, ctx_array) \
2472 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2473 ARRAY(vect ## _nonce), (aad_incr), \
2474 aad_array(vect ## _aad), (in_incr), \
2475 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2476 ARRAY(vect ## _tag), \
2477 __LINE__ }, \
2478 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2479 ARRAY(vect ## _nonce), (aad_incr), \
2480 aad_array(vect ## _aad), (in_incr), \
2481 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2482 ARRAY(vect ## _tag), \
2483 __LINE__ }
2484
2485#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2486 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2487 in_incr, ARRAY, ARRAY, ARRAY)
2488
2489#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2490 aad_array, ptx_array, ctx_array) \
2491 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2492 in_incr, aad_array, ptx_array, ctx_array)
2493
2494
2495
2496static const struct xtest_ae_case ae_cases[] = {
2497 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2498 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2499 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2500
2501 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2502 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2503 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
Jens Wiklander9fc63f52017-11-10 11:13:26 +01002504 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY),
2505 XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY),
Pascal Brandc639ac82015-07-02 08:53:34 +02002506 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2507 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2508 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2509 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2510 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2511 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2512 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2513 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2514 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2515 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2516 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2517 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2518 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2519 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
Jens Wiklanderf6efe242017-11-06 13:16:43 +01002520#ifdef CFG_GCM_NIST_VECTORS
2521#include "gcmDecrypt128.h"
2522#include "gcmDecrypt192.h"
2523#include "gcmDecrypt256.h"
2524#include "gcmEncryptExtIV128.h"
2525#include "gcmEncryptExtIV192.h"
2526#include "gcmEncryptExtIV256.h"
2527#endif
Pascal Brandc639ac82015-07-02 08:53:34 +02002528};
2529
2530static void xtest_tee_test_4005(ADBG_Case_t *c)
2531{
2532 TEEC_Session session = { 0 };
2533 TEE_OperationHandle op;
2534 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
2535 TEE_Attribute key_attr;
2536 uint8_t out[512];
2537 size_t out_size;
2538 size_t out_offs;
2539 uint32_t ret_orig;
2540 size_t n;
2541
2542 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2543 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2544 &ret_orig)))
2545 return;
2546
2547 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2548 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2549 (int)n, (unsigned int)ae_cases[n].algo,
2550 (int)ae_cases[n].line);
2551
2552 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2553 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2554 key_attr.content.ref.length = ae_cases[n].key_len;
2555
2556 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2557 ta_crypt_cmd_allocate_operation(c, &session, &op,
2558 ae_cases[n].algo, ae_cases[n].mode,
2559 key_attr.content.ref.length * 8)))
2560 goto out;
2561
2562 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2563 ta_crypt_cmd_allocate_transient_object(c, &session,
2564 ae_cases[n].key_type,
2565 key_attr.content.ref.length * 8,
2566 &key_handle)))
2567 goto out;
2568
2569 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2570 ta_crypt_cmd_populate_transient_object(c, &session,
2571 key_handle, &key_attr, 1)))
2572 goto out;
2573
2574 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2575 ta_crypt_cmd_set_operation_key(c, &session, op,
2576 key_handle)))
2577 goto out;
2578
2579 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2580 ta_crypt_cmd_free_transient_object(c, &session,
2581 key_handle)))
2582 goto out;
2583 key_handle = TEE_HANDLE_NULL;
2584
2585 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2586 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2587 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2588 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2589 goto out;
2590
2591 if (ae_cases[n].aad != NULL) {
2592 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2593 ta_crypt_cmd_ae_update_aad(c, &session, op,
2594 ae_cases[n].aad, ae_cases[n].aad_incr)))
2595 goto out;
2596
2597 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2598 ta_crypt_cmd_ae_update_aad(c, &session, op,
2599 ae_cases[n].aad + ae_cases[n].aad_incr,
2600 ae_cases [n].aad_len -
2601 ae_cases[n].aad_incr)))
2602 goto out;
2603 }
2604
2605 out_offs = 0;
2606 out_size = sizeof(out);
2607 memset(out, 0, sizeof(out));
2608 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2609 if (ae_cases[n].ptx != NULL) {
2610 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2611 ta_crypt_cmd_ae_update(c, &session, op,
2612 ae_cases[n].ptx,
2613 ae_cases[n].in_incr, out,
2614 &out_size)))
2615 goto out;
2616 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002617 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2618 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2619 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002620 }
2621 } else {
2622 if (ae_cases[n].ctx != NULL) {
2623 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2624 ta_crypt_cmd_ae_update(c, &session, op,
2625 ae_cases[n].ctx,
2626 ae_cases[n].in_incr, out,
2627 &out_size)))
2628 goto out;
2629 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002630 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2631 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2632 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002633 }
2634 }
2635
2636 out_size = sizeof(out) - out_offs;
2637 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2638 uint8_t out_tag[64];
2639 size_t out_tag_len = MIN(sizeof(out_tag),
2640 ae_cases[n].tag_len);
2641
2642 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2643 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2644 ae_cases[n].ptx + ae_cases[n].in_incr,
2645 ae_cases[n].ptx_len -
2646 ae_cases[n].in_incr,
2647 out + out_offs,
2648 &out_size, out_tag, &out_tag_len)))
2649 goto out;
2650
2651 (void)ADBG_EXPECT_BUFFER(c,
2652 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2653 out_tag_len);
2654
2655 out_offs += out_size;
2656
2657 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2658 ae_cases[n].ctx_len, out, out_offs);
2659 } else {
2660 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2661 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2662 ae_cases[n].ctx + ae_cases[n].in_incr,
2663 ae_cases[n].ctx_len -
2664 ae_cases[n].in_incr,
2665 out + out_offs,
2666 &out_size, ae_cases[n].tag,
2667 ae_cases[n].tag_len)))
2668 goto out;
2669
2670 out_offs += out_size;
2671
2672 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2673 ae_cases[n].ptx_len, out, out_offs);
2674 }
2675
2676 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2677 ta_crypt_cmd_free_operation(c, &session, op)))
2678 goto out;
2679
2680 Do_ADBG_EndSubCase(c, NULL);
2681 }
2682out:
2683 TEEC_CloseSession(&session);
2684}
2685
2686struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002687 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002688 uint32_t algo;
2689 TEE_OperationMode mode;
2690
2691 union {
2692 struct {
2693 const uint8_t *modulus;
2694 size_t modulus_len;
2695
2696 const uint8_t *pub_exp;
2697 size_t pub_exp_len;
2698
2699 const uint8_t *priv_exp;
2700 size_t priv_exp_len;
2701
2702 const uint8_t *prime1; /* q */
2703 size_t prime1_len;
2704 const uint8_t *prime2; /* p */
2705 size_t prime2_len;
2706 const uint8_t *exp1; /* dp */
2707 size_t exp1_len;
2708 const uint8_t *exp2; /* dq */
2709 size_t exp2_len;
2710 const uint8_t *coeff; /* iq */
2711 size_t coeff_len;
2712
2713 int salt_len;
2714 } rsa;
2715 struct {
2716 const uint8_t *prime;
2717 size_t prime_len;
2718 const uint8_t *sub_prime;
2719 size_t sub_prime_len;
2720 const uint8_t *base;
2721 size_t base_len;
2722 const uint8_t *pub_val;
2723 size_t pub_val_len;
2724 const uint8_t *priv_val;
2725 size_t priv_val_len;
2726 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002727 struct {
2728 const uint8_t *private;
2729 size_t private_len;
2730 const uint8_t *public_x;
2731 size_t public_x_len;
2732 const uint8_t *public_y;
2733 size_t public_y_len;
2734 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002735 } params;
2736
2737 const uint8_t *ptx;
2738 size_t ptx_len;
2739 const uint8_t *ctx;
2740 size_t ctx_len;
2741 size_t line;
2742};
2743
2744#define WITHOUT_SALT(x) -1
2745#define WITH_SALT(x) x
2746
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002747#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2748 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002749 ARRAY(vect ## _ptx), \
2750 ARRAY(vect ## _out), \
2751 __LINE__ }
2752
2753#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2754 { .rsa = { \
2755 ARRAY(vect ## _modulus), \
2756 ARRAY(vect ## _pub_exp), \
2757 ARRAY(vect ## _priv_exp), \
2758 opt_crt_array(vect ## _prime1), \
2759 opt_crt_array(vect ## _prime2), \
2760 opt_crt_array(vect ## _exp1), \
2761 opt_crt_array(vect ## _exp2), \
2762 opt_crt_array(vect ## _coeff), \
2763 opt_salt(vect ## _salt_len) \
2764 } }
2765
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002766#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2767 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002768 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2769
2770#define XTEST_AC_DSA_UNION(vect) \
2771 { .dsa = { \
2772 ARRAY(vect ## _prime), \
2773 ARRAY(vect ## _sub_prime), \
2774 ARRAY(vect ## _base), \
2775 ARRAY(vect ## _pub_val), \
2776 ARRAY(vect ## _priv_val), \
2777 } }
2778
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002779#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
2780 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02002781
Pascal Brand3e143ee2015-07-15 17:17:16 +02002782#define XTEST_AC_ECDSA_UNION(vect) \
2783 { .ecdsa = { \
2784 ARRAY(vect ## _private), \
2785 ARRAY(vect ## _public_x), \
2786 ARRAY(vect ## _public_y), \
2787 } }
2788
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002789#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
2790 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02002791
Pascal Brandc639ac82015-07-02 08:53:34 +02002792static const struct xtest_ac_case xtest_ac_cases[] = {
2793 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002794 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002795 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002796 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002797 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002798 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002799 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002800 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002801 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002802 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002803 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002804 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002805 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002806 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002807 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002808 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002809 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002810 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002811 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002812 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002813 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002814 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002815 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002816 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002817 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002818 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002819 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002820 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002821 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002822 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
2823 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
2824 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
2825 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02002826
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002827 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002828 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002829 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002830 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002831
2832 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002833 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002834 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002835 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002836
2837 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002838 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002839 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002840 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002841
2842 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002843 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002844 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002845 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
2846
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002847 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
2848 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002849 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002850 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002851 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002852
2853 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2854 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002855 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002856 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2857 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002858 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002859
2860 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2861 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002862 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002863 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2864 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002865 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002866
2867 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2868 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002869 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002870 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2871 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002872 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002873
2874 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2875 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002876 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002877 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2878 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002879 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
2880
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002881 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002882 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002883 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002884 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002885 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002886 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002887 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002888 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002889 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002890 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002891 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002892 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
2893
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002894 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2895 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002896 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002897 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2898 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002899 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002900 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2901 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002902 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002903 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2904 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002905 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002906 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2907 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002908 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002909 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2910 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002911 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
2912
2913 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002914 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002915 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002916 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002917 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002918 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002919 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002920 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002921 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002922 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002923 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002924 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002925 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002926 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002927 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002928 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002929 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002930 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002931 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002932 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002933 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002934 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002935 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002936 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002937 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002938 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002939 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002940 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002941 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002942 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002943 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002944 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002945 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002946 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002947 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002948 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002949 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002950 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002951 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002952 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002953 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002954 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002955 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002956 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002957 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
2958
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002959 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
2960 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002961 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002962 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002963 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002964 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2965 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002966 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002967 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2968 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002969 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002970 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2971 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002972 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002973 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2974 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002975 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002976 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2977 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002978 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002979 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2980 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002981 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002982 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2983 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002984 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002985 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2986 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002987 ac_rsassa_vect15, ARRAY, WITH_SALT),
2988
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002989 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002990 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002991 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002992 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002993 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002994 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002995 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002996 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002997 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002998 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002999 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003000 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3001
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003002 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3003 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003004 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003005 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3006 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003007 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003008 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3009 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003010 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003011 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3012 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003013 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003014 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3015 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003016 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003017 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3018 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003019 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3020
3021 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003022 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003023 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3024 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003025 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3026 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3027 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3028 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3029 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3030 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3031 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3032 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3033 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3034 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3035 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3036 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3037 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3038 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3039 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3040 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3041 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3042 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3043 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3044 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3045 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3046 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3047 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3048 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3049 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3050 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3051 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3052 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003053 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3054 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3055 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3056 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3057 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3058 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003059 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3060 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003061 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3062 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3063 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3064 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3065 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3066 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3067 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3068 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3069 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3070 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3071 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3072 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3073 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3074 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3075 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3076 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3077 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3078 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3079 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3080 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3081 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3082 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3083 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3084 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3085 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3086 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3087 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3088 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003089 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003090 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3091 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3092 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3093 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3094 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3095 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3096 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3097 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3098 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3099 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3100 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3101 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3102 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3103 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3104 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3105 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3106 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3107 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3108 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3109 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3110 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3111 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3112 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3113 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3114 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3115 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3116 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3117 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3118 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3119 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003120 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3121 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3122 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3123 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003124 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3125 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003126 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3127 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3128 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3129 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3130 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3131 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3132 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3133 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3134 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3135 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3136 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3137 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3138 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3139 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3140 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3141 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3142 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3143 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3144 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3145 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3146 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3147 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3148 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3149 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3150 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3151 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3152 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3153 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003154 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003155 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3156 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003157 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3158 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3159 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3160 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3161 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3162 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3163 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3164 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3165 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3166 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3167 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3168 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3169 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3170 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3171 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3172 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3173 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3174 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3175 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3176 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3177 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3178 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3179 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3180 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3181 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3182 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3183 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3184 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003185 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3186 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3187 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3188 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3189 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003190 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3191 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003192 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3193 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3194 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3195 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3196 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3197 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3198 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3199 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3200 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3201 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3202 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3203 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3204 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3205 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3206 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3207 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3208 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3209 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3210 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3211 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3212 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3213 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3214 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3215 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3216 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3217 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3218 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3219 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003220 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3221 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003222
3223 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003224 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003225 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003226 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003227 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003228 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003229 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003230 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003231 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003232 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003233 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003234 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003235 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003236 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003237 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003238 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003239 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003240 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003241 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003242 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003243 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003244 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003245 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003246 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003247 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003248 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003249 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003250 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003251 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003252 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003253 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003254 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003255 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003256 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003257 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003258 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003259 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003260 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003261 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003262 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003263 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003264 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003265 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003266 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003267 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003268 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003269 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003270 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003271 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003272 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003273 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003274 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003275 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003276 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003277 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003278 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003279 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003280 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003281 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003282 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003283 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003284 nist_186_2_ecdsa_testvector_15),
3285 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003286 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003287 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003288 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003289 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003290 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003291 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003292 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003293 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003294 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003295 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003296 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003297 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003298 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003299 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003300 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003301 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003302 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003303 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003304 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003305 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003306 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003307 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003308 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003309 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003310 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003311 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003312 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003313 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003314 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003315 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003316 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003317 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003318 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003319 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003320 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003321 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003322 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003323 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003324 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003325 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003326 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003327 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003328 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003329 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003330 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003331 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003332 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003333 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003334 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003335 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003336 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003337 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003338 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003339 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003340 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003341 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003342 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003343 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003344 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003345 nist_186_2_ecdsa_testvector_30),
3346 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003347 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003348 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003349 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003350 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003351 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003352 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003353 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003354 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003355 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003356 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003357 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003358 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003359 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003360 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003361 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003362 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003363 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003364 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003365 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003366 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003367 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003368 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003369 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003370 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003371 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003372 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003373 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003374 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003375 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003376 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003377 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003378 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003379 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003380 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003381 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003382 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003383 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003384 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003385 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003386 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003387 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003388 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003389 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003390 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003391 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003392 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003393 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003394 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003395 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003396 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003397 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003398 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003399 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003400 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003401 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003402 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003403 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003404 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003405 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003406 nist_186_2_ecdsa_testvector_45),
3407 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003408 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003409 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003410 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003411 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003412 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003413 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003414 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003415 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003416 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003417 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003418 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003419 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003420 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003421 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003422 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003423 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003424 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003425 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003426 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003427 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003428 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003429 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003430 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003431 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003432 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003433 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003434 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003435 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003436 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003437 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003438 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003439 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003440 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003441 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003442 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003443 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003444 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003445 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003446 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003447 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003448 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003449 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003450 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003451 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003452 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003453 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003454 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003455 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003456 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003457 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003458 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003459 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003460 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003461 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003462 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003463 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003464 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003465 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003466 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003467 nist_186_2_ecdsa_testvector_60),
3468 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003469 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003470 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003471 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003472 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003473 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003474 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003475 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003476 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003477 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003478 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003479 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003480 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003481 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003482 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003483 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003484 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003485 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003486 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003487 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003488 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003489 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003490 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003491 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003492 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003493 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003494 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003495 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003496 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003497 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003498 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003499 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003500 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003501 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003502 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003503 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003504 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003505 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003506 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003507 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003508 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003509 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003510 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003511 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003512 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003513 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003514 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003515 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003516 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003517 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003518 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003519 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003520 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003521 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003522 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003523 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003524 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003525 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003526 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003527 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003528 nist_186_2_ecdsa_testvector_75),
3529 /* [K-163] - GP NOT SUPPORTED */
3530 /* [K-233] - GP NOT SUPPORTED */
3531 /* [K-283] - GP NOT SUPPORTED */
3532 /* [K-409] - GP NOT SUPPORTED */
3533 /* [K-571] - GP NOT SUPPORTED */
3534 /* [B-163] - GP NOT SUPPORTED */
3535 /* [B-233] - GP NOT SUPPORTED */
3536 /* [B-283] - GP NOT SUPPORTED */
3537 /* [B-409] - GP NOT SUPPORTED */
3538 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003539};
3540
3541static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3542 uint32_t max_key_size, uint32_t key_type,
3543 TEE_Attribute *attrs, size_t num_attrs,
3544 TEE_ObjectHandle *handle)
3545{
3546 size_t n;
3547
3548 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3549 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3550 max_key_size, handle)))
3551 return false;
3552
3553 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3554 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3555 num_attrs)))
3556 return false;
3557
3558 for (n = 0; n < num_attrs; n++) {
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003559 uint8_t out[384];
Pascal Brandc639ac82015-07-02 08:53:34 +02003560 size_t out_size;
3561
3562 out_size = sizeof(out);
3563 memset(out, 0, sizeof(out));
Pascal Brand3e143ee2015-07-15 17:17:16 +02003564
3565 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3566 continue;
3567
Pascal Brandc639ac82015-07-02 08:53:34 +02003568 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3569 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3570 attrs[n].attributeID, out, &out_size)))
3571 return false;
3572
Pascal Brand3e143ee2015-07-15 17:17:16 +02003573 if (out_size < attrs[n].content.ref.length) {
3574 memmove(out + (attrs[n].content.ref.length - out_size),
3575 out,
3576 attrs[n].content.ref.length);
3577 memset(out, 0, attrs[n].content.ref.length - out_size);
3578 out_size = attrs[n].content.ref.length;
3579 }
3580
Pascal Brandc639ac82015-07-02 08:53:34 +02003581 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3582 attrs[n].content.ref.length, out, out_size))
3583 return false;
3584 }
3585
3586 return true;
3587}
3588
3589static void xtest_tee_test_4006(ADBG_Case_t *c)
3590{
3591 TEEC_Session session = { 0 };
3592 TEE_OperationHandle op = TEE_HANDLE_NULL;
3593 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3594 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
3595 TEE_Attribute key_attrs[8];
3596 TEE_Attribute algo_params[1];
3597 size_t num_algo_params;
3598 uint8_t out[512];
3599 size_t out_size;
3600 uint8_t out_enc[512];
3601 size_t out_enc_size;
3602 uint8_t ptx_hash[TEE_MAX_HASH_SIZE];
3603 size_t ptx_hash_size;
3604 size_t max_key_size;
3605 size_t num_key_attrs;
3606 uint32_t ret_orig;
3607 size_t n;
Pascal Brand3e143ee2015-07-15 17:17:16 +02003608 uint32_t curve;
3609 uint32_t hash_algo;
Pascal Brandc639ac82015-07-02 08:53:34 +02003610
3611 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3612 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3613 &ret_orig)))
3614 return;
3615
3616 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3617 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3618
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003619 if (tv->level > level)
3620 continue;
3621
Pascal Brandc639ac82015-07-02 08:53:34 +02003622 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3623 (int)n, (unsigned int)tv->algo,
3624 (int)tv->line);
3625
3626 /*
3627 * When signing or verifying we're working with the hash of
3628 * the payload.
3629 */
3630 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003631 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3632 hash_algo = TEE_ALG_SHA1;
3633 else
3634 hash_algo = TEE_ALG_HASH_ALGO(
3635 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003636
3637 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3638 ta_crypt_cmd_allocate_operation(c, &session,
3639 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3640 goto out;
3641
3642 ptx_hash_size = sizeof(ptx_hash);
3643 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3644 ta_crypt_cmd_digest_do_final(c, & session, op,
3645 tv->ptx, tv->ptx_len, ptx_hash,
3646 &ptx_hash_size)))
3647 goto out;
3648
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003649 /*
3650 * When we use DSA algorithms, the size of the hash we
3651 * consider equals the min between the size of the
3652 * "subprime" in the key and the size of the hash
3653 */
3654 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3655 TEE_MAIN_ALGO_DSA) {
3656 if (tv->params.dsa.sub_prime_len <=
3657 ptx_hash_size)
3658 ptx_hash_size =
3659 tv->params.dsa.sub_prime_len;
3660 }
3661
Pascal Brandc639ac82015-07-02 08:53:34 +02003662 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3663 ta_crypt_cmd_free_operation(c, &session, op)))
3664 goto out;
3665 }
3666
3667 num_algo_params = 0;
3668 num_key_attrs = 0;
3669 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3670 case TEE_MAIN_ALGO_RSA:
3671 if (tv->params.rsa.salt_len > 0) {
3672 algo_params[0].attributeID =
3673 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3674 algo_params[0].content.value.a =
3675 tv->params.rsa.salt_len;
3676 algo_params[0].content.value.b = 0;
3677 num_algo_params = 1;
3678 }
3679
3680 max_key_size = tv->params.rsa.modulus_len * 8;
3681
3682 xtest_add_attr(&num_key_attrs, key_attrs,
3683 TEE_ATTR_RSA_MODULUS,
3684 tv->params.rsa.modulus,
3685 tv->params.rsa.modulus_len);
3686 xtest_add_attr(&num_key_attrs, key_attrs,
3687 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3688 tv->params.rsa.pub_exp,
3689 tv->params.rsa.pub_exp_len);
3690
3691 if (!ADBG_EXPECT_TRUE(c,
3692 create_key(c, &session,
3693 max_key_size,
3694 TEE_TYPE_RSA_PUBLIC_KEY,
3695 key_attrs,
3696 num_key_attrs,
3697 &pub_key_handle)))
3698 goto out;
3699
3700 xtest_add_attr(&num_key_attrs, key_attrs,
3701 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3702 tv->params.rsa.priv_exp,
3703 tv->params.rsa.priv_exp_len);
3704
3705 if (tv->params.rsa.prime1_len != 0) {
3706 xtest_add_attr(&num_key_attrs, key_attrs,
3707 TEE_ATTR_RSA_PRIME1,
3708 tv->params.rsa.prime1,
3709 tv->params.rsa.prime1_len);
3710 }
3711
3712 if (tv->params.rsa.prime2_len != 0) {
3713 xtest_add_attr(&num_key_attrs, key_attrs,
3714 TEE_ATTR_RSA_PRIME2,
3715 tv->params.rsa.prime2,
3716 tv->params.rsa.prime2_len);
3717 }
3718
3719 if (tv->params.rsa.exp1_len != 0) {
3720 xtest_add_attr(&num_key_attrs, key_attrs,
3721 TEE_ATTR_RSA_EXPONENT1,
3722 tv->params.rsa.exp1,
3723 tv->params.rsa.exp1_len);
3724 }
3725
3726 if (tv->params.rsa.exp2_len != 0) {
3727 xtest_add_attr(&num_key_attrs, key_attrs,
3728 TEE_ATTR_RSA_EXPONENT2,
3729 tv->params.rsa.exp2,
3730 tv->params.rsa.exp2_len);
3731 }
3732
3733 if (tv->params.rsa.coeff_len != 0) {
3734 xtest_add_attr(&num_key_attrs, key_attrs,
3735 TEE_ATTR_RSA_COEFFICIENT,
3736 tv->params.rsa.coeff,
3737 tv->params.rsa.coeff_len);
3738 }
3739
3740 if (!ADBG_EXPECT_TRUE(c,
3741 create_key(c, &session,
3742 max_key_size,
3743 TEE_TYPE_RSA_KEYPAIR,
3744 key_attrs,
3745 num_key_attrs,
3746 &priv_key_handle)))
3747 goto out;
3748 break;
3749
3750 case TEE_MAIN_ALGO_DSA:
3751 max_key_size = tv->params.dsa.prime_len * 8;
3752
3753 xtest_add_attr(&num_key_attrs, key_attrs,
3754 TEE_ATTR_DSA_PRIME,
3755 tv->params.dsa.prime,
3756 tv->params.dsa.prime_len);
3757 xtest_add_attr(&num_key_attrs, key_attrs,
3758 TEE_ATTR_DSA_SUBPRIME,
3759 tv->params.dsa.sub_prime,
3760 tv->params.dsa.sub_prime_len);
3761 xtest_add_attr(&num_key_attrs, key_attrs,
3762 TEE_ATTR_DSA_BASE,
3763 tv->params.dsa.base,
3764 tv->params.dsa.base_len);
3765 xtest_add_attr(&num_key_attrs, key_attrs,
3766 TEE_ATTR_DSA_PUBLIC_VALUE,
3767 tv->params.dsa.pub_val,
3768 tv->params.dsa.pub_val_len);
3769
3770 if (!ADBG_EXPECT_TRUE(c,
3771 create_key(c, &session, max_key_size,
3772 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
3773 num_key_attrs, &pub_key_handle)))
3774 goto out;
3775
3776 xtest_add_attr(&num_key_attrs, key_attrs,
3777 TEE_ATTR_DSA_PRIVATE_VALUE,
3778 tv->params.dsa.priv_val,
3779 tv->params.dsa.priv_val_len);
3780
3781 if (!ADBG_EXPECT_TRUE(c,
3782 create_key(c, &session, max_key_size,
3783 TEE_TYPE_DSA_KEYPAIR, key_attrs,
3784 num_key_attrs, &priv_key_handle)))
3785 goto out;
3786 break;
3787
Pascal Brand3e143ee2015-07-15 17:17:16 +02003788 case TEE_MAIN_ALGO_ECDSA:
3789 switch (tv->algo) {
3790 case TEE_ALG_ECDSA_P192:
3791 curve = TEE_ECC_CURVE_NIST_P192;
3792 break;
3793 case TEE_ALG_ECDSA_P224:
3794 curve = TEE_ECC_CURVE_NIST_P224;
3795 break;
3796 case TEE_ALG_ECDSA_P256:
3797 curve = TEE_ECC_CURVE_NIST_P256;
3798 break;
3799 case TEE_ALG_ECDSA_P384:
3800 curve = TEE_ECC_CURVE_NIST_P384;
3801 break;
3802 case TEE_ALG_ECDSA_P521:
3803 curve = TEE_ECC_CURVE_NIST_P521;
3804 break;
3805 default:
3806 curve = 0xFF;
3807 break;
3808 }
3809
3810 if (tv->algo == TEE_ALG_ECDSA_P521)
3811 max_key_size = 521;
3812 else
3813 max_key_size = tv->params.ecdsa.private_len * 8;
3814
3815 xtest_add_attr_value(&num_key_attrs, key_attrs,
3816 TEE_ATTR_ECC_CURVE, curve, 0);
3817 xtest_add_attr(&num_key_attrs, key_attrs,
3818 TEE_ATTR_ECC_PUBLIC_VALUE_X,
3819 tv->params.ecdsa.public_x,
3820 tv->params.ecdsa.public_x_len);
3821 xtest_add_attr(&num_key_attrs, key_attrs,
3822 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
3823 tv->params.ecdsa.public_y,
3824 tv->params.ecdsa.public_y_len);
3825
3826 if (!ADBG_EXPECT_TRUE(c,
3827 create_key(c, &session, max_key_size,
3828 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
3829 num_key_attrs, &pub_key_handle)))
3830 goto out;
3831
3832 xtest_add_attr(&num_key_attrs, key_attrs,
3833 TEE_ATTR_ECC_PRIVATE_VALUE,
3834 tv->params.ecdsa.private,
3835 tv->params.ecdsa.private_len);
3836
3837 if (!ADBG_EXPECT_TRUE(c,
3838 create_key(c, &session, max_key_size,
3839 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
3840 num_key_attrs, &priv_key_handle)))
3841 goto out;
3842 break;
3843
Pascal Brandc639ac82015-07-02 08:53:34 +02003844 default:
3845 ADBG_EXPECT_TRUE(c, false);
3846 goto out;
3847 }
3848
3849 out_size = sizeof(out);
3850 memset(out, 0, sizeof(out));
3851 switch (tv->mode) {
3852 case TEE_MODE_ENCRYPT:
3853 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3854 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02003855 &op, tv->algo, TEE_MODE_ENCRYPT,
3856 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02003857 goto out;
3858
3859 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3860 ta_crypt_cmd_set_operation_key(c, &session, op,
3861 pub_key_handle)))
3862 goto out;
3863
3864 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3865 ta_crypt_cmd_free_transient_object(c, &session,
3866 pub_key_handle)))
3867 goto out;
3868 pub_key_handle = TEE_HANDLE_NULL;
3869
3870 out_enc_size = sizeof(out_enc);
3871 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3872 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
3873 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
3874 &out_enc_size)))
3875 goto out;
3876
3877 /*
3878 * A PS which is random is added when formatting the
3879 * message internally of the algorithm so we can't
3880 * verify against precomputed values, instead we use the
3881 * decrypt operation to see that output is correct.
3882 */
3883
3884 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3885 ta_crypt_cmd_free_operation(c, &session, op)))
3886 goto out;
3887
3888 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3889 ta_crypt_cmd_allocate_operation(c, &session,
3890 &op, tv->algo, TEE_MODE_DECRYPT,
3891 max_key_size)))
3892 goto out;
3893
3894 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3895 ta_crypt_cmd_set_operation_key(c, &session, op,
3896 priv_key_handle)))
3897 goto out;
3898
3899 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3900 ta_crypt_cmd_free_transient_object(c, &session,
3901 priv_key_handle)))
3902 goto out;
3903
3904 priv_key_handle = TEE_HANDLE_NULL;
3905
3906 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3907 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
3908 NULL, 0, out_enc, out_enc_size, out,
3909 &out_size)))
3910 goto out;
3911
3912 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
3913 out_size);
3914 break;
3915
3916 case TEE_MODE_DECRYPT:
3917 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3918 ta_crypt_cmd_allocate_operation(c, &session,
3919 &op, tv->algo, TEE_MODE_DECRYPT,
3920 max_key_size)))
3921 goto out;
3922
3923 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3924 ta_crypt_cmd_set_operation_key(c, &session, op,
3925 priv_key_handle)))
3926 goto out;
3927
3928 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3929 ta_crypt_cmd_free_transient_object(c, &session,
3930 priv_key_handle)))
3931 goto out;
3932
3933 priv_key_handle = TEE_HANDLE_NULL;
3934
3935 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3936 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
3937 NULL, 0, tv->ctx, tv->ctx_len, out,
3938 &out_size)))
3939 goto out;
3940
3941 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
3942 out_size);
3943 break;
3944
3945 case TEE_MODE_VERIFY:
3946 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3947 ta_crypt_cmd_allocate_operation(c, &session,
3948 &op, tv->algo, TEE_MODE_VERIFY,
3949 max_key_size)))
3950 goto out;
3951
3952 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3953 ta_crypt_cmd_set_operation_key(c, &session, op,
3954 pub_key_handle)))
3955 goto out;
3956
3957 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3958 ta_crypt_cmd_free_transient_object(c, &session,
3959 pub_key_handle)))
3960 goto out;
3961
3962 pub_key_handle = TEE_HANDLE_NULL;
3963
3964 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3965 ta_crypt_cmd_asymmetric_verify(c, &session, op,
3966 algo_params, num_algo_params, ptx_hash,
3967 ptx_hash_size, tv->ctx, tv->ctx_len)))
3968 goto out;
3969 break;
3970
3971 case TEE_MODE_SIGN:
3972 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3973 ta_crypt_cmd_allocate_operation(c, &session,
3974 &op, tv->algo, TEE_MODE_SIGN,
3975 max_key_size)))
3976 goto out;
3977
3978 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3979 ta_crypt_cmd_set_operation_key(c, &session, op,
3980 priv_key_handle)))
3981 goto out;
3982
3983 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3984 ta_crypt_cmd_free_transient_object(c, &session,
3985 priv_key_handle)))
3986 goto out;
3987
3988 priv_key_handle = TEE_HANDLE_NULL;
3989
3990 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3991 ta_crypt_cmd_asymmetric_sign(c, &session, op,
3992 algo_params, num_algo_params, ptx_hash,
3993 ptx_hash_size, out, &out_size)))
3994 goto out;
3995
3996 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
3997 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02003998 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003999 tv->algo == TEE_ALG_DSA_SHA224 ||
4000 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004001 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4002 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004003 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4004 ta_crypt_cmd_free_operation(c, &session,
4005 op)))
4006 goto out;
4007 /*
4008 * The salt or K is random so we can't verify
4009 * signing against precomputed values, instead
4010 * we use the verify operation to see that
4011 * output is correct.
4012 */
4013 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4014 ta_crypt_cmd_allocate_operation(c,
4015 &session, &op, tv->algo,
4016 TEE_MODE_VERIFY, max_key_size)))
4017 goto out;
4018
4019 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4020 ta_crypt_cmd_set_operation_key(c,
4021 &session, op, pub_key_handle)))
4022 goto out;
4023
4024 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4025 ta_crypt_cmd_free_transient_object(c,
4026 &session, pub_key_handle)))
4027 goto out;
4028
4029 pub_key_handle = TEE_HANDLE_NULL;
4030
4031 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4032 ta_crypt_cmd_asymmetric_verify(c,
4033 &session, op, algo_params,
4034 num_algo_params, ptx_hash,
4035 ptx_hash_size, out, out_size)))
4036 goto out;
4037 } else {
4038 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4039 tv->ctx_len, out,
4040 out_size);
4041 }
4042 break;
4043
4044 default:
4045 break;
4046 }
4047
4048 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4049 ta_crypt_cmd_free_operation(c, &session, op)))
4050 goto out;
4051
4052 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4053 ta_crypt_cmd_free_transient_object(c, &session,
4054 pub_key_handle)))
4055 goto out;
4056 pub_key_handle = TEE_HANDLE_NULL;
4057
4058 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4059 ta_crypt_cmd_free_transient_object(c, &session,
4060 priv_key_handle)))
4061 goto out;
4062
4063 priv_key_handle = TEE_HANDLE_NULL;
4064
4065 Do_ADBG_EndSubCase(c, NULL);
4066 }
4067out:
4068 TEEC_CloseSession(&session);
4069}
4070
4071#define KEY_ATTR(x, y) { #x, (x), y }
4072
4073struct key_attrs {
4074 const char *name;
4075 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004076 /*
4077 * When keysize_check != 0: size of attribute is checked
4078 * Expected value is key_size bits except for DH in which case it is
4079 * the value of keysize_check.
4080 */
4081 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004082};
4083
4084static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4085 TEE_ObjectHandle key, uint32_t key_size,
4086 struct key_attrs *attrs, size_t num_attrs)
4087{
4088 uint8_t out[2048];
4089 size_t out_size;
4090 size_t n;
4091 size_t m;
4092
4093 for (m = 0; m < num_attrs; m++) {
4094 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4095 out_size = sizeof(out);
4096 memset(out, 0, sizeof(out));
4097 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4098 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4099 key, attrs[m].attr, out, &out_size)))
4100 return false;
4101
4102 if (attrs[m].keysize_check)
4103 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4104 key_size / 8);
4105
4106 if (out_size > 0) {
4107 /* Check that buffer isn't all zeroes */
4108 for (n = 0; n < out_size; n++)
4109 if (out[n] != 0)
4110 break;
4111 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4112 out_size))
4113 return false;
4114 }
4115 } else {
4116 uint32_t a;
4117 uint32_t b;
4118
4119 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4120 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4121 attrs[m].attr, &a, &b)))
4122 return false;
4123 }
4124 }
4125 return true;
4126}
4127
4128static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4129 TEE_ObjectHandle key, uint32_t key_size)
4130{
4131 const struct key_attrs attrs[] = {
4132 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4133 };
4134
4135 return test_keygen_attributes(c, s, key, key_size,
4136 (struct key_attrs *)&attrs,
4137 ARRAY_SIZE(attrs));
4138}
4139
4140
4141static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4142 TEE_ObjectHandle key, uint32_t key_size)
4143{
4144 const struct key_attrs attrs[] = {
4145 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4146 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4147 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4148 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4149 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4150 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4151 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4152 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4153 };
4154
4155 return test_keygen_attributes(c, s, key, key_size,
4156 (struct key_attrs *)&attrs,
4157 ARRAY_SIZE(attrs));
4158}
4159
Pascal Brande61133f2015-07-08 15:38:37 +02004160static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4161 TEE_ObjectHandle key, uint32_t key_size)
4162{
4163 const struct key_attrs attrs[] = {
4164 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4165 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4166 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4167 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4168 };
4169
4170 return test_keygen_attributes(c, s, key, key_size,
4171 (struct key_attrs *)&attrs,
4172 ARRAY_SIZE(attrs));
4173}
4174
Pascal Brandc639ac82015-07-02 08:53:34 +02004175static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004176 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004177{
4178 const struct key_attrs attrs[] = {
4179 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4180 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4181 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4182 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4183 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4184 };
4185
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004186 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004187 (struct key_attrs *)&attrs,
4188 ARRAY_SIZE(attrs));
4189}
4190
4191static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4192 TEE_ObjectHandle key, uint32_t key_size)
4193{
4194 const struct key_attrs attrs[] = {
4195 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4196 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4197 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4198 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4199 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4200 };
4201
4202 return test_keygen_attributes(c, s, key, key_size,
4203 (struct key_attrs *)&attrs,
4204 ARRAY_SIZE(attrs));
4205}
4206
4207static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4208 uint32_t key_type, uint32_t check_keysize,
4209 uint32_t key_size,
4210 TEE_Attribute *params, size_t param_count)
4211{
4212 TEE_ObjectHandle key;
4213 bool ret_val = true;
4214
4215 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4216 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4217 &key)))
4218 return false;
4219
4220 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4221 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4222 param_count)))
4223 return false;
4224
4225 switch (key_type) {
4226 case TEE_TYPE_DES:
4227 case TEE_TYPE_DES3:
4228 ret_val = ADBG_EXPECT_TRUE(c,
4229 test_secret_value(c, s, key,
4230 key_size + key_size / 7));
4231 break;
4232 case TEE_TYPE_AES:
4233 case TEE_TYPE_HMAC_MD5:
4234 case TEE_TYPE_HMAC_SHA1:
4235 case TEE_TYPE_HMAC_SHA224:
4236 case TEE_TYPE_HMAC_SHA256:
4237 case TEE_TYPE_HMAC_SHA384:
4238 case TEE_TYPE_HMAC_SHA512:
4239 case TEE_TYPE_GENERIC_SECRET:
4240 ret_val = ADBG_EXPECT_TRUE(c,
4241 test_secret_value(c, s, key, key_size));
4242 break;
4243
4244 case TEE_TYPE_RSA_KEYPAIR:
4245 ret_val = ADBG_EXPECT_TRUE(c,
4246 test_rsa_key_pair(c, s, key, key_size));
4247 break;
4248
Pascal Brande61133f2015-07-08 15:38:37 +02004249 case TEE_TYPE_ECDSA_KEYPAIR:
4250 case TEE_TYPE_ECDH_KEYPAIR:
4251 ret_val = ADBG_EXPECT_TRUE(c,
4252 test_ecc_key_pair(c, s, key, key_size));
4253 break;
4254
Pascal Brandc639ac82015-07-02 08:53:34 +02004255 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004256 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004257 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004258 break;
4259
4260 case TEE_TYPE_DSA_KEYPAIR:
4261 ret_val = ADBG_EXPECT_TRUE(c,
4262 test_dsa_key_pair(c, s, key, key_size));
4263 break;
4264
4265 default:
4266 ret_val = false;
4267 break;
4268 }
4269
4270 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4271 ta_crypt_cmd_free_transient_object(c, s, key)))
4272 return false;
4273
4274 return ret_val;
4275}
4276
4277static void xtest_test_keygen_noparams(ADBG_Case_t *c, TEEC_Session *session)
4278{
4279 size_t n;
4280 uint32_t key_size;
4281 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004282 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004283 const char *name;
4284 uint32_t key_type;
4285 uint32_t quanta;
4286 uint32_t min_size;
4287 uint32_t max_size;
4288 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004289 { 0, "AES", TEE_TYPE_AES, 64, 128,
Pascal Brandc639ac82015-07-02 08:53:34 +02004290 256 /* valid sizes 128, 192, 256 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004291 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4292 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
Pascal Brandc639ac82015-07-02 08:53:34 +02004293 168 /* valid sizes 112, 168 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004294 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4295 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4296 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4297 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4298 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4299 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4300 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4301 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004302
4303 /* New tests added to check non-regression of issue #5398 */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004304 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4305 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4306 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4307 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4308 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4309 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4310 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004311 };
4312
4313 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
4314 uint32_t min_size = key_types[n].min_size;
4315 uint32_t max_size = key_types[n].max_size;
4316 uint32_t quanta = key_types[n].quanta;
4317
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004318 if (key_types[n].level > level)
4319 continue;
4320
Pascal Brandc639ac82015-07-02 08:53:34 +02004321 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4322
4323 for (key_size = min_size; key_size <= max_size;
4324 key_size += quanta) {
4325 if (!ADBG_EXPECT_TRUE(c,
4326 generate_and_test_key(c, session, key_types
4327 [n].key_type, 1, key_size, NULL, 0)))
4328 break;
4329 }
4330
4331 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4332 }
4333}
4334
4335static void xtest_test_keygen_dh(ADBG_Case_t *c, TEEC_Session *session)
4336{
4337 size_t n;
4338 size_t param_count;
4339 /*
4340 * Note that the key size parameter is not used when creating the keys
4341 * but specifying these sizes make it possible to test the expected size
4342 * of the private value. This also means that the keysize must match the
4343 * size of p or what is specified in private_bits or the equvivalent
4344 * size of the subprime parameter.
4345 */
4346 TEE_Attribute params[4];
4347
4348#define XTEST_DH_GK_DATA(vect) \
4349 ARRAY(vect ## _p), \
4350 ARRAY(vect ## _g), \
4351 &vect ## _private_bits, \
4352 0, 0
4353#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4354 ARRAY(vect ## _p), \
4355 ARRAY(vect ## _g), \
4356 &vect ## _private_bits, \
4357 ARRAY(vect ## _subprime)
4358 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004359 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004360 uint32_t key_size;
4361 const uint8_t *p;
4362 size_t p_len;
4363 const uint8_t *g;
4364 size_t g_len;
4365 const uint32_t *private_bits;
4366 const uint8_t *subprime;
4367 size_t subprime_len;
4368 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004369 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004370 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004371 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004372 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004373 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004374 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004375 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004376 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004377 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004378 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004379 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004380 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004381 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004382 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004383 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004384 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004385 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004386 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004387 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004388 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004389 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004390 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004391 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004392 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004393 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004394 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004395 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004396 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004397 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004398 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004399 };
4400
4401
4402 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004403 if (key_types[n].level > level)
4404 continue;
4405
Pascal Brandc639ac82015-07-02 08:53:34 +02004406 Do_ADBG_BeginSubCase(c,
4407 "Generate DH key %d bits - Private bits = %d",
4408 key_types[n].key_size,
4409 *key_types[n].private_bits);
4410 param_count = 0;
4411
4412 xtest_add_attr(&param_count, params,
4413 TEE_ATTR_DH_PRIME,
4414 key_types[n].p, key_types[n].p_len);
4415
4416 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4417 key_types[n].g, key_types[n].g_len);
4418
4419 if (key_types[n].private_bits != 0) {
4420 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4421
4422 params[param_count].content.value.a =
4423 *key_types[n].private_bits;
4424
4425 params[param_count].content.value.b = 0;
4426 param_count++;
4427 }
4428
4429 if (key_types[n].subprime != 0) {
4430 xtest_add_attr(&param_count, params,
4431 TEE_ATTR_DH_SUBPRIME,
4432 key_types[n].subprime,
4433 key_types[n].subprime_len);
4434 }
4435
4436 if (!ADBG_EXPECT_TRUE(c,
4437 generate_and_test_key(c, session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004438 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004439 key_types[n]. key_size, params, param_count)))
4440 break;
4441
4442 Do_ADBG_EndSubCase(c,
4443 "Generate DH key %d bits - Private bits = %d",
4444 key_types[n].key_size,
4445 *key_types[n].private_bits);
4446 }
4447}
4448
4449static void xtest_test_keygen_dsa(ADBG_Case_t *c, TEEC_Session *session)
4450{
4451 size_t n;
4452 size_t param_count;
4453 TEE_Attribute params[4];
4454
4455#define XTEST_DSA_GK_DATA(vect) \
4456 ARRAY(vect ## _p), \
4457 ARRAY(vect ## _g), \
4458 ARRAY(vect ## _q)
4459 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004460 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004461 uint32_t key_size;
4462 const uint8_t *prime;
4463 size_t prime_len;
4464 const uint8_t *base;
4465 size_t base_len;
4466 const uint8_t *sub_prime;
4467 size_t sub_prime_len;
4468 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004469 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4470 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4471 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4472 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4473 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4474 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4475 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4476 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4477 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4478 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004479 };
4480
4481 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004482 if (key_types[n].level > level)
4483 continue;
4484
Pascal Brandc639ac82015-07-02 08:53:34 +02004485 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4486 key_types[n].key_size);
4487 param_count = 0;
4488
4489
4490 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4491 key_types[n].prime, key_types[n].prime_len);
4492
4493 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4494 key_types[n].sub_prime,
4495 key_types[n].sub_prime_len);
4496
4497 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4498 key_types[n].base, key_types[n].base_len);
4499
4500 if (!ADBG_EXPECT_TRUE(c,
4501 generate_and_test_key(c, session, TEE_TYPE_DSA_KEYPAIR,
4502 1, key_types[n]. key_size, params,
4503 param_count)))
4504 break;
4505
4506 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4507 key_types[n].key_size);
4508 }
4509}
4510
Pascal Brande61133f2015-07-08 15:38:37 +02004511static void xtest_test_keygen_ecc(ADBG_Case_t *c, TEEC_Session *session)
4512{
4513 size_t n;
4514 size_t param_count;
4515 TEE_Attribute params[4];
4516
4517 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004518 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004519 const char *name;
4520 uint32_t algo;
4521 uint32_t curve;
4522 uint32_t key_size;
4523 } key_types[] = {
4524 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004525 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4526 192 },
4527 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4528 224 },
4529 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4530 256 },
4531 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4532 384 },
4533 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4534 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004535
4536 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004537 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4538 192 },
4539 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4540 224 },
4541 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4542 256 },
4543 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4544 384 },
4545 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4546 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004547 };
4548
4549 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004550 if (key_types[n].level > level)
4551 continue;
4552
Pascal Brande61133f2015-07-08 15:38:37 +02004553 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4554 param_count = 0;
4555
4556 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4557 key_types[n].curve, 0);
4558
4559 if (!ADBG_EXPECT_TRUE(c,
4560 generate_and_test_key(c, session, key_types[n].algo,
4561 0, key_types[n].key_size, params,
4562 param_count)))
4563 break;
4564
4565 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4566 }
4567}
4568
Pascal Brandc639ac82015-07-02 08:53:34 +02004569static void xtest_tee_test_4007(ADBG_Case_t *c)
4570{
4571 TEEC_Session session = { 0 };
4572 uint32_t ret_orig;
4573
4574 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4575 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4576 &ret_orig)))
4577 return;
4578
4579 xtest_test_keygen_noparams(c, &session);
4580
4581 xtest_test_keygen_dh(c, &session);
4582
4583 xtest_test_keygen_dsa(c, &session);
4584
Pascal Brande61133f2015-07-08 15:38:37 +02004585 xtest_test_keygen_ecc (c, &session);
4586
Pascal Brandc639ac82015-07-02 08:53:34 +02004587 TEEC_CloseSession(&session);
4588}
4589
4590static void xtest_tee_test_4008(ADBG_Case_t *c)
4591{
4592 TEEC_Session session = { 0 };
4593 uint32_t ret_orig;
4594 TEE_OperationHandle op;
4595 TEE_ObjectHandle key_handle;
4596 TEE_ObjectHandle sv_handle;
4597 TEE_Attribute params[4];
4598 size_t param_count = 0;
4599 uint8_t out[2048];
4600 size_t out_size;
4601
4602 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4603 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4604 &ret_orig)))
4605 return;
4606
4607 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4608
4609 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4610 ta_crypt_cmd_allocate_operation(c, &session, &op,
4611 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4612 derive_key_max_keysize)))
4613 goto out;
4614
4615 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4616 ta_crypt_cmd_allocate_transient_object(c, & session,
4617 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4618 &key_handle)))
4619 goto out;
4620
4621 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4622 ARRAY(derive_key_dh_prime));
4623
4624 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4625 ARRAY(derive_key_dh_base));
4626
4627 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4628 ARRAY(derive_key_dh_public_value));
4629
4630 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4631 ARRAY(derive_key_dh_private_value));
4632
4633 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4634 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4635 params, param_count)))
4636 goto out;
4637
4638 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4639 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4640 goto out;
4641
4642 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4643 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4644 goto out;
4645
4646 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4647 ta_crypt_cmd_allocate_transient_object(c, &session,
4648 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4649 &sv_handle)))
4650 goto out;
4651
Pascal Brand2b92b642015-07-16 13:29:42 +02004652 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004653 param_count = 0;
4654
4655 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4656 ARRAY(derive_key_dh_public_value_2));
4657
4658 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4659 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4660 param_count)))
4661 goto out;
4662
4663 out_size = sizeof(out);
4664 memset(out, 0, sizeof(out));
4665 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4666 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4667 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4668 goto out;
4669
4670 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4671 sizeof(derive_key_dh_shared_secret), out,
4672 out_size))
4673 goto out;
4674
4675 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4676 ta_crypt_cmd_free_operation(c, &session, op)))
4677 goto out;
4678
4679 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4680 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4681 goto out;
4682out:
4683 Do_ADBG_EndSubCase(c, "Derive DH key success");
4684 TEEC_CloseSession(&session);
4685}
Pascal Brand2b92b642015-07-16 13:29:42 +02004686
4687static void xtest_tee_test_4009(ADBG_Case_t *c)
4688{
4689 TEEC_Session session = { 0 };
4690 uint32_t ret_orig;
4691 TEE_OperationHandle op;
4692 TEE_ObjectHandle key_handle;
4693 TEE_ObjectHandle sv_handle;
4694 TEE_Attribute params[4];
4695 size_t param_count = 0;
4696 uint8_t out[2048];
4697 size_t out_size;
4698 uint32_t size_bytes;
Peng Fane13ad9b2015-07-21 11:46:26 +08004699 uint32_t i;
Pascal Brand2b92b642015-07-16 13:29:42 +02004700 struct derive_key_ecdh_t *pt;
4701
4702 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4703 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4704 &ret_orig)))
4705 return;
4706
4707 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
4708 pt = &derive_key_ecdh[i];
4709
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02004710 if (pt->level > level)
4711 continue;
4712
Pascal Brand2b92b642015-07-16 13:29:42 +02004713 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
4714 pt->algo);
4715 size_bytes = (pt->keysize + 7) / 8;
4716 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4717 ta_crypt_cmd_allocate_operation(c, &session, &op,
4718 pt->algo,
4719 TEE_MODE_DERIVE, pt->keysize)))
4720 goto out;
4721
4722 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4723 ta_crypt_cmd_allocate_transient_object(c, & session,
4724 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
4725 &key_handle)))
4726 goto out;
4727
4728 param_count = 0;
4729 xtest_add_attr_value(&param_count, params,
4730 TEE_ATTR_ECC_CURVE, pt->curve, 0);
4731 xtest_add_attr(&param_count, params,
4732 TEE_ATTR_ECC_PRIVATE_VALUE,
4733 pt->private, size_bytes);
4734 /*
4735 * The public value is not used. This is why we provide
4736 * another buffer
4737 */
4738 xtest_add_attr(&param_count, params,
4739 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4740 pt->private, size_bytes);
4741 xtest_add_attr(&param_count, params,
4742 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4743 pt->private, size_bytes);
4744
4745 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4746 ta_crypt_cmd_populate_transient_object(c,
4747 &session,
4748 key_handle, params, param_count)))
4749 goto out;
4750
4751 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4752 ta_crypt_cmd_set_operation_key(c, &session, op,
4753 key_handle)))
4754 goto out;
4755
4756 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4757 ta_crypt_cmd_free_transient_object(c, & session,
4758 key_handle)))
4759 goto out;
4760
4761 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4762 ta_crypt_cmd_allocate_transient_object(c, &session,
4763 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
4764 &sv_handle)))
4765 goto out;
4766
4767 /* reuse but reset params and param-count */
4768 param_count = 0;
4769
4770 xtest_add_attr(&param_count, params,
4771 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4772 pt->public_x, size_bytes);
4773 xtest_add_attr(&param_count, params,
4774 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4775 pt->public_y, size_bytes);
4776
4777 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4778 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
4779 params, param_count)))
4780 goto out;
4781
4782 out_size = sizeof(out);
4783 memset(out, 0, sizeof(out));
4784 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4785 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
4786 sv_handle,
4787 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4788 goto out;
4789
4790 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
4791 out, out_size))
4792 goto out;
4793
4794 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4795 ta_crypt_cmd_free_operation(c, &session, op)))
4796 goto out;
4797
4798 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4799 ta_crypt_cmd_free_transient_object(c, &session,
4800 sv_handle)))
4801 goto out;
4802
4803 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
4804 pt->algo);
4805 }
4806
4807 goto noerror;
4808
4809out:
4810 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
4811
4812noerror:
4813 TEEC_CloseSession(&session);
4814}
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004815
4816static void xtest_tee_test_4010(ADBG_Case_t *c)
4817{
4818 TEEC_Session session = { 0 };
4819 uint32_t ret_orig;
4820 TEE_ObjectHandle o;
4821 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
4822 static const TEE_Attribute attr = {
4823 .attributeID = TEE_ATTR_SECRET_VALUE,
4824 .content.ref.buffer = (void *)large_key,
4825 .content.ref.length = sizeof(large_key),
4826 };
4827
4828 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4829 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4830 &ret_orig)))
4831 return;
4832
4833 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4834 ta_crypt_cmd_allocate_transient_object(c, &session,
4835 TEE_TYPE_HMAC_SHA256, 1024, &o)))
4836 goto out;
4837
4838 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
4839 ta_crypt_cmd_populate_transient_object(c, &session, o,
4840 &attr, 1));
4841
4842out:
4843 TEEC_CloseSession(&session);
4844}
Jens Wiklanderb58916e2016-07-07 15:29:32 +02004845
4846static void xtest_tee_test_4011(ADBG_Case_t *c)
4847{
4848 TEEC_Session s = { 0 };
4849 size_t key_size = 512;
4850 TEE_ObjectHandle key;
4851 TEE_OperationHandle ops;
4852 TEE_OperationHandle opv;
4853 TEE_OperationHandle ope;
4854 TEE_OperationHandle opd;
4855 uint32_t ret_orig;
4856 uint8_t in[TEE_SHA1_HASH_SIZE];
4857 uint8_t out[1024];
4858 uint8_t tmp[1024];
4859 size_t out_size;
4860 size_t tmp_size;
4861 size_t n;
4862 size_t m;
4863 size_t i = 0;
4864
4865 /* Setup session, initialize message to sign, create a keypair */
4866 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
4867 &crypt_user_ta_uuid, NULL, &ret_orig)))
4868 return;
4869 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
4870 &s, in, sizeof(in))))
4871 goto out;
4872 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
4873 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
4874 goto out;
4875 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
4876 key, key_size, NULL, 0)))
4877 goto out;
4878
4879 /* Allocate operations for sign, verify, encrypt and decrypt */
4880 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4881 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
4882 key_size)))
4883 goto out;
4884 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4885 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
4886 key_size)))
4887 goto out;
4888 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4889 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
4890 goto out;
4891 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4892 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
4893 goto out;
4894
4895 /* Assign the keypair to all operations */
4896 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4897 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
4898 goto out;
4899 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4900 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
4901 goto out;
4902 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4903 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
4904 goto out;
4905 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4906 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
4907 goto out;
4908
4909 /*
4910 * The core of the test case is inspired by the one in libtomcrypt:
4911 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
4912 *
4913 * Testcase for Bleichenbacher attack
4914 *
4915 * (1) Create a valid signature
4916 * (2) Check that it can be verified
4917 * (3) Transform the package to fetch plain text (using the encrypt
4918 * operation in GP TEE Internal API)
4919 * (4) Forge the structure of PKCS#1-EMSA encoded data
4920 * (4.1) Search for start and end of the padding string
4921 * (4.2) Move the signature to the front of the padding string
4922 * (4.3) Zero the message until the end
4923 * (5) Transform the package back (using the decrypt operation in
4924 * GP TEE Internal API)
4925 * (6) The result should not be valid if the implementation is robust.
4926 */
4927
4928
4929 for (i = 0; i < 9; i++) {
4930 Do_ADBG_Log("Iteration %zu", i);
4931
4932 /* 1 */
4933 out_size = sizeof(out);
4934 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4935 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
4936 in, sizeof(in), out, &out_size)))
4937 goto out;
4938
4939 /* 2 */
4940 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4941 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
4942 in, sizeof(in), out, out_size)))
4943 goto out;
4944
4945 /* 3 */
4946 tmp_size = sizeof(tmp);
4947 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4948 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
4949 out, out_size, tmp, &tmp_size)))
4950 goto out;
4951
4952 /* 4.1 */
4953 for (n = 0; n < tmp_size; n++)
4954 if (tmp[n] == 0xff)
4955 break;
4956 for (m = n + 1; m < tmp_size; m++)
4957 if (tmp[m] != 0xff)
4958 break;
4959 /* 4.2 */
4960 memmove(tmp + n + i, tmp + m, tmp_size - m);
4961 /* 4.3 */
4962 for (n = n + tmp_size - m + i; n < tmp_size; n++)
4963 tmp[n] = 0;
4964
4965 /* 5 */
4966 out_size = sizeof(out);
4967 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4968 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
4969 tmp, tmp_size, out, &out_size)))
4970 goto out;
4971
4972 /* 6 */
4973 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
4974 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
4975 in, sizeof(in), out, out_size)))
4976 goto out;
4977 }
4978
4979out:
4980 TEEC_CloseSession(&s);
4981}