blob: 5103a57179bc9d1376781c6d13bd772dda3833b2 [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <stdio.h>
15#include <string.h>
16#include <inttypes.h>
17#include <malloc.h>
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030018#include <time.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020019
20#include "xtest_test.h"
21#include "xtest_helpers.h"
22
23#include <tee_api_types.h>
Gabor Szekely2ad190f2018-09-14 14:05:06 +000024#include <tee_api_defines_extensions.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020025#include <ta_crypt.h>
26#include <utee_defines.h>
27#include <util.h>
28
Jerome Forissier213ca8a2017-03-31 11:27:56 +020029#include <regression_4000_data.h>
Cedric Chaumontc7654962015-09-09 14:56:36 +020030#include <nist/186-2ecdsatestvectors.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020031
32#include <assert.h>
33
Pascal Brandc639ac82015-07-02 08:53:34 +020034static TEEC_Result ta_crypt_cmd_reset_operation(ADBG_Case_t *c, TEEC_Session *s,
35 TEE_OperationHandle oph)
36{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010037 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +020038 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010039 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +020040
41 assert((uintptr_t)oph <= UINT32_MAX);
42 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
43 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
44 TEEC_NONE);
45 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RESET_OPERATION, &op,
46 &ret_orig);
47 if (res != TEEC_SUCCESS) {
48 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
49 ret_orig);
50 }
51 return res;
52}
53
54static TEEC_Result ta_crypt_cmd_copy_operation(ADBG_Case_t *c,
55 TEEC_Session *s,
56 TEE_OperationHandle dst_oph,
57 TEE_OperationHandle src_oph)
58{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010059 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +020060 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010061 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +020062
63 assert((uintptr_t)dst_oph <= UINT32_MAX);
64 op.params[0].value.a = (uint32_t)(uintptr_t)dst_oph;
65
66 assert((uintptr_t)src_oph <= UINT32_MAX);
67 op.params[0].value.b = (uint32_t)(uintptr_t)src_oph;
68 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
69 TEEC_NONE);
70
71 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_COPY_OPERATION, &op,
72 &ret_orig);
73
74 if (res != TEEC_SUCCESS) {
75 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
76 ret_orig);
77 }
78 return res;
79}
80
81static TEEC_Result ta_crypt_cmd_digest_update(ADBG_Case_t *c, TEEC_Session *s,
82 TEE_OperationHandle oph,
83 const void *chunk,
84 size_t chunk_size)
85{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010086 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +020087 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +010088 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +020089
90 assert((uintptr_t)oph <= UINT32_MAX);
91 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
92 op.params[1].tmpref.buffer = (void *)chunk;
93 op.params[1].tmpref.size = chunk_size;
94
95 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
96 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
97 TEEC_NONE);
98
99 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_UPDATE, &op, &ret_orig);
100
101 if (res != TEEC_SUCCESS) {
102 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
103 ret_orig);
104 }
105
106 return res;
107}
108
109static TEEC_Result ta_crypt_cmd_digest_do_final(ADBG_Case_t *c, TEEC_Session *s,
110 TEE_OperationHandle oph,
111 const void *chunk,
112 size_t chunk_len, void *hash,
113 size_t *hash_len)
114{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100115 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200116 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100117 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200118
119 assert((uintptr_t)oph <= UINT32_MAX);
120 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
121
122 op.params[1].tmpref.buffer = (void *)chunk;
123 op.params[1].tmpref.size = chunk_len;
124
125 op.params[2].tmpref.buffer = (void *)hash;
126 op.params[2].tmpref.size = *hash_len;
127
128 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
129 TEEC_MEMREF_TEMP_INPUT,
130 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
131
132 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_DIGEST_DO_FINAL, &op,
133 &ret_orig);
134
135 if (res != TEEC_SUCCESS) {
136 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
137 ret_orig);
138 }
139
140 if (res == TEEC_SUCCESS)
141 *hash_len = op.params[2].tmpref.size;
142
143 return res;
144}
145
146static TEE_Result ta_crypt_cmd_set_operation_key2(ADBG_Case_t *c,
147 TEEC_Session *s,
148 TEE_OperationHandle oph,
149 TEE_ObjectHandle key1,
150 TEE_ObjectHandle key2)
151{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100152 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200153 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100154 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200155
156 assert((uintptr_t)oph <= UINT32_MAX);
157 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
158
159 assert((uintptr_t)key1 <= UINT32_MAX);
160 op.params[0].value.b = (uint32_t)(uintptr_t)key1;
161
162 assert((uintptr_t)key2 <= UINT32_MAX);
163 op.params[1].value.a = (uint32_t)(uintptr_t)key2;
164 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INPUT,
165 TEEC_NONE, TEEC_NONE);
166
167 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_SET_OPERATION_KEY2, &op,
168 &ret_orig);
169
170 if (res != TEEC_SUCCESS) {
171 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
172 ret_orig);
173 }
174
175 return res;
176}
177
178static TEEC_Result ta_crypt_cmd_mac_init(ADBG_Case_t *c, TEEC_Session *s,
179 TEE_OperationHandle oph,
180 const void *iv, size_t iv_len)
181{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100182 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200183 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100184 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200185
186 assert((uintptr_t)oph <= UINT32_MAX);
187 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
188
189 if (iv != NULL) {
190 op.params[1].tmpref.buffer = (void *)iv;
191 op.params[1].tmpref.size = iv_len;
192 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
193 TEEC_MEMREF_TEMP_INPUT,
194 TEEC_NONE, TEEC_NONE);
195 } else {
196 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
197 TEEC_NONE, TEEC_NONE);
198 }
199
200 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_INIT, &op, &ret_orig);
201
202 if (res != TEEC_SUCCESS) {
203 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
204 ret_orig);
205 }
206
207 return res;
208}
209
210static TEEC_Result ta_crypt_cmd_mac_update(ADBG_Case_t *c, TEEC_Session *s,
211 TEE_OperationHandle oph,
212 const void *chunk, size_t chunk_size)
213{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100214 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200215 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100216 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200217
218 assert((uintptr_t)oph <= UINT32_MAX);
219 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
220
221 op.params[1].tmpref.buffer = (void *)chunk;
222 op.params[1].tmpref.size = chunk_size;
223
224 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
225 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
226 TEEC_NONE);
227
228 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_UPDATE, &op, &ret_orig);
229
230 if (res != TEEC_SUCCESS) {
231 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
232 ret_orig);
233 }
234
235 return res;
236}
237
238static TEEC_Result ta_crypt_cmd_mac_final_compute(ADBG_Case_t *c,
239 TEEC_Session *s,
240 TEE_OperationHandle oph,
241 const void *chunk,
242 size_t chunk_len,
243 void *hash,
244 size_t *hash_len)
245{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100246 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200247 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100248 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200249
250 assert((uintptr_t)oph <= UINT32_MAX);
251 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
252
253 op.params[1].tmpref.buffer = (void *)chunk;
254 op.params[1].tmpref.size = chunk_len;
255
256 op.params[2].tmpref.buffer = (void *)hash;
257 op.params[2].tmpref.size = *hash_len;
258
259 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
260 TEEC_MEMREF_TEMP_INPUT,
261 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
262
263 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_MAC_FINAL_COMPUTE, &op,
264 &ret_orig);
265
266 if (res != TEEC_SUCCESS) {
267 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
268 ret_orig);
269 }
270
271 if (res == TEEC_SUCCESS)
272 *hash_len = op.params[2].tmpref.size;
273
274 return res;
275}
276
277static TEEC_Result ta_crypt_cmd_cipher_init(ADBG_Case_t *c, TEEC_Session *s,
278 TEE_OperationHandle oph,
279 const void *iv, size_t iv_len)
280{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100281 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200282 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100283 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200284
285 assert((uintptr_t)oph <= UINT32_MAX);
286 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
287
288 if (iv != NULL) {
289 op.params[1].tmpref.buffer = (void *)iv;
290 op.params[1].tmpref.size = iv_len;
291
292 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
293 TEEC_MEMREF_TEMP_INPUT,
294 TEEC_NONE, TEEC_NONE);
295 } else {
296 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
297 TEEC_NONE, TEEC_NONE);
298 }
299
300 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_INIT, &op, &ret_orig);
301
302 if (res != TEEC_SUCCESS) {
303 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
304 ret_orig);
305 }
306
307 return res;
308}
309
310static TEEC_Result ta_crypt_cmd_cipher_update(ADBG_Case_t *c, TEEC_Session *s,
311 TEE_OperationHandle oph,
312 const void *src, size_t src_len,
313 void *dst, size_t *dst_len)
314{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100315 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200316 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100317 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200318
319 assert((uintptr_t)oph <= UINT32_MAX);
320 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
321
322 op.params[1].tmpref.buffer = (void *)src;
323 op.params[1].tmpref.size = src_len;
324
325 op.params[2].tmpref.buffer = dst;
326 op.params[2].tmpref.size = *dst_len;
327
328 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
329 TEEC_MEMREF_TEMP_INPUT,
330 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
331
332 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_UPDATE, &op, &ret_orig);
333
334 if (res != TEEC_SUCCESS) {
335 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
336 ret_orig);
337 }
338
339 if (res == TEEC_SUCCESS)
340 *dst_len = op.params[2].tmpref.size;
341
342 return res;
343}
344
345static TEEC_Result ta_crypt_cmd_cipher_do_final(ADBG_Case_t *c,
346 TEEC_Session *s,
347 TEE_OperationHandle oph,
348 const void *src,
349 size_t src_len,
350 void *dst,
351 size_t *dst_len)
352{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100353 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200354 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100355 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200356
357 assert((uintptr_t)oph <= UINT32_MAX);
358 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
359
360 op.params[1].tmpref.buffer = (void *)src;
361 op.params[1].tmpref.size = src_len;
362
363 op.params[2].tmpref.buffer = (void *)dst;
364 op.params[2].tmpref.size = *dst_len;
365
366 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
367 TEEC_MEMREF_TEMP_INPUT,
368 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
369
370 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_CIPHER_DO_FINAL, &op,
371 &ret_orig);
372
373 if (res != TEEC_SUCCESS) {
374 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
375 ret_orig);
376 }
377
378 if (res == TEEC_SUCCESS)
379 *dst_len = op.params[2].tmpref.size;
380
381 return res;
382}
383
384static TEEC_Result ta_crypt_cmd_random_number_generate(ADBG_Case_t *c,
385 TEEC_Session *s,
386 void *buf,
387 size_t blen)
388{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100389 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200390 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100391 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200392
393 op.params[0].tmpref.buffer = buf;
394 op.params[0].tmpref.size = blen;
395
396 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE,
397 TEEC_NONE, TEEC_NONE);
398
399 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_RANDOM_NUMBER_GENEREATE, &op,
400 &ret_orig);
401
402 if (res != TEEC_SUCCESS) {
403 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
404 ret_orig);
405 }
406
407 (void)ADBG_EXPECT_COMPARE_UNSIGNED(c, blen, ==,
408 op.params[0].tmpref.size);
409 return res;
410}
411
412static TEEC_Result ta_crypt_cmd_ae_init(ADBG_Case_t *c, TEEC_Session *s,
413 TEE_OperationHandle oph,
414 const void *nonce, size_t nonce_len,
415 size_t tag_len, size_t aad_len,
416 size_t payload_len)
417{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100418 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200419 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100420 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200421
422 assert((uintptr_t)oph <= UINT32_MAX);
423 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
424 op.params[0].value.b = tag_len;
425
426 op.params[1].tmpref.buffer = (void *)nonce;
427 op.params[1].tmpref.size = nonce_len;
428
429 op.params[2].value.a = aad_len;
430 op.params[2].value.b = payload_len;
431
432 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
433 TEEC_MEMREF_TEMP_INPUT,
Jens Wiklander74a42302015-07-07 01:08:41 +0200434 TEEC_VALUE_INPUT, TEEC_NONE);
Pascal Brandc639ac82015-07-02 08:53:34 +0200435
436 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_INIT, &op, &ret_orig);
437
438 if (res != TEEC_SUCCESS) {
439 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
440 ret_orig);
441 }
442 return res;
443}
444
445static TEEC_Result ta_crypt_cmd_ae_update_aad(ADBG_Case_t *c, TEEC_Session *s,
446 TEE_OperationHandle oph,
447 const void *aad, size_t aad_len)
448{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100449 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200450 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100451 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200452
453 assert((uintptr_t)oph <= UINT32_MAX);
454 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
455
456 op.params[1].tmpref.buffer = (void *)aad;
457 op.params[1].tmpref.size = aad_len;
458
459 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
460 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
461 TEEC_NONE);
462
463 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE_AAD, &op, &ret_orig);
464
465 if (res != TEEC_SUCCESS) {
466 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
467 ret_orig);
468 }
469
470 return res;
471}
472
473static TEEC_Result ta_crypt_cmd_ae_update(ADBG_Case_t *c,
474 TEEC_Session *s,
475 TEE_OperationHandle oph,
476 const void *src,
477 size_t src_len,
478 void *dst,
479 size_t *dst_len)
480{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100481 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200482 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100483 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200484
485 assert((uintptr_t)oph <= UINT32_MAX);
486 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
487
488 op.params[1].tmpref.buffer = (void *)src;
489 op.params[1].tmpref.size = src_len;
490
491 op.params[2].tmpref.buffer = (void *)dst;
492 op.params[2].tmpref.size = *dst_len;
493
494 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
495 TEEC_MEMREF_TEMP_INPUT,
496 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
497
498 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_UPDATE, &op, &ret_orig);
499
500 if (res != TEEC_SUCCESS) {
501 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
502 ret_orig);
503 }
504
505 if (res == TEEC_SUCCESS)
506 *dst_len = op.params[2].tmpref.size;
507
508 return res;
509}
510
511static TEEC_Result ta_crypt_cmd_ae_encrypt_final(ADBG_Case_t *c,
512 TEEC_Session *s,
513 TEE_OperationHandle oph,
514 const void *src,
515 size_t src_len, void *dst,
516 size_t *dst_len, void *tag,
517 size_t *tag_len)
518{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100519 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200520 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100521 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200522
523 assert((uintptr_t)oph <= UINT32_MAX);
524 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
525
526 op.params[1].tmpref.buffer = (void *)src;
527 op.params[1].tmpref.size = src_len;
528
529 op.params[2].tmpref.buffer = (void *)dst;
530 op.params[2].tmpref.size = *dst_len;
531
532 op.params[3].tmpref.buffer = (void *)tag;
533 op.params[3].tmpref.size = *tag_len;
534
535 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
536 TEEC_MEMREF_TEMP_INPUT,
537 TEEC_MEMREF_TEMP_OUTPUT,
538 TEEC_MEMREF_TEMP_OUTPUT);
539
540 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_ENCRYPT_FINAL, &op,
541 &ret_orig);
542
543 if (res != TEEC_SUCCESS) {
544 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
545 ret_orig);
546 }
547
548 if (res == TEEC_SUCCESS) {
549 *dst_len = op.params[2].tmpref.size;
550 *tag_len = op.params[3].tmpref.size;
551 }
552
553 return res;
554}
555
556static TEEC_Result ta_crypt_cmd_ae_decrypt_final(ADBG_Case_t *c,
557 TEEC_Session *s,
558 TEE_OperationHandle oph,
559 const void *src, size_t src_len,
560 void *dst, size_t *dst_len,
561 const void *tag, size_t tag_len)
562{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100563 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200564 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100565 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200566
567 assert((uintptr_t)oph <= UINT32_MAX);
568 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
569
570 op.params[1].tmpref.buffer = (void *)src;
571 op.params[1].tmpref.size = src_len;
572
573 op.params[2].tmpref.buffer = dst;
574 op.params[2].tmpref.size = *dst_len;
575
576 op.params[3].tmpref.buffer = (void *)tag;
577 op.params[3].tmpref.size = tag_len;
578
579 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
580 TEEC_MEMREF_TEMP_INPUT,
581 TEEC_MEMREF_TEMP_OUTPUT,
582 TEEC_MEMREF_TEMP_INPUT);
583
584 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_AE_DECRYPT_FINAL, &op,
585 &ret_orig);
586
587 if (res != TEEC_SUCCESS) {
588 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
589 ret_orig);
590 }
591
592 if (res == TEEC_SUCCESS)
593 *dst_len = op.params[2].tmpref.size;
594
595 return res;
596}
597
598static TEEC_Result ta_crypt_cmd_asymmetric_operate(ADBG_Case_t *c,
599 TEEC_Session *s,
600 TEE_OperationHandle oph,
601 uint32_t cmd,
602 const TEE_Attribute *params,
603 uint32_t paramCount,
604 const void *src,
605 size_t src_len,
606 void *dst,
607 size_t *dst_len)
608{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100609 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200610 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100611 uint32_t ret_orig = 0;
612 uint8_t *buf = NULL;
613 size_t blen = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200614
615 res = pack_attrs(params, paramCount, &buf, &blen);
616 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
617 return res;
618
619 assert((uintptr_t)oph <= UINT32_MAX);
620 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
621
622 op.params[1].tmpref.buffer = buf;
623 op.params[1].tmpref.size = blen;
624
625 op.params[2].tmpref.buffer = (void *)src;
626 op.params[2].tmpref.size = src_len;
627
628 op.params[3].tmpref.buffer = dst;
629 op.params[3].tmpref.size = *dst_len;
630
631 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
632 TEEC_MEMREF_TEMP_INPUT,
633 TEEC_MEMREF_TEMP_INPUT,
634 TEEC_MEMREF_TEMP_OUTPUT);
635
636 res = TEEC_InvokeCommand(s, cmd, &op, &ret_orig);
637
638 if (res != TEEC_SUCCESS) {
639 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
640 ret_orig);
641 }
642
643 if (res == TEEC_SUCCESS)
644 *dst_len = op.params[3].tmpref.size;
645
646 free(buf);
647 return res;
648}
649
650static TEEC_Result ta_crypt_cmd_asymmetric_encrypt(ADBG_Case_t *c,
651 TEEC_Session *s,
652 TEE_OperationHandle oph,
653 const TEE_Attribute *params,
654 uint32_t paramCount,
655 const void *src,
656 size_t src_len,
657 void *dst,
658 size_t *dst_len)
659{
660 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
661 TA_CRYPT_CMD_ASYMMETRIC_ENCRYPT,
662 params, paramCount,
663 src, src_len, dst, dst_len);
664}
665
666static TEEC_Result ta_crypt_cmd_asymmetric_decrypt(ADBG_Case_t *c,
667 TEEC_Session *s,
668 TEE_OperationHandle oph,
669 const TEE_Attribute *params,
670 uint32_t paramCount,
671 const void *src,
672 size_t src_len,
673 void *dst,
674 size_t *dst_len)
675{
676 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
677 TA_CRYPT_CMD_ASYMMETRIC_DECRYPT,
678 params, paramCount,
679 src, src_len, dst, dst_len);
680}
681
682static TEEC_Result ta_crypt_cmd_asymmetric_sign(ADBG_Case_t *c,
683 TEEC_Session *s,
684 TEE_OperationHandle oph,
685 const TEE_Attribute *params,
686 uint32_t paramCount,
687 const void *digest,
688 size_t digest_len,
689 void *signature,
690 size_t *signature_len)
691{
692 return ta_crypt_cmd_asymmetric_operate(c, s, oph,
693 TA_CRYPT_CMD_ASYMMETRIC_SIGN_DIGEST, params, paramCount,
694 digest, digest_len, signature, signature_len);
695}
696
697static TEEC_Result ta_crypt_cmd_asymmetric_verify(ADBG_Case_t *c,
698 TEEC_Session *s,
699 TEE_OperationHandle oph,
700 const TEE_Attribute *params,
701 uint32_t paramCount,
702 const void *digest,
703 size_t digest_len,
704 const void *signature,
705 size_t signature_len)
706{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100707 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200708 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100709 uint32_t ret_orig = 0;
710 uint8_t *buf = NULL;
711 size_t blen = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200712
713 res = pack_attrs(params, paramCount, &buf, &blen);
714 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
715 return res;
716
717 assert((uintptr_t)oph <= UINT32_MAX);
718 op.params[0].value.a = (uint32_t)(uintptr_t)oph;
719
720 op.params[1].tmpref.buffer = buf;
721 op.params[1].tmpref.size = blen;
722
723 op.params[2].tmpref.buffer = (void *)digest;
724 op.params[2].tmpref.size = digest_len;
725
726 op.params[3].tmpref.buffer = (void *)signature;
727 op.params[3].tmpref.size = signature_len;
728
729 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
730 TEEC_MEMREF_TEMP_INPUT,
731 TEEC_MEMREF_TEMP_INPUT,
732 TEEC_MEMREF_TEMP_INPUT);
733
734 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_ASYMMETRIC_VERIFY_DIGEST,
735 &op, &ret_orig);
736
737 if (res != TEEC_SUCCESS) {
738 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
739 ret_orig);
740 }
741
742 free(buf);
743 return res;
744}
745
746static TEEC_Result ta_crypt_cmd_get_object_value_attribute(ADBG_Case_t *c,
747 TEEC_Session *s,
748 TEE_ObjectHandle o,
749 uint32_t attr_id,
750 uint32_t *valuea,
751 uint32_t *valueb)
752{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100753 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200754 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100755 uint32_t ret_orig = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200756
757 assert((uintptr_t)o <= UINT32_MAX);
758 op.params[0].value.a = (uint32_t)(uintptr_t)o;
759 op.params[0].value.b = attr_id;
760 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT,
761 TEEC_NONE, TEEC_NONE);
762
763 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GET_OBJECT_VALUE_ATTRIBUTE,
764 &op, &ret_orig);
765
766 if (res != TEEC_SUCCESS) {
767 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
768 ret_orig);
769 }
770
771 if (res == TEEC_SUCCESS) {
772 *valuea = op.params[1].value.a;
773 *valueb = op.params[1].value.b;
774 }
775
776 return res;
777}
778
779static TEEC_Result ta_crypt_cmd_generate_key(ADBG_Case_t *c,
780 TEEC_Session *s,
781 TEE_ObjectHandle o,
782 uint32_t key_size,
783 const TEE_Attribute *params,
784 uint32_t paramCount)
785{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100786 TEEC_Result res = TEEC_ERROR_GENERIC;
Pascal Brandc639ac82015-07-02 08:53:34 +0200787 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100788 uint32_t ret_orig = 0;
789 uint8_t *buf = NULL;
790 size_t blen = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200791
792 res = pack_attrs(params, paramCount, &buf, &blen);
793 if (!ADBG_EXPECT_TEEC_SUCCESS(c, res))
794 return res;
795
796 assert((uintptr_t)o <= UINT32_MAX);
797 op.params[0].value.a = (uint32_t)(uintptr_t)o;
798 op.params[0].value.b = key_size;
799
800 op.params[1].tmpref.buffer = buf;
801 op.params[1].tmpref.size = blen;
802
803 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
804 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
805 TEEC_NONE);
806
807 res = TEEC_InvokeCommand(s, TA_CRYPT_CMD_GENERATE_KEY, &op, &ret_orig);
808
809 if (res != TEEC_SUCCESS) {
810 (void)ADBG_EXPECT_TEEC_ERROR_ORIGIN(c, TEEC_ORIGIN_TRUSTED_APP,
811 ret_orig);
812 }
813
814 free(buf);
815 return res;
816}
817
818static const uint8_t hash_data_md5_in1[] = {
819 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
820};
821
822static const uint8_t hash_data_md5_out1[] = {
823 0x61, 0x12, 0x71, 0x83, 0x70, 0x8d, 0x3a, 0xc7,
824 0xf1, 0x9b, 0x66, 0x06, 0xfc, 0xae, 0x7d, 0xf6
825};
826
827static const uint8_t hash_data_sha1_in1[] = {
828 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
829};
830
831static const uint8_t hash_data_sha1_out1[] = {
832 0x4b, 0x98, 0x92, 0xb6, 0x52, 0x72, 0x14, 0xaf,
833 0xc6, 0x55, 0xb8, 0xaa, 0x52, 0xf4, 0xd2, 0x03,
834 0xc1, 0x5e, 0x7c, 0x9c
835};
836
837static const uint8_t hash_data_sha224_in1[] = {
838 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
839};
840
841static const uint8_t hash_data_sha224_out1[] = {
842 0x08, 0x21, 0x69, 0xf9, 0x77, 0x1b, 0x80, 0x15,
843 0xf3, 0x97, 0xae, 0xde, 0x5b, 0xba, 0xa2, 0x72,
844 0x2d, 0x8f, 0x5c, 0x19, 0xfe, 0xd2, 0xe2, 0x68,
845 0x92, 0x49, 0xd8, 0x44
846};
847
848static const uint8_t hash_data_sha256_in1[] = { 'a', 'b', 'c' };
849
850static const uint8_t hash_data_sha256_out1[] = {
851 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
852 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
853 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
854 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad
855};
856
857static const uint8_t hash_data_sha256_in2[] = { 'e', 'f', 'g' };
858
859static const uint8_t hash_data_sha256_out2[] = {
860 0xd4, 0xff, 0xe8, 0xe9, 0xee, 0x0b, 0x48, 0xeb,
861 0xa7, 0x16, 0x70, 0x61, 0x23, 0xa7, 0x18, 0x7f,
862 0x32, 0xea, 0xe3, 0xbd, 0xcb, 0x0e, 0x77, 0x63,
863 0xe4, 0x1e, 0x53, 0x32, 0x67, 0xbd, 0x8a, 0x53
864};
865
866
867static const uint8_t hash_data_sha384_in1[] = {
868 'a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
869};
870
871static const uint8_t hash_data_sha384_out1[] = {
872 0x4c, 0xab, 0x80, 0x9d, 0x96, 0x84, 0x01, 0x47,
873 0x67, 0x0a, 0xc1, 0x7a, 0xb6, 0xb9, 0xf7, 0x6e,
874 0x35, 0xa6, 0xb0, 0x8c, 0xf5, 0x2a, 0x3d, 0x64,
875 0x9a, 0x8c, 0x7e, 0x0c, 0x55, 0x45, 0xd3, 0x7d,
876 0x1f, 0x7f, 0x28, 0x34, 0x96, 0x14, 0x44, 0x2a,
877 0xf5, 0x98, 0xa2, 0x95, 0x24, 0x76, 0x53, 0x97
878};
879
880static const uint8_t hash_data_sha512_in1[] = {
881 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
882};
883
884static const uint8_t hash_data_sha512_out1[] = {
885 0x20, 0xd8, 0x64, 0x4f, 0x54, 0xa2, 0x5f, 0x6f,
886 0x0a, 0xf9, 0xd5, 0x27, 0x7d, 0x17, 0xa8, 0x99,
887 0x4c, 0x64, 0x3f, 0xd0, 0xf3, 0x83, 0x36, 0xee,
888 0x93, 0x12, 0x55, 0xcd, 0x2e, 0x12, 0x34, 0xa0,
889 0xc2, 0xaa, 0xf9, 0xbb, 0x15, 0xc5, 0xe9, 0xfa,
890 0xf7, 0xa7, 0xda, 0xb8, 0x2f, 0x72, 0xa0, 0x47,
891 0xe3, 0x02, 0x04, 0xe8, 0xa0, 0x35, 0x0c, 0x96,
892 0x26, 0xd1, 0xcb, 0x8b, 0x47, 0x45, 0x25, 0xd0
893};
894
895struct xtest_hash_case {
896 uint32_t algo;
897 size_t in_incr;
898 const uint8_t *in;
899 size_t in_len;
900 const uint8_t *out;
901 size_t out_len;
902};
903
904#define XTEST_HASH_CASE(algo, in_incr, in, out) \
905 { (algo), (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out) }
906
907static const struct xtest_hash_case hash_cases[] = {
908 XTEST_HASH_CASE(TEE_ALG_MD5, 6, hash_data_md5_in1,
909 hash_data_md5_out1),
910 XTEST_HASH_CASE(TEE_ALG_SHA1, 3, hash_data_sha1_in1,
911 hash_data_sha1_out1),
912 XTEST_HASH_CASE(TEE_ALG_SHA224, 7, hash_data_sha224_in1,
913 hash_data_sha224_out1),
914 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in1,
915 hash_data_sha256_out1),
916 XTEST_HASH_CASE(TEE_ALG_SHA256, 1, hash_data_sha256_in2,
917 hash_data_sha256_out2),
918 XTEST_HASH_CASE(TEE_ALG_SHA384, 1, hash_data_sha384_in1,
919 hash_data_sha384_out1),
920 XTEST_HASH_CASE(TEE_ALG_SHA512, 1, hash_data_sha512_in1,
921 hash_data_sha512_out1),
922};
923
924static void xtest_tee_test_4001(ADBG_Case_t *c)
925{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100926 TEEC_Session session = { };
927 uint32_t ret_orig = 0;
928 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200929
930 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
931 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
932 &ret_orig)))
933 return;
934
935
936 for (n = 0; n < ARRAY_SIZE(hash_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +0100937 TEE_OperationHandle op1 = TEE_HANDLE_NULL;
938 TEE_OperationHandle op2 = TEE_HANDLE_NULL;
939 uint8_t out[64] = { };
940 size_t out_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +0200941
942 Do_ADBG_BeginSubCase(c, "Hash case %d algo 0x%x",
943 (int)n, (unsigned int)hash_cases[n].algo);
944
945 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
946 ta_crypt_cmd_allocate_operation(c, &session, &op1,
947 hash_cases[n].algo,
948 TEE_MODE_DIGEST, 0)))
949 goto out;
950
951 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
952 ta_crypt_cmd_allocate_operation(c, &session, &op2,
953 hash_cases[n].algo,
954 TEE_MODE_DIGEST, 0)))
955 goto out;
956
957 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
958 ta_crypt_cmd_digest_update(c, &session, op1,
959 hash_cases[n].in,
960 hash_cases[n].in_incr)))
961 goto out;
962
963 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
964 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
965 goto out;
966
967 out_size = sizeof(out);
968 memset(out, 0, sizeof(out));
969 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
970 ta_crypt_cmd_digest_do_final(c, &session, op2,
971 hash_cases[n].in + hash_cases[n].in_incr,
972 hash_cases[n].in_len - hash_cases[n].in_incr,
973 out, &out_size)))
974 goto out;
975
976 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
977 hash_cases[n].out_len, out, out_size);
978
979 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
980 ta_crypt_cmd_reset_operation(c, &session, op1)))
981 goto out;
982
983 out_size = sizeof(out);
984 memset(out, 0, sizeof(out));
985 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
986 ta_crypt_cmd_digest_do_final(c, &session, op1,
987 hash_cases[n].in,
988 hash_cases[n].in_len, out,
989 &out_size)))
990 goto out;
991
992 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
993 hash_cases[n].out_len, out, out_size);
994
Jerome Forissier1e05e262015-07-29 16:09:07 +0200995 /*
996 * Invoke TEE_DigestDoFinal() a second time to check that state
997 * was properly reset
998 */
999 out_size = sizeof(out);
1000 memset(out, 0, sizeof(out));
1001 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1002 ta_crypt_cmd_digest_do_final(c, &session, op1,
1003 hash_cases[n].in,
1004 hash_cases[n].in_len, out,
1005 &out_size)))
1006 goto out;
1007
1008 (void)ADBG_EXPECT_BUFFER(c, hash_cases[n].out,
1009 hash_cases[n].out_len, out, out_size);
1010
Pascal Brandc639ac82015-07-02 08:53:34 +02001011 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1012 ta_crypt_cmd_free_operation(c, &session, op1)))
1013 goto out;
1014
1015 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1016 ta_crypt_cmd_free_operation(c, &session, op2)))
1017 goto out;
1018
1019 Do_ADBG_EndSubCase(c, NULL);
1020 }
1021
1022out:
1023 TEEC_CloseSession(&session);
1024}
Jens Wiklander14f48872018-06-29 15:30:13 +02001025ADBG_CASE_DEFINE(regression, 4001, xtest_tee_test_4001,
1026 "Test TEE Internal API hash operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02001027
1028static const uint8_t mac_data_md5_key1[10] = {
1029 0x6B, 0x65, 0x79, /* key */
1030};
1031
1032static const uint8_t mac_data_md5_in1[] = {
1033 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1034 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1035 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1036 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1037 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1038 0x64, 0x6F, 0x67, /* dog */
1039};
1040
1041static const uint8_t mac_data_md5_out1[] = {
1042 0x80, 0x07, 0x07, 0x13, 0x46, 0x3e, 0x77, 0x49,
1043 0xb9, 0x0c, 0x2d, 0xc2, 0x49, 0x11, 0xe2, 0x75
1044};
1045
1046
1047/* generated with scripts/digest_hmac.pl */
1048static const uint8_t mac_data_sha1_key1[10] = {
1049 0x6B, 0x65, 0x79, /* key */
1050};
1051
1052static const uint8_t mac_data_sha1_in1[] = {
1053 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1054 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1055 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1056 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1057 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1058 0x64, 0x6F, 0x67, /* dog */
1059};
1060
1061static const uint8_t mac_data_sha1_out1[] = {
1062 0xDE, 0x7C, 0x9B, 0x85, 0xB8, 0xB7, 0x8A, 0xA6, /* .|...... */
1063 0xBC, 0x8A, 0x7A, 0x36, 0xF7, 0x0A, 0x90, 0x70, /* ..z6...p */
1064 0x1C, 0x9D, 0xB4, 0xD9, /* .... */
1065};
1066
1067static const uint8_t mac_data_sha224_key1[24] = {
1068 0x6B, 0x65, 0x79, /* key */
1069};
1070
1071static const uint8_t mac_data_sha224_in1[] = {
1072 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1073 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1074 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1075 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1076 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1077 0x64, 0x6F, 0x67, /* dog */
1078};
1079
1080static const uint8_t mac_data_sha224_out1[] = {
1081 0x88, 0xFF, 0x8B, 0x54, 0x67, 0x5D, 0x39, 0xB8, /* ...Tg]9. */
1082 0xF7, 0x23, 0x22, 0xE6, 0x5F, 0xF9, 0x45, 0xC5, /* .#"._.E. */
1083 0x2D, 0x96, 0x37, 0x99, 0x88, 0xAD, 0xA2, 0x56, /* -.7....V */
1084 0x39, 0x74, 0x7E, 0x69, /* 9t~i */
1085};
1086
1087
1088static const uint8_t mac_data_sha256_key1[24] = {
1089 'Q', 'W', 'E', 'R', 'T', 'Y'
1090};
1091
1092static const uint8_t mac_data_sha256_in1[] = { 'a', 'b', 'c' };
1093
1094static const uint8_t mac_data_sha256_out1[] = {
1095 0xee, 0x2e, 0x5d, 0x9b, 0x51, 0xe2, 0x9c, 0x1d,
1096 0x49, 0xe9, 0xae, 0x6f, 0x0a, 0xcc, 0x15, 0x18,
1097 0xde, 0x1e, 0xa3, 0x88, 0x8e, 0xee, 0x48, 0xbb,
1098 0x82, 0x77, 0xe9, 0x09, 0x74, 0x4b, 0xa2, 0xf2
1099};
1100
1101/* generated with scripts/digest_hmac.pl */
1102static const uint8_t mac_data_sha256_key2[24] = {
1103 0x6B, 0x65, 0x79, /* key */
1104};
1105
1106static const uint8_t mac_data_sha256_in2[] = {
1107 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1108 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1109 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1110 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1111 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1112 0x64, 0x6F, 0x67, /* dog */
1113};
1114
1115static const uint8_t mac_data_sha256_out2[] = {
1116 0xF7, 0xBC, 0x83, 0xF4, 0x30, 0x53, 0x84, 0x24, /* ....0S.$ */
1117 0xB1, 0x32, 0x98, 0xE6, 0xAA, 0x6F, 0xB1, 0x43, /* .2...o.C */
1118 0xEF, 0x4D, 0x59, 0xA1, 0x49, 0x46, 0x17, 0x59, /* .MY.IF.Y */
1119 0x97, 0x47, 0x9D, 0xBC, 0x2D, 0x1A, 0x3C, 0xD8, /* .G..-.<. */
1120};
1121
1122static const uint8_t mac_data_sha384_key1[32] = {
1123 0x6B, 0x65, 0x79, /* key */
1124};
1125
1126static const uint8_t mac_data_sha384_in1[] = {
1127 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1128 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1129 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1130 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1131 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1132 0x64, 0x6F, 0x67, /* dog */
1133};
1134
1135static const uint8_t mac_data_sha384_out1[] = {
1136 0xD7, 0xF4, 0x72, 0x7E, 0x2C, 0x0B, 0x39, 0xAE, /* ..r~, .9. */
1137 0x0F, 0x1E, 0x40, 0xCC, 0x96, 0xF6, 0x02, 0x42, /* ..@....B */
1138 0xD5, 0xB7, 0x80, 0x18, 0x41, 0xCE, 0xA6, 0xFC, /* ....A... */
1139 0x59, 0x2C, 0x5D, 0x3E, 0x1A, 0xE5, 0x07, 0x00, /* Y, ]>.... */
1140 0x58, 0x2A, 0x96, 0xCF, 0x35, 0xE1, 0xE5, 0x54, /* X...5..T */
1141 0x99, 0x5F, 0xE4, 0xE0, 0x33, 0x81, 0xC2, 0x37, /* ._..3..7 */
1142};
1143
1144static const uint8_t mac_data_sha512_key1[32] = {
1145 0x6B, 0x65, 0x79, /* key */
1146};
1147
1148static const uint8_t mac_data_sha512_in1[] = {
1149 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, /* The quic */
1150 0x6B, 0x20, 0x62, 0x72, 0x6F, 0x77, 0x6E, 0x20, /* k brown */
1151 0x66, 0x6F, 0x78, 0x20, 0x6A, 0x75, 0x6D, 0x70, /* fox jump */
1152 0x73, 0x20, 0x6F, 0x76, 0x65, 0x72, 0x20, 0x74, /* s over t */
1153 0x68, 0x65, 0x20, 0x6C, 0x61, 0x7A, 0x79, 0x20, /* he lazy */
1154 0x64, 0x6F, 0x67, /* dog */
1155};
1156
1157static const uint8_t mac_data_sha512_out1[] = {
1158 0xB4, 0x2A, 0xF0, 0x90, 0x57, 0xBA, 0xC1, 0xE2, /* ....W... */
1159 0xD4, 0x17, 0x08, 0xE4, 0x8A, 0x90, 0x2E, 0x09, /* ........ */
1160 0xB5, 0xFF, 0x7F, 0x12, 0xAB, 0x42, 0x8A, 0x4F, /* .....B.O */
1161 0xE8, 0x66, 0x53, 0xC7, 0x3D, 0xD2, 0x48, 0xFB, /* .fS.=.H. */
1162 0x82, 0xF9, 0x48, 0xA5, 0x49, 0xF7, 0xB7, 0x91, /* ..H.I... */
1163 0xA5, 0xB4, 0x19, 0x15, 0xEE, 0x4D, 0x1E, 0xC3, /* .....M.. */
1164 0x93, 0x53, 0x57, 0xE4, 0xE2, 0x31, 0x72, 0x50, /* .SW..1rP */
1165 0xD0, 0x37, 0x2A, 0xFA, 0x2E, 0xBE, 0xEB, 0x3A, /* .7.....: */
1166};
1167
1168
1169/* AES-CBC-MAC */
1170static const uint8_t mac_cbc_vect1_key[] = {
1171 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1172 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1173};
1174
1175static const uint8_t mac_cbc_vect1_data[] = {
1176 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1177 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1178 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1179 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1180 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1181 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1182 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1183 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1184 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1185 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1186 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1187 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1188 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1189 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1190 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1191 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1192 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1193 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1194 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1195 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1196};
1197
1198static const uint8_t mac_cbc_vect1_out[] = {
1199 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1200 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1201};
1202
1203/* DES-CBC-MAC */
1204static const uint8_t mac_cbc_vect2_key[] = {
1205 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1206};
1207
1208#define mac_cbc_vect2_data mac_cbc_vect1_data
1209static const uint8_t mac_cbc_vect2_out[] = {
1210 0xE9, 0x41, 0x46, 0x30, 0x69, 0x32, 0xBD, 0xD6, /* .AF0i2.. */
1211};
1212
1213/* DES3-CBC-MAC */
1214static const uint8_t mac_cbc_vect3_key[] = {
1215 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1216 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1217 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1218};
1219
1220#define mac_cbc_vect3_data mac_cbc_vect2_data
1221static const uint8_t mac_cbc_vect3_out[] = {
1222 0x1C, 0x17, 0xB7, 0xB5, 0x9F, 0x54, 0x9C, 0x63, /* .....T.c */
1223};
1224
1225/* AES-CBC-MAC PKCS#5 pad*/
1226static const uint8_t mac_cbc_vect4_key[] = {
1227 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1228 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1229 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1230 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1231};
1232
1233#define mac_cbc_vect4_data mac_cbc_vect1_data
1234static const uint8_t mac_cbc_vect4_out[] = {
1235 0x0B, 0x46, 0xC7, 0xA2, 0xE1, 0x5A, 0xE2, 0x23, /* .F...Z.# */
1236 0x83, 0x34, 0x1C, 0x86, 0x53, 0xF8, 0x51, 0x24, /* .4..S.Q$ */
1237};
1238
1239/* DES-CBC-MAC PKCS#5 pad*/
1240static const uint8_t mac_cbc_vect5_key[] = {
1241 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1242};
1243
1244#define mac_cbc_vect5_data mac_cbc_vect1_data
1245static const uint8_t mac_cbc_vect5_out[] = {
1246 0x30, 0x81, 0x4F, 0x42, 0x03, 0x7E, 0xD8, 0xA9, /* 0.OB.~.. */
1247};
1248
1249/* DES3-CBC-MAC PKCS#5 pad*/
1250static const uint8_t mac_cbc_vect6_key[] = {
1251 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1252 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1253 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1254};
1255
1256#define mac_cbc_vect6_data mac_cbc_vect1_data
1257static const uint8_t mac_cbc_vect6_out[] = {
1258 0x6E, 0x37, 0x6E, 0x14, 0x5E, 0x21, 0xDD, 0xF8, /* n7n.^!.. */
1259};
1260
1261/* AES-CBC-MAC PKCS#5 pad*/
1262#define mac_cbc_vect7_key mac_cbc_vect4_key
1263static const uint8_t mac_cbc_vect7_data[] = {
1264 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1265 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1266 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1267 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1268 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1269 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1270 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1271 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1272 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1273 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1274 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1275 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1276 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1277 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1278 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1279 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1280 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1281 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1282 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1283 0x74, 0x69, 0x6F, 0x6E, 0x2E, /* tion. */
1284};
1285
1286static const uint8_t mac_cbc_vect7_out[] = {
1287 0xFD, 0x89, 0x35, 0xB3, 0x93, 0x7F, 0xBB, 0xA2, /* ..5..... */
1288 0xFB, 0x65, 0x60, 0xC4, 0x0A, 0x62, 0xA0, 0xF9, /* .e`..b.. */
1289};
1290
1291/* DES-CBC-MAC PKCS#5 pad*/
1292#define mac_cbc_vect8_key mac_cbc_vect5_key
1293#define mac_cbc_vect8_data mac_cbc_vect7_data
1294static const uint8_t mac_cbc_vect8_out[] = {
1295 0x02, 0x2A, 0xA8, 0x2E, 0x47, 0xC6, 0xBB, 0x7C, /* ....G..| */
1296};
1297
1298/* DES3-CBC-MAC PKCS#5 pad*/
1299#define mac_cbc_vect9_key mac_cbc_vect6_key
1300#define mac_cbc_vect9_data mac_cbc_vect7_data
1301static const uint8_t mac_cbc_vect9_out[] = {
1302 0xD4, 0xF7, 0x3E, 0x27, 0x78, 0x0E, 0x1C, 0x79, /* ..>'x..y */
1303};
1304
1305/*
Pascal Brand5c3d8092015-07-23 08:20:26 +02001306 * DES3-CBC-MAC, with key size of 112bit
1307 * out obtained with:
1308 * 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
1309 */
1310/* DES3-CBC-MAC PKCS#5 pad*/
1311static const uint8_t mac_cbc_vect10_key[] = {
1312 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1313 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1314};
1315#define mac_cbc_vect10_data mac_cbc_vect1_data
1316static const uint8_t mac_cbc_vect10_out[] = {
1317 0x30, 0x92, 0x60, 0x99, 0x66, 0xac, 0x8c, 0xa6,
1318};
1319
1320
1321/*
Pascal Brandc639ac82015-07-02 08:53:34 +02001322 * AES-CMAC
1323 * Test vectors from
1324 * http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf
1325 */
1326
1327/* AES-128 */
1328static const uint8_t mac_cmac_vect1_key[] = {
1329 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
1330 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
1331};
1332
1333static const uint8_t mac_cmac_vect1_out[] = {
1334 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28,
1335 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46
1336};
1337
1338#define mac_cmac_vect2_key mac_cmac_vect1_key
1339static const uint8_t mac_cmac_vect2_data[] = {
1340 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1341 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1342};
1343
1344static const uint8_t mac_cmac_vect2_out[] = {
1345 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44,
1346 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c
1347};
1348
1349#define mac_cmac_vect3_key mac_cmac_vect1_key
1350static const uint8_t mac_cmac_vect3_data[] = {
1351 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1352 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1353 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1354 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1355 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1356};
1357
1358static const uint8_t mac_cmac_vect3_out[] = {
1359 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30,
1360 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27
1361};
1362
1363#define mac_cmac_vect4_key mac_cmac_vect1_key
1364static const uint8_t mac_cmac_vect4_data[] = {
1365 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1366 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1367 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1368 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1369 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1370 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1371 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1372 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1373};
1374
1375static const uint8_t mac_cmac_vect4_out[] = {
1376 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92,
1377 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe
1378};
1379
1380/* AES-192 */
1381static const uint8_t mac_cmac_vect5_key[] = {
1382 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52,
1383 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5,
1384 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b
1385};
1386
1387static const uint8_t mac_cmac_vect5_out[] = {
1388 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5,
1389 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67
1390};
1391
1392
1393#define mac_cmac_vect6_key mac_cmac_vect5_key
1394static const uint8_t mac_cmac_vect6_data[] = {
1395 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1396 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1397};
1398
1399static const uint8_t mac_cmac_vect6_out[] = {
1400 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90,
1401 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84
1402};
1403
1404#define mac_cmac_vect7_key mac_cmac_vect5_key
1405static const uint8_t mac_cmac_vect7_data[] = {
1406 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1407 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1408 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1409 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1410 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1411};
1412
1413static const uint8_t mac_cmac_vect7_out[] = {
1414 0x8a, 0x1d, 0xe5, 0xbe, 0x2e, 0xb3, 0x1a, 0xad,
1415 0x08, 0x9a, 0x82, 0xe6, 0xee, 0x90, 0x8b, 0x0e
1416};
1417
1418#define mac_cmac_vect8_key mac_cmac_vect5_key
1419static const uint8_t mac_cmac_vect8_data[] = {
1420 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1421 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1422 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1423 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1424 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1425 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1426 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1427 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1428};
1429
1430static const uint8_t mac_cmac_vect8_out[] = {
1431 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79,
1432 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11
1433};
1434
1435/* AES-256 */
1436static const uint8_t mac_cmac_vect9_key[] = {
1437 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
1438 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
1439 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
1440 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4
1441};
1442
1443static const uint8_t mac_cmac_vect9_out[] = {
1444 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e,
1445 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83
1446};
1447
1448#define mac_cmac_vect10_key mac_cmac_vect9_key
1449static const uint8_t mac_cmac_vect10_data[] = {
1450 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1451 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a
1452};
1453
1454static const uint8_t mac_cmac_vect10_out[] = {
1455 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82,
1456 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c
1457};
1458
1459#define mac_cmac_vect11_key mac_cmac_vect9_key
1460static const uint8_t mac_cmac_vect11_data[] = {
1461 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1462 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1463 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1464 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1465 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11
1466};
1467
1468static const uint8_t mac_cmac_vect11_out[] = {
1469 0xaa, 0xf3, 0xd8, 0xf1, 0xde, 0x56, 0x40, 0xc2,
1470 0x32, 0xf5, 0xb1, 0x69, 0xb9, 0xc9, 0x11, 0xe6
1471};
1472
1473#define mac_cmac_vect12_key mac_cmac_vect9_key
1474static const uint8_t mac_cmac_vect12_data[] = {
1475 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
1476 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
1477 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
1478 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
1479 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
1480 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
1481 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
1482 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
1483};
1484
1485static const uint8_t mac_cmac_vect12_out[] = {
1486 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5,
1487 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10
1488};
1489
1490struct xtest_mac_case {
1491 uint32_t algo;
1492 uint32_t key_type;
1493 const uint8_t *key;
1494 size_t key_len;
1495 size_t in_incr;
1496 const uint8_t *in;
1497 size_t in_len;
1498 const uint8_t *out;
1499 size_t out_len;
Jerome Forissier3dec7442019-01-30 17:50:05 +01001500 bool multiple_incr;
Pascal Brandc639ac82015-07-02 08:53:34 +02001501};
1502
Jerome Forissier3dec7442019-01-30 17:50:05 +01001503#define XTEST_MAC_CASE_1(algo, key_type, key, in_incr, in, out) \
Pascal Brandc639ac82015-07-02 08:53:34 +02001504 { (algo), (key_type), (key), ARRAY_SIZE(key), \
Jerome Forissier3dec7442019-01-30 17:50:05 +01001505 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out), false }
1506
1507#define XTEST_MAC_CASE_MULT(algo, key_type, key, in_incr, in, out) \
1508 { (algo), (key_type), (key), ARRAY_SIZE(key), \
1509 (in_incr), (in), ARRAY_SIZE(in), (out), ARRAY_SIZE(out), true }
1510
1511#define XTEST_MAC_CASE(algo, key_type, key, in_incr, in, out) \
1512 XTEST_MAC_CASE_1((algo), (key_type), (key), (in_incr), (in), (out)), \
1513 XTEST_MAC_CASE_MULT((algo), (key_type), (key), (in_incr), (in), (out))
Pascal Brandc639ac82015-07-02 08:53:34 +02001514
1515#define XTEST_MAC_CBC_CASE(algo, key_type, vect, in_incr) \
1516 XTEST_MAC_CASE((algo), (key_type), \
1517 mac_cbc_ ## vect ## _key, (in_incr), \
1518 mac_cbc_ ## vect ## _data, mac_cbc_ ## vect ## _out)
1519
1520#define XTEST_MAC_CMAC_CASE(vect, in_incr) \
1521 XTEST_MAC_CASE(TEE_ALG_AES_CMAC, TEE_TYPE_AES, \
1522 mac_cmac_ ## vect ## _key, (in_incr), \
1523 mac_cmac_ ## vect ## _data, mac_cmac_ ## vect ## _out)
1524
1525static const struct xtest_mac_case mac_cases[] = {
1526 XTEST_MAC_CASE(TEE_ALG_HMAC_MD5, TEE_TYPE_HMAC_MD5,
1527 mac_data_md5_key1,
1528 4, mac_data_md5_in1, mac_data_md5_out1),
1529 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA1, TEE_TYPE_HMAC_SHA1,
1530 mac_data_sha1_key1,
1531 5, mac_data_sha1_in1, mac_data_sha1_out1),
1532 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA224, TEE_TYPE_HMAC_SHA224,
1533 mac_data_sha224_key1,
1534 8, mac_data_sha224_in1, mac_data_sha224_out1),
1535 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1536 mac_data_sha256_key1,
1537 1, mac_data_sha256_in1, mac_data_sha256_out1),
1538 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA256, TEE_TYPE_HMAC_SHA256,
1539 mac_data_sha256_key2,
1540 7, mac_data_sha256_in2, mac_data_sha256_out2),
1541 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA384, TEE_TYPE_HMAC_SHA384,
1542 mac_data_sha384_key1,
1543 11, mac_data_sha384_in1, mac_data_sha384_out1),
1544 XTEST_MAC_CASE(TEE_ALG_HMAC_SHA512, TEE_TYPE_HMAC_SHA512,
1545 mac_data_sha512_key1,
1546 13, mac_data_sha512_in1, mac_data_sha512_out1),
1547
1548 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_NOPAD, TEE_TYPE_AES, vect1, 14),
1549 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_NOPAD, TEE_TYPE_DES, vect2, 16),
1550 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_NOPAD, TEE_TYPE_DES3, vect3,
1551 17),
1552 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect4, 11),
1553 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect5, 9),
1554 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect6, 4),
1555 XTEST_MAC_CBC_CASE(TEE_ALG_AES_CBC_MAC_PKCS5, TEE_TYPE_AES, vect7, 3),
1556 XTEST_MAC_CBC_CASE(TEE_ALG_DES_CBC_MAC_PKCS5, TEE_TYPE_DES, vect8, 23),
1557 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect9,
1558 34),
Pascal Brand5c3d8092015-07-23 08:20:26 +02001559 XTEST_MAC_CBC_CASE(TEE_ALG_DES3_CBC_MAC_PKCS5, TEE_TYPE_DES3, vect10, 4),
Pascal Brandc639ac82015-07-02 08:53:34 +02001560
1561 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect1_key,
1562 ARRAY_SIZE(mac_cmac_vect1_key), 0, NULL, 0, mac_cmac_vect1_out,
1563 ARRAY_SIZE(mac_cmac_vect1_out) },
1564 XTEST_MAC_CMAC_CASE(vect2, 9),
1565 XTEST_MAC_CMAC_CASE(vect3, 9),
1566 XTEST_MAC_CMAC_CASE(vect4, 9),
1567 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect5_key,
1568 ARRAY_SIZE(mac_cmac_vect5_key), 0, NULL, 0, mac_cmac_vect5_out,
1569 ARRAY_SIZE(mac_cmac_vect5_out) },
1570 XTEST_MAC_CMAC_CASE(vect6, 9),
1571 XTEST_MAC_CMAC_CASE(vect7, 9),
1572 XTEST_MAC_CMAC_CASE(vect8, 9),
1573 { TEE_ALG_AES_CMAC, TEE_TYPE_AES, mac_cmac_vect9_key,
1574 ARRAY_SIZE(mac_cmac_vect9_key), 0, NULL, 0, mac_cmac_vect9_out,
1575 ARRAY_SIZE(mac_cmac_vect9_out) },
1576 XTEST_MAC_CMAC_CASE(vect10, 9),
1577 XTEST_MAC_CMAC_CASE(vect11, 9),
1578 XTEST_MAC_CMAC_CASE(vect12, 9),
1579};
1580
1581static void xtest_tee_test_4002(ADBG_Case_t *c)
1582{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01001583 TEEC_Session session = { };
1584 TEE_OperationHandle op1 = TEE_HANDLE_NULL;
1585 TEE_OperationHandle op2 = TEE_HANDLE_NULL;
1586 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
1587 uint8_t out[64] = { };
1588 size_t out_size = 0;
1589 uint32_t ret_orig = 0;
1590 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001591
1592 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1593 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
1594 &ret_orig)))
1595 return;
1596
1597 for (n = 0; n < ARRAY_SIZE(mac_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01001598 TEE_Attribute key_attr = { };
1599 size_t key_size = 0;
1600 size_t offs = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001601
1602 Do_ADBG_BeginSubCase(c, "MAC case %d algo 0x%x",
1603 (int)n, (unsigned int)mac_cases[n].algo);
1604
1605 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
1606 key_attr.content.ref.buffer = (void *)mac_cases[n].key;
1607 key_attr.content.ref.length = mac_cases[n].key_len;
1608
1609 key_size = key_attr.content.ref.length * 8;
1610 if (mac_cases[n].key_type == TEE_TYPE_DES ||
1611 mac_cases[n].key_type == TEE_TYPE_DES3)
1612 /* Exclude parity in bit size of key */
1613 key_size -= key_size / 8;
1614
1615 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1616 ta_crypt_cmd_allocate_operation(c, &session, &op1,
1617 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1618 goto out;
1619
1620 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1621 ta_crypt_cmd_allocate_operation(c, &session, &op2,
1622 mac_cases[n].algo, TEE_MODE_MAC, key_size)))
1623 goto out;
1624
1625 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1626 ta_crypt_cmd_allocate_transient_object(c, &session,
1627 mac_cases[n].key_type, key_size, &key_handle)))
1628 goto out;
1629
1630 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1631 ta_crypt_cmd_populate_transient_object(c, &session,
1632 key_handle, &key_attr, 1)))
1633 goto out;
1634
1635 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1636 ta_crypt_cmd_set_operation_key(c, &session, op1,
1637 key_handle)))
1638 goto out;
1639
1640 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1641 ta_crypt_cmd_free_transient_object(c, &session,
1642 key_handle)))
1643 goto out;
1644
1645 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1646 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1647 goto out;
1648
Jerome Forissier3dec7442019-01-30 17:50:05 +01001649 offs = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02001650 if (mac_cases[n].in != NULL) {
Jerome Forissier3dec7442019-01-30 17:50:05 +01001651 while (offs + mac_cases[n].in_incr <
1652 mac_cases[n].in_len) {
1653 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1654 ta_crypt_cmd_mac_update(c, &session,
1655 op1, mac_cases[n].in + offs,
1656 mac_cases[n].in_incr)))
1657 goto out;
1658 offs += mac_cases[n].in_incr;
1659 if (!mac_cases[n].multiple_incr)
1660 break;
1661 }
Pascal Brandc639ac82015-07-02 08:53:34 +02001662 }
1663
1664 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1665 ta_crypt_cmd_copy_operation(c, &session, op2, op1)))
1666 goto out;
1667
1668 out_size = sizeof(out);
1669 memset(out, 0, sizeof(out));
1670 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1671 ta_crypt_cmd_mac_final_compute(c, &session, op2,
Jerome Forissier3dec7442019-01-30 17:50:05 +01001672 mac_cases[n].in + offs,
1673 mac_cases [n].in_len - offs,
Pascal Brandc639ac82015-07-02 08:53:34 +02001674 out, &out_size)))
1675 goto out;
1676
1677 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1678 mac_cases[n].out_len, out, out_size);
1679
1680 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1681 ta_crypt_cmd_mac_init(c, &session, op1, NULL, 0)))
1682 goto out;
1683
1684 out_size = sizeof(out);
1685 memset(out, 0, sizeof(out));
1686 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1687 ta_crypt_cmd_mac_final_compute(c, &session, op1,
1688 mac_cases[n].in, mac_cases[n].in_len, out,
1689 &out_size)))
1690 goto out;
1691
1692 (void)ADBG_EXPECT_BUFFER(c, mac_cases[n].out,
1693 mac_cases[n].out_len, out, out_size);
1694
1695 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1696 ta_crypt_cmd_free_operation(c, &session, op1)))
1697 goto out;
1698
1699 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1700 ta_crypt_cmd_free_operation(c, &session, op2)))
1701 goto out;
1702
1703 Do_ADBG_EndSubCase(c, NULL);
1704 }
1705out:
1706 TEEC_CloseSession(&session);
1707}
Jens Wiklander14f48872018-06-29 15:30:13 +02001708ADBG_CASE_DEFINE(regression, 4002, xtest_tee_test_4002,
1709 "Test TEE Internal API MAC operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02001710
Pascal Brandc639ac82015-07-02 08:53:34 +02001711static const uint8_t ciph_data_aes_key1[] = {
1712 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1713 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1714};
1715
Jerome Forissier0780ad42018-06-05 15:02:37 +02001716static const uint8_t ciph_data_aes_key2[] = {
1717 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
1718 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
1719};
1720
Pascal Brandc639ac82015-07-02 08:53:34 +02001721static const uint8_t ciph_data_des_key1[] = {
1722 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 /* 01234567 */
1723};
1724
1725static const uint8_t ciph_data_des_key2[] = {
1726 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1727};
1728
1729
1730static const uint8_t ciph_data_des3_key1[] = {
1731 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1732 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1733 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1734};
1735
1736static const uint8_t ciph_data_des3_key2[] = {
1737 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1738 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1,
1739 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1
1740};
1741
1742static const uint8_t ciph_data_des2_key1[] = {
1743 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1744 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1745};
1746
1747static const uint8_t ciph_data_in1[] = {
1748 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1749 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1750 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1751 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1752 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1753 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1754};
1755
1756static const uint8_t ciph_data_in3[] = {
1757 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1758 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1759 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1760 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1761 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1762 0x43, 0x44, 0x45, 0x46, 0x30, /* CDEF0 */
1763};
1764
Jerome Forissier45218eb2018-04-11 13:03:26 +02001765static const uint8_t ciph_data_in4[] = {
1766 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 23456789 */
1767 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, /* ABCDEF01 */
1768 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, /* 3456789A */
1769 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, /* BCDEF012 */
1770 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, /* 456789AB */
1771 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, /* CDEF0123 */
1772 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1773 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1774};
1775
Jerome Forissier0780ad42018-06-05 15:02:37 +02001776static const uint8_t ciph_data_in5[] = {
1777 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1778 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1779 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1780 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1781 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1782 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1783 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1784 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
Jerome Forissierbf9009e2018-06-05 18:44:42 +02001785 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
1786 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
Jerome Forissier0780ad42018-06-05 15:02:37 +02001787 0x01, 0x01, 0x01
1788};
1789
Pascal Brandc639ac82015-07-02 08:53:34 +02001790static const uint8_t ciph_data_128_iv1[] = {
1791 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1792 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, /* 9ABCDEF0 */
1793};
1794
Jerome Forissier0780ad42018-06-05 15:02:37 +02001795static const uint8_t ciph_data_128_iv2[] = {
1796 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
1797 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
1798};
1799
Pascal Brandc639ac82015-07-02 08:53:34 +02001800static const uint8_t ciph_data_64_iv1[] = {
1801 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, /* 12345678 */
1802};
1803
1804static const uint8_t ciph_data_in2[] = {
1805 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
1806};
1807
1808static const uint8_t ciph_data_aes_ecb_nopad_out1[] = {
1809 0xA5, 0xBE, 0x14, 0xD5, 0x01, 0x05, 0x24, 0x48, /* ......$H */
1810 0x58, 0x1A, 0x6B, 0x82, 0xD4, 0x41, 0xD2, 0xB3, /* X.k..A.. */
1811 0xBB, 0xF9, 0xAE, 0x37, 0x94, 0xAC, 0x18, 0x50, /* ...7...P */
1812 0x87, 0x09, 0xCC, 0x3F, 0x43, 0xD2, 0xC2, 0xB7, /* ...?C... */
1813 0xD7, 0x6F, 0x84, 0x07, 0xB4, 0x78, 0xCE, 0x34, /* .o...x.4 */
1814 0x48, 0xC9, 0x16, 0x86, 0x42, 0xB8, 0xFF, 0xCF, /* H...B... */
1815};
1816
1817static const uint8_t ciph_data_aes_cbc_nopad_out1[] = {
1818 0x8D, 0x9F, 0x88, 0xD8, 0xAF, 0x9F, 0xC1, 0x3B, /* .......; */
1819 0x02, 0x15, 0x43, 0x6A, 0x8C, 0x1E, 0x34, 0x5C, /* ..Cj..4\ */
1820 0x83, 0xF4, 0x85, 0x3E, 0x43, 0x0F, 0xE5, 0x5F, /* ...>C.._ */
1821 0x81, 0x4C, 0xC0, 0x28, 0x3F, 0xD9, 0x98, 0x53, /* .L.(?..S */
1822 0xB1, 0x44, 0x51, 0x38, 0x21, 0xAB, 0x10, 0xCE, /* .DQ8!... */
1823 0xC2, 0xEC, 0x65, 0x54, 0xDD, 0x5C, 0xEA, 0xDC, /* ..eT.\.. */
1824};
1825
1826static const uint8_t ciph_data_aes_ctr_out1[] = {
1827 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1828 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1829 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1830 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1831 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1832 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1833};
1834
1835static const uint8_t ciph_data_aes_ctr_out2[] = {
1836 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1837 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1838 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1839 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1840 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1841 0x72, 0x0E, 0x3C, 0xD1, 0xA1, /* r.<.. */
1842};
1843
Jerome Forissier45218eb2018-04-11 13:03:26 +02001844static const uint8_t ciph_data_aes_ctr_out4[] = {
1845 0xD2, 0xDD, 0x11, 0xA8, 0xF7, 0xB0, 0xAE, 0x55, /* .......U */
1846 0xBE, 0x61, 0x7A, 0xE6, 0xA1, 0x6C, 0x79, 0xF4, /* .az..ly. */
1847 0x62, 0x51, 0x7B, 0xE9, 0x7C, 0xA0, 0x31, 0x0C, /* bQ{.|.1. */
1848 0x24, 0x15, 0x70, 0x7F, 0x47, 0x37, 0x69, 0xE0, /* $.p.G7i. */
1849 0x24, 0xC3, 0x29, 0xCD, 0xF2, 0x26, 0x69, 0xFF, /* $.)..&i. */
1850 0x72, 0x0E, 0x3C, 0xD1, 0xA1, 0x2F, 0x5D, 0x33, /* r.<../]3 */
1851 0x9F, 0xD7, 0x0C, 0x92, 0xD4, 0xA5, 0x9D, 0x06, /* ........ */
1852 0x01, 0x80, 0x38, 0xCD, 0xC2, 0x71, 0x5D, 0x4A, /* ..8..q]J */
1853};
1854
Jerome Forissier0780ad42018-06-05 15:02:37 +02001855static const uint8_t ciph_data_aes_ctr_out5[] = {
1856 0xbb, 0xfe, 0x07, 0x04, 0x1c, 0x8e, 0x09, 0x61,
1857 0xfb, 0xb1, 0x7c, 0xa5, 0x4d, 0x2b, 0x30, 0xf6,
1858 0x26, 0x9e, 0xff, 0x61, 0x18, 0x47, 0xc6, 0x06,
1859 0x81, 0x02, 0x84, 0xcd, 0x9c, 0x4b, 0x6d, 0x21,
1860 0xe2, 0x64, 0xa6, 0x50, 0x7f, 0x28, 0x81, 0x6f,
1861 0x29, 0xda, 0xd5, 0x56, 0x3f, 0x46, 0xac, 0xca,
1862 0x37, 0xe7, 0x77, 0x36, 0xbc, 0x76, 0x39, 0x57,
1863 0xaa, 0x67, 0x1b, 0x2a, 0xe6, 0x36, 0x57, 0x6d,
Jerome Forissierbf9009e2018-06-05 18:44:42 +02001864 0x2a, 0xb8, 0x77, 0x41, 0xc2, 0x4e, 0x4f, 0x27,
1865 0x4c, 0x34, 0x7a, 0x01, 0x6a, 0xda, 0x75, 0x75,
1866 0x3e, 0x68, 0xb2
Jerome Forissier0780ad42018-06-05 15:02:37 +02001867};
1868
Pascal Brandc639ac82015-07-02 08:53:34 +02001869static const uint8_t ciph_data_aes_cbc_vect1_key[] = {
1870 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
1871 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
1872};
1873
1874static const uint8_t ciph_data_aes_cbc_vect1_iv[] = {
1875 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1876 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ........ */
1877};
1878
1879static const uint8_t ciph_data_aes_cbc_vect1_ptx[] = {
1880 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x20, 0x62, /* Cipher b */
1881 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x63, 0x68, 0x61, /* lock cha */
1882 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x20, 0x28, 0x43, /* ining (C */
1883 0x42, 0x43, 0x29, 0x20, 0x69, 0x73, 0x20, 0x61, /* BC) is a */
1884 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x6E, 0x20, /* common */
1885 0x63, 0x68, 0x61, 0x69, 0x6E, 0x69, 0x6E, 0x67, /* chaining */
1886 0x20, 0x6D, 0x6F, 0x64, 0x65, 0x20, 0x69, 0x6E, /* mode in */
1887 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, /* which t */
1888 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, /* he previ */
1889 0x6F, 0x75, 0x73, 0x20, 0x62, 0x6C, 0x6F, 0x63, /* ous bloc */
1890 0x6B, 0x27, 0x73, 0x20, 0x63, 0x69, 0x70, 0x68, /* k's ciph */
1891 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x20, 0x69, /* ertext i */
1892 0x73, 0x20, 0x78, 0x6F, 0x72, 0x65, 0x64, 0x20, /* s xored */
1893 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, /* with the */
1894 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, /* current */
1895 0x20, 0x62, 0x6C, 0x6F, 0x63, 0x6B, 0x27, 0x73, /* block's */
1896 0x20, 0x70, 0x6C, 0x61, 0x69, 0x6E, 0x74, 0x65, /* plainte */
1897 0x78, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6F, 0x72, /* xt befor */
1898 0x65, 0x20, 0x65, 0x6E, 0x63, 0x72, 0x79, 0x70, /* e encryp */
1899 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x2E, 0x2E, 0x2E, /* tion.... */
1900};
1901
1902static const uint8_t ciph_data_aes_cbc_vect1_ctx[] = {
1903 0xDD, 0x16, 0xC3, 0x47, 0x69, 0xEC, 0xF5, 0x86, /* ...Gi... */
1904 0x20, 0xB4, 0xF7, 0xE3, 0xB9, 0x36, 0xE8, 0xAC, /* ....6.. */
1905 0xC9, 0xA2, 0x11, 0x71, 0x3B, 0x10, 0x9D, 0x45, /* ...q;..E */
1906 0xCA, 0xE2, 0x49, 0xA6, 0x4E, 0x56, 0x07, 0xC5, /* ..I.NV.. */
1907 0xCE, 0xA3, 0x14, 0xB5, 0x30, 0x1B, 0x63, 0xBB, /* ....0.c. */
1908 0x2D, 0x6F, 0xE9, 0xCA, 0x0B, 0x00, 0x31, 0x3F, /* -o....1? */
1909 0xA4, 0x9A, 0x39, 0xE1, 0xC8, 0xD2, 0x24, 0x95, /* ..9...$. */
1910 0x14, 0xE9, 0xD2, 0x43, 0xE8, 0xA8, 0x1E, 0x0A, /* ...C.... */
1911 0xFE, 0x9D, 0x4F, 0xF5, 0xBB, 0x16, 0xB9, 0x54, /* ..O....T */
1912 0x78, 0x07, 0x94, 0x05, 0x8E, 0x47, 0xC3, 0xCB, /* x....G.. */
1913 0x7C, 0xEC, 0xF4, 0xF8, 0xF2, 0xA4, 0x59, 0x6E, /* |.....Yn */
1914 0xED, 0xAD, 0x7F, 0x62, 0xAF, 0x89, 0xA8, 0x5B, /* ...b...[ */
1915 0x75, 0xD4, 0x73, 0xE3, 0xBA, 0x9F, 0x9A, 0xD2, /* u.s..... */
1916 0x0F, 0xFD, 0x3C, 0xE6, 0xC6, 0xA4, 0xD6, 0x6C, /* ..<....l */
1917 0x6A, 0x09, 0xE2, 0x16, 0xB0, 0x8C, 0x69, 0x3C, /* j.....i< */
1918 0xC8, 0x1C, 0xE4, 0x3E, 0x86, 0x4D, 0xB0, 0x2B, /* ...>.M.+ */
1919 0x29, 0xA0, 0x5A, 0xA3, 0x67, 0xBA, 0xDC, 0x11, /* ).Z.g... */
1920 0x08, 0x5E, 0x69, 0xB4, 0x6F, 0xA5, 0xE2, 0xB8, /* .^i.o... */
1921 0xC9, 0x6E, 0x83, 0x7E, 0x35, 0xC8, 0xA7, 0xA0, /* .n.~5... */
1922 0x33, 0xA3, 0xB1, 0x4B, 0x5A, 0x92, 0x51, 0x2E, /* 3..KZ.Q. */
1923};
1924
1925/* AES-CTS test vectors from http://tools.ietf.org/html/rfc3962
1926 * and http://tools.ietf.org/html/draft-raeburn-krb-rijndael-krb-02 */
1927static const uint8_t ciph_data_aes_cts_vect1_key[] = {
1928 0x63, 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x20,
1929 0x74, 0x65, 0x72, 0x69, 0x79, 0x61, 0x6b, 0x69
1930};
1931
1932static const uint8_t ciph_data_aes_cts_vect1_iv[16] = {
1933 0x00
1934};
1935
1936static const uint8_t ciph_data_aes_cts_vect1_ptx[] = {
1937 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1938 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1939 0x20
1940};
1941
1942static const uint8_t ciph_data_aes_cts_vect1_ctx[] = {
1943 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4,
1944 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f,
1945 0x97
1946};
1947
1948#define ciph_data_aes_cts_vect2_key ciph_data_aes_cts_vect1_key
1949#define ciph_data_aes_cts_vect2_iv ciph_data_aes_cts_vect1_iv
1950static const uint8_t ciph_data_aes_cts_vect2_ptx[] = {
1951 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1952 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1953 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1954 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20
1955};
1956
1957static const uint8_t ciph_data_aes_cts_vect2_ctx[] = {
1958 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1,
1959 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22,
1960 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1961 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5
1962};
1963
1964#define ciph_data_aes_cts_vect3_key ciph_data_aes_cts_vect1_key
1965#define ciph_data_aes_cts_vect3_iv ciph_data_aes_cts_vect1_iv
1966static const uint8_t ciph_data_aes_cts_vect3_ptx[] = {
1967 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1968 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1969 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1970 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1971};
1972
1973static const uint8_t ciph_data_aes_cts_vect3_ctx[] = {
1974 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1975 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
1976 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1977 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1978};
1979
1980#define ciph_data_aes_cts_vect4_key ciph_data_aes_cts_vect1_key
1981#define ciph_data_aes_cts_vect4_iv ciph_data_aes_cts_vect1_iv
1982static const uint8_t ciph_data_aes_cts_vect4_ptx[] = {
1983 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
1984 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
1985 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
1986 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
1987 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
1988 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c,
1989};
1990
1991static const uint8_t ciph_data_aes_cts_vect4_ctx[] = {
1992 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
1993 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
1994 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c,
1995 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e,
1996 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
1997 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5,
1998};
1999
2000#define ciph_data_aes_cts_vect5_key ciph_data_aes_cts_vect1_key
2001#define ciph_data_aes_cts_vect5_iv ciph_data_aes_cts_vect1_iv
2002static const uint8_t ciph_data_aes_cts_vect5_ptx[] = {
2003 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2004 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2005 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2006 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2007 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2008 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2009};
2010
2011static const uint8_t ciph_data_aes_cts_vect5_ctx[] = {
2012 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2013 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2014 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2015 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2016 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2017 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2018};
2019
2020#define ciph_data_aes_cts_vect6_key ciph_data_aes_cts_vect1_key
2021#define ciph_data_aes_cts_vect6_iv ciph_data_aes_cts_vect1_iv
2022static const uint8_t ciph_data_aes_cts_vect6_ptx[] = {
2023 0x49, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20,
2024 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65,
2025 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
2026 0x20, 0x47, 0x61, 0x75, 0x27, 0x73, 0x20, 0x43,
2027 0x68, 0x69, 0x63, 0x6b, 0x65, 0x6e, 0x2c, 0x20,
2028 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
2029 0x61, 0x6e, 0x64, 0x20, 0x77, 0x6f, 0x6e, 0x74,
2030 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x70, 0x2e,
2031};
2032
2033static const uint8_t ciph_data_aes_cts_vect6_ctx[] = {
2034 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0,
2035 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84,
2036 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5,
2037 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8,
2038 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5,
2039 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40,
2040 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0,
2041 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8,
2042};
2043
Jerome Forissiered00e162017-01-20 09:22:52 +01002044/*
2045 * Test case for https://github.com/OP-TEE/optee_os/issues/1203
2046 * 80 bytes of data, processed in two steps (32 + 48).
2047 */
2048
2049#define ciph_data_aes_cts_issue1203_key ciph_data_aes_cts_vect1_key
2050
2051static const uint8_t ciph_data_aes_cts_issue1203_iv[] = {
2052 0x5b, 0x11, 0x7b, 0xf9, 0x83, 0x6a, 0x01, 0x27,
2053 0x1d, 0x2a, 0xae, 0x0a, 0xd3, 0x27, 0x35, 0x81,
2054};
2055
2056static const uint8_t ciph_data_aes_cts_issue1203_ptx[] = {
2057 0x33, 0x2a, 0xf4, 0x8c, 0x18, 0xa1, 0x30, 0x7c,
2058 0xa7, 0x52, 0x76, 0xca, 0xa6, 0x68, 0xad, 0xf6,
2059 0x1e, 0xba, 0xc9, 0x66, 0x66, 0x52, 0x1a, 0xe7,
2060 0x3e, 0xbc, 0xba, 0x60, 0x95, 0x71, 0x04, 0x5e,
2061 0xb4, 0xb7, 0x10, 0xd7, 0x93, 0x6d, 0x5f, 0x9a,
2062 0xb8, 0xbb, 0x6b, 0xb0, 0x6d, 0x47, 0x93, 0x41,
2063 0x29, 0x21, 0xf2, 0x84, 0xf5, 0xb2, 0xf2, 0x6d,
2064 0xbe, 0xe5, 0x8a, 0x2b, 0x58, 0x8d, 0x1b, 0x5e,
2065 0x41, 0x04, 0xba, 0x9e, 0x92, 0xe9, 0x52, 0xb6,
2066 0x8b, 0x1e, 0x36, 0x72, 0x91, 0xe4, 0x56, 0x66,
2067};
2068
2069/*
2070 * Ciphertext was generated by an online tool for AES CBC.
2071 * Since the input size is a multiple of the block size, and the ciphertext
2072 * format is CS3, the output is the same as plain AES CBC with the last
2073 * two blocks swapped.
2074 */
2075static const uint8_t ciph_data_aes_cts_issue1203_ctx[] = {
2076 0x6c, 0xfe, 0xef, 0x6a, 0x1c, 0x8f, 0xd3, 0xc3,
2077 0x66, 0xc4, 0xd9, 0x0e, 0xbe, 0x24, 0x17, 0x3f,
2078 0xcd, 0x19, 0xc9, 0xd2, 0x10, 0x3f, 0xcf, 0xdc,
2079 0xe9, 0x05, 0xab, 0xd5, 0x1a, 0x31, 0x41, 0x77,
2080 0x3b, 0xd7, 0x6a, 0x26, 0xae, 0x0d, 0xc9, 0x47,
2081 0x77, 0xd4, 0xa7, 0xd5, 0x73, 0x88, 0x9e, 0xde,
2082 0x72, 0x66, 0xe0, 0xe2, 0x3d, 0x62, 0x91, 0x22,
2083 0xae, 0x11, 0x01, 0x97, 0x22, 0x6a, 0x45, 0xa9,
2084 0xba, 0x56, 0xd2, 0xbc, 0x55, 0x2d, 0x99, 0x4d,
2085 0x3d, 0x22, 0x27, 0x9a, 0xac, 0x66, 0x2f, 0xf5,
2086};
2087
Pascal Brandc639ac82015-07-02 08:53:34 +02002088static const uint8_t ciph_data_des_ecb_nopad_out1[] = {
2089 0x46, 0x2B, 0x91, 0xA8, 0x55, 0xE6, 0x7E, 0x75, /* F+..U.~u */
2090 0x5E, 0x53, 0xF4, 0x8F, 0x29, 0x41, 0x4E, 0xEF, /* ^S..)AN. */
2091 0x32, 0x1B, 0x58, 0x42, 0x9B, 0xB4, 0x3A, 0x1F, /* 2.XB..:. */
2092 0x9A, 0xEA, 0xA4, 0xB4, 0xCD, 0xE9, 0x87, 0x7C, /* .......| */
2093 0xC0, 0x05, 0x34, 0xED, 0x86, 0x3C, 0x2A, 0x81, /* ..4..<.. */
2094 0x5E, 0x93, 0x0E, 0x86, 0xA9, 0xBB, 0x80, 0xFF, /* ^....... */
2095};
2096
2097static const uint8_t ciph_data_des_ecb_nopad_out2[] = {
2098 0x85, 0xE8, 0x13, 0x54, 0x0F, 0x0A, 0xB4, 0x05
2099};
2100
2101static const uint8_t ciph_data_des_cbc_nopad_out1[] = {
2102 0xAD, 0xD6, 0xD6, 0x3E, 0x88, 0xD0, 0xDD, 0xD4, /* ...>.... */
2103 0x9A, 0x93, 0x95, 0xA0, 0x86, 0x22, 0x5B, 0x9E, /* ....."[. */
2104 0x84, 0x0C, 0x6F, 0x12, 0x04, 0x11, 0x6F, 0xD4, /* ..o...o. */
2105 0x12, 0x29, 0xC6, 0x78, 0x0C, 0xFB, 0x58, 0x5B, /* .).x..X[ */
2106 0x66, 0x82, 0x0E, 0x52, 0xDC, 0x25, 0x16, 0x51, /* f..R.%.Q */
2107 0x69, 0xDF, 0xFE, 0x4E, 0x11, 0x1D, 0x9D, 0x08, /* i..N.... */
2108};
2109
2110static const uint8_t ciph_data_des3_ecb_nopad_out1[] = {
2111 0xA7, 0x46, 0xEC, 0xA8, 0x6A, 0x7F, 0x4A, 0xF1, /* .F..j.J. */
2112 0x44, 0x60, 0x37, 0x3B, 0x7F, 0x76, 0xE5, 0xFF, /* D`7;.v.. */
2113 0xC1, 0xE7, 0xA5, 0x04, 0x9C, 0x29, 0x5C, 0xA5, /* .....)\. */
2114 0xDD, 0xC8, 0xEE, 0x36, 0x1F, 0x48, 0xE0, 0xA9, /* ...6.H.. */
2115 0x82, 0x2D, 0x53, 0x84, 0x49, 0x69, 0x78, 0xFA, /* .-S.Iix. */
2116 0x23, 0x69, 0x1D, 0xF7, 0x08, 0x38, 0x44, 0x05, /* #i...8D. */
2117};
2118
2119static const uint8_t ciph_data_des3_cbc_nopad_out1[] = {
2120 0x18, 0x09, 0xEB, 0x98, 0xE4, 0x58, 0x72, 0x11, /* .....Xr. */
2121 0x30, 0x58, 0xAB, 0x38, 0xB0, 0xC9, 0x2B, 0xED, /* 0X.8..+. */
2122 0xDA, 0xC5, 0xE8, 0xA9, 0xF6, 0x8A, 0xA7, 0x80, /* ........ */
2123 0xBE, 0x54, 0x1F, 0x63, 0xF6, 0xEE, 0xA2, 0x4C, /* .T.c...L */
2124 0x7C, 0xEB, 0x84, 0x7D, 0xDA, 0xCA, 0x1E, 0xB2, /* |..}.... */
2125 0xED, 0x5E, 0x96, 0xB8, 0x01, 0x4B, 0x77, 0x02, /* .^...Kw. */
2126};
2127
2128static const uint8_t ciph_data_des2_ecb_nopad_out1[] = {
2129 0xAB, 0x12, 0xB6, 0xE2, 0x4A, 0x3A, 0x26, 0x14, /* ....J:&. */
2130 0xF0, 0x7D, 0x23, 0xD0, 0x55, 0xDF, 0x5C, 0x16, /* .}#.U.\. */
2131 0x43, 0x59, 0x1E, 0x44, 0x01, 0x76, 0xD7, 0x50, /* CY.D.v.P */
2132 0x44, 0xC0, 0x15, 0xDF, 0x2E, 0x7F, 0x8B, 0xC5, /* D....... */
2133 0xFF, 0x8B, 0x87, 0xFE, 0x33, 0xD7, 0xCB, 0x2C, /* ....3.., */
2134 0xDA, 0x79, 0x6F, 0xA4, 0x05, 0x2B, 0x30, 0xCE, /* .yo..+0. */
2135};
2136
2137static const uint8_t ciph_data_des2_cbc_nopad_out1[] = {
2138 0x47, 0x2F, 0xB1, 0x83, 0xC4, 0xBB, 0x93, 0x16, /* G/...... */
2139 0x73, 0xF9, 0xAD, 0x6F, 0x00, 0xF9, 0xCB, 0x4A, /* s..o...J */
2140 0x0F, 0x4F, 0x75, 0x75, 0xFB, 0x39, 0x0B, 0xFC, /* .Ouu.9.. */
2141 0x9F, 0x48, 0x52, 0xAD, 0xA2, 0x75, 0x2C, 0xF1, /* .HR..u, . */
2142 0x7D, 0xC3, 0x8F, 0x16, 0xCF, 0xC9, 0x76, 0x29, /* }.....v) */
2143 0x1A, 0xBF, 0xB3, 0xD9, 0x10, 0x7E, 0xAA, 0x49, /* .....~.I */
2144};
2145
2146struct xtest_ciph_case {
2147 uint32_t algo;
2148 uint32_t mode;
2149 uint32_t key_type;
2150 const uint8_t *key1;
2151 size_t key1_len;
2152 const uint8_t *key2;
2153 size_t key2_len;
2154 const uint8_t *iv;
2155 size_t iv_len;
2156 size_t in_incr;
2157 const uint8_t *in;
2158 size_t in_len;
2159 const uint8_t *out;
2160 size_t out_len;
2161 size_t line;
2162};
2163
2164#define XTEST_CIPH_CASE_NO_IV(algo, key_type, key, in_incr, ptx, ctx) \
2165 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2166 NULL, 0, NULL, 0, \
2167 (in_incr), (ptx), ARRAY_SIZE(ptx), (ctx), ARRAY_SIZE(ctx), \
2168 __LINE__ }, \
2169 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2170 NULL, 0, NULL, 0, \
2171 (in_incr), (ctx), ARRAY_SIZE(ctx), (ptx), ARRAY_SIZE(ptx), __LINE__ }
2172
2173#define XTEST_CIPH_CASE(algo, key_type, key, iv, in_incr, ptx, ctx) \
2174 { (algo), TEE_MODE_ENCRYPT, (key_type), (key), ARRAY_SIZE(key), \
2175 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ptx), ARRAY_SIZE(ptx), \
2176 (ctx), ARRAY_SIZE(ctx), __LINE__ }, \
2177 { (algo), TEE_MODE_DECRYPT, (key_type), (key), ARRAY_SIZE(key), \
2178 NULL, 0, iv, ARRAY_SIZE(iv), (in_incr), (ctx), ARRAY_SIZE(ctx), \
2179 (ptx), ARRAY_SIZE(ptx), __LINE__ }
2180
2181#define XTEST_CIPH_CASE_AES_XTS(vect, in_incr) \
2182 { TEE_ALG_AES_XTS, TEE_MODE_ENCRYPT, TEE_TYPE_AES, \
2183 ciph_data_aes_xts_ ## vect ## _key1, \
2184 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2185 ciph_data_aes_xts_ ## vect ## _key2, \
2186 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2187 ciph_data_aes_xts_ ## vect ## _iv, \
2188 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2189 (in_incr), \
2190 ciph_data_aes_xts_ ## vect ## _ptx, \
2191 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), \
2192 ciph_data_aes_xts_ ## vect ## _ctx, \
2193 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), __LINE__ }, \
2194 { TEE_ALG_AES_XTS, TEE_MODE_DECRYPT, TEE_TYPE_AES, \
2195 ciph_data_aes_xts_ ## vect ## _key1, \
2196 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key1), \
2197 ciph_data_aes_xts_ ## vect ## _key2, \
2198 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _key2), \
2199 ciph_data_aes_xts_ ## vect ## _iv, \
2200 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _iv), \
2201 (in_incr), \
2202 ciph_data_aes_xts_ ## vect ## _ctx, \
2203 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ctx), \
2204 ciph_data_aes_xts_ ## vect ## _ptx, \
2205 ARRAY_SIZE(ciph_data_aes_xts_ ## vect ## _ptx), __LINE__ }
2206
2207#define XTEST_CIPH_CASE_AES_CBC(vect, in_incr) \
2208 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES, \
2209 ciph_data_aes_cbc_ ## vect ## _key, \
2210 ciph_data_aes_cbc_ ## vect ## _iv, \
2211 (in_incr), ciph_data_aes_cbc_ ## vect ## _ptx, \
2212 ciph_data_aes_cbc_ ## vect ## _ctx)
2213
2214#define XTEST_CIPH_CASE_AES_CTS(vect, in_incr) \
2215 XTEST_CIPH_CASE(TEE_ALG_AES_CTS, TEE_TYPE_AES, \
2216 ciph_data_aes_cts_ ## vect ## _key, \
2217 ciph_data_aes_cts_ ## vect ## _iv, \
2218 (in_incr), ciph_data_aes_cts_ ## vect ## _ptx, \
2219 ciph_data_aes_cts_ ## vect ## _ctx)
2220
2221static const struct xtest_ciph_case ciph_cases[] = {
2222 /* AES */
2223 XTEST_CIPH_CASE_NO_IV(TEE_ALG_AES_ECB_NOPAD, TEE_TYPE_AES,
2224 ciph_data_aes_key1, 11, ciph_data_in1,
2225 ciph_data_aes_ecb_nopad_out1),
2226 XTEST_CIPH_CASE(TEE_ALG_AES_CBC_NOPAD, TEE_TYPE_AES,
2227 ciph_data_aes_key1, ciph_data_128_iv1, 11,
2228 ciph_data_in1,
2229 ciph_data_aes_cbc_nopad_out1),
2230 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2231 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2232 ciph_data_in1,
2233 ciph_data_aes_ctr_out1),
2234 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2235 ciph_data_aes_key1, ciph_data_128_iv1, 13,
2236 ciph_data_in3,
2237 ciph_data_aes_ctr_out2),
Jens Wiklander692efd12018-01-19 09:52:00 +01002238 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2239 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2240 ciph_data_in3,
2241 ciph_data_aes_ctr_out2),
Jerome Forissier45218eb2018-04-11 13:03:26 +02002242 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2243 ciph_data_aes_key1, ciph_data_128_iv1, 16,
2244 ciph_data_in4,
2245 ciph_data_aes_ctr_out4),
Jerome Forissier0780ad42018-06-05 15:02:37 +02002246 XTEST_CIPH_CASE(TEE_ALG_AES_CTR, TEE_TYPE_AES,
2247 ciph_data_aes_key2, ciph_data_128_iv2, 11,
2248 ciph_data_in5,
2249 ciph_data_aes_ctr_out5),
Pascal Brandc639ac82015-07-02 08:53:34 +02002250
2251 XTEST_CIPH_CASE_AES_CBC(vect1, 11),
Jerome Forissierfc1bbc32018-06-12 10:13:04 +02002252 XTEST_CIPH_CASE_AES_CBC(vect1, 64),
Pascal Brandc639ac82015-07-02 08:53:34 +02002253
2254 /* AES-CTS */
2255 XTEST_CIPH_CASE_AES_CTS(vect1, 13),
2256 XTEST_CIPH_CASE_AES_CTS(vect2, 14),
2257 XTEST_CIPH_CASE_AES_CTS(vect3, 11),
2258 XTEST_CIPH_CASE_AES_CTS(vect4, 9),
2259 XTEST_CIPH_CASE_AES_CTS(vect5, 7),
2260 XTEST_CIPH_CASE_AES_CTS(vect6, 17),
2261 XTEST_CIPH_CASE_AES_CTS(vect6, 0x20),
Jerome Forissiered00e162017-01-20 09:22:52 +01002262 XTEST_CIPH_CASE_AES_CTS(issue1203, 32),
Pascal Brandc639ac82015-07-02 08:53:34 +02002263
2264 /* DES */
2265 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2266 ciph_data_des_key1, 14, ciph_data_in1,
2267 ciph_data_des_ecb_nopad_out1),
2268 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES_ECB_NOPAD, TEE_TYPE_DES,
2269 ciph_data_des_key2, 3, ciph_data_in2,
2270 ciph_data_des_ecb_nopad_out2),
2271 XTEST_CIPH_CASE(TEE_ALG_DES_CBC_NOPAD, TEE_TYPE_DES,
2272 ciph_data_des_key1, ciph_data_64_iv1, 15, ciph_data_in1,
2273 ciph_data_des_cbc_nopad_out1),
2274
2275 /* DES3 */
2276 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2277 ciph_data_des3_key1, 11, ciph_data_in1,
2278 ciph_data_des3_ecb_nopad_out1),
2279 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2280 ciph_data_des3_key2, 3, ciph_data_in2,
2281 ciph_data_des_ecb_nopad_out2),
2282 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2283 ciph_data_des3_key1, ciph_data_64_iv1, 11,
2284 ciph_data_in1,
2285 ciph_data_des3_cbc_nopad_out1),
2286
2287 /* DES2 */
2288 XTEST_CIPH_CASE_NO_IV(TEE_ALG_DES3_ECB_NOPAD, TEE_TYPE_DES3,
2289 ciph_data_des2_key1, 11, ciph_data_in1,
2290 ciph_data_des2_ecb_nopad_out1),
2291 XTEST_CIPH_CASE(TEE_ALG_DES3_CBC_NOPAD, TEE_TYPE_DES3,
2292 ciph_data_des2_key1, ciph_data_64_iv1, 11,
2293 ciph_data_in1,
2294 ciph_data_des2_cbc_nopad_out1),
Pascal Brandc639ac82015-07-02 08:53:34 +02002295
Pascal Brandc639ac82015-07-02 08:53:34 +02002296 /* AES-XTS */
2297 XTEST_CIPH_CASE_AES_XTS(vect1, 3),
2298 XTEST_CIPH_CASE_AES_XTS(vect2, 6),
2299 XTEST_CIPH_CASE_AES_XTS(vect3, 7),
2300 XTEST_CIPH_CASE_AES_XTS(vect4, 8),
2301 XTEST_CIPH_CASE_AES_XTS(vect5, 9),
2302 XTEST_CIPH_CASE_AES_XTS(vect6, 13),
2303 XTEST_CIPH_CASE_AES_XTS(vect7, 1),
2304 XTEST_CIPH_CASE_AES_XTS(vect8, 3),
2305 XTEST_CIPH_CASE_AES_XTS(vect9, 2),
2306 XTEST_CIPH_CASE_AES_XTS(vect10, 5),
2307 XTEST_CIPH_CASE_AES_XTS(vect11, 6),
2308 XTEST_CIPH_CASE_AES_XTS(vect12, 7),
2309 XTEST_CIPH_CASE_AES_XTS(vect13, 3),
2310 XTEST_CIPH_CASE_AES_XTS(vect14, 2),
2311 XTEST_CIPH_CASE_AES_XTS(vect15, 0),
2312 XTEST_CIPH_CASE_AES_XTS(vect16, 9),
2313 XTEST_CIPH_CASE_AES_XTS(vect17, 6),
2314 XTEST_CIPH_CASE_AES_XTS(vect18, 8),
2315 XTEST_CIPH_CASE_AES_XTS(vect19, 23),
2316};
2317
Jerome Forissier23256842018-02-16 09:25:35 +01002318static void xtest_tee_test_4003(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02002319{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002320 TEEC_Session session = { };
2321 TEE_OperationHandle op = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02002322 TEE_ObjectHandle key1_handle = TEE_HANDLE_NULL;
2323 TEE_ObjectHandle key2_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002324 uint8_t out[2048] = { };
2325 size_t out_size = 0;
2326 size_t out_offs = 0;
2327 uint32_t ret_orig = 0;
2328 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002329
2330 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2331 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2332 &ret_orig)))
2333 return;
2334
2335 for (n = 0; n < ARRAY_SIZE(ciph_cases); n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002336 TEE_Attribute key_attr = { };
2337 size_t key_size = 0;
2338 size_t op_key_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002339
2340 Do_ADBG_BeginSubCase(c, "Cipher case %d algo 0x%x line %d",
2341 (int)n, (unsigned int)ciph_cases[n].algo,
2342 (int)ciph_cases[n].line);
2343
2344 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2345 key_attr.content.ref.buffer = (void *)ciph_cases[n].key1;
2346 key_attr.content.ref.length = ciph_cases[n].key1_len;
2347
2348 key_size = key_attr.content.ref.length * 8;
2349 if (ciph_cases[n].key_type == TEE_TYPE_DES ||
2350 ciph_cases[n].key_type == TEE_TYPE_DES3)
2351 /* Exclude parity in bit size of key */
2352 key_size -= key_size / 8;
2353
2354 op_key_size = key_size;
2355 if (ciph_cases[n].key2 != NULL)
2356 op_key_size *= 2;
2357
2358 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2359 ta_crypt_cmd_allocate_operation(c, &session, &op,
2360 ciph_cases[n].algo, ciph_cases[n].mode,
2361 op_key_size)))
2362 goto out;
2363
2364 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2365 ta_crypt_cmd_allocate_transient_object(c, &session,
2366 ciph_cases[n].key_type, key_size,
2367 &key1_handle)))
2368 goto out;
2369
2370 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2371 ta_crypt_cmd_populate_transient_object(c, &session,
2372 key1_handle, &key_attr, 1)))
2373 goto out;
2374
2375 if (ciph_cases[n].key2 != NULL) {
2376 key_attr.content.ref.buffer =
2377 (void *)ciph_cases[n].key2;
2378 key_attr.content.ref.length = ciph_cases[n].key2_len;
2379
2380 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2381 ta_crypt_cmd_allocate_transient_object(c,
2382 &session, ciph_cases[n].key_type,
2383 key_attr.content.ref.length * 8,
2384 &key2_handle)))
2385 goto out;
2386
2387 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2388 ta_crypt_cmd_populate_transient_object(c,
2389 &session, key2_handle, &key_attr, 1)))
2390 goto out;
2391
2392 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2393 ta_crypt_cmd_set_operation_key2(c, &session, op,
2394 key1_handle, key2_handle)))
2395 goto out;
2396 } else {
2397 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2398 ta_crypt_cmd_set_operation_key(c, &session, op,
2399 key1_handle)))
2400 goto out;
2401 }
2402
2403 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2404 ta_crypt_cmd_free_transient_object(c, &session,
2405 key1_handle)))
2406 goto out;
2407 key1_handle = TEE_HANDLE_NULL;
2408
2409 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2410 ta_crypt_cmd_free_transient_object(c, &session,
2411 key2_handle)))
2412 goto out;
2413 key2_handle = TEE_HANDLE_NULL;
2414
2415 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2416 ta_crypt_cmd_cipher_init(c, &session, op,
2417 ciph_cases[n].iv, ciph_cases[n].iv_len)))
2418 goto out;
2419
2420 out_offs = 0;
2421 out_size = sizeof(out);
2422 memset(out, 0, sizeof(out));
2423 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2424 ta_crypt_cmd_cipher_update(c, &session, op,
2425 ciph_cases[n].in, ciph_cases[n].in_incr, out,
2426 &out_size)))
2427 goto out;
2428
Jerome Forissierd2d94b42017-06-02 16:39:34 +02002429 if (ciph_cases[n].algo == TEE_ALG_AES_CTR)
2430 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
2431 ciph_cases[n].in_incr);
2432
Pascal Brandc639ac82015-07-02 08:53:34 +02002433 out_offs += out_size;
2434 out_size = sizeof(out) - out_offs;
2435
2436 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2437 ta_crypt_cmd_cipher_do_final(c, &session, op,
2438 ciph_cases[n].in + ciph_cases[n].in_incr,
2439 ciph_cases[n].in_len - ciph_cases[n].in_incr,
2440 out + out_offs,
2441 &out_size)))
2442 goto out;
2443
2444 out_offs += out_size;
2445
2446 (void)ADBG_EXPECT_BUFFER(c, ciph_cases[n].out,
2447 ciph_cases[n].out_len, out, out_offs);
2448
2449 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2450 ta_crypt_cmd_free_operation(c, &session, op)))
2451 goto out;
2452
2453 Do_ADBG_EndSubCase(c, NULL);
2454 }
2455out:
2456 TEEC_CloseSession(&session);
2457}
Jens Wiklander14f48872018-06-29 15:30:13 +02002458ADBG_CASE_DEFINE(regression, 4003, xtest_tee_test_4003,
2459 "Test TEE Internal API cipher operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02002460
Pascal Brandc639ac82015-07-02 08:53:34 +02002461static void xtest_tee_test_4004(ADBG_Case_t *c)
2462{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002463 TEEC_Session session = { };
2464 uint32_t ret_orig = 0;
2465 uint8_t buf1[45] = { };
2466 uint8_t buf2[45] = { };
2467 static const uint8_t zeros[45];
Pascal Brandc639ac82015-07-02 08:53:34 +02002468
2469 Do_ADBG_BeginSubCase(c, "TEE get random");
2470 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2471 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2472 &ret_orig)))
2473 return;
2474
2475 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2476 ta_crypt_cmd_random_number_generate(c, &session, buf1,
2477 sizeof(buf1))))
2478 goto out;
2479
2480 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2481 0, !=, memcmp(buf1, zeros, sizeof(buf1)));
2482
2483 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2484 ta_crypt_cmd_random_number_generate(c, &session, buf2,
2485 sizeof(buf2))))
2486 goto out;
2487
2488 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2489 0, !=, memcmp(buf2, zeros, sizeof(buf2)));
2490
2491 (void)ADBG_EXPECT_COMPARE_SIGNED(c,
2492 0, !=, memcmp(buf2, buf1, sizeof(buf1)));
2493out:
2494 TEEC_CloseSession(&session);
2495 Do_ADBG_EndSubCase(c, "TEE get random");
2496}
Jens Wiklander14f48872018-06-29 15:30:13 +02002497ADBG_CASE_DEFINE(regression, 4004, xtest_tee_test_4004,
2498 "Test TEE Internal API get random");
Pascal Brandc639ac82015-07-02 08:53:34 +02002499
2500struct xtest_ae_case {
2501 uint32_t algo;
2502 uint32_t mode;
2503 uint32_t key_type;
2504 const uint8_t *key;
2505 size_t key_len;
2506 const uint8_t *nonce;
2507 size_t nonce_len;
2508 size_t aad_incr;
2509 const uint8_t *aad;
2510 size_t aad_len;
2511 size_t in_incr;
2512 const uint8_t *ptx;
2513 size_t ptx_len;
2514 const uint8_t *ctx;
2515 size_t ctx_len;
2516 const uint8_t *tag;
2517 size_t tag_len;
2518 size_t line;
2519};
2520
2521
2522#define ARRAY(a) a, ARRAY_SIZE(a)
2523#define NULL_ARRAY(a) NULL, 0
2524
2525#define XTEST_AE_CASE(algo, vect, aad_incr, in_incr, \
2526 aad_array, ptx_array, ctx_array) \
2527 { (algo), TEE_MODE_ENCRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2528 ARRAY(vect ## _nonce), (aad_incr), \
2529 aad_array(vect ## _aad), (in_incr), \
2530 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2531 ARRAY(vect ## _tag), \
2532 __LINE__ }, \
2533 { (algo), TEE_MODE_DECRYPT, TEE_TYPE_AES, ARRAY(vect ## _key), \
2534 ARRAY(vect ## _nonce), (aad_incr), \
2535 aad_array(vect ## _aad), (in_incr), \
2536 ptx_array(vect ## _ptx), ctx_array(vect ## _ctx), \
2537 ARRAY(vect ## _tag), \
2538 __LINE__ }
2539
2540#define XTEST_AE_CASE_AES_CCM(vect, aad_incr, in_incr) \
2541 XTEST_AE_CASE(TEE_ALG_AES_CCM, ae_data_aes_ccm_ ## vect, aad_incr, \
2542 in_incr, ARRAY, ARRAY, ARRAY)
2543
2544#define XTEST_AE_CASE_AES_GCM(vect, aad_incr, in_incr, \
2545 aad_array, ptx_array, ctx_array) \
2546 XTEST_AE_CASE(TEE_ALG_AES_GCM, ae_data_aes_gcm_ ## vect, aad_incr, \
2547 in_incr, aad_array, ptx_array, ctx_array)
2548
2549
2550
2551static const struct xtest_ae_case ae_cases[] = {
2552 XTEST_AE_CASE_AES_CCM(vect1, 3, 2),
2553 XTEST_AE_CASE_AES_CCM(vect2, 7, 13),
2554 XTEST_AE_CASE_AES_CCM(vect3, 5, 21),
2555
2556 XTEST_AE_CASE_AES_GCM(vect1, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2557 XTEST_AE_CASE_AES_GCM(vect2, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2558 XTEST_AE_CASE_AES_GCM(vect3, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
Jens Wiklander9fc63f52017-11-10 11:13:26 +01002559 XTEST_AE_CASE_AES_GCM(vect3, 0, 0x1F, NULL_ARRAY, ARRAY, ARRAY),
2560 XTEST_AE_CASE_AES_GCM(vect4, 5, 0x20, ARRAY, ARRAY, ARRAY),
Pascal Brandc639ac82015-07-02 08:53:34 +02002561 XTEST_AE_CASE_AES_GCM(vect5, 5, 9, ARRAY, ARRAY, ARRAY),
2562 XTEST_AE_CASE_AES_GCM(vect6, 5, 9, ARRAY, ARRAY, ARRAY),
2563 XTEST_AE_CASE_AES_GCM(vect7, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2564 XTEST_AE_CASE_AES_GCM(vect8, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2565 XTEST_AE_CASE_AES_GCM(vect9, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2566 XTEST_AE_CASE_AES_GCM(vect10, 5, 9, ARRAY, ARRAY, ARRAY),
2567 XTEST_AE_CASE_AES_GCM(vect11, 5, 9, ARRAY, ARRAY, ARRAY),
2568 XTEST_AE_CASE_AES_GCM(vect12, 5, 9, ARRAY, ARRAY, ARRAY),
2569 XTEST_AE_CASE_AES_GCM(vect13, 0, 0, NULL_ARRAY, NULL_ARRAY, NULL_ARRAY),
2570 XTEST_AE_CASE_AES_GCM(vect14, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2571 XTEST_AE_CASE_AES_GCM(vect15, 0, 9, NULL_ARRAY, ARRAY, ARRAY),
2572 XTEST_AE_CASE_AES_GCM(vect16, 5, 9, ARRAY, ARRAY, ARRAY),
2573 XTEST_AE_CASE_AES_GCM(vect17, 5, 9, ARRAY, ARRAY, ARRAY),
2574 XTEST_AE_CASE_AES_GCM(vect18, 5, 9, ARRAY, ARRAY, ARRAY),
Jens Wiklanderf6efe242017-11-06 13:16:43 +01002575#ifdef CFG_GCM_NIST_VECTORS
2576#include "gcmDecrypt128.h"
2577#include "gcmDecrypt192.h"
2578#include "gcmDecrypt256.h"
2579#include "gcmEncryptExtIV128.h"
2580#include "gcmEncryptExtIV192.h"
2581#include "gcmEncryptExtIV256.h"
2582#endif
Pascal Brandc639ac82015-07-02 08:53:34 +02002583};
2584
2585static void xtest_tee_test_4005(ADBG_Case_t *c)
2586{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002587 TEEC_Session session = { };
2588 TEE_OperationHandle op = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02002589 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01002590 TEE_Attribute key_attr = { };
2591 uint8_t out[512] = { };
2592 size_t out_size = 0;
2593 size_t out_offs = 0;
2594 uint32_t ret_orig = 0;
2595 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02002596
2597 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2598 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
2599 &ret_orig)))
2600 return;
2601
2602 for (n = 0; n < ARRAY_SIZE(ae_cases); n++) {
2603 Do_ADBG_BeginSubCase(c, "AE case %d algo 0x%x line %d",
2604 (int)n, (unsigned int)ae_cases[n].algo,
2605 (int)ae_cases[n].line);
2606
2607 key_attr.attributeID = TEE_ATTR_SECRET_VALUE;
2608 key_attr.content.ref.buffer = (void *)ae_cases[n].key;
2609 key_attr.content.ref.length = ae_cases[n].key_len;
2610
2611 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2612 ta_crypt_cmd_allocate_operation(c, &session, &op,
2613 ae_cases[n].algo, ae_cases[n].mode,
2614 key_attr.content.ref.length * 8)))
2615 goto out;
2616
2617 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2618 ta_crypt_cmd_allocate_transient_object(c, &session,
2619 ae_cases[n].key_type,
2620 key_attr.content.ref.length * 8,
2621 &key_handle)))
2622 goto out;
2623
2624 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2625 ta_crypt_cmd_populate_transient_object(c, &session,
2626 key_handle, &key_attr, 1)))
2627 goto out;
2628
2629 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2630 ta_crypt_cmd_set_operation_key(c, &session, op,
2631 key_handle)))
2632 goto out;
2633
2634 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2635 ta_crypt_cmd_free_transient_object(c, &session,
2636 key_handle)))
2637 goto out;
2638 key_handle = TEE_HANDLE_NULL;
2639
2640 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2641 ta_crypt_cmd_ae_init(c, &session, op, ae_cases[n].nonce,
2642 ae_cases[n].nonce_len, ae_cases[n].tag_len,
2643 ae_cases[n].aad_len, ae_cases[n].ptx_len)))
2644 goto out;
2645
2646 if (ae_cases[n].aad != NULL) {
2647 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2648 ta_crypt_cmd_ae_update_aad(c, &session, op,
2649 ae_cases[n].aad, ae_cases[n].aad_incr)))
2650 goto out;
2651
2652 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2653 ta_crypt_cmd_ae_update_aad(c, &session, op,
2654 ae_cases[n].aad + ae_cases[n].aad_incr,
2655 ae_cases [n].aad_len -
2656 ae_cases[n].aad_incr)))
2657 goto out;
2658 }
2659
2660 out_offs = 0;
2661 out_size = sizeof(out);
2662 memset(out, 0, sizeof(out));
2663 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2664 if (ae_cases[n].ptx != NULL) {
2665 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2666 ta_crypt_cmd_ae_update(c, &session, op,
2667 ae_cases[n].ptx,
2668 ae_cases[n].in_incr, out,
2669 &out_size)))
2670 goto out;
2671 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002672 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2673 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2674 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002675 }
2676 } else {
2677 if (ae_cases[n].ctx != NULL) {
2678 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2679 ta_crypt_cmd_ae_update(c, &session, op,
2680 ae_cases[n].ctx,
2681 ae_cases[n].in_incr, out,
2682 &out_size)))
2683 goto out;
2684 out_offs += out_size;
Jerome Forissierc13fafa2017-06-01 15:49:07 +02002685 if (ae_cases[n].algo == TEE_ALG_AES_GCM)
2686 ADBG_EXPECT_COMPARE_UNSIGNED(c,
2687 out_size, ==, ae_cases[n].in_incr);
Pascal Brandc639ac82015-07-02 08:53:34 +02002688 }
2689 }
2690
2691 out_size = sizeof(out) - out_offs;
2692 if (ae_cases[n].mode == TEE_MODE_ENCRYPT) {
2693 uint8_t out_tag[64];
2694 size_t out_tag_len = MIN(sizeof(out_tag),
2695 ae_cases[n].tag_len);
2696
2697 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2698 ta_crypt_cmd_ae_encrypt_final(c, &session, op,
2699 ae_cases[n].ptx + ae_cases[n].in_incr,
2700 ae_cases[n].ptx_len -
2701 ae_cases[n].in_incr,
2702 out + out_offs,
2703 &out_size, out_tag, &out_tag_len)))
2704 goto out;
2705
2706 (void)ADBG_EXPECT_BUFFER(c,
2707 ae_cases[n].tag, ae_cases[n].tag_len, out_tag,
2708 out_tag_len);
2709
2710 out_offs += out_size;
2711
2712 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ctx,
2713 ae_cases[n].ctx_len, out, out_offs);
2714 } else {
2715 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2716 ta_crypt_cmd_ae_decrypt_final(c, &session, op,
2717 ae_cases[n].ctx + ae_cases[n].in_incr,
2718 ae_cases[n].ctx_len -
2719 ae_cases[n].in_incr,
2720 out + out_offs,
2721 &out_size, ae_cases[n].tag,
2722 ae_cases[n].tag_len)))
2723 goto out;
2724
2725 out_offs += out_size;
2726
2727 (void)ADBG_EXPECT_BUFFER(c, ae_cases[n].ptx,
2728 ae_cases[n].ptx_len, out, out_offs);
2729 }
2730
2731 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
2732 ta_crypt_cmd_free_operation(c, &session, op)))
2733 goto out;
2734
2735 Do_ADBG_EndSubCase(c, NULL);
2736 }
2737out:
2738 TEEC_CloseSession(&session);
2739}
Jens Wiklander14f48872018-06-29 15:30:13 +02002740ADBG_CASE_DEFINE(regression, 4005, xtest_tee_test_4005,
2741 "Test TEE Internal API Authenticated Encryption operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02002742
2743struct xtest_ac_case {
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002744 unsigned int level;
Pascal Brandc639ac82015-07-02 08:53:34 +02002745 uint32_t algo;
2746 TEE_OperationMode mode;
2747
2748 union {
2749 struct {
2750 const uint8_t *modulus;
2751 size_t modulus_len;
2752
2753 const uint8_t *pub_exp;
2754 size_t pub_exp_len;
2755
2756 const uint8_t *priv_exp;
2757 size_t priv_exp_len;
2758
2759 const uint8_t *prime1; /* q */
2760 size_t prime1_len;
2761 const uint8_t *prime2; /* p */
2762 size_t prime2_len;
2763 const uint8_t *exp1; /* dp */
2764 size_t exp1_len;
2765 const uint8_t *exp2; /* dq */
2766 size_t exp2_len;
2767 const uint8_t *coeff; /* iq */
2768 size_t coeff_len;
2769
2770 int salt_len;
2771 } rsa;
2772 struct {
2773 const uint8_t *prime;
2774 size_t prime_len;
2775 const uint8_t *sub_prime;
2776 size_t sub_prime_len;
2777 const uint8_t *base;
2778 size_t base_len;
2779 const uint8_t *pub_val;
2780 size_t pub_val_len;
2781 const uint8_t *priv_val;
2782 size_t priv_val_len;
2783 } dsa;
Pascal Brand3e143ee2015-07-15 17:17:16 +02002784 struct {
2785 const uint8_t *private;
2786 size_t private_len;
2787 const uint8_t *public_x;
2788 size_t public_x_len;
2789 const uint8_t *public_y;
2790 size_t public_y_len;
2791 } ecdsa;
Pascal Brandc639ac82015-07-02 08:53:34 +02002792 } params;
2793
2794 const uint8_t *ptx;
2795 size_t ptx_len;
2796 const uint8_t *ctx;
2797 size_t ctx_len;
2798 size_t line;
2799};
2800
2801#define WITHOUT_SALT(x) -1
2802#define WITH_SALT(x) x
2803
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002804#define XTEST_AC_CASE(level, algo, mode, vect, union_params) \
2805 { level, (algo), (mode), .params = union_params, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002806 ARRAY(vect ## _ptx), \
2807 ARRAY(vect ## _out), \
2808 __LINE__ }
2809
2810#define XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt) \
2811 { .rsa = { \
2812 ARRAY(vect ## _modulus), \
2813 ARRAY(vect ## _pub_exp), \
2814 ARRAY(vect ## _priv_exp), \
2815 opt_crt_array(vect ## _prime1), \
2816 opt_crt_array(vect ## _prime2), \
2817 opt_crt_array(vect ## _exp1), \
2818 opt_crt_array(vect ## _exp2), \
2819 opt_crt_array(vect ## _coeff), \
2820 opt_salt(vect ## _salt_len) \
2821 } }
2822
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002823#define XTEST_AC_RSA_CASE(level, algo, mode, vect, opt_crt_array, opt_salt) \
2824 XTEST_AC_CASE(level, algo, mode, vect, \
Pascal Brandc639ac82015-07-02 08:53:34 +02002825 XTEST_AC_RSA_UNION(vect, opt_crt_array, opt_salt))
2826
2827#define XTEST_AC_DSA_UNION(vect) \
2828 { .dsa = { \
2829 ARRAY(vect ## _prime), \
2830 ARRAY(vect ## _sub_prime), \
2831 ARRAY(vect ## _base), \
2832 ARRAY(vect ## _pub_val), \
2833 ARRAY(vect ## _priv_val), \
2834 } }
2835
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002836#define XTEST_AC_DSA_CASE(level, algo, mode, vect) \
2837 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_DSA_UNION(vect))
Pascal Brandc639ac82015-07-02 08:53:34 +02002838
Pascal Brand3e143ee2015-07-15 17:17:16 +02002839#define XTEST_AC_ECDSA_UNION(vect) \
2840 { .ecdsa = { \
2841 ARRAY(vect ## _private), \
2842 ARRAY(vect ## _public_x), \
2843 ARRAY(vect ## _public_y), \
2844 } }
2845
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02002846#define XTEST_AC_ECDSA_CASE(level, algo, mode, vect) \
2847 XTEST_AC_CASE(level, algo, mode, vect, XTEST_AC_ECDSA_UNION(vect))
Pascal Brand3e143ee2015-07-15 17:17:16 +02002848
Pascal Brandc639ac82015-07-02 08:53:34 +02002849static const struct xtest_ac_case xtest_ac_cases[] = {
2850 /* RSA test without crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002851 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002852 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002853 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002854 ac_rsassa_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002855 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002856 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002857 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002858 ac_rsassa_vect2, NULL_ARRAY, WITHOUT_SALT),
Jerome Forissiere576f052018-03-23 21:24:21 +08002859 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
2860 ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT),
2861 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
2862 ac_rsassa_vect18, NULL_ARRAY, WITHOUT_SALT),
Jerome Forissier0451e372018-03-27 00:10:23 +08002863 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
2864 ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT),
2865 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
2866 ac_rsassa_vect19, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002867 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002868 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002869 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002870 ac_rsassa_vect3, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002871 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002872 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002873 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002874 ac_rsassa_vect4, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002875 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002876 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002877 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002878 ac_rsassa_vect5, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002879 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002880 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002881 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002882 ac_rsassa_vect6, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002883 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002884 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002885 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002886 ac_rsassa_vect7, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002887 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
2888 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
2889 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
2890 ac_rsassa_vect8, NULL_ARRAY, WITHOUT_SALT),
Pascal Brandc639ac82015-07-02 08:53:34 +02002891
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002892 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002893 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002894 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA224, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002895 ac_rsassa_vect16, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002896
Gabor Szekely2ad190f2018-09-14 14:05:06 +00002897#ifdef CFG_CRYPTO_RSASSA_NA1
2898 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5, TEE_MODE_SIGN,
2899 ac_rsassa_vect20, NULL_ARRAY, WITHOUT_SALT),
2900 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5, TEE_MODE_VERIFY,
2901 ac_rsassa_vect20, NULL_ARRAY, WITHOUT_SALT),
2902#endif
2903
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002904 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002905 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002906 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002907 ac_rsassa_vect9, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002908
2909 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002910 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002911 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002912 ac_rsassa_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002913
2914 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002915 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002916 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002917 ac_rsassa_vect11, NULL_ARRAY, WITHOUT_SALT),
2918
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002919 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
2920 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002921 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002922 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002923 ac_rsassa_vect12, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002924
2925 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2926 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002927 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002928 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
2929 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002930 ac_rsassa_vect17, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002931
2932 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2933 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002934 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002935 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
2936 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002937 ac_rsassa_vect13, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002938
2939 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2940 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002941 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002942 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
2943 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002944 ac_rsassa_vect14, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002945
2946 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2947 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002948 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002949 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
2950 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002951 ac_rsassa_vect15, NULL_ARRAY, WITH_SALT),
2952
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002953 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002954 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002955 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002956 ac_rsaes_pkcs1_v1_5_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002957 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002958 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002959 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002960 ac_rsaes_pkcs1_v1_5_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002961 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002962 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002963 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002964 ac_rsaes_pkcs1_v1_5_vect15, NULL_ARRAY, WITHOUT_SALT),
2965
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002966 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2967 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002968 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002969 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2970 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002971 ac_rsaes_oaep_vect1, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002972 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2973 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002974 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002975 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2976 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002977 ac_rsaes_oaep_vect2, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002978 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2979 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002980 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002981 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
2982 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002983 ac_rsaes_oaep_vect10, NULL_ARRAY, WITHOUT_SALT),
2984
2985 /* RSA test with crt parameters */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002986 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002987 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002988 XTEST_AC_RSA_CASE(0, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002989 ac_rsassa_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002990 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002991 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002992 XTEST_AC_RSA_CASE(1, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02002993 ac_rsassa_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002994 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002995 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002996 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02002997 ac_rsassa_vect3, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01002998 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02002999 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003000 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003001 ac_rsassa_vect4, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003002 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003003 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003004 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003005 ac_rsassa_vect5, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003006 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003007 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003008 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003009 ac_rsassa_vect6, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003010 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003011 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003012 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003013 ac_rsassa_vect7, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003014 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003015 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003016 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003017 ac_rsassa_vect8, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003018 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003019 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003020 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_V1_5_SHA256, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003021 ac_rsassa_vect9, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003022 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003023 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003024 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA384, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003025 ac_rsassa_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003026 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003027 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003028 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_V1_5_SHA512, TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003029 ac_rsassa_vect11, ARRAY, WITHOUT_SALT),
3030
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003031 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1,
3032 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003033 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003034 XTEST_AC_RSA_CASE(1,TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1, TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003035 ac_rsassa_vect12, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003036 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3037 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003038 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003039 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224,
3040 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003041 ac_rsassa_vect17, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003042 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3043 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003044 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003045 XTEST_AC_RSA_CASE(0, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256,
3046 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003047 ac_rsassa_vect13, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003048 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3049 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003050 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003051 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384,
3052 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003053 ac_rsassa_vect14, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003054 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3055 TEE_MODE_VERIFY,
Pascal Brandc639ac82015-07-02 08:53:34 +02003056 ac_rsassa_vect15, ARRAY, WITH_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003057 XTEST_AC_RSA_CASE(1, TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512,
3058 TEE_MODE_SIGN,
Pascal Brandc639ac82015-07-02 08:53:34 +02003059 ac_rsassa_vect15, ARRAY, WITH_SALT),
3060
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003061 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003062 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003063 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003064 ac_rsaes_pkcs1_v1_5_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003065 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003066 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003067 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003068 ac_rsaes_pkcs1_v1_5_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003069 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003070 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003071 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_V1_5, TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003072 ac_rsaes_pkcs1_v1_5_vect15, ARRAY, WITHOUT_SALT),
3073
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003074 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3075 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003076 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003077 XTEST_AC_RSA_CASE(0, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3078 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003079 ac_rsaes_oaep_vect1, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003080 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3081 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003082 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003083 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3084 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003085 ac_rsaes_oaep_vect2, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003086 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3087 TEE_MODE_DECRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003088 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003089 XTEST_AC_RSA_CASE(1, TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1,
3090 TEE_MODE_ENCRYPT,
Pascal Brandc639ac82015-07-02 08:53:34 +02003091 ac_rsaes_oaep_vect10, ARRAY, WITHOUT_SALT),
3092
3093 /* DSA tests */
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003094 /* [mod = L=1024, N=160, SHA-1] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003095 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect1),
3096 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003097 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect2),
3098 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect2),
3099 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect3),
3100 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect3),
3101 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect4),
3102 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect4),
3103 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect5),
3104 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect5),
3105 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect6),
3106 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect6),
3107 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect7),
3108 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect7),
3109 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect8),
3110 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect8),
3111 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect9),
3112 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect9),
3113 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect10),
3114 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect10),
3115 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect11),
3116 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect11),
3117 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect12),
3118 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect12),
3119 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect13),
3120 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect13),
3121 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect14),
3122 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect14),
3123 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_VERIFY, ac_dsa_vect15),
3124 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA1, TEE_MODE_SIGN, ac_dsa_vect15),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003125 /* [mod = L=1024, N=160, SHA-224] - GP NOT SUPPORTED */
3126 /* [mod = L=1024, N=160, SHA-256] - GP NOT SUPPORTED */
3127 /* [mod = L=1024, N=160, SHA-384] - GP NOT SUPPORTED */
3128 /* [mod = L=1024, N=160, SHA-512] - GP NOT SUPPORTED */
3129 /* [mod = L=2048, N=224, SHA-1] - GP NOT SUPPORTED */
3130 /* [mod = L=2048, N=224, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003131 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect91),
3132 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect91),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003133 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect92),
3134 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect92),
3135 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect93),
3136 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect93),
3137 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect94),
3138 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect94),
3139 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect95),
3140 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect95),
3141 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect96),
3142 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect96),
3143 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect97),
3144 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect97),
3145 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect98),
3146 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect98),
3147 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect99),
3148 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect99),
3149 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect100),
3150 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect100),
3151 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect101),
3152 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect101),
3153 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect102),
3154 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect102),
3155 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect103),
3156 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect103),
3157 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect104),
3158 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect104),
3159 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect105),
3160 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect105),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003161 /* [mod = L=2048, N=224, SHA-256] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003162 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect106),
3163 XTEST_AC_DSA_CASE(0, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect106),
3164 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect107),
3165 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect107),
3166 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect108),
3167 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect108),
3168 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect109),
3169 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect109),
3170 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect110),
3171 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect110),
3172 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect111),
3173 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect111),
3174 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect112),
3175 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect112),
3176 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect113),
3177 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect113),
3178 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect114),
3179 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect114),
3180 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect115),
3181 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect115),
3182 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect116),
3183 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect116),
3184 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect117),
3185 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect117),
3186 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect118),
3187 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect118),
3188 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect119),
3189 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect119),
3190 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect120),
3191 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect120),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003192 /* [mod = L=2048, N=224, SHA-384] - GP NOT SUPPORTED */
3193 /* [mod = L=2048, N=224, SHA-512] - GP NOT SUPPORTED */
3194 /* [mod = L=2048, N=256, SHA-1] - GP NOT SUPPORTED */
3195 /* [mod = L=2048, N=256, SHA-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003196 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect166),
3197 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect166),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003198 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect167),
3199 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect167),
3200 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect168),
3201 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect168),
3202 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect169),
3203 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect169),
3204 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect170),
3205 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect170),
3206 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect171),
3207 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect171),
3208 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect172),
3209 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect172),
3210 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect173),
3211 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect173),
3212 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect174),
3213 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect174),
3214 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect175),
3215 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect175),
3216 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect176),
3217 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect176),
3218 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect177),
3219 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect177),
3220 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect178),
3221 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect178),
3222 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect179),
3223 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect179),
3224 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_VERIFY, ac_dsa_vect180),
3225 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA224, TEE_MODE_SIGN, ac_dsa_vect180),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003226 /* [mod = L=2048, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003227 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect181),
3228 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect181),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003229 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect182),
3230 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect182),
3231 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect183),
3232 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect183),
3233 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect184),
3234 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect184),
3235 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect185),
3236 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect185),
3237 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect186),
3238 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect186),
3239 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect187),
3240 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect187),
3241 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect188),
3242 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect188),
3243 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect189),
3244 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect189),
3245 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect190),
3246 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect190),
3247 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect191),
3248 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect191),
3249 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect192),
3250 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect192),
3251 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect193),
3252 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect193),
3253 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect194),
3254 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect194),
3255 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect195),
3256 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect195),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003257 /* [mod = L=2048, N=256, SHA-384] - GP NOT SUPPORTED */
3258 /* [mod = L=2048, N=256, SHA-512] - GP NOT SUPPORTED */
3259 /* [mod = L=3072, N=256, SHA-1] - GP NOT SUPPORTED */
3260 /* [mod = L=3072, N=256, SHA-224] - GP NOT SUPPORTED */
3261 /* [mod = L=3072, N=256, SHA-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003262 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect256),
3263 XTEST_AC_DSA_CASE(1, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect256),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003264 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect257),
3265 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect257),
3266 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect258),
3267 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect258),
3268 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect259),
3269 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect259),
3270 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect260),
3271 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect260),
3272 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect261),
3273 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect261),
3274 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect262),
3275 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect262),
3276 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect263),
3277 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect263),
3278 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect264),
3279 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect264),
3280 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect265),
3281 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect265),
3282 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect266),
3283 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect266),
3284 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect267),
3285 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect267),
3286 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect268),
3287 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect268),
3288 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect269),
3289 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect269),
3290 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_VERIFY, ac_dsa_vect270),
3291 XTEST_AC_DSA_CASE(15, TEE_ALG_DSA_SHA256, TEE_MODE_SIGN, ac_dsa_vect270),
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003292 /* [mod = L=3072, N=256, SHA-384] - GP NOT SUPPORTED */
3293 /* [mod = L=3072, N=256, SHA-512] - GP NOT SUPPORTED */
Pascal Brand3e143ee2015-07-15 17:17:16 +02003294
3295 /* ECDSA tests */
Cedric Chaumontc7654962015-09-09 14:56:36 +02003296 /* [P-192] */
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003297 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003298 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003299 XTEST_AC_ECDSA_CASE(0, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003300 nist_186_2_ecdsa_testvector_1),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003301 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003302 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003303 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003304 nist_186_2_ecdsa_testvector_2),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003305 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003306 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003307 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003308 nist_186_2_ecdsa_testvector_3),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003309 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003310 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003311 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003312 nist_186_2_ecdsa_testvector_4),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003313 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003314 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003315 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003316 nist_186_2_ecdsa_testvector_5),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003317 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003318 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003319 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003320 nist_186_2_ecdsa_testvector_6),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003321 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003322 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003323 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003324 nist_186_2_ecdsa_testvector_7),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003325 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003326 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003327 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003328 nist_186_2_ecdsa_testvector_8),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003329 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003330 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003331 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003332 nist_186_2_ecdsa_testvector_9),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003333 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003334 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003335 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003336 nist_186_2_ecdsa_testvector_10),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003337 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003338 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003339 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003340 nist_186_2_ecdsa_testvector_11),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003341 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003342 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003343 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003344 nist_186_2_ecdsa_testvector_12),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003345 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003346 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003347 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003348 nist_186_2_ecdsa_testvector_13),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003349 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003350 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003351 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003352 nist_186_2_ecdsa_testvector_14),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003353 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003354 nist_186_2_ecdsa_testvector_15),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003355 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P192, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003356 nist_186_2_ecdsa_testvector_15),
3357 /* [P-224] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003358 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003359 nist_186_2_ecdsa_testvector_16),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003360 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003361 nist_186_2_ecdsa_testvector_16),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003362 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003363 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003364 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003365 nist_186_2_ecdsa_testvector_17),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003366 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003367 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003368 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003369 nist_186_2_ecdsa_testvector_18),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003370 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003371 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003372 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003373 nist_186_2_ecdsa_testvector_19),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003374 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003375 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003376 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003377 nist_186_2_ecdsa_testvector_20),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003378 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003379 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003380 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003381 nist_186_2_ecdsa_testvector_21),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003382 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003383 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003384 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003385 nist_186_2_ecdsa_testvector_22),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003386 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003387 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003388 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003389 nist_186_2_ecdsa_testvector_23),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003390 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003391 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003392 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003393 nist_186_2_ecdsa_testvector_24),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003394 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003395 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003396 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003397 nist_186_2_ecdsa_testvector_25),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003398 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003399 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003400 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003401 nist_186_2_ecdsa_testvector_26),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003402 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003403 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003404 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003405 nist_186_2_ecdsa_testvector_27),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003406 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003407 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003408 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003409 nist_186_2_ecdsa_testvector_28),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003410 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003411 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003412 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003413 nist_186_2_ecdsa_testvector_29),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003414 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003415 nist_186_2_ecdsa_testvector_30),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003416 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P224, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003417 nist_186_2_ecdsa_testvector_30),
3418 /* [P-256] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003419 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003420 nist_186_2_ecdsa_testvector_31),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003421 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003422 nist_186_2_ecdsa_testvector_31),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003423 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003424 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003425 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003426 nist_186_2_ecdsa_testvector_32),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003427 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003428 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003429 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003430 nist_186_2_ecdsa_testvector_33),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003431 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003432 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003433 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003434 nist_186_2_ecdsa_testvector_34),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003435 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003436 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003437 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003438 nist_186_2_ecdsa_testvector_35),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003439 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003440 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003441 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003442 nist_186_2_ecdsa_testvector_36),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003443 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003444 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003445 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003446 nist_186_2_ecdsa_testvector_37),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003447 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003448 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003449 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003450 nist_186_2_ecdsa_testvector_38),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003451 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003452 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003453 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003454 nist_186_2_ecdsa_testvector_39),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003455 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003456 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003457 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003458 nist_186_2_ecdsa_testvector_40),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003459 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003460 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003461 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003462 nist_186_2_ecdsa_testvector_41),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003463 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003464 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003465 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003466 nist_186_2_ecdsa_testvector_42),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003467 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003468 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003469 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003470 nist_186_2_ecdsa_testvector_43),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003471 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003472 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003473 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003474 nist_186_2_ecdsa_testvector_44),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003475 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003476 nist_186_2_ecdsa_testvector_45),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003477 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P256, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003478 nist_186_2_ecdsa_testvector_45),
3479 /* [P-384] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003480 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003481 nist_186_2_ecdsa_testvector_46),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003482 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003483 nist_186_2_ecdsa_testvector_46),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003484 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003485 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003486 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003487 nist_186_2_ecdsa_testvector_47),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003488 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003489 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003490 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003491 nist_186_2_ecdsa_testvector_48),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003492 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003493 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003494 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003495 nist_186_2_ecdsa_testvector_49),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003496 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003497 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003498 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003499 nist_186_2_ecdsa_testvector_50),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003500 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003501 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003502 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003503 nist_186_2_ecdsa_testvector_51),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003504 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003505 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003506 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003507 nist_186_2_ecdsa_testvector_52),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003508 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003509 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003510 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003511 nist_186_2_ecdsa_testvector_53),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003512 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003513 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003514 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003515 nist_186_2_ecdsa_testvector_54),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003516 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003517 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003518 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003519 nist_186_2_ecdsa_testvector_55),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003520 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003521 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003522 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003523 nist_186_2_ecdsa_testvector_56),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003524 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003525 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003526 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003527 nist_186_2_ecdsa_testvector_57),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003528 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003529 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003530 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003531 nist_186_2_ecdsa_testvector_58),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003532 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003533 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003534 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003535 nist_186_2_ecdsa_testvector_59),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003536 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003537 nist_186_2_ecdsa_testvector_60),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003538 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P384, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003539 nist_186_2_ecdsa_testvector_60),
3540 /* [P-521] */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003541 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003542 nist_186_2_ecdsa_testvector_61),
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01003543 XTEST_AC_ECDSA_CASE(1, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003544 nist_186_2_ecdsa_testvector_61),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003545 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003546 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003547 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003548 nist_186_2_ecdsa_testvector_62),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003549 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003550 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003551 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003552 nist_186_2_ecdsa_testvector_63),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003553 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003554 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003555 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003556 nist_186_2_ecdsa_testvector_64),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003557 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003558 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003559 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003560 nist_186_2_ecdsa_testvector_65),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003561 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003562 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003563 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003564 nist_186_2_ecdsa_testvector_66),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003565 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003566 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003567 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003568 nist_186_2_ecdsa_testvector_67),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003569 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003570 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003571 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003572 nist_186_2_ecdsa_testvector_68),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003573 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003574 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003575 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003576 nist_186_2_ecdsa_testvector_69),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003577 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003578 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003579 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003580 nist_186_2_ecdsa_testvector_70),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003581 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003582 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003583 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003584 nist_186_2_ecdsa_testvector_71),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003585 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003586 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003587 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003588 nist_186_2_ecdsa_testvector_72),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003589 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003590 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003591 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003592 nist_186_2_ecdsa_testvector_73),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003593 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003594 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003595 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003596 nist_186_2_ecdsa_testvector_74),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003597 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_VERIFY,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003598 nist_186_2_ecdsa_testvector_75),
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003599 XTEST_AC_ECDSA_CASE(15, TEE_ALG_ECDSA_P521, TEE_MODE_SIGN,
Cedric Chaumontc7654962015-09-09 14:56:36 +02003600 nist_186_2_ecdsa_testvector_75),
3601 /* [K-163] - GP NOT SUPPORTED */
3602 /* [K-233] - GP NOT SUPPORTED */
3603 /* [K-283] - GP NOT SUPPORTED */
3604 /* [K-409] - GP NOT SUPPORTED */
3605 /* [K-571] - GP NOT SUPPORTED */
3606 /* [B-163] - GP NOT SUPPORTED */
3607 /* [B-233] - GP NOT SUPPORTED */
3608 /* [B-283] - GP NOT SUPPORTED */
3609 /* [B-409] - GP NOT SUPPORTED */
3610 /* [B-571] - GP NOT SUPPORTED */
Pascal Brandc639ac82015-07-02 08:53:34 +02003611};
3612
3613static bool create_key(ADBG_Case_t *c, TEEC_Session *s,
3614 uint32_t max_key_size, uint32_t key_type,
3615 TEE_Attribute *attrs, size_t num_attrs,
3616 TEE_ObjectHandle *handle)
3617{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003618 size_t n = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02003619
3620 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3621 ta_crypt_cmd_allocate_transient_object(c, s, key_type,
3622 max_key_size, handle)))
3623 return false;
3624
3625 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3626 ta_crypt_cmd_populate_transient_object(c, s, *handle, attrs,
3627 num_attrs)))
3628 return false;
3629
3630 for (n = 0; n < num_attrs; n++) {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003631 uint8_t out[512] = { };
3632 size_t out_size = sizeof(out);
Pascal Brand3e143ee2015-07-15 17:17:16 +02003633
3634 if (attrs[n].attributeID == TEE_ATTR_ECC_CURVE)
3635 continue;
3636
Pascal Brandc639ac82015-07-02 08:53:34 +02003637 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3638 ta_crypt_cmd_get_object_buffer_attribute(c, s, *handle,
3639 attrs[n].attributeID, out, &out_size)))
3640 return false;
3641
Pascal Brand3e143ee2015-07-15 17:17:16 +02003642 if (out_size < attrs[n].content.ref.length) {
3643 memmove(out + (attrs[n].content.ref.length - out_size),
3644 out,
3645 attrs[n].content.ref.length);
3646 memset(out, 0, attrs[n].content.ref.length - out_size);
3647 out_size = attrs[n].content.ref.length;
3648 }
3649
Pascal Brandc639ac82015-07-02 08:53:34 +02003650 if (!ADBG_EXPECT_BUFFER(c, attrs[n].content.ref.buffer,
3651 attrs[n].content.ref.length, out, out_size))
3652 return false;
3653 }
3654
3655 return true;
3656}
3657
3658static void xtest_tee_test_4006(ADBG_Case_t *c)
3659{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003660 TEEC_Session session = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02003661 TEE_OperationHandle op = TEE_HANDLE_NULL;
3662 TEE_ObjectHandle priv_key_handle = TEE_HANDLE_NULL;
3663 TEE_ObjectHandle pub_key_handle = TEE_HANDLE_NULL;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003664 TEE_Attribute key_attrs[8] = { };
3665 TEE_Attribute algo_params[1] = { };
3666 size_t num_algo_params = 0;
3667 uint8_t out[512] = { };
3668 size_t out_size = 0;
3669 uint8_t out_enc[512] = { };
3670 size_t out_enc_size = 0;
3671 uint8_t ptx_hash[TEE_MAX_HASH_SIZE] = { };
Etienne Carriere481c6602019-01-22 13:27:26 +01003672 size_t ptx_hash_size = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01003673 size_t max_key_size = 0;
3674 size_t num_key_attrs = 0;
3675 uint32_t ret_orig = 0;
3676 size_t n = 0;
3677 uint32_t curve = 0;
3678 uint32_t hash_algo = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02003679
3680 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3681 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
3682 &ret_orig)))
3683 return;
3684
3685 for (n = 0; n < ARRAY_SIZE(xtest_ac_cases); n++) {
3686 const struct xtest_ac_case *tv = xtest_ac_cases + n;
3687
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02003688 if (tv->level > level)
3689 continue;
3690
Pascal Brandc639ac82015-07-02 08:53:34 +02003691 Do_ADBG_BeginSubCase(c, "Asym Crypto case %d algo 0x%x line %d",
3692 (int)n, (unsigned int)tv->algo,
3693 (int)tv->line);
3694
3695 /*
3696 * When signing or verifying we're working with the hash of
3697 * the payload.
3698 */
3699 if (tv->mode == TEE_MODE_VERIFY || tv->mode == TEE_MODE_SIGN) {
Pascal Brand3e143ee2015-07-15 17:17:16 +02003700 if (TEE_ALG_GET_MAIN_ALG(tv->algo) == TEE_MAIN_ALGO_ECDSA)
3701 hash_algo = TEE_ALG_SHA1;
Gabor Szekely2ad190f2018-09-14 14:05:06 +00003702#if defined(CFG_CRYPTO_RSASSA_NA1)
3703 else if (tv->algo == TEE_ALG_RSASSA_PKCS1_V1_5)
3704 hash_algo = TEE_ALG_SHA256;
3705#endif
Pascal Brand3e143ee2015-07-15 17:17:16 +02003706 else
3707 hash_algo = TEE_ALG_HASH_ALGO(
3708 TEE_ALG_GET_DIGEST_HASH(tv->algo));
Pascal Brandc639ac82015-07-02 08:53:34 +02003709
3710 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3711 ta_crypt_cmd_allocate_operation(c, &session,
3712 &op, hash_algo, TEE_MODE_DIGEST, 0)))
3713 goto out;
3714
3715 ptx_hash_size = sizeof(ptx_hash);
3716 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3717 ta_crypt_cmd_digest_do_final(c, & session, op,
3718 tv->ptx, tv->ptx_len, ptx_hash,
3719 &ptx_hash_size)))
3720 goto out;
3721
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02003722 /*
3723 * When we use DSA algorithms, the size of the hash we
3724 * consider equals the min between the size of the
3725 * "subprime" in the key and the size of the hash
3726 */
3727 if (TEE_ALG_GET_MAIN_ALG(tv->algo) ==
3728 TEE_MAIN_ALGO_DSA) {
3729 if (tv->params.dsa.sub_prime_len <=
3730 ptx_hash_size)
3731 ptx_hash_size =
3732 tv->params.dsa.sub_prime_len;
3733 }
3734
Pascal Brandc639ac82015-07-02 08:53:34 +02003735 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3736 ta_crypt_cmd_free_operation(c, &session, op)))
3737 goto out;
3738 }
3739
3740 num_algo_params = 0;
3741 num_key_attrs = 0;
3742 switch (TEE_ALG_GET_MAIN_ALG(tv->algo)) {
3743 case TEE_MAIN_ALGO_RSA:
3744 if (tv->params.rsa.salt_len > 0) {
3745 algo_params[0].attributeID =
3746 TEE_ATTR_RSA_PSS_SALT_LENGTH;
3747 algo_params[0].content.value.a =
3748 tv->params.rsa.salt_len;
3749 algo_params[0].content.value.b = 0;
3750 num_algo_params = 1;
3751 }
3752
3753 max_key_size = tv->params.rsa.modulus_len * 8;
3754
3755 xtest_add_attr(&num_key_attrs, key_attrs,
3756 TEE_ATTR_RSA_MODULUS,
3757 tv->params.rsa.modulus,
3758 tv->params.rsa.modulus_len);
3759 xtest_add_attr(&num_key_attrs, key_attrs,
3760 TEE_ATTR_RSA_PUBLIC_EXPONENT,
3761 tv->params.rsa.pub_exp,
3762 tv->params.rsa.pub_exp_len);
3763
3764 if (!ADBG_EXPECT_TRUE(c,
3765 create_key(c, &session,
3766 max_key_size,
3767 TEE_TYPE_RSA_PUBLIC_KEY,
3768 key_attrs,
3769 num_key_attrs,
3770 &pub_key_handle)))
3771 goto out;
3772
3773 xtest_add_attr(&num_key_attrs, key_attrs,
3774 TEE_ATTR_RSA_PRIVATE_EXPONENT,
3775 tv->params.rsa.priv_exp,
3776 tv->params.rsa.priv_exp_len);
3777
3778 if (tv->params.rsa.prime1_len != 0) {
3779 xtest_add_attr(&num_key_attrs, key_attrs,
3780 TEE_ATTR_RSA_PRIME1,
3781 tv->params.rsa.prime1,
3782 tv->params.rsa.prime1_len);
3783 }
3784
3785 if (tv->params.rsa.prime2_len != 0) {
3786 xtest_add_attr(&num_key_attrs, key_attrs,
3787 TEE_ATTR_RSA_PRIME2,
3788 tv->params.rsa.prime2,
3789 tv->params.rsa.prime2_len);
3790 }
3791
3792 if (tv->params.rsa.exp1_len != 0) {
3793 xtest_add_attr(&num_key_attrs, key_attrs,
3794 TEE_ATTR_RSA_EXPONENT1,
3795 tv->params.rsa.exp1,
3796 tv->params.rsa.exp1_len);
3797 }
3798
3799 if (tv->params.rsa.exp2_len != 0) {
3800 xtest_add_attr(&num_key_attrs, key_attrs,
3801 TEE_ATTR_RSA_EXPONENT2,
3802 tv->params.rsa.exp2,
3803 tv->params.rsa.exp2_len);
3804 }
3805
3806 if (tv->params.rsa.coeff_len != 0) {
3807 xtest_add_attr(&num_key_attrs, key_attrs,
3808 TEE_ATTR_RSA_COEFFICIENT,
3809 tv->params.rsa.coeff,
3810 tv->params.rsa.coeff_len);
3811 }
3812
3813 if (!ADBG_EXPECT_TRUE(c,
3814 create_key(c, &session,
3815 max_key_size,
3816 TEE_TYPE_RSA_KEYPAIR,
3817 key_attrs,
3818 num_key_attrs,
3819 &priv_key_handle)))
3820 goto out;
3821 break;
3822
3823 case TEE_MAIN_ALGO_DSA:
3824 max_key_size = tv->params.dsa.prime_len * 8;
3825
3826 xtest_add_attr(&num_key_attrs, key_attrs,
3827 TEE_ATTR_DSA_PRIME,
3828 tv->params.dsa.prime,
3829 tv->params.dsa.prime_len);
3830 xtest_add_attr(&num_key_attrs, key_attrs,
3831 TEE_ATTR_DSA_SUBPRIME,
3832 tv->params.dsa.sub_prime,
3833 tv->params.dsa.sub_prime_len);
3834 xtest_add_attr(&num_key_attrs, key_attrs,
3835 TEE_ATTR_DSA_BASE,
3836 tv->params.dsa.base,
3837 tv->params.dsa.base_len);
3838 xtest_add_attr(&num_key_attrs, key_attrs,
3839 TEE_ATTR_DSA_PUBLIC_VALUE,
3840 tv->params.dsa.pub_val,
3841 tv->params.dsa.pub_val_len);
3842
3843 if (!ADBG_EXPECT_TRUE(c,
3844 create_key(c, &session, max_key_size,
3845 TEE_TYPE_DSA_PUBLIC_KEY, key_attrs,
3846 num_key_attrs, &pub_key_handle)))
3847 goto out;
3848
3849 xtest_add_attr(&num_key_attrs, key_attrs,
3850 TEE_ATTR_DSA_PRIVATE_VALUE,
3851 tv->params.dsa.priv_val,
3852 tv->params.dsa.priv_val_len);
3853
3854 if (!ADBG_EXPECT_TRUE(c,
3855 create_key(c, &session, max_key_size,
3856 TEE_TYPE_DSA_KEYPAIR, key_attrs,
3857 num_key_attrs, &priv_key_handle)))
3858 goto out;
3859 break;
3860
Pascal Brand3e143ee2015-07-15 17:17:16 +02003861 case TEE_MAIN_ALGO_ECDSA:
3862 switch (tv->algo) {
3863 case TEE_ALG_ECDSA_P192:
3864 curve = TEE_ECC_CURVE_NIST_P192;
3865 break;
3866 case TEE_ALG_ECDSA_P224:
3867 curve = TEE_ECC_CURVE_NIST_P224;
3868 break;
3869 case TEE_ALG_ECDSA_P256:
3870 curve = TEE_ECC_CURVE_NIST_P256;
3871 break;
3872 case TEE_ALG_ECDSA_P384:
3873 curve = TEE_ECC_CURVE_NIST_P384;
3874 break;
3875 case TEE_ALG_ECDSA_P521:
3876 curve = TEE_ECC_CURVE_NIST_P521;
3877 break;
3878 default:
3879 curve = 0xFF;
3880 break;
3881 }
3882
3883 if (tv->algo == TEE_ALG_ECDSA_P521)
3884 max_key_size = 521;
3885 else
3886 max_key_size = tv->params.ecdsa.private_len * 8;
3887
3888 xtest_add_attr_value(&num_key_attrs, key_attrs,
3889 TEE_ATTR_ECC_CURVE, curve, 0);
3890 xtest_add_attr(&num_key_attrs, key_attrs,
3891 TEE_ATTR_ECC_PUBLIC_VALUE_X,
3892 tv->params.ecdsa.public_x,
3893 tv->params.ecdsa.public_x_len);
3894 xtest_add_attr(&num_key_attrs, key_attrs,
3895 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
3896 tv->params.ecdsa.public_y,
3897 tv->params.ecdsa.public_y_len);
3898
3899 if (!ADBG_EXPECT_TRUE(c,
3900 create_key(c, &session, max_key_size,
3901 TEE_TYPE_ECDSA_PUBLIC_KEY, key_attrs,
3902 num_key_attrs, &pub_key_handle)))
3903 goto out;
3904
3905 xtest_add_attr(&num_key_attrs, key_attrs,
3906 TEE_ATTR_ECC_PRIVATE_VALUE,
3907 tv->params.ecdsa.private,
3908 tv->params.ecdsa.private_len);
3909
3910 if (!ADBG_EXPECT_TRUE(c,
3911 create_key(c, &session, max_key_size,
3912 TEE_TYPE_ECDSA_KEYPAIR, key_attrs,
3913 num_key_attrs, &priv_key_handle)))
3914 goto out;
3915 break;
3916
Pascal Brandc639ac82015-07-02 08:53:34 +02003917 default:
3918 ADBG_EXPECT_TRUE(c, false);
3919 goto out;
3920 }
3921
3922 out_size = sizeof(out);
3923 memset(out, 0, sizeof(out));
3924 switch (tv->mode) {
3925 case TEE_MODE_ENCRYPT:
3926 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3927 ta_crypt_cmd_allocate_operation(c, &session,
Pascal Brand3e143ee2015-07-15 17:17:16 +02003928 &op, tv->algo, TEE_MODE_ENCRYPT,
3929 max_key_size)))
Pascal Brandc639ac82015-07-02 08:53:34 +02003930 goto out;
3931
3932 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3933 ta_crypt_cmd_set_operation_key(c, &session, op,
3934 pub_key_handle)))
3935 goto out;
3936
3937 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3938 ta_crypt_cmd_free_transient_object(c, &session,
3939 pub_key_handle)))
3940 goto out;
3941 pub_key_handle = TEE_HANDLE_NULL;
3942
3943 out_enc_size = sizeof(out_enc);
3944 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3945 ta_crypt_cmd_asymmetric_encrypt(c, &session, op,
3946 NULL, 0, tv->ptx, tv->ptx_len, out_enc,
3947 &out_enc_size)))
3948 goto out;
3949
3950 /*
3951 * A PS which is random is added when formatting the
3952 * message internally of the algorithm so we can't
3953 * verify against precomputed values, instead we use the
3954 * decrypt operation to see that output is correct.
3955 */
3956
3957 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3958 ta_crypt_cmd_free_operation(c, &session, op)))
3959 goto out;
3960
3961 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3962 ta_crypt_cmd_allocate_operation(c, &session,
3963 &op, tv->algo, TEE_MODE_DECRYPT,
3964 max_key_size)))
3965 goto out;
3966
3967 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3968 ta_crypt_cmd_set_operation_key(c, &session, op,
3969 priv_key_handle)))
3970 goto out;
3971
3972 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3973 ta_crypt_cmd_free_transient_object(c, &session,
3974 priv_key_handle)))
3975 goto out;
3976
3977 priv_key_handle = TEE_HANDLE_NULL;
3978
3979 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3980 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
3981 NULL, 0, out_enc, out_enc_size, out,
3982 &out_size)))
3983 goto out;
3984
3985 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
3986 out_size);
3987 break;
3988
3989 case TEE_MODE_DECRYPT:
3990 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3991 ta_crypt_cmd_allocate_operation(c, &session,
3992 &op, tv->algo, TEE_MODE_DECRYPT,
3993 max_key_size)))
3994 goto out;
3995
3996 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
3997 ta_crypt_cmd_set_operation_key(c, &session, op,
3998 priv_key_handle)))
3999 goto out;
4000
4001 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4002 ta_crypt_cmd_free_transient_object(c, &session,
4003 priv_key_handle)))
4004 goto out;
4005
4006 priv_key_handle = TEE_HANDLE_NULL;
4007
4008 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4009 ta_crypt_cmd_asymmetric_decrypt(c, &session, op,
4010 NULL, 0, tv->ctx, tv->ctx_len, out,
4011 &out_size)))
4012 goto out;
4013
4014 (void)ADBG_EXPECT_BUFFER(c, tv->ptx, tv->ptx_len, out,
4015 out_size);
4016 break;
4017
4018 case TEE_MODE_VERIFY:
4019 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4020 ta_crypt_cmd_allocate_operation(c, &session,
4021 &op, tv->algo, TEE_MODE_VERIFY,
4022 max_key_size)))
4023 goto out;
4024
4025 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4026 ta_crypt_cmd_set_operation_key(c, &session, op,
4027 pub_key_handle)))
4028 goto out;
4029
4030 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4031 ta_crypt_cmd_free_transient_object(c, &session,
4032 pub_key_handle)))
4033 goto out;
4034
4035 pub_key_handle = TEE_HANDLE_NULL;
4036
4037 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4038 ta_crypt_cmd_asymmetric_verify(c, &session, op,
4039 algo_params, num_algo_params, ptx_hash,
4040 ptx_hash_size, tv->ctx, tv->ctx_len)))
4041 goto out;
4042 break;
4043
4044 case TEE_MODE_SIGN:
4045 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4046 ta_crypt_cmd_allocate_operation(c, &session,
4047 &op, tv->algo, TEE_MODE_SIGN,
4048 max_key_size)))
4049 goto out;
4050
4051 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4052 ta_crypt_cmd_set_operation_key(c, &session, op,
4053 priv_key_handle)))
4054 goto out;
4055
4056 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4057 ta_crypt_cmd_free_transient_object(c, &session,
4058 priv_key_handle)))
4059 goto out;
4060
4061 priv_key_handle = TEE_HANDLE_NULL;
4062
4063 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4064 ta_crypt_cmd_asymmetric_sign(c, &session, op,
4065 algo_params, num_algo_params, ptx_hash,
4066 ptx_hash_size, out, &out_size)))
4067 goto out;
4068
4069 if (TEE_ALG_GET_CHAIN_MODE(tv->algo) ==
4070 TEE_CHAIN_MODE_PKCS1_PSS_MGF1 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004071 tv->algo == TEE_ALG_DSA_SHA1 ||
Cedric Chaumontb2ba8782015-09-03 13:23:05 +02004072 tv->algo == TEE_ALG_DSA_SHA224 ||
4073 tv->algo == TEE_ALG_DSA_SHA256 ||
Pascal Brand3e143ee2015-07-15 17:17:16 +02004074 TEE_ALG_GET_MAIN_ALG(tv->algo) ==
4075 TEE_MAIN_ALGO_ECDSA) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004076 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4077 ta_crypt_cmd_free_operation(c, &session,
4078 op)))
4079 goto out;
4080 /*
4081 * The salt or K is random so we can't verify
4082 * signing against precomputed values, instead
4083 * we use the verify operation to see that
4084 * output is correct.
4085 */
4086 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4087 ta_crypt_cmd_allocate_operation(c,
4088 &session, &op, tv->algo,
4089 TEE_MODE_VERIFY, max_key_size)))
4090 goto out;
4091
4092 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4093 ta_crypt_cmd_set_operation_key(c,
4094 &session, op, pub_key_handle)))
4095 goto out;
4096
4097 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4098 ta_crypt_cmd_free_transient_object(c,
4099 &session, pub_key_handle)))
4100 goto out;
4101
4102 pub_key_handle = TEE_HANDLE_NULL;
4103
4104 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4105 ta_crypt_cmd_asymmetric_verify(c,
4106 &session, op, algo_params,
4107 num_algo_params, ptx_hash,
4108 ptx_hash_size, out, out_size)))
4109 goto out;
4110 } else {
4111 (void)ADBG_EXPECT_BUFFER(c, tv->ctx,
4112 tv->ctx_len, out,
4113 out_size);
4114 }
4115 break;
4116
4117 default:
4118 break;
4119 }
4120
4121 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4122 ta_crypt_cmd_free_operation(c, &session, op)))
4123 goto out;
4124
4125 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4126 ta_crypt_cmd_free_transient_object(c, &session,
4127 pub_key_handle)))
4128 goto out;
4129 pub_key_handle = TEE_HANDLE_NULL;
4130
4131 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4132 ta_crypt_cmd_free_transient_object(c, &session,
4133 priv_key_handle)))
4134 goto out;
4135
4136 priv_key_handle = TEE_HANDLE_NULL;
4137
4138 Do_ADBG_EndSubCase(c, NULL);
4139 }
4140out:
4141 TEEC_CloseSession(&session);
4142}
Jens Wiklander14f48872018-06-29 15:30:13 +02004143ADBG_CASE_DEFINE(regression, 4006, xtest_tee_test_4006,
4144 "Test TEE Internal API Asymmetric Cipher operations");
Pascal Brandc639ac82015-07-02 08:53:34 +02004145
4146#define KEY_ATTR(x, y) { #x, (x), y }
4147
4148struct key_attrs {
4149 const char *name;
4150 uint32_t attr;
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004151 /*
4152 * When keysize_check != 0: size of attribute is checked
4153 * Expected value is key_size bits except for DH in which case it is
4154 * the value of keysize_check.
4155 */
4156 uint32_t keysize_check;
Pascal Brandc639ac82015-07-02 08:53:34 +02004157};
4158
4159static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
4160 TEE_ObjectHandle key, uint32_t key_size,
4161 struct key_attrs *attrs, size_t num_attrs)
4162{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004163 uint8_t out[2048] = { };
4164 size_t out_size = 0;
4165 size_t n = 0;
4166 size_t m = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004167
4168 for (m = 0; m < num_attrs; m++) {
4169 if ((attrs[m].attr & TEE_ATTR_BIT_VALUE) == 0) {
4170 out_size = sizeof(out);
4171 memset(out, 0, sizeof(out));
4172 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4173 ta_crypt_cmd_get_object_buffer_attribute(c, s,
4174 key, attrs[m].attr, out, &out_size)))
4175 return false;
4176
4177 if (attrs[m].keysize_check)
4178 ADBG_EXPECT_COMPARE_UNSIGNED(c, out_size, ==,
4179 key_size / 8);
4180
4181 if (out_size > 0) {
4182 /* Check that buffer isn't all zeroes */
4183 for (n = 0; n < out_size; n++)
4184 if (out[n] != 0)
4185 break;
4186 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <,
4187 out_size))
4188 return false;
4189 }
4190 } else {
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004191 uint32_t a = 0;
4192 uint32_t b = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004193
4194 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4195 ta_crypt_cmd_get_object_value_attribute(c, s, key,
4196 attrs[m].attr, &a, &b)))
4197 return false;
4198 }
4199 }
4200 return true;
4201}
4202
4203static bool test_secret_value(ADBG_Case_t *c, TEEC_Session *s,
4204 TEE_ObjectHandle key, uint32_t key_size)
4205{
4206 const struct key_attrs attrs[] = {
4207 KEY_ATTR(TEE_ATTR_SECRET_VALUE, true),
4208 };
4209
4210 return test_keygen_attributes(c, s, key, key_size,
4211 (struct key_attrs *)&attrs,
4212 ARRAY_SIZE(attrs));
4213}
4214
4215
4216static bool test_rsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4217 TEE_ObjectHandle key, uint32_t key_size)
4218{
4219 const struct key_attrs attrs[] = {
4220 KEY_ATTR(TEE_ATTR_RSA_MODULUS, true),
4221 KEY_ATTR(TEE_ATTR_RSA_PUBLIC_EXPONENT, false),
4222 KEY_ATTR(TEE_ATTR_RSA_PRIVATE_EXPONENT, false),
4223 KEY_ATTR(TEE_ATTR_RSA_PRIME1, false),
4224 KEY_ATTR(TEE_ATTR_RSA_PRIME2, false),
4225 KEY_ATTR(TEE_ATTR_RSA_EXPONENT1, false),
4226 KEY_ATTR(TEE_ATTR_RSA_EXPONENT2, false),
4227 KEY_ATTR(TEE_ATTR_RSA_COEFFICIENT, false),
4228 };
4229
4230 return test_keygen_attributes(c, s, key, key_size,
4231 (struct key_attrs *)&attrs,
4232 ARRAY_SIZE(attrs));
4233}
4234
Pascal Brande61133f2015-07-08 15:38:37 +02004235static bool test_ecc_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4236 TEE_ObjectHandle key, uint32_t key_size)
4237{
4238 const struct key_attrs attrs[] = {
4239 KEY_ATTR(TEE_ATTR_ECC_PRIVATE_VALUE, false),
4240 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_X , false),
4241 KEY_ATTR(TEE_ATTR_ECC_PUBLIC_VALUE_Y , false),
4242 /* KEY_ATTR(TEE_ATTR_ECC_CURVE, false), - do not test */
4243 };
4244
4245 return test_keygen_attributes(c, s, key, key_size,
4246 (struct key_attrs *)&attrs,
4247 ARRAY_SIZE(attrs));
4248}
4249
Pascal Brandc639ac82015-07-02 08:53:34 +02004250static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004251 TEE_ObjectHandle key, uint32_t check_keysize)
Pascal Brandc639ac82015-07-02 08:53:34 +02004252{
4253 const struct key_attrs attrs[] = {
4254 KEY_ATTR(TEE_ATTR_DH_PRIME, false),
4255 KEY_ATTR(TEE_ATTR_DH_BASE, false),
4256 KEY_ATTR(TEE_ATTR_DH_PUBLIC_VALUE, false),
4257 KEY_ATTR(TEE_ATTR_DH_PRIVATE_VALUE, check_keysize),
4258 KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
4259 };
4260
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004261 return test_keygen_attributes(c, s, key, check_keysize,
Pascal Brandc639ac82015-07-02 08:53:34 +02004262 (struct key_attrs *)&attrs,
4263 ARRAY_SIZE(attrs));
4264}
4265
4266static bool test_dsa_key_pair(ADBG_Case_t *c, TEEC_Session *s,
4267 TEE_ObjectHandle key, uint32_t key_size)
4268{
4269 const struct key_attrs attrs[] = {
4270 KEY_ATTR(TEE_ATTR_DSA_PRIME, true),
4271 KEY_ATTR(TEE_ATTR_DSA_SUBPRIME, false),
4272 KEY_ATTR(TEE_ATTR_DSA_BASE, false),
4273 KEY_ATTR(TEE_ATTR_DSA_PUBLIC_VALUE, false),
4274 KEY_ATTR(TEE_ATTR_DSA_PRIVATE_VALUE, false),
4275 };
4276
4277 return test_keygen_attributes(c, s, key, key_size,
4278 (struct key_attrs *)&attrs,
4279 ARRAY_SIZE(attrs));
4280}
4281
4282static bool generate_and_test_key(ADBG_Case_t *c, TEEC_Session *s,
4283 uint32_t key_type, uint32_t check_keysize,
4284 uint32_t key_size,
4285 TEE_Attribute *params, size_t param_count)
4286{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004287 TEE_ObjectHandle key = TEE_HANDLE_NULL;
Pascal Brandc639ac82015-07-02 08:53:34 +02004288 bool ret_val = true;
4289
4290 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4291 ta_crypt_cmd_allocate_transient_object(c, s, key_type, key_size,
4292 &key)))
4293 return false;
4294
4295 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4296 ta_crypt_cmd_generate_key(c, s, key, key_size, params,
4297 param_count)))
4298 return false;
4299
4300 switch (key_type) {
4301 case TEE_TYPE_DES:
4302 case TEE_TYPE_DES3:
4303 ret_val = ADBG_EXPECT_TRUE(c,
4304 test_secret_value(c, s, key,
4305 key_size + key_size / 7));
4306 break;
4307 case TEE_TYPE_AES:
4308 case TEE_TYPE_HMAC_MD5:
4309 case TEE_TYPE_HMAC_SHA1:
4310 case TEE_TYPE_HMAC_SHA224:
4311 case TEE_TYPE_HMAC_SHA256:
4312 case TEE_TYPE_HMAC_SHA384:
4313 case TEE_TYPE_HMAC_SHA512:
4314 case TEE_TYPE_GENERIC_SECRET:
4315 ret_val = ADBG_EXPECT_TRUE(c,
4316 test_secret_value(c, s, key, key_size));
4317 break;
4318
4319 case TEE_TYPE_RSA_KEYPAIR:
4320 ret_val = ADBG_EXPECT_TRUE(c,
4321 test_rsa_key_pair(c, s, key, key_size));
4322 break;
4323
Pascal Brande61133f2015-07-08 15:38:37 +02004324 case TEE_TYPE_ECDSA_KEYPAIR:
4325 case TEE_TYPE_ECDH_KEYPAIR:
4326 ret_val = ADBG_EXPECT_TRUE(c,
4327 test_ecc_key_pair(c, s, key, key_size));
4328 break;
4329
Pascal Brandc639ac82015-07-02 08:53:34 +02004330 case TEE_TYPE_DH_KEYPAIR:
Pascal Brande61133f2015-07-08 15:38:37 +02004331 ret_val = ADBG_EXPECT_TRUE(c,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004332 test_dh_key_pair(c, s, key, check_keysize));
Pascal Brandc639ac82015-07-02 08:53:34 +02004333 break;
4334
4335 case TEE_TYPE_DSA_KEYPAIR:
4336 ret_val = ADBG_EXPECT_TRUE(c,
4337 test_dsa_key_pair(c, s, key, key_size));
4338 break;
4339
4340 default:
4341 ret_val = false;
4342 break;
4343 }
4344
4345 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4346 ta_crypt_cmd_free_transient_object(c, s, key)))
4347 return false;
4348
4349 return ret_val;
4350}
4351
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004352struct key_types_noparam {
4353 unsigned level;
4354 const char *name;
4355 uint32_t key_type;
4356 uint32_t quanta;
4357 uint32_t min_size;
4358 uint32_t max_size;
4359};
4360
4361static void keygen_noparams(ADBG_Case_t *c, TEEC_Session *session,
4362 const struct key_types_noparam *key_types,
4363 size_t num_key_types)
Pascal Brandc639ac82015-07-02 08:53:34 +02004364{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004365 size_t n = 0;
4366 uint32_t key_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004367
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004368 for (n = 0; n < num_key_types; n++) {
Pascal Brandc639ac82015-07-02 08:53:34 +02004369 uint32_t min_size = key_types[n].min_size;
4370 uint32_t max_size = key_types[n].max_size;
4371 uint32_t quanta = key_types[n].quanta;
4372
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004373 if (key_types[n].level > level)
4374 continue;
4375
Pascal Brandc639ac82015-07-02 08:53:34 +02004376 Do_ADBG_BeginSubCase(c, "Generate %s key", key_types[n].name);
4377
4378 for (key_size = min_size; key_size <= max_size;
4379 key_size += quanta) {
4380 if (!ADBG_EXPECT_TRUE(c,
4381 generate_and_test_key(c, session, key_types
4382 [n].key_type, 1, key_size, NULL, 0)))
4383 break;
4384 }
4385
4386 Do_ADBG_EndSubCase(c, "Generate %s key", key_types[n].name);
4387 }
4388}
4389
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004390static void xtest_tee_test_4007_symmetric(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02004391{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004392 TEEC_Session session = { };
4393 uint32_t ret_orig = 0;
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004394 static const struct key_types_noparam key_types[] = {
4395 { 0, "AES", TEE_TYPE_AES, 64, 128,
4396 256 /* valid sizes 128, 192, 256 */ },
4397 { 0, "DES", TEE_TYPE_DES, 56, 56, 56 /* valid size 56 */ },
4398 { 0, "DES3", TEE_TYPE_DES3, 56, 112,
4399 168 /* valid sizes 112, 168 */ },
4400 { 0, "HMAC-MD5", TEE_TYPE_HMAC_MD5, 8, 64, 512 },
4401 { 0, "HMAC-SHA1", TEE_TYPE_HMAC_SHA1, 8, 80, 512 },
4402 { 0, "HMAC-SHA224", TEE_TYPE_HMAC_SHA224, 8, 112, 512 },
4403 { 0, "HMAC-SHA256", TEE_TYPE_HMAC_SHA256, 8, 192, 1024 },
4404 { 0, "HMAC-SHA384", TEE_TYPE_HMAC_SHA384, 8, 256, 1024 },
4405 { 0, "HMAC-SHA512", TEE_TYPE_HMAC_SHA512, 8, 256, 1024 },
4406 { 0, "Generic secret", TEE_TYPE_GENERIC_SECRET, 8, 128, 4096 },
4407 };
4408
4409 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4410 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4411 &ret_orig)))
4412 return;
4413
4414 keygen_noparams(c, &session, key_types, ARRAY_SIZE(key_types));
4415
4416 TEEC_CloseSession(&session);
4417}
4418ADBG_CASE_DEFINE(regression, 4007_symmetric, xtest_tee_test_4007_symmetric,
4419 "Test TEE Internal API Generate Symmetric key");
4420
4421static void xtest_tee_test_4007_rsa(ADBG_Case_t *c)
4422{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004423 TEEC_Session session = { };
4424 uint32_t ret_orig = 0;
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004425 static const struct key_types_noparam key_types[] = {
4426 { 0, "RSA-256", TEE_TYPE_RSA_KEYPAIR, 1, 256, 256 },
4427 { 1, "RSA-384", TEE_TYPE_RSA_KEYPAIR, 1, 384, 384 },
4428 { 1, "RSA-512", TEE_TYPE_RSA_KEYPAIR, 1, 512, 512 },
4429 { 1, "RSA-640", TEE_TYPE_RSA_KEYPAIR, 1, 640, 640 },
4430 { 1, "RSA-768", TEE_TYPE_RSA_KEYPAIR, 1, 768, 768 },
4431 { 1, "RSA-896", TEE_TYPE_RSA_KEYPAIR, 1, 896, 896 },
4432 { 1, "RSA-1024", TEE_TYPE_RSA_KEYPAIR, 1, 1024, 1024 },
4433 { 1, "RSA-2048", TEE_TYPE_RSA_KEYPAIR, 1, 2048, 2048 },
4434 { 1, "RSA-3072", TEE_TYPE_RSA_KEYPAIR, 1, 3072, 3072 },
4435 { 1, "RSA-4096", TEE_TYPE_RSA_KEYPAIR, 1, 4096, 4096 },
4436 };
4437
4438 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4439 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4440 &ret_orig)))
4441 return;
4442
4443 keygen_noparams(c, &session, key_types, ARRAY_SIZE(key_types));
4444
4445 TEEC_CloseSession(&session);
4446}
4447ADBG_CASE_DEFINE(regression, 4007_rsa, xtest_tee_test_4007_rsa,
4448 "Test TEE Internal API Generate RSA key");
4449
4450static void xtest_tee_test_4007_dh(ADBG_Case_t *c)
4451{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004452 TEEC_Session session = { };
4453 uint32_t ret_orig = 0;
4454 size_t n = 0;
4455 size_t param_count = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004456 /*
4457 * Note that the key size parameter is not used when creating the keys
4458 * but specifying these sizes make it possible to test the expected size
4459 * of the private value. This also means that the keysize must match the
4460 * size of p or what is specified in private_bits or the equvivalent
4461 * size of the subprime parameter.
4462 */
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004463 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004464
4465#define XTEST_DH_GK_DATA(vect) \
4466 ARRAY(vect ## _p), \
4467 ARRAY(vect ## _g), \
4468 &vect ## _private_bits, \
4469 0, 0
4470#define XTEST_DH_GK_DATA_SUBPRIME(vect) \
4471 ARRAY(vect ## _p), \
4472 ARRAY(vect ## _g), \
4473 &vect ## _private_bits, \
4474 ARRAY(vect ## _subprime)
4475 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004476 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004477 uint32_t key_size;
4478 const uint8_t *p;
4479 size_t p_len;
4480 const uint8_t *g;
4481 size_t g_len;
4482 const uint32_t *private_bits;
4483 const uint8_t *subprime;
4484 size_t subprime_len;
4485 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004486 { 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004487 { 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004488 { 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004489 { 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004490 { 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004491 { 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004492 { 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004493 { 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004494 { 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004495 { 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004496 { 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004497 { 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004498 { 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004499 { 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004500 { 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004501 { 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004502 { 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004503 { 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004504 { 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004505 { 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004506 { 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004507 { 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004508 { 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004509 { 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004510 { 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004511 { 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004512 { 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004513 { 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004514 { 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004515 { 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
Pascal Brandc639ac82015-07-02 08:53:34 +02004516 };
4517
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004518 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4519 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4520 &ret_orig)))
4521 return;
Pascal Brandc639ac82015-07-02 08:53:34 +02004522
4523 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004524 if (key_types[n].level > level)
4525 continue;
4526
Pascal Brandc639ac82015-07-02 08:53:34 +02004527 Do_ADBG_BeginSubCase(c,
4528 "Generate DH key %d bits - Private bits = %d",
4529 key_types[n].key_size,
4530 *key_types[n].private_bits);
4531 param_count = 0;
4532
4533 xtest_add_attr(&param_count, params,
4534 TEE_ATTR_DH_PRIME,
4535 key_types[n].p, key_types[n].p_len);
4536
4537 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4538 key_types[n].g, key_types[n].g_len);
4539
4540 if (key_types[n].private_bits != 0) {
4541 params[param_count].attributeID = TEE_ATTR_DH_X_BITS;
4542
4543 params[param_count].content.value.a =
4544 *key_types[n].private_bits;
4545
4546 params[param_count].content.value.b = 0;
4547 param_count++;
4548 }
4549
4550 if (key_types[n].subprime != 0) {
4551 xtest_add_attr(&param_count, params,
4552 TEE_ATTR_DH_SUBPRIME,
4553 key_types[n].subprime,
4554 key_types[n].subprime_len);
4555 }
4556
4557 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004558 generate_and_test_key(c, &session, TEE_TYPE_DH_KEYPAIR,
Jerome Forissier4032c8c2016-05-31 13:25:08 +02004559 *key_types[n].private_bits,
Pascal Brandc639ac82015-07-02 08:53:34 +02004560 key_types[n]. key_size, params, param_count)))
4561 break;
4562
4563 Do_ADBG_EndSubCase(c,
4564 "Generate DH key %d bits - Private bits = %d",
4565 key_types[n].key_size,
4566 *key_types[n].private_bits);
4567 }
Pascal Brandc639ac82015-07-02 08:53:34 +02004568
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004569 TEEC_CloseSession(&session);
4570}
4571ADBG_CASE_DEFINE(regression, 4007_dh, xtest_tee_test_4007_dh,
4572 "Test TEE Internal API Generate DH key");
4573
4574static void xtest_tee_test_4007_dsa(ADBG_Case_t *c)
Pascal Brandc639ac82015-07-02 08:53:34 +02004575{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004576 TEEC_Session session = { };
4577 uint32_t ret_orig = 0;
4578 size_t n = 0;
4579 size_t param_count = 0;
4580 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004581
4582#define XTEST_DSA_GK_DATA(vect) \
4583 ARRAY(vect ## _p), \
4584 ARRAY(vect ## _g), \
4585 ARRAY(vect ## _q)
4586 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004587 unsigned level;
Pascal Brandc639ac82015-07-02 08:53:34 +02004588 uint32_t key_size;
4589 const uint8_t *prime;
4590 size_t prime_len;
4591 const uint8_t *base;
4592 size_t base_len;
4593 const uint8_t *sub_prime;
4594 size_t sub_prime_len;
4595 } key_types[] = {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004596 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa_test1) },
4597 { 0, 512, XTEST_DSA_GK_DATA(keygen_dsa512) },
4598 { 1, 576, XTEST_DSA_GK_DATA(keygen_dsa576) },
4599 { 1, 640, XTEST_DSA_GK_DATA(keygen_dsa640) },
4600 { 1, 704, XTEST_DSA_GK_DATA(keygen_dsa704) },
4601 { 1, 768, XTEST_DSA_GK_DATA(keygen_dsa768) },
4602 { 1, 832, XTEST_DSA_GK_DATA(keygen_dsa832) },
4603 { 1, 896, XTEST_DSA_GK_DATA(keygen_dsa896) },
4604 { 1, 960, XTEST_DSA_GK_DATA(keygen_dsa960) },
4605 { 1, 1024, XTEST_DSA_GK_DATA(keygen_dsa1024) },
Pascal Brandc639ac82015-07-02 08:53:34 +02004606 };
4607
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004608 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4609 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4610 &ret_orig)))
4611 return;
4612
Pascal Brandc639ac82015-07-02 08:53:34 +02004613 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004614 if (key_types[n].level > level)
4615 continue;
4616
Pascal Brandc639ac82015-07-02 08:53:34 +02004617 Do_ADBG_BeginSubCase(c, "Generate DSA key %d bits",
4618 key_types[n].key_size);
4619 param_count = 0;
4620
4621
4622 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_PRIME,
4623 key_types[n].prime, key_types[n].prime_len);
4624
4625 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_SUBPRIME,
4626 key_types[n].sub_prime,
4627 key_types[n].sub_prime_len);
4628
4629 xtest_add_attr(&param_count, params, TEE_ATTR_DSA_BASE,
4630 key_types[n].base, key_types[n].base_len);
4631
4632 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004633 generate_and_test_key(c, &session, TEE_TYPE_DSA_KEYPAIR,
Pascal Brandc639ac82015-07-02 08:53:34 +02004634 1, key_types[n]. key_size, params,
4635 param_count)))
4636 break;
4637
4638 Do_ADBG_EndSubCase(c, "Generate DSA key %d bits",
4639 key_types[n].key_size);
4640 }
Pascal Brandc639ac82015-07-02 08:53:34 +02004641
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004642 TEEC_CloseSession(&session);
4643}
4644ADBG_CASE_DEFINE(regression, 4007_dsa, xtest_tee_test_4007_dsa,
4645 "Test TEE Internal API Generate DSA key");
4646
4647static void xtest_tee_test_4007_ecc(ADBG_Case_t *c)
Pascal Brande61133f2015-07-08 15:38:37 +02004648{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004649 TEEC_Session session = { };
4650 uint32_t ret_orig = 0;
4651 size_t n = 0;
4652 size_t param_count = 0;
4653 TEE_Attribute params[4] = { };
Pascal Brande61133f2015-07-08 15:38:37 +02004654
4655 static const struct {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004656 unsigned level;
Pascal Brande61133f2015-07-08 15:38:37 +02004657 const char *name;
4658 uint32_t algo;
4659 uint32_t curve;
4660 uint32_t key_size;
4661 } key_types[] = {
4662 /* ECDSA */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004663 { 0, "ECDSA-192", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4664 192 },
4665 { 1, "ECDSA-224", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4666 224 },
4667 { 1, "ECDSA-256", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4668 256 },
4669 { 1, "ECDSA-384", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4670 384 },
4671 { 1, "ECDSA-521", TEE_TYPE_ECDSA_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4672 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004673
4674 /* ECDH */
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004675 { 0, "ECDH-192", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P192,
4676 192 },
4677 { 1, "ECDH-224", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P224,
4678 224 },
4679 { 1, "ECDH-256", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P256,
4680 256 },
4681 { 1, "ECDH-384", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P384,
4682 384 },
4683 { 1, "ECDH-521", TEE_TYPE_ECDH_KEYPAIR, TEE_ECC_CURVE_NIST_P521,
4684 521 },
Pascal Brande61133f2015-07-08 15:38:37 +02004685 };
4686
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004687 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4688 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4689 &ret_orig)))
4690 return;
4691
Pascal Brande61133f2015-07-08 15:38:37 +02004692 for (n = 0; n < ARRAY_SIZE(key_types); n++) {
Jens Wiklander6a9d15a2016-02-01 10:29:42 +01004693 if (key_types[n].level > level)
4694 continue;
4695
Pascal Brande61133f2015-07-08 15:38:37 +02004696 Do_ADBG_BeginSubCase(c, "Generate %s", key_types[n].name);
4697 param_count = 0;
4698
4699 xtest_add_attr_value(&param_count, params, TEE_ATTR_ECC_CURVE,
4700 key_types[n].curve, 0);
4701
4702 if (!ADBG_EXPECT_TRUE(c,
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004703 generate_and_test_key(c, &session, key_types[n].algo,
Pascal Brande61133f2015-07-08 15:38:37 +02004704 0, key_types[n].key_size, params,
4705 param_count)))
4706 break;
4707
4708 Do_ADBG_EndSubCase(c, "Generate %s", key_types[n].name);
4709 }
Pascal Brande61133f2015-07-08 15:38:37 +02004710
Pascal Brandc639ac82015-07-02 08:53:34 +02004711 TEEC_CloseSession(&session);
4712}
Jens Wiklandera8c8f872018-12-14 11:41:36 +01004713ADBG_CASE_DEFINE(regression, 4007_ecc, xtest_tee_test_4007_ecc,
4714 "Test TEE Internal API Generate ECC key");
Pascal Brandc639ac82015-07-02 08:53:34 +02004715
4716static void xtest_tee_test_4008(ADBG_Case_t *c)
4717{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004718 TEEC_Session session = { };
4719 uint32_t ret_orig = 0;
4720 TEE_OperationHandle op = TEE_HANDLE_NULL;
4721 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
4722 TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL;
4723 TEE_Attribute params[4] = { };
Pascal Brandc639ac82015-07-02 08:53:34 +02004724 size_t param_count = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004725 uint8_t out[2048] = { };
4726 size_t out_size = 0;
Pascal Brandc639ac82015-07-02 08:53:34 +02004727
4728 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4729 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4730 &ret_orig)))
4731 return;
4732
4733 Do_ADBG_BeginSubCase(c, "Derive DH key success");
4734
4735 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4736 ta_crypt_cmd_allocate_operation(c, &session, &op,
4737 TEE_ALG_DH_DERIVE_SHARED_SECRET, TEE_MODE_DERIVE,
4738 derive_key_max_keysize)))
4739 goto out;
4740
4741 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4742 ta_crypt_cmd_allocate_transient_object(c, & session,
4743 TEE_TYPE_DH_KEYPAIR, derive_key_max_keysize,
4744 &key_handle)))
4745 goto out;
4746
4747 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIME,
4748 ARRAY(derive_key_dh_prime));
4749
4750 xtest_add_attr(&param_count, params, TEE_ATTR_DH_BASE,
4751 ARRAY(derive_key_dh_base));
4752
4753 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4754 ARRAY(derive_key_dh_public_value));
4755
4756 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PRIVATE_VALUE,
4757 ARRAY(derive_key_dh_private_value));
4758
4759 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4760 ta_crypt_cmd_populate_transient_object(c, &session, key_handle,
4761 params, param_count)))
4762 goto out;
4763
4764 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4765 ta_crypt_cmd_set_operation_key(c, &session, op, key_handle)))
4766 goto out;
4767
4768 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4769 ta_crypt_cmd_free_transient_object(c, & session, key_handle)))
4770 goto out;
4771
4772 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4773 ta_crypt_cmd_allocate_transient_object(c, &session,
4774 TEE_TYPE_GENERIC_SECRET, derive_key_max_keysize,
4775 &sv_handle)))
4776 goto out;
4777
Pascal Brand2b92b642015-07-16 13:29:42 +02004778 /* reuse but reset params and param-count */
Pascal Brandc639ac82015-07-02 08:53:34 +02004779 param_count = 0;
4780
4781 xtest_add_attr(&param_count, params, TEE_ATTR_DH_PUBLIC_VALUE,
4782 ARRAY(derive_key_dh_public_value_2));
4783
4784 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4785 ta_crypt_cmd_derive_key(c, &session, op, sv_handle, params,
4786 param_count)))
4787 goto out;
4788
4789 out_size = sizeof(out);
4790 memset(out, 0, sizeof(out));
4791 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4792 ta_crypt_cmd_get_object_buffer_attribute(c, &session, sv_handle,
4793 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4794 goto out;
4795
4796 if (!ADBG_EXPECT_BUFFER(c, derive_key_dh_shared_secret,
4797 sizeof(derive_key_dh_shared_secret), out,
4798 out_size))
4799 goto out;
4800
4801 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4802 ta_crypt_cmd_free_operation(c, &session, op)))
4803 goto out;
4804
4805 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4806 ta_crypt_cmd_free_transient_object(c, &session, sv_handle)))
4807 goto out;
4808out:
4809 Do_ADBG_EndSubCase(c, "Derive DH key success");
4810 TEEC_CloseSession(&session);
4811}
Jens Wiklander14f48872018-06-29 15:30:13 +02004812ADBG_CASE_DEFINE(regression, 4008, xtest_tee_test_4008,
4813 "Test TEE Internal API Derive key");
Pascal Brand2b92b642015-07-16 13:29:42 +02004814
4815static void xtest_tee_test_4009(ADBG_Case_t *c)
4816{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004817 TEEC_Session session = { };
4818 uint32_t ret_orig = 0;
4819 TEE_OperationHandle op = TEE_HANDLE_NULL;
4820 TEE_ObjectHandle key_handle = TEE_HANDLE_NULL;
4821 TEE_ObjectHandle sv_handle = TEE_HANDLE_NULL;
4822 TEE_Attribute params[4] = { };
Pascal Brand2b92b642015-07-16 13:29:42 +02004823 size_t param_count = 0;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004824 uint8_t out[2048] = { };
4825 size_t out_size = 0;
4826 uint32_t size_bytes = 0;
4827 uint32_t i = 0;
4828 struct derive_key_ecdh_t *pt = NULL;
Pascal Brand2b92b642015-07-16 13:29:42 +02004829
4830 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4831 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4832 &ret_orig)))
4833 return;
4834
4835 for (i = 0; i < ARRAY_SIZE(derive_key_ecdh); i++) {
4836 pt = &derive_key_ecdh[i];
4837
Cedric Chaumontc3b6c282015-09-25 03:05:18 +02004838 if (pt->level > level)
4839 continue;
4840
Pascal Brand2b92b642015-07-16 13:29:42 +02004841 Do_ADBG_BeginSubCase(c, "Derive ECDH key - algo = 0x%x",
4842 pt->algo);
4843 size_bytes = (pt->keysize + 7) / 8;
4844 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4845 ta_crypt_cmd_allocate_operation(c, &session, &op,
4846 pt->algo,
4847 TEE_MODE_DERIVE, pt->keysize)))
4848 goto out;
4849
4850 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4851 ta_crypt_cmd_allocate_transient_object(c, & session,
4852 TEE_TYPE_ECDH_KEYPAIR, pt->keysize,
4853 &key_handle)))
4854 goto out;
4855
4856 param_count = 0;
4857 xtest_add_attr_value(&param_count, params,
4858 TEE_ATTR_ECC_CURVE, pt->curve, 0);
4859 xtest_add_attr(&param_count, params,
4860 TEE_ATTR_ECC_PRIVATE_VALUE,
4861 pt->private, size_bytes);
4862 /*
4863 * The public value is not used. This is why we provide
4864 * another buffer
4865 */
4866 xtest_add_attr(&param_count, params,
4867 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4868 pt->private, size_bytes);
4869 xtest_add_attr(&param_count, params,
4870 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4871 pt->private, size_bytes);
4872
4873 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4874 ta_crypt_cmd_populate_transient_object(c,
4875 &session,
4876 key_handle, params, param_count)))
4877 goto out;
4878
4879 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4880 ta_crypt_cmd_set_operation_key(c, &session, op,
4881 key_handle)))
4882 goto out;
4883
4884 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4885 ta_crypt_cmd_free_transient_object(c, & session,
4886 key_handle)))
4887 goto out;
4888
4889 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4890 ta_crypt_cmd_allocate_transient_object(c, &session,
4891 TEE_TYPE_GENERIC_SECRET, size_bytes * 8,
4892 &sv_handle)))
4893 goto out;
4894
4895 /* reuse but reset params and param-count */
4896 param_count = 0;
4897
4898 xtest_add_attr(&param_count, params,
4899 TEE_ATTR_ECC_PUBLIC_VALUE_X,
4900 pt->public_x, size_bytes);
4901 xtest_add_attr(&param_count, params,
4902 TEE_ATTR_ECC_PUBLIC_VALUE_Y,
4903 pt->public_y, size_bytes);
4904
4905 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4906 ta_crypt_cmd_derive_key(c, &session, op, sv_handle,
4907 params, param_count)))
4908 goto out;
4909
4910 out_size = sizeof(out);
4911 memset(out, 0, sizeof(out));
4912 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4913 ta_crypt_cmd_get_object_buffer_attribute(c, &session,
4914 sv_handle,
4915 TEE_ATTR_SECRET_VALUE, out, &out_size)))
4916 goto out;
4917
4918 if (!ADBG_EXPECT_BUFFER(c, pt->out, size_bytes,
4919 out, out_size))
4920 goto out;
4921
4922 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4923 ta_crypt_cmd_free_operation(c, &session, op)))
4924 goto out;
4925
4926 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4927 ta_crypt_cmd_free_transient_object(c, &session,
4928 sv_handle)))
4929 goto out;
4930
4931 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x",
4932 pt->algo);
4933 }
4934
4935 goto noerror;
4936
4937out:
4938 Do_ADBG_EndSubCase(c, "Derive ECDH key - algo = 0x%x", pt->algo);
4939
4940noerror:
4941 TEEC_CloseSession(&session);
4942}
Jens Wiklander14f48872018-06-29 15:30:13 +02004943ADBG_CASE_DEFINE(regression, 4009, xtest_tee_test_4009,
4944 "Test TEE Internal API Derive key ECDH");
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004945
4946static void xtest_tee_test_4010(ADBG_Case_t *c)
4947{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004948 TEEC_Session session = { };
4949 uint32_t ret_orig = 0;
4950 TEE_ObjectHandle o = TEE_HANDLE_NULL;
Jens Wiklander70a0b2c2016-05-18 08:39:35 +02004951 static const uint8_t large_key[1024] = { 1, 2, 3, 4, 5, 6 };
4952 static const TEE_Attribute attr = {
4953 .attributeID = TEE_ATTR_SECRET_VALUE,
4954 .content.ref.buffer = (void *)large_key,
4955 .content.ref.length = sizeof(large_key),
4956 };
4957
4958 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4959 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
4960 &ret_orig)))
4961 return;
4962
4963 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
4964 ta_crypt_cmd_allocate_transient_object(c, &session,
4965 TEE_TYPE_HMAC_SHA256, 1024, &o)))
4966 goto out;
4967
4968 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_TARGET_DEAD,
4969 ta_crypt_cmd_populate_transient_object(c, &session, o,
4970 &attr, 1));
4971
4972out:
4973 TEEC_CloseSession(&session);
4974}
Jens Wiklander14f48872018-06-29 15:30:13 +02004975ADBG_CASE_DEFINE(regression, 4010, xtest_tee_test_4010,
4976 "Test TEE Internal API create transient object (negative)");
Jens Wiklanderb58916e2016-07-07 15:29:32 +02004977
4978static void xtest_tee_test_4011(ADBG_Case_t *c)
4979{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004980 TEEC_Session s = { };
Jens Wiklanderb58916e2016-07-07 15:29:32 +02004981 size_t key_size = 512;
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01004982 TEE_ObjectHandle key = TEE_HANDLE_NULL;
4983 TEE_OperationHandle ops = TEE_HANDLE_NULL;
4984 TEE_OperationHandle opv = TEE_HANDLE_NULL;
4985 TEE_OperationHandle ope = TEE_HANDLE_NULL;
4986 TEE_OperationHandle opd = TEE_HANDLE_NULL;
4987 uint32_t ret_orig = 0;
4988 uint8_t in[TEE_SHA1_HASH_SIZE] = { };
4989 uint8_t out[1024] = { };
4990 uint8_t tmp[1024] = { };
4991 size_t out_size = 0;
4992 size_t tmp_size = 0;
4993 size_t n = 0;
4994 size_t m = 0;
Jens Wiklanderb58916e2016-07-07 15:29:32 +02004995 size_t i = 0;
4996
4997 /* Setup session, initialize message to sign, create a keypair */
4998 if (!ADBG_EXPECT_TEEC_SUCCESS(c, xtest_teec_open_session(&s,
4999 &crypt_user_ta_uuid, NULL, &ret_orig)))
5000 return;
5001 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_random_number_generate(c,
5002 &s, in, sizeof(in))))
5003 goto out;
5004 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_transient_object(
5005 c, &s, TEE_TYPE_RSA_KEYPAIR, key_size, &key)))
5006 goto out;
5007 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_generate_key(c, &s,
5008 key, key_size, NULL, 0)))
5009 goto out;
5010
5011 /* Allocate operations for sign, verify, encrypt and decrypt */
5012 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5013 &ops, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_SIGN,
5014 key_size)))
5015 goto out;
5016 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5017 &opv, TEE_ALG_RSASSA_PKCS1_V1_5_SHA1, TEE_MODE_VERIFY,
5018 key_size)))
5019 goto out;
5020 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5021 &ope, TEE_ALG_RSA_NOPAD, TEE_MODE_ENCRYPT, key_size)))
5022 goto out;
5023 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ta_crypt_cmd_allocate_operation(c, &s,
5024 &opd, TEE_ALG_RSA_NOPAD, TEE_MODE_DECRYPT, key_size)))
5025 goto out;
5026
5027 /* Assign the keypair to all operations */
5028 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5029 ta_crypt_cmd_set_operation_key(c, &s, ops, key)))
5030 goto out;
5031 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5032 ta_crypt_cmd_set_operation_key(c, &s, opv, key)))
5033 goto out;
5034 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5035 ta_crypt_cmd_set_operation_key(c, &s, ope, key)))
5036 goto out;
5037 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5038 ta_crypt_cmd_set_operation_key(c, &s, opd, key)))
5039 goto out;
5040
5041 /*
5042 * The core of the test case is inspired by the one in libtomcrypt:
5043 * https://github.com/libtom/libtomcrypt/blob/6ad52252688bb34f90b5e79da4830a927e87b81f/testprof/rsa_test.c#L398
5044 *
5045 * Testcase for Bleichenbacher attack
5046 *
5047 * (1) Create a valid signature
5048 * (2) Check that it can be verified
5049 * (3) Transform the package to fetch plain text (using the encrypt
5050 * operation in GP TEE Internal API)
5051 * (4) Forge the structure of PKCS#1-EMSA encoded data
5052 * (4.1) Search for start and end of the padding string
5053 * (4.2) Move the signature to the front of the padding string
5054 * (4.3) Zero the message until the end
5055 * (5) Transform the package back (using the decrypt operation in
5056 * GP TEE Internal API)
5057 * (6) The result should not be valid if the implementation is robust.
5058 */
5059
5060
5061 for (i = 0; i < 9; i++) {
5062 Do_ADBG_Log("Iteration %zu", i);
5063
5064 /* 1 */
5065 out_size = sizeof(out);
5066 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5067 ta_crypt_cmd_asymmetric_sign(c, &s, ops, NULL, 0,
5068 in, sizeof(in), out, &out_size)))
5069 goto out;
5070
5071 /* 2 */
5072 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5073 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5074 in, sizeof(in), out, out_size)))
5075 goto out;
5076
5077 /* 3 */
5078 tmp_size = sizeof(tmp);
5079 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5080 ta_crypt_cmd_asymmetric_encrypt(c, &s, ope, NULL, 0,
5081 out, out_size, tmp, &tmp_size)))
5082 goto out;
5083
Etienne Carriere0953bf02018-12-21 15:36:25 +01005084 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, tmp_size, <=, sizeof(tmp)))
5085 goto out;
5086
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005087 /* 4.1 */
Etienne Carriere0953bf02018-12-21 15:36:25 +01005088 for (n = 0; n < tmp_size - i; n++)
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005089 if (tmp[n] == 0xff)
5090 break;
Etienne Carriere0953bf02018-12-21 15:36:25 +01005091
5092 /* Shall find at least a padding start before buffer end */
5093 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, n, <, tmp_size - i - 1))
5094 goto out;
5095
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005096 for (m = n + 1; m < tmp_size; m++)
5097 if (tmp[m] != 0xff)
5098 break;
Etienne Carriere0953bf02018-12-21 15:36:25 +01005099
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005100 /* 4.2 */
5101 memmove(tmp + n + i, tmp + m, tmp_size - m);
Etienne Carriere0953bf02018-12-21 15:36:25 +01005102
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005103 /* 4.3 */
Etienne Carriere0953bf02018-12-21 15:36:25 +01005104 n = n + i + tmp_size - m;
5105 memset(tmp + n, 0, tmp_size - n);
Jens Wiklanderb58916e2016-07-07 15:29:32 +02005106
5107 /* 5 */
5108 out_size = sizeof(out);
5109 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5110 ta_crypt_cmd_asymmetric_decrypt(c, &s, opd, NULL, 0,
5111 tmp, tmp_size, out, &out_size)))
5112 goto out;
5113
5114 /* 6 */
5115 if (!ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_SIGNATURE_INVALID,
5116 ta_crypt_cmd_asymmetric_verify(c, &s, opv, NULL, 0,
5117 in, sizeof(in), out, out_size)))
5118 goto out;
5119 }
5120
5121out:
5122 TEEC_CloseSession(&s);
5123}
Jens Wiklander14f48872018-06-29 15:30:13 +02005124ADBG_CASE_DEFINE(regression, 4011, xtest_tee_test_4011,
5125 "Test TEE Internal API Bleichenbacher attack (negative)");
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005126
5127#ifdef CFG_SYSTEM_PTA
5128static void xtest_tee_test_4012(ADBG_Case_t *c)
5129{
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005130 TEEC_Session session = { };
5131 uint32_t ret_orig = 0;
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005132 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
5133 /* Fortuna PRNG requires seed <= 32 bytes */
Etienne Carrieree4ec9e42019-03-28 13:30:21 +01005134 uint8_t pool_input[32] = { };
5135 time_t t = 0;
5136 struct tm tm_local = { };
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03005137
5138 t = time(NULL);
5139 tm_local = *localtime(&t);
5140
5141 memcpy((void *)pool_input, (void *)&tm_local,
5142 sizeof(pool_input) < sizeof(tm_local) ?
5143 sizeof(pool_input) : sizeof(tm_local));
5144
5145
5146 op.params[0].tmpref.buffer = pool_input;
5147 op.params[0].tmpref.size = sizeof(pool_input);
5148 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
5149 TEEC_NONE,
5150 TEEC_NONE,
5151 TEEC_NONE);
5152 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
5153 xtest_teec_open_session(&session, &crypt_user_ta_uuid, NULL,
5154 &ret_orig)))
5155 return;
5156
5157 (void)ADBG_EXPECT_TEEC_SUCCESS(c,
5158 TEEC_InvokeCommand(&session,
5159 TA_CRYPT_CMD_SEED_RNG_POOL,
5160 &op,
5161 &ret_orig));
5162 TEEC_CloseSession(&session);
5163}
Jens Wiklander14f48872018-06-29 15:30:13 +02005164ADBG_CASE_DEFINE(regression, 4012, xtest_tee_test_4012,
5165 "Test seeding RNG entropy");
5166#endif /*CFG_SYSTEM_PTA*/