blob: 9584ccac56361d52b4e193b015a626071db086fa [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
Jerome Forissier45218eb2018-04-11 13:03:26 +02001776static const uint8_t ciph_data_in4[] = {
1777 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1778 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1779 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1780 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1781 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1782 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1783 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1784 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1785};
1786
Pascal Brandc639ac82015-07-02 08:53:34 +02001787static const uint8_t ciph_data_128_iv1[] = {
1788 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1789 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */
1790};
1791
1792static const uint8_t ciph_data_64_iv1[] = {
1793 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1794};
1795
1796static const uint8_t ciph_data_in2[] = {
1797 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
1798};
1799
1800static const uint8_t ciph_data_aes_ecb_nopad_out1[] = {
1801 0xA5, 0xBE, 0x14, 0xD5, 0x01, 0x05, 0x24, 0x48, /* ......$H */
1802 0x58, 0x1A, 0x6B, 0x82, 0xD4, 0x41, 0xD2, 0xB3, /* X.k..A.. */
1803 0xBB, 0xF9, 0xAE, 0x37, 0x94, 0xAC, 0x18, 0x50, /* ...7...P */
1804 0x87, 0x09, 0xCC, 0x3F, 0x43, 0xD2, 0xC2, 0xB7, /* ...?C... */
1805 0xD7, 0x6F, 0x84, 0x07, 0xB4, 0x78, 0xCE, 0x34, /* .o...x.4 */
1806 0x48, 0xC9, 0x16, 0x86, 0x42, 0xB8, 0xFF, 0xCF, /* H...B... */
1807};
1808
1809static const uint8_t ciph_data_aes_cbc_nopad_out1[] = {
1810 0x8D, 0x9F, 0x88, 0xD8, 0xAF, 0x9F, 0xC1, 0x3B, /* .......; */
1811 0x02, 0x15, 0x43, 0x6A, 0x8C, 0x1E, 0x34, 0x5C, /* ..Cj..4\ */
1812 0x83, 0xF4, 0x85, 0x3E, 0x43, 0x0F, 0xE5, 0x5F, /* ...>C.._ */
1813 0x81, 0x4C, 0xC0, 0x28, 0x3F, 0xD9, 0x98, 0x53, /* .L.(?..S */
1814 0xB1, 0x44, 0x51, 0x38, 0x21, 0xAB, 0x10, 0xCE, /* .DQ8!... */
1815 0xC2, 0xEC, 0x65, 0x54, 0xDD, 0x5C, 0xEA, 0xDC, /* ..eT.\.. */
1816};
1817
1818static const uint8_t ciph_data_aes_ctr_out1[] = {
1819 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1820 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1821 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1822 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1823 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1824 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1825};
1826
1827static const uint8_t ciph_data_aes_ctr_out2[] = {
1828 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1829 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1830 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1831 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1832 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1833 0x72, 0x0E, 0x3C, 0xD1, 0xA1, /* r.<.. */
1834};
1835
Jerome Forissier45218eb2018-04-11 13:03:26 +02001836static const uint8_t ciph_data_aes_ctr_out4[] = {
1837 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1838 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1839 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1840 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1841 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1842 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1843 0x9F, 0xD7, 0x0C, 0x92, 0xD4, 0xA5, 0x9D, 0x06, /* ........ */
1844 0x01, 0x80, 0x38, 0xCD, 0xC2, 0x71, 0x5D, 0x4A, /* ..8..q]J */
1845};
1846
Pascal Brandc639ac82015-07-02 08:53:34 +02001847static const uint8_t ciph_data_aes_cbc_vect1_key[] = {
1848 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1849 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1850};
1851
1852static const uint8_t ciph_data_aes_cbc_vect1_iv[] = {
1853 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1854 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1855};
1856
1857static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = {
1858 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1859 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1860 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1861 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1862 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1863 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1864 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1865 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1866 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1867 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1868 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1869 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1870 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1871 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1872 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1873 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1874 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1875 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1876 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1877 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1878};
1879
1880static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = {
1881 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */
1882 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */
1883 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */
1884 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */
1885 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */
1886 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */
1887 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */
1888 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */
1889 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */
1890 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */
1891 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */
1892 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */
1893 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */
1894 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */
1895 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */
1896 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */
1897 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */
1898 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */
1899 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1900 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1901};
1902
1903/* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962
1904 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */
1905static const uint8_t ciph_data_aes_cts_vect1_key[] = {
1906 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20,
1907 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69
1908};
1909
1910static const uint8_t ciph_data_aes_cts_vect1_iv[16] = {
1911 0x00
1912};
1913
1914static const uint8_t ciph_data_aes_cts_vect1_ptx[] = {
1915 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1916 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1917 0x20
1918};
1919
1920static const uint8_t ciph_data_aes_cts_vect1_ctx[] = {
1921 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
1922 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
1923 0x97
1924};
1925
1926#define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key
1927#define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv
1928static const uint8_t ciph_data_aes_cts_vect2_ptx[] = {
1929 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1930 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1931 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1932 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20
1933};
1934
1935static const uint8_t ciph_data_aes_cts_vect2_ctx[] = {
1936 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
1937 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
1938 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1939 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
1940};
1941
1942#define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key
1943#define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv
1944static const uint8_t ciph_data_aes_cts_vect3_ptx[] = {
1945 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1946 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1947 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1948 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1949};
1950
1951static const uint8_t ciph_data_aes_cts_vect3_ctx[] = {
1952 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1953 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1954 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1955 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1956};
1957
1958#define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key
1959#define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv
1960static const uint8_t ciph_data_aes_cts_vect4_ptx[] = {
1961 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1962 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1963 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1964 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1965 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1966 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c,
1967};
1968
1969static const uint8_t ciph_data_aes_cts_vect4_ctx[] = {
1970 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1971 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1972 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
1973 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
1974 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1975 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5,
1976};
1977
1978#define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key
1979#define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv
1980static const uint8_t ciph_data_aes_cts_vect5_ptx[] = {
1981 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1982 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1983 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1984 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1985 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1986 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
1987};
1988
1989static const uint8_t ciph_data_aes_cts_vect5_ctx[] = {
1990 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1991 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1992 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
1993 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
1994 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1995 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1996};
1997
1998#define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key
1999#define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv
2000static const uint8_t ciph_data_aes_cts_vect6_ptx[] = {
2001 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2002 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2003 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2004 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2005 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2006 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2007 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74,
2008 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e,
2009};
2010
2011static const uint8_t ciph_data_aes_cts_vect6_ctx[] = {
2012 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2013 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2014 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2015 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2016 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
2017 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
2018 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2019 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2020};
2021
Jerome Forissiered00e162017-01-20 09:22:52 +01002022/*
2023 * Test case for https://github.com/OP-TEE/optee_os/issues/1203
2024 * 80 bytes of data, processed in two steps (32 + 48).
2025 */
2026
2027#define ciph_data_aes_cts_issue1203_key ciph_data_aes_cts_vect1_key
2028
2029static const uint8_t ciph_data_aes_cts_issue1203_iv[] = {
2030 0x5b, 0x11, 0x7b, 0xf9, 0x83, 0x6a, 0x01, 0x27,
2031 0x1d, 0x2a, 0xae, 0x0a, 0xd3, 0x27, 0x35, 0x81,
2032};
2033
2034static const uint8_t ciph_data_aes_cts_issue1203_ptx[] = {
2035 0x33, 0x2a, 0xf4, 0x8c, 0x18, 0xa1, 0x30, 0x7c,
2036 0xa7, 0x52, 0x76, 0xca, 0xa6, 0x68, 0xad, 0xf6,
2037 0x1e, 0xba, 0xc9, 0x66, 0x66, 0x52, 0x1a, 0xe7,
2038 0x3e, 0xbc, 0xba, 0x60, 0x95, 0x71, 0x04, 0x5e,
2039 0xb4, 0xb7, 0x10, 0xd7, 0x93, 0x6d, 0x5f, 0x9a,
2040 0xb8, 0xbb, 0x6b, 0xb0, 0x6d, 0x47, 0x93, 0x41,
2041 0x29, 0x21, 0xf2, 0x84, 0xf5, 0xb2, 0xf2, 0x6d,
2042 0xbe, 0xe5, 0x8a, 0x2b, 0x58, 0x8d, 0x1b, 0x5e,
2043 0x41, 0x04, 0xba, 0x9e, 0x92, 0xe9, 0x52, 0xb6,
2044 0x8b, 0x1e, 0x36, 0x72, 0x91, 0xe4, 0x56, 0x66,
2045};
2046
2047/*
2048 * Ciphertext was generated by an online tool for AES CBC.
2049 * Since the input size is a multiple of the block size, and the ciphertext
2050 * format is CS3, the output is the same as plain AES CBC with the last
2051 * two blocks swapped.
2052 */
2053static const uint8_t ciph_data_aes_cts_issue1203_ctx[] = {
2054 0x6c, 0xfe, 0xef, 0x6a, 0x1c, 0x8f, 0xd3, 0xc3,
2055 0x66, 0xc4, 0xd9, 0x0e, 0xbe, 0x24, 0x17, 0x3f,
2056 0xcd, 0x19, 0xc9, 0xd2, 0x10, 0x3f, 0xcf, 0xdc,
2057 0xe9, 0x05, 0xab, 0xd5, 0x1a, 0x31, 0x41, 0x77,
2058 0x3b, 0xd7, 0x6a, 0x26, 0xae, 0x0d, 0xc9, 0x47,
2059 0x77, 0xd4, 0xa7, 0xd5, 0x73, 0x88, 0x9e, 0xde,
2060 0x72, 0x66, 0xe0, 0xe2, 0x3d, 0x62, 0x91, 0x22,
2061 0xae, 0x11, 0x01, 0x97, 0x22, 0x6a, 0x45, 0xa9,
2062 0xba, 0x56, 0xd2, 0xbc, 0x55, 0x2d, 0x99, 0x4d,
2063 0x3d, 0x22, 0x27, 0x9a, 0xac, 0x66, 0x2f, 0xf5,
2064};
2065
Pascal Brandc639ac82015-07-02 08:53:34 +02002066static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2067 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2068 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2069 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2070 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2071 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2072 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2073};
2074
2075static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2076 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2077};
2078
2079static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2080 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2081 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2082 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2083 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2084 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2085 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2086};
2087
2088static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2089 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2090 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2091 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2092 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2093 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2094 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2095};
2096
2097static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2098 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2099 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2100 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2101 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2102 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2103 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2104};
2105
2106static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2107 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2108 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2109 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2110 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2111 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2112 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2113};
2114
2115static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2116 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2117 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2118 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2119 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2120 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2121 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2122};
2123
2124struct xtest_ciph_case {
2125 uint32_t algo;
2126 uint32_t mode;
2127 uint32_t key_type;
2128 const uint8_t *key1;
2129 size_t key1_len;
2130 const uint8_t *key2;
2131 size_t key2_len;
2132 const uint8_t *iv;
2133 size_t iv_len;
2134 size_t in_incr;
2135 const uint8_t *in;
2136 size_t in_len;
2137 const uint8_t *out;
2138 size_t out_len;
2139 size_t line;
2140};
2141
2142#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2143 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2144 NULL, 0, NULL, 0, \
2145 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2146 __LINE__ }, \
2147 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2148 NULL, 0, NULL, 0, \
2149 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2150
2151#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2152 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2153 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2154 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2155 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2156 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2157 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2158
2159#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2160 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2161 ciph_data_aes_xts_ ## vect ## _key1, \
2162 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2163 ciph_data_aes_xts_ ## vect ## _key2, \
2164 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2165 ciph_data_aes_xts_ ## vect ## _iv, \
2166 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2167 (in_incr), \
2168 ciph_data_aes_xts_ ## vect ## _ptx, \
2169 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2170 ciph_data_aes_xts_ ## vect ## _ctx, \
2171 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2172 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2173 ciph_data_aes_xts_ ## vect ## _key1, \
2174 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2175 ciph_data_aes_xts_ ## vect ## _key2, \
2176 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2177 ciph_data_aes_xts_ ## vect ## _iv, \
2178 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2179 (in_incr), \
2180 ciph_data_aes_xts_ ## vect ## _ctx, \
2181 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2182 ciph_data_aes_xts_ ## vect ## _ptx, \
2183 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2184
2185#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2186 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2187 ciph_data_aes_cbc_ ## vect ## _key, \
2188 ciph_data_aes_cbc_ ## vect ## _iv, \
2189 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2190 ciph_data_aes_cbc_ ## vect ## _ctx)
2191
2192#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2193 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2194 ciph_data_aes_cts_ ## vect ## _key, \
2195 ciph_data_aes_cts_ ## vect ## _iv, \
2196 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2197 ciph_data_aes_cts_ ## vect ## _ctx)
2198
2199static const struct xtest_ciph_case ciph_cases[] = {
2200 /* AES */
2201 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2202 ciph_data_aes_key1, 11, ciph_data_in1,
2203 ciph_data_aes_ecb_nopad_out1),
2204 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2205 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2206 ciph_data_in1,
2207 ciph_data_aes_cbc_nopad_out1),
2208 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2209 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2210 ciph_data_in1,
2211 ciph_data_aes_ctr_out1),
2212 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2213 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2214 ciph_data_in3,
2215 ciph_data_aes_ctr_out2),
Jens Wiklander692efd12018-01-19 09:52:00 +01002216 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2217 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2218 ciph_data_in3,
2219 ciph_data_aes_ctr_out2),
Jerome Forissier45218eb2018-04-11 13:03:26 +02002220 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2221 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2222 ciph_data_in4,
2223 ciph_data_aes_ctr_out4),
Pascal Brandc639ac82015-07-02 08:53:34 +02002224
2225 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
2226
2227 /* AES-CTS */
2228 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2229 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2230 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2231 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2232 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2233 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2234 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
Jerome Forissiered00e162017-01-20 09:22:52 +01002235 XTEST_CIPH_CASE_AES_CTS(issue1203, 32),
Pascal Brandc639ac82015-07-02 08:53:34 +02002236
2237 /* DES */
2238 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2239 ciph_data_des_key1, 14, ciph_data_in1,
2240 ciph_data_des_ecb_nopad_out1),
2241 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2242 ciph_data_des_key2, 3, ciph_data_in2,
2243 ciph_data_des_ecb_nopad_out2),
2244 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2245 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2246 ciph_data_des_cbc_nopad_out1),
2247
2248 /* DES3 */
2249 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2250 ciph_data_des3_key1, 11, ciph_data_in1,
2251 ciph_data_des3_ecb_nopad_out1),
2252 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2253 ciph_data_des3_key2, 3, ciph_data_in2,
2254 ciph_data_des_ecb_nopad_out2),
2255 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2256 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2257 ciph_data_in1,
2258 ciph_data_des3_cbc_nopad_out1),
2259
2260 /* DES2 */
2261 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2262 ciph_data_des2_key1, 11, ciph_data_in1,
2263 ciph_data_des2_ecb_nopad_out1),
2264 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2265 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2266 ciph_data_in1,
2267 ciph_data_des2_cbc_nopad_out1),
Pascal Brandc639ac82015-07-02 08:53:34 +02002268
Pascal Brandc639ac82015-07-02 08:53:34 +02002269 /* AES-XTS */
2270 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2271 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2272 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2273 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2274 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2275 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2276 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2277 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2278 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2279 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2280 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2281 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2282 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2283 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2284 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2285 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2286 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2287 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2288 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
2289};
2290
Jerome Forissier23256842018-02-16 09:25:35 +01002291static void xtest_tee_test_4003(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02002292{
2293 TEEC_Session session = { 0 };
2294 TEE_OperationHandle op;
2295 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2296 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
2297 uint8_t out[2048];
2298 size_t out_size;
2299 size_t out_offs;
2300 uint32_t ret_orig;
2301 size_t n;
2302
2303 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2304 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2305 &ret_orig)))
2306 return;
2307
2308 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
2309 TEE_Attribute key_attr;
2310 size_t key_size;
2311 size_t op_key_size;
2312
2313
2314 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2315 (int)n, (unsigned int)ciph_cases[n].algo,
2316 (int)ciph_cases[n].line);
2317
2318 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2319 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2320 key_attr.content.ref.length = ciph_cases[n].key1_len;
2321
2322 key_size = key_attr.content.ref.length * 8;
2323 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2324 ciph_cases[n].key_type == TEE_TYPE_DES3)
2325 /* Exclude parity in bit size of key */
2326 key_size -= key_size / 8;
2327
2328 op_key_size = key_size;
2329 if (ciph_cases[n].key2 != NULL)
2330 op_key_size *= 2;
2331
2332 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2333 ta_crypt_cmd_allocate_operation(c, &session, &op,
2334 ciph_cases[n].algo, ciph_cases[n].mode,
2335 op_key_size)))
2336 goto out;
2337
2338 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2339 ta_crypt_cmd_allocate_transient_object(c, &session,
2340 ciph_cases[n].key_type, key_size,
2341 &key1_handle)))
2342 goto out;
2343
2344 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2345 ta_crypt_cmd_populate_transient_object(c, &session,
2346 key1_handle, &key_attr, 1)))
2347 goto out;
2348
2349 if (ciph_cases[n].key2 != NULL) {
2350 key_attr.content.ref.buffer =
2351 (void *)ciph_cases[n].key2;
2352 key_attr.content.ref.length = ciph_cases[n].key2_len;
2353
2354 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2355 ta_crypt_cmd_allocate_transient_object(c,
2356 &session, ciph_cases[n].key_type,
2357 key_attr.content.ref.length * 8,
2358 &key2_handle)))
2359 goto out;
2360
2361 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2362 ta_crypt_cmd_populate_transient_object(c,
2363 &session, key2_handle, &key_attr, 1)))
2364 goto out;
2365
2366 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2367 ta_crypt_cmd_set_operation_key2(c, &session, op,
2368 key1_handle, key2_handle)))
2369 goto out;
2370 } else {
2371 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2372 ta_crypt_cmd_set_operation_key(c, &session, op,
2373 key1_handle)))
2374 goto out;
2375 }
2376
2377 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2378 ta_crypt_cmd_free_transient_object(c, &session,
2379 key1_handle)))
2380 goto out;
2381 key1_handle = TEE_HANDLE_NULL;
2382
2383 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2384 ta_crypt_cmd_free_transient_object(c, &session,
2385 key2_handle)))
2386 goto out;
2387 key2_handle = TEE_HANDLE_NULL;
2388
2389 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2390 ta_crypt_cmd_cipher_init(c, &session, op,
2391 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2392 goto out;
2393
2394 out_offs = 0;
2395 out_size = sizeof(out);
2396 memset(out, 0, sizeof(out));
2397 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2398 ta_crypt_cmd_cipher_update(c, &session, op,
2399 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2400 &out_size)))
2401 goto out;
2402
Jerome Forissierd2d94b42017-06-02 16:39:34 +02002403 if (ciph_cases[n].algo == TEE_ALG_AES_CTR)
2404 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
2405 ciph_cases[n].in_incr);
2406
Pascal Brandc639ac82015-07-02 08:53:34 +02002407 out_offs += out_size;
2408 out_size = sizeof(out) - out_offs;
2409
2410 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2411 ta_crypt_cmd_cipher_do_final(c, &session, op,
2412 ciph_cases[n].in + ciph_cases[n].in_incr,
2413 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2414 out + out_offs,
2415 &out_size)))
2416 goto out;
2417
2418 out_offs += out_size;
2419
2420 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2421 ciph_cases[n].out_len, out, out_offs);
2422
2423 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2424 ta_crypt_cmd_free_operation(c, &session, op)))
2425 goto out;
2426
2427 Do_ADBG_EndSubCase(c, NULL);
2428 }
2429out:
2430 TEEC_CloseSession(&session);
2431}
2432
Pascal Brandc639ac82015-07-02 08:53:34 +02002433static void xtest_tee_test_4004(ADBG_Case_t *c)
2434{
2435 TEEC_Session session = { 0 };
2436 uint32_t ret_orig;
2437 uint8_t buf1[45] = { 0 };
2438 uint8_t buf2[45] = { 0 };
2439 static const uint8_t zeros[45] = { 0 };
2440
2441 Do_ADBG_BeginSubCase(c, "TEE get random");
2442 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2443 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2444 &ret_orig)))
2445 return;
2446
2447 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2448 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2449 sizeof(buf1))))
2450 goto out;
2451
2452 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2453 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2454
2455 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2456 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2457 sizeof(buf2))))
2458 goto out;
2459
2460 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2461 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2462
2463 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2464 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2465out:
2466 TEEC_CloseSession(&session);
2467 Do_ADBG_EndSubCase(c, "TEE get random");
2468}
2469
2470
2471struct xtest_ae_case {
2472 uint32_t algo;
2473 uint32_t mode;
2474 uint32_t key_type;
2475 const uint8_t *key;
2476 size_t key_len;
2477 const uint8_t *nonce;
2478 size_t nonce_len;
2479 size_t aad_incr;
2480 const uint8_t *aad;
2481 size_t aad_len;
2482 size_t in_incr;
2483 const uint8_t *ptx;
2484 size_t ptx_len;
2485 const uint8_t *ctx;
2486 size_t ctx_len;
2487 const uint8_t *tag;
2488 size_t tag_len;
2489 size_t line;
2490};
2491
2492
2493#define ARRAY(a) a, ARRAY_SIZE(a)
2494#define NULL_ARRAY(a) NULL, 0
2495
2496#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2497 aad_array, ptx_array, ctx_array) \
2498 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2499 ARRAY(vect ## _nonce), (aad_incr), \
2500 aad_array(vect ## _aad), (in_incr), \
2501 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2502 ARRAY(vect ## _tag), \
2503 __LINE__ }, \
2504 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2505 ARRAY(vect ## _nonce), (aad_incr), \
2506 aad_array(vect ## _aad), (in_incr), \
2507 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2508 ARRAY(vect ## _tag), \
2509 __LINE__ }
2510
2511#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2512 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2513 in_incr, ARRAY, ARRAY, ARRAY)
2514
2515#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2516 aad_array, ptx_array, ctx_array) \
2517 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2518 in_incr, aad_array, ptx_array, ctx_array)
2519
2520
2521
2522static const struct xtest_ae_case ae_cases[] = {
2523 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2524 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2525 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2526
2527 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2528 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2529 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
Jens Wiklander9fc63f52017-11-10 11:13:26 +01002530 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY),
2531 XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY),
Pascal Brandc639ac82015-07-02 08:53:34 +02002532 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2533 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2534 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2535 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2536 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2537 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2538 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2539 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2540 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2541 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2542 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2543 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2544 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2545 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
Jens Wiklanderf6efe242017-11-06 13:16:43 +01002546#ifdef CFG_GCM_NIST_VECTORS
2547#include "gcmDecrypt128.h"
2548#include "gcmDecrypt192.h"
2549#include "gcmDecrypt256.h"
2550#include "gcmEncryptExtIV128.h"
2551#include "gcmEncryptExtIV192.h"
2552#include "gcmEncryptExtIV256.h"
2553#endif
Pascal Brandc639ac82015-07-02 08:53:34 +02002554};
2555
2556static void xtest_tee_test_4005(ADBG_Case_t *c)
2557{
2558 TEEC_Session session = { 0 };
2559 TEE_OperationHandle op;
2560 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
2561 TEE_Attribute key_attr;
2562 uint8_t out[512];
2563 size_t out_size;
2564 size_t out_offs;
2565 uint32_t ret_orig;
2566 size_t n;
2567
2568 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2569 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2570 &ret_orig)))
2571 return;
2572
2573 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2574 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2575 (int)n, (unsigned int)ae_cases[n].algo,
2576 (int)ae_cases[n].line);
2577
2578 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2579 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2580 key_attr.content.ref.length = ae_cases[n].key_len;
2581
2582 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2583 ta_crypt_cmd_allocate_operation(c, &session, &op,
2584 ae_cases[n].algo, ae_cases[n].mode,
2585 key_attr.content.ref.length * 8)))
2586 goto out;
2587
2588 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2589 ta_crypt_cmd_allocate_transient_object(c, &session,
2590 ae_cases[n].key_type,
2591 key_attr.content.ref.length * 8,
2592 &key_handle)))
2593 goto out;
2594
2595 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2596 ta_crypt_cmd_populate_transient_object(c, &session,
2597 key_handle, &key_attr, 1)))
2598 goto out;
2599
2600 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2601 ta_crypt_cmd_set_operation_key(c, &session, op,
2602 key_handle)))
2603 goto out;
2604
2605 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2606 ta_crypt_cmd_free_transient_object(c, &session,
2607 key_handle)))
2608 goto out;
2609 key_handle = TEE_HANDLE_NULL;
2610
2611 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2612 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2613 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2614 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2615 goto out;
2616
2617 if (ae_cases[n].aad != NULL) {
2618 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2619 ta_crypt_cmd_ae_update_aad(c, &session, op,
2620 ae_cases[n].aad, ae_cases[n].aad_incr)))
2621 goto out;
2622
2623 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2624 ta_crypt_cmd_ae_update_aad(c, &session, op,
2625 ae_cases[n].aad + ae_cases[n].aad_incr,
2626 ae_cases [n].aad_len -
2627 ae_cases[n].aad_incr)))
2628 goto out;
2629 }
2630
2631 out_offs = 0;
2632 out_size = sizeof(out);
2633 memset(out, 0, sizeof(out));
2634 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2635 if (ae_cases[n].ptx != NULL) {
2636 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2637 ta_crypt_cmd_ae_update(c, &session, op,
2638 ae_cases[n].ptx,
2639 ae_cases[n].in_incr, out,
2640 &out_size)))
2641 goto out;
2642 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002643 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2644 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2645 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002646 }
2647 } else {
2648 if (ae_cases[n].ctx != NULL) {
2649 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2650 ta_crypt_cmd_ae_update(c, &session, op,
2651 ae_cases[n].ctx,
2652 ae_cases[n].in_incr, out,
2653 &out_size)))
2654 goto out;
2655 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002656 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2657 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2658 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002659 }
2660 }
2661
2662 out_size = sizeof(out) - out_offs;
2663 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2664 uint8_t out_tag[64];
2665 size_t out_tag_len = MIN(sizeof(out_tag),
2666 ae_cases[n].tag_len);
2667
2668 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2669 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2670 ae_cases[n].ptx + ae_cases[n].in_incr,
2671 ae_cases[n].ptx_len -
2672 ae_cases[n].in_incr,
2673 out + out_offs,
2674 &out_size, out_tag, &out_tag_len)))
2675 goto out;
2676
2677 (void)ADBG_EXPECT_BUFFER(c,
2678 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2679 out_tag_len);
2680
2681 out_offs += out_size;
2682
2683 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2684 ae_cases[n].ctx_len, out, out_offs);
2685 } else {
2686 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2687 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2688 ae_cases[n].ctx + ae_cases[n].in_incr,
2689 ae_cases[n].ctx_len -
2690 ae_cases[n].in_incr,
2691 out + out_offs,
2692 &out_size, ae_cases[n].tag,
2693 ae_cases[n].tag_len)))
2694 goto out;
2695
2696 out_offs += out_size;
2697
2698 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2699 ae_cases[n].ptx_len, out, out_offs);
2700 }
2701
2702 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2703 ta_crypt_cmd_free_operation(c, &session, op)))
2704 goto out;
2705
2706 Do_ADBG_EndSubCase(c, NULL);
2707 }
2708out:
2709 TEEC_CloseSession(&session);
2710}
2711
2712struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002713 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002714 uint32_t algo;
2715 TEE_OperationMode mode;
2716
2717 union {
2718 struct {
2719 const uint8_t *modulus;
2720 size_t modulus_len;
2721
2722 const uint8_t *pub_exp;
2723 size_t pub_exp_len;
2724
2725 const uint8_t *priv_exp;
2726 size_t priv_exp_len;
2727
2728 const uint8_t *prime1; /* q */
2729 size_t prime1_len;
2730 const uint8_t *prime2; /* p */
2731 size_t prime2_len;
2732 const uint8_t *exp1; /* dp */
2733 size_t exp1_len;
2734 const uint8_t *exp2; /* dq */
2735 size_t exp2_len;
2736 const uint8_t *coeff; /* iq */
2737 size_t coeff_len;
2738
2739 int salt_len;
2740 } rsa;
2741 struct {
2742 const uint8_t *prime;
2743 size_t prime_len;
2744 const uint8_t *sub_prime;
2745 size_t sub_prime_len;
2746 const uint8_t *base;
2747 size_t base_len;
2748 const uint8_t *pub_val;
2749 size_t pub_val_len;
2750 const uint8_t *priv_val;
2751 size_t priv_val_len;
2752 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002753 struct {
2754 const uint8_t *private;
2755 size_t private_len;
2756 const uint8_t *public_x;
2757 size_t public_x_len;
2758 const uint8_t *public_y;
2759 size_t public_y_len;
2760 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002761 } params;
2762
2763 const uint8_t *ptx;
2764 size_t ptx_len;
2765 const uint8_t *ctx;
2766 size_t ctx_len;
2767 size_t line;
2768};
2769
2770#define WITHOUT_SALT(x) -1
2771#define WITH_SALT(x) x
2772
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002773#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2774 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002775 ARRAY(vect ## _ptx), \
2776 ARRAY(vect ## _out), \
2777 __LINE__ }
2778
2779#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2780 { .rsa = { \
2781 ARRAY(vect ## _modulus), \
2782 ARRAY(vect ## _pub_exp), \
2783 ARRAY(vect ## _priv_exp), \
2784 opt_crt_array(vect ## _prime1), \
2785 opt_crt_array(vect ## _prime2), \
2786 opt_crt_array(vect ## _exp1), \
2787 opt_crt_array(vect ## _exp2), \
2788 opt_crt_array(vect ## _coeff), \
2789 opt_salt(vect ## _salt_len) \
2790 } }
2791
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002792#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2793 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002794 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2795
2796#define XTEST_AC_DSA_UNION(vect) \
2797 { .dsa = { \
2798 ARRAY(vect ## _prime), \
2799 ARRAY(vect ## _sub_prime), \
2800 ARRAY(vect ## _base), \
2801 ARRAY(vect ## _pub_val), \
2802 ARRAY(vect ## _priv_val), \
2803 } }
2804
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002805#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
2806 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02002807
Pascal Brand3e143ee2015-07-15 17:17:16 +02002808#define XTEST_AC_ECDSA_UNION(vect) \
2809 { .ecdsa = { \
2810 ARRAY(vect ## _private), \
2811 ARRAY(vect ## _public_x), \
2812 ARRAY(vect ## _public_y), \
2813 } }
2814
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002815#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
2816 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02002817
Pascal Brandc639ac82015-07-02 08:53:34 +02002818static const struct xtest_ac_case xtest_ac_cases[] = {
2819 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002820 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002821 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002822 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002823 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002824 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002825 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002826 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002827 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002828 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002829 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002830 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002831 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002832 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002833 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002834 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002835 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002836 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002837 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002838 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002839 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002840 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002841 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002842 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002843 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002844 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002845 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002846 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002847 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002848 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
2849 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
2850 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
2851 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02002852
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002853 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002854 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002855 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002856 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002857
2858 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002859 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002860 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002861 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002862
2863 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002864 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002865 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002866 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002867
2868 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002869 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002870 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002871 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
2872
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002873 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
2874 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002875 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002876 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002877 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002878
2879 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2880 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002881 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002882 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2883 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002884 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002885
2886 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2887 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002888 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002889 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2890 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002891 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002892
2893 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2894 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002895 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002896 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2897 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002898 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002899
2900 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2901 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002902 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002903 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2904 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002905 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
2906
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002907 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002908 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002909 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002910 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002911 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002912 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002913 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002914 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002915 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002916 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002917 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002918 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
2919
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002920 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2921 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002922 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002923 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2924 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002925 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002926 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2927 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002928 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002929 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2930 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002931 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002932 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2933 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002934 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002935 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2936 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002937 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
2938
2939 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002940 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002941 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002942 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002943 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002944 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002945 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002946 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002947 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002948 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002949 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002950 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002951 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002952 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002953 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002954 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002955 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002956 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002957 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002958 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002959 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002960 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002961 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002962 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002963 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002964 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002965 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002966 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002967 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002968 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002969 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002970 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002971 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002972 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002973 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002974 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002975 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002976 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002977 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002978 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002979 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002980 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002981 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002982 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002983 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
2984
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002985 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
2986 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002987 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002988 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002989 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002990 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2991 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002992 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002993 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2994 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002995 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002996 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2997 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002998 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002999 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3000 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003001 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003002 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3003 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003004 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003005 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3006 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003007 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003008 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3009 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003010 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003011 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3012 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003013 ac_rsassa_vect15, ARRAY, WITH_SALT),
3014
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003015 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003016 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003017 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003018 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003019 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003020 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003021 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003022 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003023 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003024 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003025 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003026 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3027
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003028 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3029 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003030 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003031 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3032 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003033 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003034 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3035 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003036 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003037 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3038 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003039 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003040 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3041 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003042 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003043 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3044 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003045 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3046
3047 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003048 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003049 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3050 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003051 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3052 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3053 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3054 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3055 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3056 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3057 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3058 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3059 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3060 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3061 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3062 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3063 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3064 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3065 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3066 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3067 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3068 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3069 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3070 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3071 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3072 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3073 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3074 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3075 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3076 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3077 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3078 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003079 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3080 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3081 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3082 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3083 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3084 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003085 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3086 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003087 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3088 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3089 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3090 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3091 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3092 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3093 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3094 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3095 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3096 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3097 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3098 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3099 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3100 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3101 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3102 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3103 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3104 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3105 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3106 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3107 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3108 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3109 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3110 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3111 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3112 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3113 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3114 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003115 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003116 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3117 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3118 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3119 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3120 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3121 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3122 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3123 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3124 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3125 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3126 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3127 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3128 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3129 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3130 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3131 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3132 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3133 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3134 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3135 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3136 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3137 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3138 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3139 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3140 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3141 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3142 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3143 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3144 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3145 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003146 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3147 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3148 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3149 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003150 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3151 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003152 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3153 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3154 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3155 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3156 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3157 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3158 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3159 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3160 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3161 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3162 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3163 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3164 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3165 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3166 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3167 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3168 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3169 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3170 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3171 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3172 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3173 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3174 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3175 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3176 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3177 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3178 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3179 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003180 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003181 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3182 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003183 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3184 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3185 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3186 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3187 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3188 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3189 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3190 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3191 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3192 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3193 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3194 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3195 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3196 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3197 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3198 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3199 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3200 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3201 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3202 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3203 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3204 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3205 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3206 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3207 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3208 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3209 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3210 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003211 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3212 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3213 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3214 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3215 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003216 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3217 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003218 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3219 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3220 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3221 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3222 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3223 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3224 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3225 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3226 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3227 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3228 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3229 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3230 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3231 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3232 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3233 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3234 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3235 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3236 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3237 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3238 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3239 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3240 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3241 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3242 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3243 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3244 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3245 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003246 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3247 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003248
3249 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003250 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003251 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003252 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003253 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003254 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003255 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003256 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003257 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003258 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003259 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003260 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003261 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003262 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003263 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003264 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003265 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003266 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003267 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003268 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003269 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003270 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003271 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003272 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003273 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003274 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003275 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003276 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003277 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003278 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003279 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003280 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003281 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003282 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003283 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003284 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003285 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003286 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003287 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003288 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003289 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003290 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003291 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003292 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003293 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003294 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003295 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003296 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003297 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003298 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003299 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003300 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003301 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003302 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003303 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003304 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003305 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003306 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003307 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003308 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003309 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003310 nist_186_2_ecdsa_testvector_15),
3311 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003312 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003313 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003314 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003315 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003316 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003317 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003318 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003319 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003320 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003321 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003322 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003323 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003324 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003325 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003326 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003327 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003328 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003329 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003330 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003331 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003332 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003333 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003334 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003335 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003336 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003337 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003338 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003339 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003340 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003341 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003342 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003343 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003344 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003345 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003346 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003347 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003348 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003349 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003350 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003351 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003352 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003353 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003354 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003355 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003356 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003357 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003358 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003359 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003360 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003361 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003362 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003363 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003364 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003365 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003366 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003367 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003368 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003369 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003370 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003371 nist_186_2_ecdsa_testvector_30),
3372 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003373 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003374 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003375 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003376 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003377 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003378 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003379 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003380 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003381 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003382 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003383 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003384 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003385 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003386 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003387 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003388 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003389 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003390 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003391 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003392 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003393 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003394 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003395 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003396 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003397 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003398 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003399 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003400 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003401 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003402 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003403 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003404 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003405 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003406 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003407 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003408 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003409 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003410 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003411 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003412 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003413 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003414 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003415 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003416 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003417 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003418 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003419 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003420 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003421 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003422 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003423 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003424 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003425 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003426 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003427 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003428 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003429 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003430 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003431 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003432 nist_186_2_ecdsa_testvector_45),
3433 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003434 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003435 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003436 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003437 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003438 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003439 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003440 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003441 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003442 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003443 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003444 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003445 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003446 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003447 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003448 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003449 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003450 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003451 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003452 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003453 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003454 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003455 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003456 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003457 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003458 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003459 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003460 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003461 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003462 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003463 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003464 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003465 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003466 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003467 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003468 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003469 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003470 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003471 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003472 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003473 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003474 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003475 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003476 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003477 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003478 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003479 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003480 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003481 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003482 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003483 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003484 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003485 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003486 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003487 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003488 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003489 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003490 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003491 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003492 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003493 nist_186_2_ecdsa_testvector_60),
3494 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003495 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003496 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003497 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003498 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003499 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003500 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003501 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003502 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003503 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003504 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003505 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003506 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003507 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003508 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003509 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003510 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003511 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003512 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003513 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003514 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003515 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003516 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003517 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003518 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003519 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003520 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003521 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003522 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003523 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003524 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003525 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003526 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003527 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003528 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003529 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003530 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003531 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003532 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003533 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003534 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003535 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003536 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003537 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003538 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003539 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003540 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003541 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003542 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003543 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003544 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003545 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003546 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003547 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003548 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003549 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003550 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003551 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003552 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003553 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003554 nist_186_2_ecdsa_testvector_75),
3555 /* [K-163] - GP NOT SUPPORTED */
3556 /* [K-233] - GP NOT SUPPORTED */
3557 /* [K-283] - GP NOT SUPPORTED */
3558 /* [K-409] - GP NOT SUPPORTED */
3559 /* [K-571] - GP NOT SUPPORTED */
3560 /* [B-163] - GP NOT SUPPORTED */
3561 /* [B-233] - GP NOT SUPPORTED */
3562 /* [B-283] - GP NOT SUPPORTED */
3563 /* [B-409] - GP NOT SUPPORTED */
3564 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003565};
3566
3567static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3568 uint32_t max_key_size, uint32_t key_type,
3569 TEE_Attribute *attrs, size_t num_attrs,
3570 TEE_ObjectHandle *handle)
3571{
3572 size_t n;
3573
3574 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3575 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3576 max_key_size, handle)))
3577 return false;
3578
3579 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3580 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3581 num_attrs)))
3582 return false;
3583
3584 for (n = 0; n < num_attrs; n++) {
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003585 uint8_t out[384];
Pascal Brandc639ac82015-07-02 08:53:34 +02003586 size_t out_size;
3587
3588 out_size = sizeof(out);
3589 memset(out, 0, sizeof(out));
Pascal Brand3e143ee2015-07-15 17:17:16 +02003590
3591 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3592 continue;
3593
Pascal Brandc639ac82015-07-02 08:53:34 +02003594 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3595 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3596 attrs[n].attributeID, out, &out_size)))
3597 return false;
3598
Pascal Brand3e143ee2015-07-15 17:17:16 +02003599 if (out_size < attrs[n].content.ref.length) {
3600 memmove(out + (attrs[n].content.ref.length - out_size),
3601 out,
3602 attrs[n].content.ref.length);
3603 memset(out, 0, attrs[n].content.ref.length - out_size);
3604 out_size = attrs[n].content.ref.length;
3605 }
3606
Pascal Brandc639ac82015-07-02 08:53:34 +02003607 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3608 attrs[n].content.ref.length, out, out_size))
3609 return false;
3610 }
3611
3612 return true;
3613}
3614
3615static void xtest_tee_test_4006(ADBG_Case_t *c)
3616{
3617 TEEC_Session session = { 0 };
3618 TEE_OperationHandle op = TEE_HANDLE_NULL;
3619 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3620 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
3621 TEE_Attribute key_attrs[8];
3622 TEE_Attribute algo_params[1];
3623 size_t num_algo_params;
3624 uint8_t out[512];
3625 size_t out_size;
3626 uint8_t out_enc[512];
3627 size_t out_enc_size;
3628 uint8_t ptx_hash[TEE_MAX_HASH_SIZE];
3629 size_t ptx_hash_size;
3630 size_t max_key_size;
3631 size_t num_key_attrs;
3632 uint32_t ret_orig;
3633 size_t n;
Pascal Brand3e143ee2015-07-15 17:17:16 +02003634 uint32_t curve;
3635 uint32_t hash_algo;
Pascal Brandc639ac82015-07-02 08:53:34 +02003636
3637 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3638 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3639 &ret_orig)))
3640 return;
3641
3642 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3643 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3644
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003645 if (tv->level > level)
3646 continue;
3647
Pascal Brandc639ac82015-07-02 08:53:34 +02003648 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3649 (int)n, (unsigned int)tv->algo,
3650 (int)tv->line);
3651
3652 /*
3653 * When signing or verifying we're working with the hash of
3654 * the payload.
3655 */
3656 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003657 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3658 hash_algo = TEE_ALG_SHA1;
3659 else
3660 hash_algo = TEE_ALG_HASH_ALGO(
3661 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003662
3663 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3664 ta_crypt_cmd_allocate_operation(c, &session,
3665 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3666 goto out;
3667
3668 ptx_hash_size = sizeof(ptx_hash);
3669 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3670 ta_crypt_cmd_digest_do_final(c, & session, op,
3671 tv->ptx, tv->ptx_len, ptx_hash,
3672 &ptx_hash_size)))
3673 goto out;
3674
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003675 /*
3676 * When we use DSA algorithms, the size of the hash we
3677 * consider equals the min between the size of the
3678 * "subprime" in the key and the size of the hash
3679 */
3680 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3681 TEE_MAIN_ALGO_DSA) {
3682 if (tv->params.dsa.sub_prime_len <=
3683 ptx_hash_size)
3684 ptx_hash_size =
3685 tv->params.dsa.sub_prime_len;
3686 }
3687
Pascal Brandc639ac82015-07-02 08:53:34 +02003688 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3689 ta_crypt_cmd_free_operation(c, &session, op)))
3690 goto out;
3691 }
3692
3693 num_algo_params = 0;
3694 num_key_attrs = 0;
3695 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3696 case TEE_MAIN_ALGO_RSA:
3697 if (tv->params.rsa.salt_len > 0) {
3698 algo_params[0].attributeID =
3699 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3700 algo_params[0].content.value.a =
3701 tv->params.rsa.salt_len;
3702 algo_params[0].content.value.b = 0;
3703 num_algo_params = 1;
3704 }
3705
3706 max_key_size = tv->params.rsa.modulus_len * 8;
3707
3708 xtest_add_attr(&num_key_attrs, key_attrs,
3709 TEE_ATTR_RSA_MODULUS,
3710 tv->params.rsa.modulus,
3711 tv->params.rsa.modulus_len);
3712 xtest_add_attr(&num_key_attrs, key_attrs,
3713 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3714 tv->params.rsa.pub_exp,
3715 tv->params.rsa.pub_exp_len);
3716
3717 if (!ADBG_EXPECT_TRUE(c,
3718 create_key(c, &session,
3719 max_key_size,
3720 TEE_TYPE_RSA_PUBLIC_KEY,
3721 key_attrs,
3722 num_key_attrs,
3723 &pub_key_handle)))
3724 goto out;
3725
3726 xtest_add_attr(&num_key_attrs, key_attrs,
3727 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3728 tv->params.rsa.priv_exp,
3729 tv->params.rsa.priv_exp_len);
3730
3731 if (tv->params.rsa.prime1_len != 0) {
3732 xtest_add_attr(&num_key_attrs, key_attrs,
3733 TEE_ATTR_RSA_PRIME1,
3734 tv->params.rsa.prime1,
3735 tv->params.rsa.prime1_len);
3736 }
3737
3738 if (tv->params.rsa.prime2_len != 0) {
3739 xtest_add_attr(&num_key_attrs, key_attrs,
3740 TEE_ATTR_RSA_PRIME2,
3741 tv->params.rsa.prime2,
3742 tv->params.rsa.prime2_len);
3743 }
3744
3745 if (tv->params.rsa.exp1_len != 0) {
3746 xtest_add_attr(&num_key_attrs, key_attrs,
3747 TEE_ATTR_RSA_EXPONENT1,
3748 tv->params.rsa.exp1,
3749 tv->params.rsa.exp1_len);
3750 }
3751
3752 if (tv->params.rsa.exp2_len != 0) {
3753 xtest_add_attr(&num_key_attrs, key_attrs,
3754 TEE_ATTR_RSA_EXPONENT2,
3755 tv->params.rsa.exp2,
3756 tv->params.rsa.exp2_len);
3757 }
3758
3759 if (tv->params.rsa.coeff_len != 0) {
3760 xtest_add_attr(&num_key_attrs, key_attrs,
3761 TEE_ATTR_RSA_COEFFICIENT,
3762 tv->params.rsa.coeff,
3763 tv->params.rsa.coeff_len);
3764 }
3765
3766 if (!ADBG_EXPECT_TRUE(c,
3767 create_key(c, &session,
3768 max_key_size,
3769 TEE_TYPE_RSA_KEYPAIR,
3770 key_attrs,
3771 num_key_attrs,
3772 &priv_key_handle)))
3773 goto out;
3774 break;
3775
3776 case TEE_MAIN_ALGO_DSA:
3777 max_key_size = tv->params.dsa.prime_len * 8;
3778
3779 xtest_add_attr(&num_key_attrs, key_attrs,
3780 TEE_ATTR_DSA_PRIME,
3781 tv->params.dsa.prime,
3782 tv->params.dsa.prime_len);
3783 xtest_add_attr(&num_key_attrs, key_attrs,
3784 TEE_ATTR_DSA_SUBPRIME,
3785 tv->params.dsa.sub_prime,
3786 tv->params.dsa.sub_prime_len);
3787 xtest_add_attr(&num_key_attrs, key_attrs,
3788 TEE_ATTR_DSA_BASE,
3789 tv->params.dsa.base,
3790 tv->params.dsa.base_len);
3791 xtest_add_attr(&num_key_attrs, key_attrs,
3792 TEE_ATTR_DSA_PUBLIC_VALUE,
3793 tv->params.dsa.pub_val,
3794 tv->params.dsa.pub_val_len);
3795
3796 if (!ADBG_EXPECT_TRUE(c,
3797 create_key(c, &session, max_key_size,
3798 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
3799 num_key_attrs, &pub_key_handle)))
3800 goto out;
3801
3802 xtest_add_attr(&num_key_attrs, key_attrs,
3803 TEE_ATTR_DSA_PRIVATE_VALUE,
3804 tv->params.dsa.priv_val,
3805 tv->params.dsa.priv_val_len);
3806
3807 if (!ADBG_EXPECT_TRUE(c,
3808 create_key(c, &session, max_key_size,
3809 TEE_TYPE_DSA_KEYPAIR, key_attrs,
3810 num_key_attrs, &priv_key_handle)))
3811 goto out;
3812 break;
3813
Pascal Brand3e143ee2015-07-15 17:17:16 +02003814 case TEE_MAIN_ALGO_ECDSA:
3815 switch (tv->algo) {
3816 case TEE_ALG_ECDSA_P192:
3817 curve = TEE_ECC_CURVE_NIST_P192;
3818 break;
3819 case TEE_ALG_ECDSA_P224:
3820 curve = TEE_ECC_CURVE_NIST_P224;
3821 break;
3822 case TEE_ALG_ECDSA_P256:
3823 curve = TEE_ECC_CURVE_NIST_P256;
3824 break;
3825 case TEE_ALG_ECDSA_P384:
3826 curve = TEE_ECC_CURVE_NIST_P384;
3827 break;
3828 case TEE_ALG_ECDSA_P521:
3829 curve = TEE_ECC_CURVE_NIST_P521;
3830 break;
3831 default:
3832 curve = 0xFF;
3833 break;
3834 }
3835
3836 if (tv->algo == TEE_ALG_ECDSA_P521)
3837 max_key_size = 521;
3838 else
3839 max_key_size = tv->params.ecdsa.private_len * 8;
3840
3841 xtest_add_attr_value(&num_key_attrs, key_attrs,
3842 TEE_ATTR_ECC_CURVE, curve, 0);
3843 xtest_add_attr(&num_key_attrs, key_attrs,
3844 TEE_ATTR_ECC_PUBLIC_VALUE_X,
3845 tv->params.ecdsa.public_x,
3846 tv->params.ecdsa.public_x_len);
3847 xtest_add_attr(&num_key_attrs, key_attrs,
3848 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
3849 tv->params.ecdsa.public_y,
3850 tv->params.ecdsa.public_y_len);
3851
3852 if (!ADBG_EXPECT_TRUE(c,
3853 create_key(c, &session, max_key_size,
3854 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
3855 num_key_attrs, &pub_key_handle)))
3856 goto out;
3857
3858 xtest_add_attr(&num_key_attrs, key_attrs,
3859 TEE_ATTR_ECC_PRIVATE_VALUE,
3860 tv->params.ecdsa.private,
3861 tv->params.ecdsa.private_len);
3862
3863 if (!ADBG_EXPECT_TRUE(c,
3864 create_key(c, &session, max_key_size,
3865 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
3866 num_key_attrs, &priv_key_handle)))
3867 goto out;
3868 break;
3869
Pascal Brandc639ac82015-07-02 08:53:34 +02003870 default:
3871 ADBG_EXPECT_TRUE(c, false);
3872 goto out;
3873 }
3874
3875 out_size = sizeof(out);
3876 memset(out, 0, sizeof(out));
3877 switch (tv->mode) {
3878 case TEE_MODE_ENCRYPT:
3879 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3880 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02003881 &op, tv->algo, TEE_MODE_ENCRYPT,
3882 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02003883 goto out;
3884
3885 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3886 ta_crypt_cmd_set_operation_key(c, &session, op,
3887 pub_key_handle)))
3888 goto out;
3889
3890 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3891 ta_crypt_cmd_free_transient_object(c, &session,
3892 pub_key_handle)))
3893 goto out;
3894 pub_key_handle = TEE_HANDLE_NULL;
3895
3896 out_enc_size = sizeof(out_enc);
3897 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3898 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
3899 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
3900 &out_enc_size)))
3901 goto out;
3902
3903 /*
3904 * A PS which is random is added when formatting the
3905 * message internally of the algorithm so we can't
3906 * verify against precomputed values, instead we use the
3907 * decrypt operation to see that output is correct.
3908 */
3909
3910 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3911 ta_crypt_cmd_free_operation(c, &session, op)))
3912 goto out;
3913
3914 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3915 ta_crypt_cmd_allocate_operation(c, &session,
3916 &op, tv->algo, TEE_MODE_DECRYPT,
3917 max_key_size)))
3918 goto out;
3919
3920 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3921 ta_crypt_cmd_set_operation_key(c, &session, op,
3922 priv_key_handle)))
3923 goto out;
3924
3925 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3926 ta_crypt_cmd_free_transient_object(c, &session,
3927 priv_key_handle)))
3928 goto out;
3929
3930 priv_key_handle = TEE_HANDLE_NULL;
3931
3932 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3933 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
3934 NULL, 0, out_enc, out_enc_size, out,
3935 &out_size)))
3936 goto out;
3937
3938 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
3939 out_size);
3940 break;
3941
3942 case TEE_MODE_DECRYPT:
3943 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3944 ta_crypt_cmd_allocate_operation(c, &session,
3945 &op, tv->algo, TEE_MODE_DECRYPT,
3946 max_key_size)))
3947 goto out;
3948
3949 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3950 ta_crypt_cmd_set_operation_key(c, &session, op,
3951 priv_key_handle)))
3952 goto out;
3953
3954 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3955 ta_crypt_cmd_free_transient_object(c, &session,
3956 priv_key_handle)))
3957 goto out;
3958
3959 priv_key_handle = TEE_HANDLE_NULL;
3960
3961 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3962 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
3963 NULL, 0, tv->ctx, tv->ctx_len, out,
3964 &out_size)))
3965 goto out;
3966
3967 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
3968 out_size);
3969 break;
3970
3971 case TEE_MODE_VERIFY:
3972 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3973 ta_crypt_cmd_allocate_operation(c, &session,
3974 &op, tv->algo, TEE_MODE_VERIFY,
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 pub_key_handle)))
3981 goto out;
3982
3983 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3984 ta_crypt_cmd_free_transient_object(c, &session,
3985 pub_key_handle)))
3986 goto out;
3987
3988 pub_key_handle = TEE_HANDLE_NULL;
3989
3990 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3991 ta_crypt_cmd_asymmetric_verify(c, &session, op,
3992 algo_params, num_algo_params, ptx_hash,
3993 ptx_hash_size, tv->ctx, tv->ctx_len)))
3994 goto out;
3995 break;
3996
3997 case TEE_MODE_SIGN:
3998 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3999 ta_crypt_cmd_allocate_operation(c, &session,
4000 &op, tv->algo, TEE_MODE_SIGN,
4001 max_key_size)))
4002 goto out;
4003
4004 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4005 ta_crypt_cmd_set_operation_key(c, &session, op,
4006 priv_key_handle)))
4007 goto out;
4008
4009 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4010 ta_crypt_cmd_free_transient_object(c, &session,
4011 priv_key_handle)))
4012 goto out;
4013
4014 priv_key_handle = TEE_HANDLE_NULL;
4015
4016 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4017 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4018 algo_params, num_algo_params, ptx_hash,
4019 ptx_hash_size, out, &out_size)))
4020 goto out;
4021
4022 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4023 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004024 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004025 tv->algo == TEE_ALG_DSA_SHA224 ||
4026 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004027 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4028 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004029 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4030 ta_crypt_cmd_free_operation(c, &session,
4031 op)))
4032 goto out;
4033 /*
4034 * The salt or K is random so we can't verify
4035 * signing against precomputed values, instead
4036 * we use the verify operation to see that
4037 * output is correct.
4038 */
4039 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4040 ta_crypt_cmd_allocate_operation(c,
4041 &session, &op, tv->algo,
4042 TEE_MODE_VERIFY, max_key_size)))
4043 goto out;
4044
4045 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4046 ta_crypt_cmd_set_operation_key(c,
4047 &session, op, pub_key_handle)))
4048 goto out;
4049
4050 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4051 ta_crypt_cmd_free_transient_object(c,
4052 &session, pub_key_handle)))
4053 goto out;
4054
4055 pub_key_handle = TEE_HANDLE_NULL;
4056
4057 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4058 ta_crypt_cmd_asymmetric_verify(c,
4059 &session, op, algo_params,
4060 num_algo_params, ptx_hash,
4061 ptx_hash_size, out, out_size)))
4062 goto out;
4063 } else {
4064 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4065 tv->ctx_len, out,
4066 out_size);
4067 }
4068 break;
4069
4070 default:
4071 break;
4072 }
4073
4074 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4075 ta_crypt_cmd_free_operation(c, &session, op)))
4076 goto out;
4077
4078 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4079 ta_crypt_cmd_free_transient_object(c, &session,
4080 pub_key_handle)))
4081 goto out;
4082 pub_key_handle = TEE_HANDLE_NULL;
4083
4084 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4085 ta_crypt_cmd_free_transient_object(c, &session,
4086 priv_key_handle)))
4087 goto out;
4088
4089 priv_key_handle = TEE_HANDLE_NULL;
4090
4091 Do_ADBG_EndSubCase(c, NULL);
4092 }
4093out:
4094 TEEC_CloseSession(&session);
4095}
4096
4097#define KEY_ATTR(x, y) { #x, (x), y }
4098
4099struct key_attrs {
4100 const char *name;
4101 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004102 /*
4103 * When keysize_check != 0: size of attribute is checked
4104 * Expected value is key_size bits except for DH in which case it is
4105 * the value of keysize_check.
4106 */
4107 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004108};
4109
4110static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4111 TEE_ObjectHandle key, uint32_t key_size,
4112 struct key_attrs *attrs, size_t num_attrs)
4113{
4114 uint8_t out[2048];
4115 size_t out_size;
4116 size_t n;
4117 size_t m;
4118
4119 for (m = 0; m < num_attrs; m++) {
4120 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4121 out_size = sizeof(out);
4122 memset(out, 0, sizeof(out));
4123 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4124 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4125 key, attrs[m].attr, out, &out_size)))
4126 return false;
4127
4128 if (attrs[m].keysize_check)
4129 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4130 key_size / 8);
4131
4132 if (out_size > 0) {
4133 /* Check that buffer isn't all zeroes */
4134 for (n = 0; n < out_size; n++)
4135 if (out[n] != 0)
4136 break;
4137 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4138 out_size))
4139 return false;
4140 }
4141 } else {
4142 uint32_t a;
4143 uint32_t b;
4144
4145 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4146 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4147 attrs[m].attr, &a, &b)))
4148 return false;
4149 }
4150 }
4151 return true;
4152}
4153
4154static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4155 TEE_ObjectHandle key, uint32_t key_size)
4156{
4157 const struct key_attrs attrs[] = {
4158 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4159 };
4160
4161 return test_keygen_attributes(c, s, key, key_size,
4162 (struct key_attrs *)&attrs,
4163 ARRAY_SIZE(attrs));
4164}
4165
4166
4167static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4168 TEE_ObjectHandle key, uint32_t key_size)
4169{
4170 const struct key_attrs attrs[] = {
4171 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4172 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4173 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4174 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4175 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4176 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4177 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4178 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4179 };
4180
4181 return test_keygen_attributes(c, s, key, key_size,
4182 (struct key_attrs *)&attrs,
4183 ARRAY_SIZE(attrs));
4184}
4185
Pascal Brande61133f2015-07-08 15:38:37 +02004186static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4187 TEE_ObjectHandle key, uint32_t key_size)
4188{
4189 const struct key_attrs attrs[] = {
4190 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4191 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4192 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4193 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4194 };
4195
4196 return test_keygen_attributes(c, s, key, key_size,
4197 (struct key_attrs *)&attrs,
4198 ARRAY_SIZE(attrs));
4199}
4200
Pascal Brandc639ac82015-07-02 08:53:34 +02004201static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004202 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004203{
4204 const struct key_attrs attrs[] = {
4205 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4206 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4207 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4208 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4209 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4210 };
4211
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004212 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004213 (struct key_attrs *)&attrs,
4214 ARRAY_SIZE(attrs));
4215}
4216
4217static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4218 TEE_ObjectHandle key, uint32_t key_size)
4219{
4220 const struct key_attrs attrs[] = {
4221 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4222 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4223 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4224 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4225 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4226 };
4227
4228 return test_keygen_attributes(c, s, key, key_size,
4229 (struct key_attrs *)&attrs,
4230 ARRAY_SIZE(attrs));
4231}
4232
4233static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4234 uint32_t key_type, uint32_t check_keysize,
4235 uint32_t key_size,
4236 TEE_Attribute *params, size_t param_count)
4237{
4238 TEE_ObjectHandle key;
4239 bool ret_val = true;
4240
4241 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4242 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4243 &key)))
4244 return false;
4245
4246 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4247 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4248 param_count)))
4249 return false;
4250
4251 switch (key_type) {
4252 case TEE_TYPE_DES:
4253 case TEE_TYPE_DES3:
4254 ret_val = ADBG_EXPECT_TRUE(c,
4255 test_secret_value(c, s, key,
4256 key_size + key_size / 7));
4257 break;
4258 case TEE_TYPE_AES:
4259 case TEE_TYPE_HMAC_MD5:
4260 case TEE_TYPE_HMAC_SHA1:
4261 case TEE_TYPE_HMAC_SHA224:
4262 case TEE_TYPE_HMAC_SHA256:
4263 case TEE_TYPE_HMAC_SHA384:
4264 case TEE_TYPE_HMAC_SHA512:
4265 case TEE_TYPE_GENERIC_SECRET:
4266 ret_val = ADBG_EXPECT_TRUE(c,
4267 test_secret_value(c, s, key, key_size));
4268 break;
4269
4270 case TEE_TYPE_RSA_KEYPAIR:
4271 ret_val = ADBG_EXPECT_TRUE(c,
4272 test_rsa_key_pair(c, s, key, key_size));
4273 break;
4274
Pascal Brande61133f2015-07-08 15:38:37 +02004275 case TEE_TYPE_ECDSA_KEYPAIR:
4276 case TEE_TYPE_ECDH_KEYPAIR:
4277 ret_val = ADBG_EXPECT_TRUE(c,
4278 test_ecc_key_pair(c, s, key, key_size));
4279 break;
4280
Pascal Brandc639ac82015-07-02 08:53:34 +02004281 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004282 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004283 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004284 break;
4285
4286 case TEE_TYPE_DSA_KEYPAIR:
4287 ret_val = ADBG_EXPECT_TRUE(c,
4288 test_dsa_key_pair(c, s, key, key_size));
4289 break;
4290
4291 default:
4292 ret_val = false;
4293 break;
4294 }
4295
4296 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4297 ta_crypt_cmd_free_transient_object(c, s, key)))
4298 return false;
4299
4300 return ret_val;
4301}
4302
4303static void xtest_test_keygen_noparams(ADBG_Case_t *c, TEEC_Session *session)
4304{
4305 size_t n;
4306 uint32_t key_size;
4307 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004308 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004309 const char *name;
4310 uint32_t key_type;
4311 uint32_t quanta;
4312 uint32_t min_size;
4313 uint32_t max_size;
4314 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004315 { 0, "AES", TEE_TYPE_AES, 64, 128,
Pascal Brandc639ac82015-07-02 08:53:34 +02004316 256 /* valid sizes 128, 192, 256 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004317 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4318 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
Pascal Brandc639ac82015-07-02 08:53:34 +02004319 168 /* valid sizes 112, 168 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004320 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4321 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4322 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4323 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4324 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4325 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4326 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4327 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004328
4329 /* New tests added to check non-regression of issue #5398 */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004330 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4331 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4332 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4333 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4334 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4335 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4336 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004337 };
4338
4339 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
4340 uint32_t min_size = key_types[n].min_size;
4341 uint32_t max_size = key_types[n].max_size;
4342 uint32_t quanta = key_types[n].quanta;
4343
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004344 if (key_types[n].level > level)
4345 continue;
4346
Pascal Brandc639ac82015-07-02 08:53:34 +02004347 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4348
4349 for (key_size = min_size; key_size <= max_size;
4350 key_size += quanta) {
4351 if (!ADBG_EXPECT_TRUE(c,
4352 generate_and_test_key(c, session, key_types
4353 [n].key_type, 1, key_size, NULL, 0)))
4354 break;
4355 }
4356
4357 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4358 }
4359}
4360
4361static void xtest_test_keygen_dh(ADBG_Case_t *c, TEEC_Session *session)
4362{
4363 size_t n;
4364 size_t param_count;
4365 /*
4366 * Note that the key size parameter is not used when creating the keys
4367 * but specifying these sizes make it possible to test the expected size
4368 * of the private value. This also means that the keysize must match the
4369 * size of p or what is specified in private_bits or the equvivalent
4370 * size of the subprime parameter.
4371 */
4372 TEE_Attribute params[4];
4373
4374#define XTEST_DH_GK_DATA(vect) \
4375 ARRAY(vect ## _p), \
4376 ARRAY(vect ## _g), \
4377 &vect ## _private_bits, \
4378 0, 0
4379#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4380 ARRAY(vect ## _p), \
4381 ARRAY(vect ## _g), \
4382 &vect ## _private_bits, \
4383 ARRAY(vect ## _subprime)
4384 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004385 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004386 uint32_t key_size;
4387 const uint8_t *p;
4388 size_t p_len;
4389 const uint8_t *g;
4390 size_t g_len;
4391 const uint32_t *private_bits;
4392 const uint8_t *subprime;
4393 size_t subprime_len;
4394 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004395 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004396 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004397 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004398 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004399 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004400 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004401 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004402 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004403 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004404 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004405 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004406 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004407 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004408 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004409 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004410 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004411 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004412 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004413 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004414 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004415 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004416 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004417 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004418 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004419 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004420 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004421 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004422 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004423 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004424 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004425 };
4426
4427
4428 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004429 if (key_types[n].level > level)
4430 continue;
4431
Pascal Brandc639ac82015-07-02 08:53:34 +02004432 Do_ADBG_BeginSubCase(c,
4433 "Generate DH key %d bits - Private bits = %d",
4434 key_types[n].key_size,
4435 *key_types[n].private_bits);
4436 param_count = 0;
4437
4438 xtest_add_attr(&param_count, params,
4439 TEE_ATTR_DH_PRIME,
4440 key_types[n].p, key_types[n].p_len);
4441
4442 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4443 key_types[n].g, key_types[n].g_len);
4444
4445 if (key_types[n].private_bits != 0) {
4446 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4447
4448 params[param_count].content.value.a =
4449 *key_types[n].private_bits;
4450
4451 params[param_count].content.value.b = 0;
4452 param_count++;
4453 }
4454
4455 if (key_types[n].subprime != 0) {
4456 xtest_add_attr(&param_count, params,
4457 TEE_ATTR_DH_SUBPRIME,
4458 key_types[n].subprime,
4459 key_types[n].subprime_len);
4460 }
4461
4462 if (!ADBG_EXPECT_TRUE(c,
4463 generate_and_test_key(c, session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004464 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004465 key_types[n]. key_size, params, param_count)))
4466 break;
4467
4468 Do_ADBG_EndSubCase(c,
4469 "Generate DH key %d bits - Private bits = %d",
4470 key_types[n].key_size,
4471 *key_types[n].private_bits);
4472 }
4473}
4474
4475static void xtest_test_keygen_dsa(ADBG_Case_t *c, TEEC_Session *session)
4476{
4477 size_t n;
4478 size_t param_count;
4479 TEE_Attribute params[4];
4480
4481#define XTEST_DSA_GK_DATA(vect) \
4482 ARRAY(vect ## _p), \
4483 ARRAY(vect ## _g), \
4484 ARRAY(vect ## _q)
4485 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004486 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004487 uint32_t key_size;
4488 const uint8_t *prime;
4489 size_t prime_len;
4490 const uint8_t *base;
4491 size_t base_len;
4492 const uint8_t *sub_prime;
4493 size_t sub_prime_len;
4494 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004495 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4496 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4497 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4498 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4499 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4500 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4501 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4502 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4503 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4504 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004505 };
4506
4507 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004508 if (key_types[n].level > level)
4509 continue;
4510
Pascal Brandc639ac82015-07-02 08:53:34 +02004511 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4512 key_types[n].key_size);
4513 param_count = 0;
4514
4515
4516 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4517 key_types[n].prime, key_types[n].prime_len);
4518
4519 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4520 key_types[n].sub_prime,
4521 key_types[n].sub_prime_len);
4522
4523 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4524 key_types[n].base, key_types[n].base_len);
4525
4526 if (!ADBG_EXPECT_TRUE(c,
4527 generate_and_test_key(c, session, TEE_TYPE_DSA_KEYPAIR,
4528 1, key_types[n]. key_size, params,
4529 param_count)))
4530 break;
4531
4532 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4533 key_types[n].key_size);
4534 }
4535}
4536
Pascal Brande61133f2015-07-08 15:38:37 +02004537static void xtest_test_keygen_ecc(ADBG_Case_t *c, TEEC_Session *session)
4538{
4539 size_t n;
4540 size_t param_count;
4541 TEE_Attribute params[4];
4542
4543 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004544 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004545 const char *name;
4546 uint32_t algo;
4547 uint32_t curve;
4548 uint32_t key_size;
4549 } key_types[] = {
4550 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004551 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4552 192 },
4553 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4554 224 },
4555 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4556 256 },
4557 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4558 384 },
4559 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4560 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004561
4562 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004563 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4564 192 },
4565 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4566 224 },
4567 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4568 256 },
4569 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4570 384 },
4571 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4572 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004573 };
4574
4575 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004576 if (key_types[n].level > level)
4577 continue;
4578
Pascal Brande61133f2015-07-08 15:38:37 +02004579 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4580 param_count = 0;
4581
4582 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4583 key_types[n].curve, 0);
4584
4585 if (!ADBG_EXPECT_TRUE(c,
4586 generate_and_test_key(c, session, key_types[n].algo,
4587 0, key_types[n].key_size, params,
4588 param_count)))
4589 break;
4590
4591 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4592 }
4593}
4594
Pascal Brandc639ac82015-07-02 08:53:34 +02004595static void xtest_tee_test_4007(ADBG_Case_t *c)
4596{
4597 TEEC_Session session = { 0 };
4598 uint32_t ret_orig;
4599
4600 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4601 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4602 &ret_orig)))
4603 return;
4604
4605 xtest_test_keygen_noparams(c, &session);
4606
4607 xtest_test_keygen_dh(c, &session);
4608
4609 xtest_test_keygen_dsa(c, &session);
4610
Pascal Brande61133f2015-07-08 15:38:37 +02004611 xtest_test_keygen_ecc (c, &session);
4612
Pascal Brandc639ac82015-07-02 08:53:34 +02004613 TEEC_CloseSession(&session);
4614}
4615
4616static void xtest_tee_test_4008(ADBG_Case_t *c)
4617{
4618 TEEC_Session session = { 0 };
4619 uint32_t ret_orig;
4620 TEE_OperationHandle op;
4621 TEE_ObjectHandle key_handle;
4622 TEE_ObjectHandle sv_handle;
4623 TEE_Attribute params[4];
4624 size_t param_count = 0;
4625 uint8_t out[2048];
4626 size_t out_size;
4627
4628 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4629 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4630 &ret_orig)))
4631 return;
4632
4633 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4634
4635 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4636 ta_crypt_cmd_allocate_operation(c, &session, &op,
4637 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4638 derive_key_max_keysize)))
4639 goto out;
4640
4641 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4642 ta_crypt_cmd_allocate_transient_object(c, & session,
4643 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4644 &key_handle)))
4645 goto out;
4646
4647 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4648 ARRAY(derive_key_dh_prime));
4649
4650 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4651 ARRAY(derive_key_dh_base));
4652
4653 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4654 ARRAY(derive_key_dh_public_value));
4655
4656 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4657 ARRAY(derive_key_dh_private_value));
4658
4659 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4660 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4661 params, param_count)))
4662 goto out;
4663
4664 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4665 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4666 goto out;
4667
4668 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4669 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4670 goto out;
4671
4672 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4673 ta_crypt_cmd_allocate_transient_object(c, &session,
4674 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4675 &sv_handle)))
4676 goto out;
4677
Pascal Brand2b92b642015-07-16 13:29:42 +02004678 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004679 param_count = 0;
4680
4681 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4682 ARRAY(derive_key_dh_public_value_2));
4683
4684 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4685 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4686 param_count)))
4687 goto out;
4688
4689 out_size = sizeof(out);
4690 memset(out, 0, sizeof(out));
4691 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4692 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4693 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4694 goto out;
4695
4696 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4697 sizeof(derive_key_dh_shared_secret), out,
4698 out_size))
4699 goto out;
4700
4701 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4702 ta_crypt_cmd_free_operation(c, &session, op)))
4703 goto out;
4704
4705 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4706 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4707 goto out;
4708out:
4709 Do_ADBG_EndSubCase(c, "Derive DH key success");
4710 TEEC_CloseSession(&session);
4711}
Pascal Brand2b92b642015-07-16 13:29:42 +02004712
4713static void xtest_tee_test_4009(ADBG_Case_t *c)
4714{
4715 TEEC_Session session = { 0 };
4716 uint32_t ret_orig;
4717 TEE_OperationHandle op;
4718 TEE_ObjectHandle key_handle;
4719 TEE_ObjectHandle sv_handle;
4720 TEE_Attribute params[4];
4721 size_t param_count = 0;
4722 uint8_t out[2048];
4723 size_t out_size;
4724 uint32_t size_bytes;
Peng Fane13ad9b2015-07-21 11:46:26 +08004725 uint32_t i;
Pascal Brand2b92b642015-07-16 13:29:42 +02004726 struct derive_key_ecdh_t *pt;
4727
4728 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4729 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4730 &ret_orig)))
4731 return;
4732
4733 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
4734 pt = &derive_key_ecdh[i];
4735
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02004736 if (pt->level > level)
4737 continue;
4738
Pascal Brand2b92b642015-07-16 13:29:42 +02004739 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
4740 pt->algo);
4741 size_bytes = (pt->keysize + 7) / 8;
4742 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4743 ta_crypt_cmd_allocate_operation(c, &session, &op,
4744 pt->algo,
4745 TEE_MODE_DERIVE, pt->keysize)))
4746 goto out;
4747
4748 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4749 ta_crypt_cmd_allocate_transient_object(c, & session,
4750 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
4751 &key_handle)))
4752 goto out;
4753
4754 param_count = 0;
4755 xtest_add_attr_value(&param_count, params,
4756 TEE_ATTR_ECC_CURVE, pt->curve, 0);
4757 xtest_add_attr(&param_count, params,
4758 TEE_ATTR_ECC_PRIVATE_VALUE,
4759 pt->private, size_bytes);
4760 /*
4761 * The public value is not used. This is why we provide
4762 * another buffer
4763 */
4764 xtest_add_attr(&param_count, params,
4765 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4766 pt->private, size_bytes);
4767 xtest_add_attr(&param_count, params,
4768 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4769 pt->private, size_bytes);
4770
4771 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4772 ta_crypt_cmd_populate_transient_object(c,
4773 &session,
4774 key_handle, params, param_count)))
4775 goto out;
4776
4777 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4778 ta_crypt_cmd_set_operation_key(c, &session, op,
4779 key_handle)))
4780 goto out;
4781
4782 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4783 ta_crypt_cmd_free_transient_object(c, & session,
4784 key_handle)))
4785 goto out;
4786
4787 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4788 ta_crypt_cmd_allocate_transient_object(c, &session,
4789 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
4790 &sv_handle)))
4791 goto out;
4792
4793 /* reuse but reset params and param-count */
4794 param_count = 0;
4795
4796 xtest_add_attr(&param_count, params,
4797 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4798 pt->public_x, size_bytes);
4799 xtest_add_attr(&param_count, params,
4800 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4801 pt->public_y, size_bytes);
4802
4803 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4804 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
4805 params, param_count)))
4806 goto out;
4807
4808 out_size = sizeof(out);
4809 memset(out, 0, sizeof(out));
4810 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4811 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
4812 sv_handle,
4813 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4814 goto out;
4815
4816 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
4817 out, out_size))
4818 goto out;
4819
4820 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4821 ta_crypt_cmd_free_operation(c, &session, op)))
4822 goto out;
4823
4824 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4825 ta_crypt_cmd_free_transient_object(c, &session,
4826 sv_handle)))
4827 goto out;
4828
4829 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
4830 pt->algo);
4831 }
4832
4833 goto noerror;
4834
4835out:
4836 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
4837
4838noerror:
4839 TEEC_CloseSession(&session);
4840}
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004841
4842static void xtest_tee_test_4010(ADBG_Case_t *c)
4843{
4844 TEEC_Session session = { 0 };
4845 uint32_t ret_orig;
4846 TEE_ObjectHandle o;
4847 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
4848 static const TEE_Attribute attr = {
4849 .attributeID = TEE_ATTR_SECRET_VALUE,
4850 .content.ref.buffer = (void *)large_key,
4851 .content.ref.length = sizeof(large_key),
4852 };
4853
4854 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4855 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4856 &ret_orig)))
4857 return;
4858
4859 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4860 ta_crypt_cmd_allocate_transient_object(c, &session,
4861 TEE_TYPE_HMAC_SHA256, 1024, &o)))
4862 goto out;
4863
4864 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
4865 ta_crypt_cmd_populate_transient_object(c, &session, o,
4866 &attr, 1));
4867
4868out:
4869 TEEC_CloseSession(&session);
4870}
Jens Wiklanderb58916e2016-07-07 15:29:32 +02004871
4872static void xtest_tee_test_4011(ADBG_Case_t *c)
4873{
4874 TEEC_Session s = { 0 };
4875 size_t key_size = 512;
4876 TEE_ObjectHandle key;
4877 TEE_OperationHandle ops;
4878 TEE_OperationHandle opv;
4879 TEE_OperationHandle ope;
4880 TEE_OperationHandle opd;
4881 uint32_t ret_orig;
4882 uint8_t in[TEE_SHA1_HASH_SIZE];
4883 uint8_t out[1024];
4884 uint8_t tmp[1024];
4885 size_t out_size;
4886 size_t tmp_size;
4887 size_t n;
4888 size_t m;
4889 size_t i = 0;
4890
4891 /* Setup session, initialize message to sign, create a keypair */
4892 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
4893 &crypt_user_ta_uuid, NULL, &ret_orig)))
4894 return;
4895 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
4896 &s, in, sizeof(in))))
4897 goto out;
4898 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
4899 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
4900 goto out;
4901 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
4902 key, key_size, NULL, 0)))
4903 goto out;
4904
4905 /* Allocate operations for sign, verify, encrypt and decrypt */
4906 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4907 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
4908 key_size)))
4909 goto out;
4910 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4911 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
4912 key_size)))
4913 goto out;
4914 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4915 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
4916 goto out;
4917 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
4918 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
4919 goto out;
4920
4921 /* Assign the keypair to all operations */
4922 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4923 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
4924 goto out;
4925 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4926 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
4927 goto out;
4928 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4929 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
4930 goto out;
4931 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4932 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
4933 goto out;
4934
4935 /*
4936 * The core of the test case is inspired by the one in libtomcrypt:
4937 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
4938 *
4939 * Testcase for Bleichenbacher attack
4940 *
4941 * (1) Create a valid signature
4942 * (2) Check that it can be verified
4943 * (3) Transform the package to fetch plain text (using the encrypt
4944 * operation in GP TEE Internal API)
4945 * (4) Forge the structure of PKCS#1-EMSA encoded data
4946 * (4.1) Search for start and end of the padding string
4947 * (4.2) Move the signature to the front of the padding string
4948 * (4.3) Zero the message until the end
4949 * (5) Transform the package back (using the decrypt operation in
4950 * GP TEE Internal API)
4951 * (6) The result should not be valid if the implementation is robust.
4952 */
4953
4954
4955 for (i = 0; i < 9; i++) {
4956 Do_ADBG_Log("Iteration %zu", i);
4957
4958 /* 1 */
4959 out_size = sizeof(out);
4960 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4961 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
4962 in, sizeof(in), out, &out_size)))
4963 goto out;
4964
4965 /* 2 */
4966 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4967 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
4968 in, sizeof(in), out, out_size)))
4969 goto out;
4970
4971 /* 3 */
4972 tmp_size = sizeof(tmp);
4973 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4974 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
4975 out, out_size, tmp, &tmp_size)))
4976 goto out;
4977
4978 /* 4.1 */
4979 for (n = 0; n < tmp_size; n++)
4980 if (tmp[n] == 0xff)
4981 break;
4982 for (m = n + 1; m < tmp_size; m++)
4983 if (tmp[m] != 0xff)
4984 break;
4985 /* 4.2 */
4986 memmove(tmp + n + i, tmp + m, tmp_size - m);
4987 /* 4.3 */
4988 for (n = n + tmp_size - m + i; n < tmp_size; n++)
4989 tmp[n] = 0;
4990
4991 /* 5 */
4992 out_size = sizeof(out);
4993 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4994 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
4995 tmp, tmp_size, out, &out_size)))
4996 goto out;
4997
4998 /* 6 */
4999 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
5000 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5001 in, sizeof(in), out, out_size)))
5002 goto out;
5003 }
5004
5005out:
5006 TEEC_CloseSession(&s);
5007}