blob: f31597842d9fff5cfd96d4368fefad1cb51a750c [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),
Jens Wiklander9fc63f52017-11-10 11:13:26 +01002657 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY),
2658 XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY),
Pascal Brandc639ac82015-07-02 08:53:34 +02002659 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),
Jens Wiklanderf6efe242017-11-06 13:16:43 +01002673#ifdef CFG_GCM_NIST_VECTORS
2674#include "gcmDecrypt128.h"
2675#include "gcmDecrypt192.h"
2676#include "gcmDecrypt256.h"
2677#include "gcmEncryptExtIV128.h"
2678#include "gcmEncryptExtIV192.h"
2679#include "gcmEncryptExtIV256.h"
2680#endif
Pascal Brandc639ac82015-07-02 08:53:34 +02002681};
2682
2683static void xtest_tee_test_4005(ADBG_Case_t *c)
2684{
2685 TEEC_Session session = { 0 };
2686 TEE_OperationHandle op;
2687 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
2688 TEE_Attribute key_attr;
2689 uint8_t out[512];
2690 size_t out_size;
2691 size_t out_offs;
2692 uint32_t ret_orig;
2693 size_t n;
2694
2695 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2696 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2697 &ret_orig)))
2698 return;
2699
2700 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2701 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2702 (int)n, (unsigned int)ae_cases[n].algo,
2703 (int)ae_cases[n].line);
2704
2705 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2706 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2707 key_attr.content.ref.length = ae_cases[n].key_len;
2708
2709 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2710 ta_crypt_cmd_allocate_operation(c, &session, &op,
2711 ae_cases[n].algo, ae_cases[n].mode,
2712 key_attr.content.ref.length * 8)))
2713 goto out;
2714
2715 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2716 ta_crypt_cmd_allocate_transient_object(c, &session,
2717 ae_cases[n].key_type,
2718 key_attr.content.ref.length * 8,
2719 &key_handle)))
2720 goto out;
2721
2722 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2723 ta_crypt_cmd_populate_transient_object(c, &session,
2724 key_handle, &key_attr, 1)))
2725 goto out;
2726
2727 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2728 ta_crypt_cmd_set_operation_key(c, &session, op,
2729 key_handle)))
2730 goto out;
2731
2732 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2733 ta_crypt_cmd_free_transient_object(c, &session,
2734 key_handle)))
2735 goto out;
2736 key_handle = TEE_HANDLE_NULL;
2737
2738 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2739 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2740 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2741 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2742 goto out;
2743
2744 if (ae_cases[n].aad != NULL) {
2745 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2746 ta_crypt_cmd_ae_update_aad(c, &session, op,
2747 ae_cases[n].aad, ae_cases[n].aad_incr)))
2748 goto out;
2749
2750 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2751 ta_crypt_cmd_ae_update_aad(c, &session, op,
2752 ae_cases[n].aad + ae_cases[n].aad_incr,
2753 ae_cases [n].aad_len -
2754 ae_cases[n].aad_incr)))
2755 goto out;
2756 }
2757
2758 out_offs = 0;
2759 out_size = sizeof(out);
2760 memset(out, 0, sizeof(out));
2761 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2762 if (ae_cases[n].ptx != NULL) {
2763 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2764 ta_crypt_cmd_ae_update(c, &session, op,
2765 ae_cases[n].ptx,
2766 ae_cases[n].in_incr, out,
2767 &out_size)))
2768 goto out;
2769 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002770 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2771 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2772 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002773 }
2774 } else {
2775 if (ae_cases[n].ctx != NULL) {
2776 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2777 ta_crypt_cmd_ae_update(c, &session, op,
2778 ae_cases[n].ctx,
2779 ae_cases[n].in_incr, out,
2780 &out_size)))
2781 goto out;
2782 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002783 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2784 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2785 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002786 }
2787 }
2788
2789 out_size = sizeof(out) - out_offs;
2790 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2791 uint8_t out_tag[64];
2792 size_t out_tag_len = MIN(sizeof(out_tag),
2793 ae_cases[n].tag_len);
2794
2795 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2796 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2797 ae_cases[n].ptx + ae_cases[n].in_incr,
2798 ae_cases[n].ptx_len -
2799 ae_cases[n].in_incr,
2800 out + out_offs,
2801 &out_size, out_tag, &out_tag_len)))
2802 goto out;
2803
2804 (void)ADBG_EXPECT_BUFFER(c,
2805 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2806 out_tag_len);
2807
2808 out_offs += out_size;
2809
2810 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2811 ae_cases[n].ctx_len, out, out_offs);
2812 } else {
2813 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2814 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2815 ae_cases[n].ctx + ae_cases[n].in_incr,
2816 ae_cases[n].ctx_len -
2817 ae_cases[n].in_incr,
2818 out + out_offs,
2819 &out_size, ae_cases[n].tag,
2820 ae_cases[n].tag_len)))
2821 goto out;
2822
2823 out_offs += out_size;
2824
2825 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2826 ae_cases[n].ptx_len, out, out_offs);
2827 }
2828
2829 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2830 ta_crypt_cmd_free_operation(c, &session, op)))
2831 goto out;
2832
2833 Do_ADBG_EndSubCase(c, NULL);
2834 }
2835out:
2836 TEEC_CloseSession(&session);
2837}
2838
2839struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002840 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002841 uint32_t algo;
2842 TEE_OperationMode mode;
2843
2844 union {
2845 struct {
2846 const uint8_t *modulus;
2847 size_t modulus_len;
2848
2849 const uint8_t *pub_exp;
2850 size_t pub_exp_len;
2851
2852 const uint8_t *priv_exp;
2853 size_t priv_exp_len;
2854
2855 const uint8_t *prime1; /* q */
2856 size_t prime1_len;
2857 const uint8_t *prime2; /* p */
2858 size_t prime2_len;
2859 const uint8_t *exp1; /* dp */
2860 size_t exp1_len;
2861 const uint8_t *exp2; /* dq */
2862 size_t exp2_len;
2863 const uint8_t *coeff; /* iq */
2864 size_t coeff_len;
2865
2866 int salt_len;
2867 } rsa;
2868 struct {
2869 const uint8_t *prime;
2870 size_t prime_len;
2871 const uint8_t *sub_prime;
2872 size_t sub_prime_len;
2873 const uint8_t *base;
2874 size_t base_len;
2875 const uint8_t *pub_val;
2876 size_t pub_val_len;
2877 const uint8_t *priv_val;
2878 size_t priv_val_len;
2879 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002880 struct {
2881 const uint8_t *private;
2882 size_t private_len;
2883 const uint8_t *public_x;
2884 size_t public_x_len;
2885 const uint8_t *public_y;
2886 size_t public_y_len;
2887 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002888 } params;
2889
2890 const uint8_t *ptx;
2891 size_t ptx_len;
2892 const uint8_t *ctx;
2893 size_t ctx_len;
2894 size_t line;
2895};
2896
2897#define WITHOUT_SALT(x) -1
2898#define WITH_SALT(x) x
2899
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002900#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2901 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002902 ARRAY(vect ## _ptx), \
2903 ARRAY(vect ## _out), \
2904 __LINE__ }
2905
2906#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2907 { .rsa = { \
2908 ARRAY(vect ## _modulus), \
2909 ARRAY(vect ## _pub_exp), \
2910 ARRAY(vect ## _priv_exp), \
2911 opt_crt_array(vect ## _prime1), \
2912 opt_crt_array(vect ## _prime2), \
2913 opt_crt_array(vect ## _exp1), \
2914 opt_crt_array(vect ## _exp2), \
2915 opt_crt_array(vect ## _coeff), \
2916 opt_salt(vect ## _salt_len) \
2917 } }
2918
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002919#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2920 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002921 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2922
2923#define XTEST_AC_DSA_UNION(vect) \
2924 { .dsa = { \
2925 ARRAY(vect ## _prime), \
2926 ARRAY(vect ## _sub_prime), \
2927 ARRAY(vect ## _base), \
2928 ARRAY(vect ## _pub_val), \
2929 ARRAY(vect ## _priv_val), \
2930 } }
2931
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002932#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
2933 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02002934
Pascal Brand3e143ee2015-07-15 17:17:16 +02002935#define XTEST_AC_ECDSA_UNION(vect) \
2936 { .ecdsa = { \
2937 ARRAY(vect ## _private), \
2938 ARRAY(vect ## _public_x), \
2939 ARRAY(vect ## _public_y), \
2940 } }
2941
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002942#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
2943 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02002944
Pascal Brandc639ac82015-07-02 08:53:34 +02002945static const struct xtest_ac_case xtest_ac_cases[] = {
2946 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002947 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002948 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002949 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002950 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002951 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002952 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002953 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002954 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002955 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002956 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002957 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002958 ac_rsassa_vect3, 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_vect4, 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_vect4, 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_vect5, 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_vect5, 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,
Pascal Brandc639ac82015-07-02 08:53:34 +02002968 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002969 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002970 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002971 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002972 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002973 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002974 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002975 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
2976 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
2977 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
2978 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02002979
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002980 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002981 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002982 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002983 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002984
2985 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002986 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002987 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002988 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002989
2990 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002991 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002992 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002993 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002994
2995 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002996 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002997 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002998 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
2999
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003000 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3001 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003002 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003003 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003004 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003005
3006 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3007 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003008 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003009 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3010 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003011 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003012
3013 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3014 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003015 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003016 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3017 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003018 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003019
3020 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3021 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003022 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003023 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3024 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003025 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003026
3027 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3028 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003029 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003030 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3031 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003032 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
3033
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003034 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003035 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003036 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003037 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003038 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003039 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003040 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003041 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003042 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003043 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003044 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003045 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
3046
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003047 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3048 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003049 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003050 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3051 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003052 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003053 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3054 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003055 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003056 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3057 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003058 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003059 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3060 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003061 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003062 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3063 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003064 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
3065
3066 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003067 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003068 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003069 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003070 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003071 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003072 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003073 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003074 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003075 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003076 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003077 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003078 ac_rsassa_vect3, 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_vect4, 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_vect4, 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_vect5, 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_vect5, 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_vect6, 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_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003091 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003092 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003093 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003094 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003095 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003096 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003097 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003098 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003099 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003100 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003101 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003102 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003103 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003104 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003105 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003106 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003107 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003108 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003109 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003110 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
3111
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003112 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3113 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003114 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003115 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003116 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003117 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3118 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003119 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003120 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3121 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003122 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003123 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3124 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003125 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003126 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3127 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003128 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003129 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3130 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003131 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003132 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3133 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003134 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003135 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3136 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003137 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003138 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3139 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003140 ac_rsassa_vect15, ARRAY, WITH_SALT),
3141
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003142 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003143 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003144 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003145 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003146 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003147 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003148 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003149 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003150 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003151 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003152 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003153 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3154
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003155 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3156 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003157 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003158 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3159 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003160 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003161 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3162 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003163 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003164 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3165 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003166 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003167 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3168 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003169 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003170 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3171 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003172 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3173
3174 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003175 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003176 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3177 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003178 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3179 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3180 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3181 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3182 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3183 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3184 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3185 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3186 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3187 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3188 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3189 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3190 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3191 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3192 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3193 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3194 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3195 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3196 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3197 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3198 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3199 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3200 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3201 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3202 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3203 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3204 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3205 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003206 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3207 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3208 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3209 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3210 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3211 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003212 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3213 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003214 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3215 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3216 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3217 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3218 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3219 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3220 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3221 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3222 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3223 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3224 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3225 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3226 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3227 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3228 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3229 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3230 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3231 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3232 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3233 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3234 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3235 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3236 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3237 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3238 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3239 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3240 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3241 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003242 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003243 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3244 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3245 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3246 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3247 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3248 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3249 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3250 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3251 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3252 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3253 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3254 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3255 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3256 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3257 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3258 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3259 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3260 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3261 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3262 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3263 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3264 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3265 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3266 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3267 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3268 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3269 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3270 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3271 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3272 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003273 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3274 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3275 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3276 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003277 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3278 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003279 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3280 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3281 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3282 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3283 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3284 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3285 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3286 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3287 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3288 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3289 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3290 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3291 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3292 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3293 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3294 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3295 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3296 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3297 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3298 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3299 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3300 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3301 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3302 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3303 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3304 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3305 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3306 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003307 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003308 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3309 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003310 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3311 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3312 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3313 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3314 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3315 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3316 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3317 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3318 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3319 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3320 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3321 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3322 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3323 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3324 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3325 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3326 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3327 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3328 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3329 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3330 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3331 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3332 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3333 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3334 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3335 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3336 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3337 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003338 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3339 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3340 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3341 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3342 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003343 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3344 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003345 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3346 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3347 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3348 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3349 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3350 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3351 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3352 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3353 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3354 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3355 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3356 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3357 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3358 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3359 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3360 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3361 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3362 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3363 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3364 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3365 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3366 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3367 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3368 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3369 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3370 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3371 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3372 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003373 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3374 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003375
3376 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003377 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003378 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003379 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003380 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003381 nist_186_2_ecdsa_testvector_1),
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_2),
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_2),
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_3),
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_3),
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_4),
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_4),
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_5),
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_5),
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_6),
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_6),
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_7),
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_7),
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_8),
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_8),
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_9),
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_9),
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_10),
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_10),
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_11),
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_11),
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_12),
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_12),
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_13),
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_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003430 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003431 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003432 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003433 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003434 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003435 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003436 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003437 nist_186_2_ecdsa_testvector_15),
3438 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003439 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003440 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003441 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003442 nist_186_2_ecdsa_testvector_16),
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_17),
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_17),
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_18),
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_18),
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_19),
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_19),
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_20),
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_20),
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_21),
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_21),
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_22),
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_22),
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_23),
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_23),
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_24),
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_24),
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_25),
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_25),
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_26),
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_26),
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_27),
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_27),
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_28),
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_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003491 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003492 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003493 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003494 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003495 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003496 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003497 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003498 nist_186_2_ecdsa_testvector_30),
3499 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003500 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003501 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003502 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003503 nist_186_2_ecdsa_testvector_31),
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_32),
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_32),
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_33),
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_33),
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_34),
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_34),
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_35),
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_35),
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_36),
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_36),
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_37),
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_37),
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_38),
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_38),
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_39),
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_39),
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_40),
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_40),
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_41),
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_41),
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_42),
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_42),
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_43),
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_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003552 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003553 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003554 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003555 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003556 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003557 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003558 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003559 nist_186_2_ecdsa_testvector_45),
3560 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003561 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003562 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003563 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003564 nist_186_2_ecdsa_testvector_46),
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_47),
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_47),
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_48),
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_48),
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_49),
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_49),
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_50),
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_50),
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_51),
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_51),
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_52),
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_52),
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_53),
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_53),
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_54),
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_54),
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_55),
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_55),
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_56),
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_56),
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_57),
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_57),
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_58),
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_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003613 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003614 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003615 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003616 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003617 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003618 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003619 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003620 nist_186_2_ecdsa_testvector_60),
3621 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003622 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003623 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003624 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003625 nist_186_2_ecdsa_testvector_61),
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_62),
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_62),
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_63),
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_63),
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_64),
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_64),
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_65),
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_65),
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_66),
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_66),
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_67),
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_67),
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_68),
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_68),
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_69),
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_69),
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_70),
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_70),
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_71),
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_71),
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_72),
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_72),
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_73),
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_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003674 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003675 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003676 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003677 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003678 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003679 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003680 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003681 nist_186_2_ecdsa_testvector_75),
3682 /* [K-163] - GP NOT SUPPORTED */
3683 /* [K-233] - GP NOT SUPPORTED */
3684 /* [K-283] - GP NOT SUPPORTED */
3685 /* [K-409] - GP NOT SUPPORTED */
3686 /* [K-571] - GP NOT SUPPORTED */
3687 /* [B-163] - GP NOT SUPPORTED */
3688 /* [B-233] - GP NOT SUPPORTED */
3689 /* [B-283] - GP NOT SUPPORTED */
3690 /* [B-409] - GP NOT SUPPORTED */
3691 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003692};
3693
3694static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3695 uint32_t max_key_size, uint32_t key_type,
3696 TEE_Attribute *attrs, size_t num_attrs,
3697 TEE_ObjectHandle *handle)
3698{
3699 size_t n;
3700
3701 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3702 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3703 max_key_size, handle)))
3704 return false;
3705
3706 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3707 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3708 num_attrs)))
3709 return false;
3710
3711 for (n = 0; n < num_attrs; n++) {
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003712 uint8_t out[384];
Pascal Brandc639ac82015-07-02 08:53:34 +02003713 size_t out_size;
3714
3715 out_size = sizeof(out);
3716 memset(out, 0, sizeof(out));
Pascal Brand3e143ee2015-07-15 17:17:16 +02003717
3718 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3719 continue;
3720
Pascal Brandc639ac82015-07-02 08:53:34 +02003721 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3722 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3723 attrs[n].attributeID, out, &out_size)))
3724 return false;
3725
Pascal Brand3e143ee2015-07-15 17:17:16 +02003726 if (out_size < attrs[n].content.ref.length) {
3727 memmove(out + (attrs[n].content.ref.length - out_size),
3728 out,
3729 attrs[n].content.ref.length);
3730 memset(out, 0, attrs[n].content.ref.length - out_size);
3731 out_size = attrs[n].content.ref.length;
3732 }
3733
Pascal Brandc639ac82015-07-02 08:53:34 +02003734 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3735 attrs[n].content.ref.length, out, out_size))
3736 return false;
3737 }
3738
3739 return true;
3740}
3741
3742static void xtest_tee_test_4006(ADBG_Case_t *c)
3743{
3744 TEEC_Session session = { 0 };
3745 TEE_OperationHandle op = TEE_HANDLE_NULL;
3746 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3747 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
3748 TEE_Attribute key_attrs[8];
3749 TEE_Attribute algo_params[1];
3750 size_t num_algo_params;
3751 uint8_t out[512];
3752 size_t out_size;
3753 uint8_t out_enc[512];
3754 size_t out_enc_size;
3755 uint8_t ptx_hash[TEE_MAX_HASH_SIZE];
3756 size_t ptx_hash_size;
3757 size_t max_key_size;
3758 size_t num_key_attrs;
3759 uint32_t ret_orig;
3760 size_t n;
Pascal Brand3e143ee2015-07-15 17:17:16 +02003761 uint32_t curve;
3762 uint32_t hash_algo;
Pascal Brandc639ac82015-07-02 08:53:34 +02003763
3764 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3765 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3766 &ret_orig)))
3767 return;
3768
3769 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3770 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3771
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003772 if (tv->level > level)
3773 continue;
3774
Pascal Brandc639ac82015-07-02 08:53:34 +02003775 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3776 (int)n, (unsigned int)tv->algo,
3777 (int)tv->line);
3778
3779 /*
3780 * When signing or verifying we're working with the hash of
3781 * the payload.
3782 */
3783 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003784 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3785 hash_algo = TEE_ALG_SHA1;
3786 else
3787 hash_algo = TEE_ALG_HASH_ALGO(
3788 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003789
3790 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3791 ta_crypt_cmd_allocate_operation(c, &session,
3792 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3793 goto out;
3794
3795 ptx_hash_size = sizeof(ptx_hash);
3796 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3797 ta_crypt_cmd_digest_do_final(c, & session, op,
3798 tv->ptx, tv->ptx_len, ptx_hash,
3799 &ptx_hash_size)))
3800 goto out;
3801
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003802 /*
3803 * When we use DSA algorithms, the size of the hash we
3804 * consider equals the min between the size of the
3805 * "subprime" in the key and the size of the hash
3806 */
3807 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3808 TEE_MAIN_ALGO_DSA) {
3809 if (tv->params.dsa.sub_prime_len <=
3810 ptx_hash_size)
3811 ptx_hash_size =
3812 tv->params.dsa.sub_prime_len;
3813 }
3814
Pascal Brandc639ac82015-07-02 08:53:34 +02003815 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3816 ta_crypt_cmd_free_operation(c, &session, op)))
3817 goto out;
3818 }
3819
3820 num_algo_params = 0;
3821 num_key_attrs = 0;
3822 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3823 case TEE_MAIN_ALGO_RSA:
3824 if (tv->params.rsa.salt_len > 0) {
3825 algo_params[0].attributeID =
3826 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3827 algo_params[0].content.value.a =
3828 tv->params.rsa.salt_len;
3829 algo_params[0].content.value.b = 0;
3830 num_algo_params = 1;
3831 }
3832
3833 max_key_size = tv->params.rsa.modulus_len * 8;
3834
3835 xtest_add_attr(&num_key_attrs, key_attrs,
3836 TEE_ATTR_RSA_MODULUS,
3837 tv->params.rsa.modulus,
3838 tv->params.rsa.modulus_len);
3839 xtest_add_attr(&num_key_attrs, key_attrs,
3840 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3841 tv->params.rsa.pub_exp,
3842 tv->params.rsa.pub_exp_len);
3843
3844 if (!ADBG_EXPECT_TRUE(c,
3845 create_key(c, &session,
3846 max_key_size,
3847 TEE_TYPE_RSA_PUBLIC_KEY,
3848 key_attrs,
3849 num_key_attrs,
3850 &pub_key_handle)))
3851 goto out;
3852
3853 xtest_add_attr(&num_key_attrs, key_attrs,
3854 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3855 tv->params.rsa.priv_exp,
3856 tv->params.rsa.priv_exp_len);
3857
3858 if (tv->params.rsa.prime1_len != 0) {
3859 xtest_add_attr(&num_key_attrs, key_attrs,
3860 TEE_ATTR_RSA_PRIME1,
3861 tv->params.rsa.prime1,
3862 tv->params.rsa.prime1_len);
3863 }
3864
3865 if (tv->params.rsa.prime2_len != 0) {
3866 xtest_add_attr(&num_key_attrs, key_attrs,
3867 TEE_ATTR_RSA_PRIME2,
3868 tv->params.rsa.prime2,
3869 tv->params.rsa.prime2_len);
3870 }
3871
3872 if (tv->params.rsa.exp1_len != 0) {
3873 xtest_add_attr(&num_key_attrs, key_attrs,
3874 TEE_ATTR_RSA_EXPONENT1,
3875 tv->params.rsa.exp1,
3876 tv->params.rsa.exp1_len);
3877 }
3878
3879 if (tv->params.rsa.exp2_len != 0) {
3880 xtest_add_attr(&num_key_attrs, key_attrs,
3881 TEE_ATTR_RSA_EXPONENT2,
3882 tv->params.rsa.exp2,
3883 tv->params.rsa.exp2_len);
3884 }
3885
3886 if (tv->params.rsa.coeff_len != 0) {
3887 xtest_add_attr(&num_key_attrs, key_attrs,
3888 TEE_ATTR_RSA_COEFFICIENT,
3889 tv->params.rsa.coeff,
3890 tv->params.rsa.coeff_len);
3891 }
3892
3893 if (!ADBG_EXPECT_TRUE(c,
3894 create_key(c, &session,
3895 max_key_size,
3896 TEE_TYPE_RSA_KEYPAIR,
3897 key_attrs,
3898 num_key_attrs,
3899 &priv_key_handle)))
3900 goto out;
3901 break;
3902
3903 case TEE_MAIN_ALGO_DSA:
3904 max_key_size = tv->params.dsa.prime_len * 8;
3905
3906 xtest_add_attr(&num_key_attrs, key_attrs,
3907 TEE_ATTR_DSA_PRIME,
3908 tv->params.dsa.prime,
3909 tv->params.dsa.prime_len);
3910 xtest_add_attr(&num_key_attrs, key_attrs,
3911 TEE_ATTR_DSA_SUBPRIME,
3912 tv->params.dsa.sub_prime,
3913 tv->params.dsa.sub_prime_len);
3914 xtest_add_attr(&num_key_attrs, key_attrs,
3915 TEE_ATTR_DSA_BASE,
3916 tv->params.dsa.base,
3917 tv->params.dsa.base_len);
3918 xtest_add_attr(&num_key_attrs, key_attrs,
3919 TEE_ATTR_DSA_PUBLIC_VALUE,
3920 tv->params.dsa.pub_val,
3921 tv->params.dsa.pub_val_len);
3922
3923 if (!ADBG_EXPECT_TRUE(c,
3924 create_key(c, &session, max_key_size,
3925 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
3926 num_key_attrs, &pub_key_handle)))
3927 goto out;
3928
3929 xtest_add_attr(&num_key_attrs, key_attrs,
3930 TEE_ATTR_DSA_PRIVATE_VALUE,
3931 tv->params.dsa.priv_val,
3932 tv->params.dsa.priv_val_len);
3933
3934 if (!ADBG_EXPECT_TRUE(c,
3935 create_key(c, &session, max_key_size,
3936 TEE_TYPE_DSA_KEYPAIR, key_attrs,
3937 num_key_attrs, &priv_key_handle)))
3938 goto out;
3939 break;
3940
Pascal Brand3e143ee2015-07-15 17:17:16 +02003941 case TEE_MAIN_ALGO_ECDSA:
3942 switch (tv->algo) {
3943 case TEE_ALG_ECDSA_P192:
3944 curve = TEE_ECC_CURVE_NIST_P192;
3945 break;
3946 case TEE_ALG_ECDSA_P224:
3947 curve = TEE_ECC_CURVE_NIST_P224;
3948 break;
3949 case TEE_ALG_ECDSA_P256:
3950 curve = TEE_ECC_CURVE_NIST_P256;
3951 break;
3952 case TEE_ALG_ECDSA_P384:
3953 curve = TEE_ECC_CURVE_NIST_P384;
3954 break;
3955 case TEE_ALG_ECDSA_P521:
3956 curve = TEE_ECC_CURVE_NIST_P521;
3957 break;
3958 default:
3959 curve = 0xFF;
3960 break;
3961 }
3962
3963 if (tv->algo == TEE_ALG_ECDSA_P521)
3964 max_key_size = 521;
3965 else
3966 max_key_size = tv->params.ecdsa.private_len * 8;
3967
3968 xtest_add_attr_value(&num_key_attrs, key_attrs,
3969 TEE_ATTR_ECC_CURVE, curve, 0);
3970 xtest_add_attr(&num_key_attrs, key_attrs,
3971 TEE_ATTR_ECC_PUBLIC_VALUE_X,
3972 tv->params.ecdsa.public_x,
3973 tv->params.ecdsa.public_x_len);
3974 xtest_add_attr(&num_key_attrs, key_attrs,
3975 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
3976 tv->params.ecdsa.public_y,
3977 tv->params.ecdsa.public_y_len);
3978
3979 if (!ADBG_EXPECT_TRUE(c,
3980 create_key(c, &session, max_key_size,
3981 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
3982 num_key_attrs, &pub_key_handle)))
3983 goto out;
3984
3985 xtest_add_attr(&num_key_attrs, key_attrs,
3986 TEE_ATTR_ECC_PRIVATE_VALUE,
3987 tv->params.ecdsa.private,
3988 tv->params.ecdsa.private_len);
3989
3990 if (!ADBG_EXPECT_TRUE(c,
3991 create_key(c, &session, max_key_size,
3992 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
3993 num_key_attrs, &priv_key_handle)))
3994 goto out;
3995 break;
3996
Pascal Brandc639ac82015-07-02 08:53:34 +02003997 default:
3998 ADBG_EXPECT_TRUE(c, false);
3999 goto out;
4000 }
4001
4002 out_size = sizeof(out);
4003 memset(out, 0, sizeof(out));
4004 switch (tv->mode) {
4005 case TEE_MODE_ENCRYPT:
4006 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4007 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02004008 &op, tv->algo, TEE_MODE_ENCRYPT,
4009 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02004010 goto out;
4011
4012 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4013 ta_crypt_cmd_set_operation_key(c, &session, op,
4014 pub_key_handle)))
4015 goto out;
4016
4017 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4018 ta_crypt_cmd_free_transient_object(c, &session,
4019 pub_key_handle)))
4020 goto out;
4021 pub_key_handle = TEE_HANDLE_NULL;
4022
4023 out_enc_size = sizeof(out_enc);
4024 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4025 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
4026 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
4027 &out_enc_size)))
4028 goto out;
4029
4030 /*
4031 * A PS which is random is added when formatting the
4032 * message internally of the algorithm so we can't
4033 * verify against precomputed values, instead we use the
4034 * decrypt operation to see that output is correct.
4035 */
4036
4037 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4038 ta_crypt_cmd_free_operation(c, &session, op)))
4039 goto out;
4040
4041 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4042 ta_crypt_cmd_allocate_operation(c, &session,
4043 &op, tv->algo, TEE_MODE_DECRYPT,
4044 max_key_size)))
4045 goto out;
4046
4047 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4048 ta_crypt_cmd_set_operation_key(c, &session, op,
4049 priv_key_handle)))
4050 goto out;
4051
4052 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4053 ta_crypt_cmd_free_transient_object(c, &session,
4054 priv_key_handle)))
4055 goto out;
4056
4057 priv_key_handle = TEE_HANDLE_NULL;
4058
4059 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4060 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4061 NULL, 0, out_enc, out_enc_size, out,
4062 &out_size)))
4063 goto out;
4064
4065 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4066 out_size);
4067 break;
4068
4069 case TEE_MODE_DECRYPT:
4070 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4071 ta_crypt_cmd_allocate_operation(c, &session,
4072 &op, tv->algo, TEE_MODE_DECRYPT,
4073 max_key_size)))
4074 goto out;
4075
4076 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4077 ta_crypt_cmd_set_operation_key(c, &session, op,
4078 priv_key_handle)))
4079 goto out;
4080
4081 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4082 ta_crypt_cmd_free_transient_object(c, &session,
4083 priv_key_handle)))
4084 goto out;
4085
4086 priv_key_handle = TEE_HANDLE_NULL;
4087
4088 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4089 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4090 NULL, 0, tv->ctx, tv->ctx_len, out,
4091 &out_size)))
4092 goto out;
4093
4094 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4095 out_size);
4096 break;
4097
4098 case TEE_MODE_VERIFY:
4099 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4100 ta_crypt_cmd_allocate_operation(c, &session,
4101 &op, tv->algo, TEE_MODE_VERIFY,
4102 max_key_size)))
4103 goto out;
4104
4105 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4106 ta_crypt_cmd_set_operation_key(c, &session, op,
4107 pub_key_handle)))
4108 goto out;
4109
4110 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4111 ta_crypt_cmd_free_transient_object(c, &session,
4112 pub_key_handle)))
4113 goto out;
4114
4115 pub_key_handle = TEE_HANDLE_NULL;
4116
4117 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4118 ta_crypt_cmd_asymmetric_verify(c, &session, op,
4119 algo_params, num_algo_params, ptx_hash,
4120 ptx_hash_size, tv->ctx, tv->ctx_len)))
4121 goto out;
4122 break;
4123
4124 case TEE_MODE_SIGN:
4125 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4126 ta_crypt_cmd_allocate_operation(c, &session,
4127 &op, tv->algo, TEE_MODE_SIGN,
4128 max_key_size)))
4129 goto out;
4130
4131 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4132 ta_crypt_cmd_set_operation_key(c, &session, op,
4133 priv_key_handle)))
4134 goto out;
4135
4136 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4137 ta_crypt_cmd_free_transient_object(c, &session,
4138 priv_key_handle)))
4139 goto out;
4140
4141 priv_key_handle = TEE_HANDLE_NULL;
4142
4143 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4144 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4145 algo_params, num_algo_params, ptx_hash,
4146 ptx_hash_size, out, &out_size)))
4147 goto out;
4148
4149 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4150 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004151 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004152 tv->algo == TEE_ALG_DSA_SHA224 ||
4153 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004154 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4155 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004156 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4157 ta_crypt_cmd_free_operation(c, &session,
4158 op)))
4159 goto out;
4160 /*
4161 * The salt or K is random so we can't verify
4162 * signing against precomputed values, instead
4163 * we use the verify operation to see that
4164 * output is correct.
4165 */
4166 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4167 ta_crypt_cmd_allocate_operation(c,
4168 &session, &op, tv->algo,
4169 TEE_MODE_VERIFY, max_key_size)))
4170 goto out;
4171
4172 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4173 ta_crypt_cmd_set_operation_key(c,
4174 &session, op, pub_key_handle)))
4175 goto out;
4176
4177 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4178 ta_crypt_cmd_free_transient_object(c,
4179 &session, pub_key_handle)))
4180 goto out;
4181
4182 pub_key_handle = TEE_HANDLE_NULL;
4183
4184 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4185 ta_crypt_cmd_asymmetric_verify(c,
4186 &session, op, algo_params,
4187 num_algo_params, ptx_hash,
4188 ptx_hash_size, out, out_size)))
4189 goto out;
4190 } else {
4191 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4192 tv->ctx_len, out,
4193 out_size);
4194 }
4195 break;
4196
4197 default:
4198 break;
4199 }
4200
4201 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4202 ta_crypt_cmd_free_operation(c, &session, op)))
4203 goto out;
4204
4205 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4206 ta_crypt_cmd_free_transient_object(c, &session,
4207 pub_key_handle)))
4208 goto out;
4209 pub_key_handle = TEE_HANDLE_NULL;
4210
4211 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4212 ta_crypt_cmd_free_transient_object(c, &session,
4213 priv_key_handle)))
4214 goto out;
4215
4216 priv_key_handle = TEE_HANDLE_NULL;
4217
4218 Do_ADBG_EndSubCase(c, NULL);
4219 }
4220out:
4221 TEEC_CloseSession(&session);
4222}
4223
4224#define KEY_ATTR(x, y) { #x, (x), y }
4225
4226struct key_attrs {
4227 const char *name;
4228 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004229 /*
4230 * When keysize_check != 0: size of attribute is checked
4231 * Expected value is key_size bits except for DH in which case it is
4232 * the value of keysize_check.
4233 */
4234 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004235};
4236
4237static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4238 TEE_ObjectHandle key, uint32_t key_size,
4239 struct key_attrs *attrs, size_t num_attrs)
4240{
4241 uint8_t out[2048];
4242 size_t out_size;
4243 size_t n;
4244 size_t m;
4245
4246 for (m = 0; m < num_attrs; m++) {
4247 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4248 out_size = sizeof(out);
4249 memset(out, 0, sizeof(out));
4250 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4251 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4252 key, attrs[m].attr, out, &out_size)))
4253 return false;
4254
4255 if (attrs[m].keysize_check)
4256 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4257 key_size / 8);
4258
4259 if (out_size > 0) {
4260 /* Check that buffer isn't all zeroes */
4261 for (n = 0; n < out_size; n++)
4262 if (out[n] != 0)
4263 break;
4264 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4265 out_size))
4266 return false;
4267 }
4268 } else {
4269 uint32_t a;
4270 uint32_t b;
4271
4272 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4273 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4274 attrs[m].attr, &a, &b)))
4275 return false;
4276 }
4277 }
4278 return true;
4279}
4280
4281static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4282 TEE_ObjectHandle key, uint32_t key_size)
4283{
4284 const struct key_attrs attrs[] = {
4285 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4286 };
4287
4288 return test_keygen_attributes(c, s, key, key_size,
4289 (struct key_attrs *)&attrs,
4290 ARRAY_SIZE(attrs));
4291}
4292
4293
4294static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4295 TEE_ObjectHandle key, uint32_t key_size)
4296{
4297 const struct key_attrs attrs[] = {
4298 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4299 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4300 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4301 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4302 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4303 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4304 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4305 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4306 };
4307
4308 return test_keygen_attributes(c, s, key, key_size,
4309 (struct key_attrs *)&attrs,
4310 ARRAY_SIZE(attrs));
4311}
4312
Pascal Brande61133f2015-07-08 15:38:37 +02004313static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4314 TEE_ObjectHandle key, uint32_t key_size)
4315{
4316 const struct key_attrs attrs[] = {
4317 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4318 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4319 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4320 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4321 };
4322
4323 return test_keygen_attributes(c, s, key, key_size,
4324 (struct key_attrs *)&attrs,
4325 ARRAY_SIZE(attrs));
4326}
4327
Pascal Brandc639ac82015-07-02 08:53:34 +02004328static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004329 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004330{
4331 const struct key_attrs attrs[] = {
4332 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4333 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4334 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4335 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4336 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4337 };
4338
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004339 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004340 (struct key_attrs *)&attrs,
4341 ARRAY_SIZE(attrs));
4342}
4343
4344static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4345 TEE_ObjectHandle key, uint32_t key_size)
4346{
4347 const struct key_attrs attrs[] = {
4348 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4349 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4350 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4351 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4352 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4353 };
4354
4355 return test_keygen_attributes(c, s, key, key_size,
4356 (struct key_attrs *)&attrs,
4357 ARRAY_SIZE(attrs));
4358}
4359
4360static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4361 uint32_t key_type, uint32_t check_keysize,
4362 uint32_t key_size,
4363 TEE_Attribute *params, size_t param_count)
4364{
4365 TEE_ObjectHandle key;
4366 bool ret_val = true;
4367
4368 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4369 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4370 &key)))
4371 return false;
4372
4373 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4374 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4375 param_count)))
4376 return false;
4377
4378 switch (key_type) {
4379 case TEE_TYPE_DES:
4380 case TEE_TYPE_DES3:
4381 ret_val = ADBG_EXPECT_TRUE(c,
4382 test_secret_value(c, s, key,
4383 key_size + key_size / 7));
4384 break;
4385 case TEE_TYPE_AES:
4386 case TEE_TYPE_HMAC_MD5:
4387 case TEE_TYPE_HMAC_SHA1:
4388 case TEE_TYPE_HMAC_SHA224:
4389 case TEE_TYPE_HMAC_SHA256:
4390 case TEE_TYPE_HMAC_SHA384:
4391 case TEE_TYPE_HMAC_SHA512:
4392 case TEE_TYPE_GENERIC_SECRET:
4393 ret_val = ADBG_EXPECT_TRUE(c,
4394 test_secret_value(c, s, key, key_size));
4395 break;
4396
4397 case TEE_TYPE_RSA_KEYPAIR:
4398 ret_val = ADBG_EXPECT_TRUE(c,
4399 test_rsa_key_pair(c, s, key, key_size));
4400 break;
4401
Pascal Brande61133f2015-07-08 15:38:37 +02004402 case TEE_TYPE_ECDSA_KEYPAIR:
4403 case TEE_TYPE_ECDH_KEYPAIR:
4404 ret_val = ADBG_EXPECT_TRUE(c,
4405 test_ecc_key_pair(c, s, key, key_size));
4406 break;
4407
Pascal Brandc639ac82015-07-02 08:53:34 +02004408 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004409 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004410 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004411 break;
4412
4413 case TEE_TYPE_DSA_KEYPAIR:
4414 ret_val = ADBG_EXPECT_TRUE(c,
4415 test_dsa_key_pair(c, s, key, key_size));
4416 break;
4417
4418 default:
4419 ret_val = false;
4420 break;
4421 }
4422
4423 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4424 ta_crypt_cmd_free_transient_object(c, s, key)))
4425 return false;
4426
4427 return ret_val;
4428}
4429
4430static void xtest_test_keygen_noparams(ADBG_Case_t *c, TEEC_Session *session)
4431{
4432 size_t n;
4433 uint32_t key_size;
4434 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004435 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004436 const char *name;
4437 uint32_t key_type;
4438 uint32_t quanta;
4439 uint32_t min_size;
4440 uint32_t max_size;
4441 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004442 { 0, "AES", TEE_TYPE_AES, 64, 128,
Pascal Brandc639ac82015-07-02 08:53:34 +02004443 256 /* valid sizes 128, 192, 256 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004444 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4445 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
Pascal Brandc639ac82015-07-02 08:53:34 +02004446 168 /* valid sizes 112, 168 */ },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004447 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4448 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4449 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4450 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4451 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4452 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4453 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4454 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004455
4456 /* New tests added to check non-regression of issue #5398 */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004457 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4458 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4459 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4460 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4461 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4462 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4463 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
Pascal Brandc639ac82015-07-02 08:53:34 +02004464 };
4465
4466 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
4467 uint32_t min_size = key_types[n].min_size;
4468 uint32_t max_size = key_types[n].max_size;
4469 uint32_t quanta = key_types[n].quanta;
4470
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004471 if (key_types[n].level > level)
4472 continue;
4473
Pascal Brandc639ac82015-07-02 08:53:34 +02004474 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4475
4476 for (key_size = min_size; key_size <= max_size;
4477 key_size += quanta) {
4478 if (!ADBG_EXPECT_TRUE(c,
4479 generate_and_test_key(c, session, key_types
4480 [n].key_type, 1, key_size, NULL, 0)))
4481 break;
4482 }
4483
4484 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4485 }
4486}
4487
4488static void xtest_test_keygen_dh(ADBG_Case_t *c, TEEC_Session *session)
4489{
4490 size_t n;
4491 size_t param_count;
4492 /*
4493 * Note that the key size parameter is not used when creating the keys
4494 * but specifying these sizes make it possible to test the expected size
4495 * of the private value. This also means that the keysize must match the
4496 * size of p or what is specified in private_bits or the equvivalent
4497 * size of the subprime parameter.
4498 */
4499 TEE_Attribute params[4];
4500
4501#define XTEST_DH_GK_DATA(vect) \
4502 ARRAY(vect ## _p), \
4503 ARRAY(vect ## _g), \
4504 &vect ## _private_bits, \
4505 0, 0
4506#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4507 ARRAY(vect ## _p), \
4508 ARRAY(vect ## _g), \
4509 &vect ## _private_bits, \
4510 ARRAY(vect ## _subprime)
4511 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004512 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004513 uint32_t key_size;
4514 const uint8_t *p;
4515 size_t p_len;
4516 const uint8_t *g;
4517 size_t g_len;
4518 const uint32_t *private_bits;
4519 const uint8_t *subprime;
4520 size_t subprime_len;
4521 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004522 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004523 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004524 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004525 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004526 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004527 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004528 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004529 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004530 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004531 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004532 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004533 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004534 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004535 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004536 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004537 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004538 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004539 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004540 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004541 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004542 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004543 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004544 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004545 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004546 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004547 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004548 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004549 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004550 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004551 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004552 };
4553
4554
4555 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004556 if (key_types[n].level > level)
4557 continue;
4558
Pascal Brandc639ac82015-07-02 08:53:34 +02004559 Do_ADBG_BeginSubCase(c,
4560 "Generate DH key %d bits - Private bits = %d",
4561 key_types[n].key_size,
4562 *key_types[n].private_bits);
4563 param_count = 0;
4564
4565 xtest_add_attr(&param_count, params,
4566 TEE_ATTR_DH_PRIME,
4567 key_types[n].p, key_types[n].p_len);
4568
4569 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4570 key_types[n].g, key_types[n].g_len);
4571
4572 if (key_types[n].private_bits != 0) {
4573 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4574
4575 params[param_count].content.value.a =
4576 *key_types[n].private_bits;
4577
4578 params[param_count].content.value.b = 0;
4579 param_count++;
4580 }
4581
4582 if (key_types[n].subprime != 0) {
4583 xtest_add_attr(&param_count, params,
4584 TEE_ATTR_DH_SUBPRIME,
4585 key_types[n].subprime,
4586 key_types[n].subprime_len);
4587 }
4588
4589 if (!ADBG_EXPECT_TRUE(c,
4590 generate_and_test_key(c, session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004591 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004592 key_types[n]. key_size, params, param_count)))
4593 break;
4594
4595 Do_ADBG_EndSubCase(c,
4596 "Generate DH key %d bits - Private bits = %d",
4597 key_types[n].key_size,
4598 *key_types[n].private_bits);
4599 }
4600}
4601
4602static void xtest_test_keygen_dsa(ADBG_Case_t *c, TEEC_Session *session)
4603{
4604 size_t n;
4605 size_t param_count;
4606 TEE_Attribute params[4];
4607
4608#define XTEST_DSA_GK_DATA(vect) \
4609 ARRAY(vect ## _p), \
4610 ARRAY(vect ## _g), \
4611 ARRAY(vect ## _q)
4612 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004613 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004614 uint32_t key_size;
4615 const uint8_t *prime;
4616 size_t prime_len;
4617 const uint8_t *base;
4618 size_t base_len;
4619 const uint8_t *sub_prime;
4620 size_t sub_prime_len;
4621 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004622 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4623 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4624 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4625 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4626 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4627 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4628 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4629 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4630 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4631 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004632 };
4633
4634 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004635 if (key_types[n].level > level)
4636 continue;
4637
Pascal Brandc639ac82015-07-02 08:53:34 +02004638 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4639 key_types[n].key_size);
4640 param_count = 0;
4641
4642
4643 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4644 key_types[n].prime, key_types[n].prime_len);
4645
4646 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4647 key_types[n].sub_prime,
4648 key_types[n].sub_prime_len);
4649
4650 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4651 key_types[n].base, key_types[n].base_len);
4652
4653 if (!ADBG_EXPECT_TRUE(c,
4654 generate_and_test_key(c, session, TEE_TYPE_DSA_KEYPAIR,
4655 1, key_types[n]. key_size, params,
4656 param_count)))
4657 break;
4658
4659 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4660 key_types[n].key_size);
4661 }
4662}
4663
Pascal Brande61133f2015-07-08 15:38:37 +02004664static void xtest_test_keygen_ecc(ADBG_Case_t *c, TEEC_Session *session)
4665{
4666 size_t n;
4667 size_t param_count;
4668 TEE_Attribute params[4];
4669
4670 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004671 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004672 const char *name;
4673 uint32_t algo;
4674 uint32_t curve;
4675 uint32_t key_size;
4676 } key_types[] = {
4677 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004678 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4679 192 },
4680 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4681 224 },
4682 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4683 256 },
4684 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4685 384 },
4686 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4687 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004688
4689 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004690 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4691 192 },
4692 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4693 224 },
4694 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4695 256 },
4696 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4697 384 },
4698 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4699 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004700 };
4701
4702 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004703 if (key_types[n].level > level)
4704 continue;
4705
Pascal Brande61133f2015-07-08 15:38:37 +02004706 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4707 param_count = 0;
4708
4709 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4710 key_types[n].curve, 0);
4711
4712 if (!ADBG_EXPECT_TRUE(c,
4713 generate_and_test_key(c, session, key_types[n].algo,
4714 0, key_types[n].key_size, params,
4715 param_count)))
4716 break;
4717
4718 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4719 }
4720}
4721
Pascal Brandc639ac82015-07-02 08:53:34 +02004722static void xtest_tee_test_4007(ADBG_Case_t *c)
4723{
4724 TEEC_Session session = { 0 };
4725 uint32_t ret_orig;
4726
4727 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4728 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4729 &ret_orig)))
4730 return;
4731
4732 xtest_test_keygen_noparams(c, &session);
4733
4734 xtest_test_keygen_dh(c, &session);
4735
4736 xtest_test_keygen_dsa(c, &session);
4737
Pascal Brande61133f2015-07-08 15:38:37 +02004738 xtest_test_keygen_ecc (c, &session);
4739
Pascal Brandc639ac82015-07-02 08:53:34 +02004740 TEEC_CloseSession(&session);
4741}
4742
4743static void xtest_tee_test_4008(ADBG_Case_t *c)
4744{
4745 TEEC_Session session = { 0 };
4746 uint32_t ret_orig;
4747 TEE_OperationHandle op;
4748 TEE_ObjectHandle key_handle;
4749 TEE_ObjectHandle sv_handle;
4750 TEE_Attribute params[4];
4751 size_t param_count = 0;
4752 uint8_t out[2048];
4753 size_t out_size;
4754
4755 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4756 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4757 &ret_orig)))
4758 return;
4759
4760 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4761
4762 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4763 ta_crypt_cmd_allocate_operation(c, &session, &op,
4764 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4765 derive_key_max_keysize)))
4766 goto out;
4767
4768 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4769 ta_crypt_cmd_allocate_transient_object(c, & session,
4770 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4771 &key_handle)))
4772 goto out;
4773
4774 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4775 ARRAY(derive_key_dh_prime));
4776
4777 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4778 ARRAY(derive_key_dh_base));
4779
4780 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4781 ARRAY(derive_key_dh_public_value));
4782
4783 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4784 ARRAY(derive_key_dh_private_value));
4785
4786 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4787 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4788 params, param_count)))
4789 goto out;
4790
4791 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4792 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4793 goto out;
4794
4795 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4796 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4797 goto out;
4798
4799 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4800 ta_crypt_cmd_allocate_transient_object(c, &session,
4801 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4802 &sv_handle)))
4803 goto out;
4804
Pascal Brand2b92b642015-07-16 13:29:42 +02004805 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004806 param_count = 0;
4807
4808 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4809 ARRAY(derive_key_dh_public_value_2));
4810
4811 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4812 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4813 param_count)))
4814 goto out;
4815
4816 out_size = sizeof(out);
4817 memset(out, 0, sizeof(out));
4818 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4819 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4820 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4821 goto out;
4822
4823 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4824 sizeof(derive_key_dh_shared_secret), out,
4825 out_size))
4826 goto out;
4827
4828 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4829 ta_crypt_cmd_free_operation(c, &session, op)))
4830 goto out;
4831
4832 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4833 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4834 goto out;
4835out:
4836 Do_ADBG_EndSubCase(c, "Derive DH key success");
4837 TEEC_CloseSession(&session);
4838}
Pascal Brand2b92b642015-07-16 13:29:42 +02004839
4840static void xtest_tee_test_4009(ADBG_Case_t *c)
4841{
4842 TEEC_Session session = { 0 };
4843 uint32_t ret_orig;
4844 TEE_OperationHandle op;
4845 TEE_ObjectHandle key_handle;
4846 TEE_ObjectHandle sv_handle;
4847 TEE_Attribute params[4];
4848 size_t param_count = 0;
4849 uint8_t out[2048];
4850 size_t out_size;
4851 uint32_t size_bytes;
Peng Fane13ad9b2015-07-21 11:46:26 +08004852 uint32_t i;
Pascal Brand2b92b642015-07-16 13:29:42 +02004853 struct derive_key_ecdh_t *pt;
4854
4855 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4856 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4857 &ret_orig)))
4858 return;
4859
4860 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
4861 pt = &derive_key_ecdh[i];
4862
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02004863 if (pt->level > level)
4864 continue;
4865
Pascal Brand2b92b642015-07-16 13:29:42 +02004866 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
4867 pt->algo);
4868 size_bytes = (pt->keysize + 7) / 8;
4869 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4870 ta_crypt_cmd_allocate_operation(c, &session, &op,
4871 pt->algo,
4872 TEE_MODE_DERIVE, pt->keysize)))
4873 goto out;
4874
4875 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4876 ta_crypt_cmd_allocate_transient_object(c, & session,
4877 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
4878 &key_handle)))
4879 goto out;
4880
4881 param_count = 0;
4882 xtest_add_attr_value(&param_count, params,
4883 TEE_ATTR_ECC_CURVE, pt->curve, 0);
4884 xtest_add_attr(&param_count, params,
4885 TEE_ATTR_ECC_PRIVATE_VALUE,
4886 pt->private, size_bytes);
4887 /*
4888 * The public value is not used. This is why we provide
4889 * another buffer
4890 */
4891 xtest_add_attr(&param_count, params,
4892 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4893 pt->private, size_bytes);
4894 xtest_add_attr(&param_count, params,
4895 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4896 pt->private, size_bytes);
4897
4898 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4899 ta_crypt_cmd_populate_transient_object(c,
4900 &session,
4901 key_handle, params, param_count)))
4902 goto out;
4903
4904 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4905 ta_crypt_cmd_set_operation_key(c, &session, op,
4906 key_handle)))
4907 goto out;
4908
4909 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4910 ta_crypt_cmd_free_transient_object(c, & session,
4911 key_handle)))
4912 goto out;
4913
4914 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4915 ta_crypt_cmd_allocate_transient_object(c, &session,
4916 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
4917 &sv_handle)))
4918 goto out;
4919
4920 /* reuse but reset params and param-count */
4921 param_count = 0;
4922
4923 xtest_add_attr(&param_count, params,
4924 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4925 pt->public_x, size_bytes);
4926 xtest_add_attr(&param_count, params,
4927 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4928 pt->public_y, size_bytes);
4929
4930 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4931 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
4932 params, param_count)))
4933 goto out;
4934
4935 out_size = sizeof(out);
4936 memset(out, 0, sizeof(out));
4937 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4938 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
4939 sv_handle,
4940 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4941 goto out;
4942
4943 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
4944 out, out_size))
4945 goto out;
4946
4947 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4948 ta_crypt_cmd_free_operation(c, &session, op)))
4949 goto out;
4950
4951 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4952 ta_crypt_cmd_free_transient_object(c, &session,
4953 sv_handle)))
4954 goto out;
4955
4956 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
4957 pt->algo);
4958 }
4959
4960 goto noerror;
4961
4962out:
4963 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
4964
4965noerror:
4966 TEEC_CloseSession(&session);
4967}
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004968
4969static void xtest_tee_test_4010(ADBG_Case_t *c)
4970{
4971 TEEC_Session session = { 0 };
4972 uint32_t ret_orig;
4973 TEE_ObjectHandle o;
4974 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
4975 static const TEE_Attribute attr = {
4976 .attributeID = TEE_ATTR_SECRET_VALUE,
4977 .content.ref.buffer = (void *)large_key,
4978 .content.ref.length = sizeof(large_key),
4979 };
4980
4981 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4982 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4983 &ret_orig)))
4984 return;
4985
4986 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4987 ta_crypt_cmd_allocate_transient_object(c, &session,
4988 TEE_TYPE_HMAC_SHA256, 1024, &o)))
4989 goto out;
4990
4991 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
4992 ta_crypt_cmd_populate_transient_object(c, &session, o,
4993 &attr, 1));
4994
4995out:
4996 TEEC_CloseSession(&session);
4997}
Jens Wiklanderb58916e2016-07-07 15:29:32 +02004998
4999static void xtest_tee_test_4011(ADBG_Case_t *c)
5000{
5001 TEEC_Session s = { 0 };
5002 size_t key_size = 512;
5003 TEE_ObjectHandle key;
5004 TEE_OperationHandle ops;
5005 TEE_OperationHandle opv;
5006 TEE_OperationHandle ope;
5007 TEE_OperationHandle opd;
5008 uint32_t ret_orig;
5009 uint8_t in[TEE_SHA1_HASH_SIZE];
5010 uint8_t out[1024];
5011 uint8_t tmp[1024];
5012 size_t out_size;
5013 size_t tmp_size;
5014 size_t n;
5015 size_t m;
5016 size_t i = 0;
5017
5018 /* Setup session, initialize message to sign, create a keypair */
5019 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
5020 &crypt_user_ta_uuid, NULL, &ret_orig)))
5021 return;
5022 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
5023 &s, in, sizeof(in))))
5024 goto out;
5025 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
5026 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
5027 goto out;
5028 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
5029 key, key_size, NULL, 0)))
5030 goto out;
5031
5032 /* Allocate operations for sign, verify, encrypt and decrypt */
5033 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5034 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
5035 key_size)))
5036 goto out;
5037 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5038 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
5039 key_size)))
5040 goto out;
5041 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5042 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
5043 goto out;
5044 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5045 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
5046 goto out;
5047
5048 /* Assign the keypair to all operations */
5049 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5050 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
5051 goto out;
5052 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5053 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
5054 goto out;
5055 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5056 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
5057 goto out;
5058 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5059 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
5060 goto out;
5061
5062 /*
5063 * The core of the test case is inspired by the one in libtomcrypt:
5064 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
5065 *
5066 * Testcase for Bleichenbacher attack
5067 *
5068 * (1) Create a valid signature
5069 * (2) Check that it can be verified
5070 * (3) Transform the package to fetch plain text (using the encrypt
5071 * operation in GP TEE Internal API)
5072 * (4) Forge the structure of PKCS#1-EMSA encoded data
5073 * (4.1) Search for start and end of the padding string
5074 * (4.2) Move the signature to the front of the padding string
5075 * (4.3) Zero the message until the end
5076 * (5) Transform the package back (using the decrypt operation in
5077 * GP TEE Internal API)
5078 * (6) The result should not be valid if the implementation is robust.
5079 */
5080
5081
5082 for (i = 0; i < 9; i++) {
5083 Do_ADBG_Log("Iteration %zu", i);
5084
5085 /* 1 */
5086 out_size = sizeof(out);
5087 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5088 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
5089 in, sizeof(in), out, &out_size)))
5090 goto out;
5091
5092 /* 2 */
5093 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5094 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5095 in, sizeof(in), out, out_size)))
5096 goto out;
5097
5098 /* 3 */
5099 tmp_size = sizeof(tmp);
5100 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5101 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
5102 out, out_size, tmp, &tmp_size)))
5103 goto out;
5104
5105 /* 4.1 */
5106 for (n = 0; n < tmp_size; n++)
5107 if (tmp[n] == 0xff)
5108 break;
5109 for (m = n + 1; m < tmp_size; m++)
5110 if (tmp[m] != 0xff)
5111 break;
5112 /* 4.2 */
5113 memmove(tmp + n + i, tmp + m, tmp_size - m);
5114 /* 4.3 */
5115 for (n = n + tmp_size - m + i; n < tmp_size; n++)
5116 tmp[n] = 0;
5117
5118 /* 5 */
5119 out_size = sizeof(out);
5120 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5121 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
5122 tmp, tmp_size, out, &out_size)))
5123 goto out;
5124
5125 /* 6 */
5126 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
5127 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5128 in, sizeof(in), out, out_size)))
5129 goto out;
5130 }
5131
5132out:
5133 TEEC_CloseSession(&s);
5134}