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