xref: /optee_os/core/crypto/crypto.c (revision 5da36a2473928a821089a37f8d0ca585e7a7cfcc)
1fb7ef469SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause
2b887bd8fSJens Wiklander /*
3b887bd8fSJens Wiklander  * Copyright (c) 2017, Linaro Limited
4b887bd8fSJens Wiklander  */
5b887bd8fSJens Wiklander 
6d7ac7d0fSJens Wiklander #include <assert.h>
7b887bd8fSJens Wiklander #include <compiler.h>
8d0620b01SJens Wiklander #include <crypto/aes-ccm.h>
9d0620b01SJens Wiklander #include <crypto/aes-gcm.h>
10e1770e71SJens Wiklander #include <crypto/crypto.h>
116648f482SJens Wiklander #include <crypto/crypto_impl.h>
1233790cc1SJens Wiklander #include <kernel/panic.h>
13d7ac7d0fSJens Wiklander #include <stdlib.h>
14d7ac7d0fSJens Wiklander #include <string.h>
156d259e05SJens Wiklander #include <utee_defines.h>
16b887bd8fSJens Wiklander 
176648f482SJens Wiklander TEE_Result crypto_hash_alloc_ctx(void **ctx, uint32_t algo)
18b887bd8fSJens Wiklander {
196648f482SJens Wiklander 	TEE_Result res = TEE_SUCCESS;
206648f482SJens Wiklander 	struct crypto_hash_ctx *c = NULL;
216648f482SJens Wiklander 
226648f482SJens Wiklander 	switch (algo) {
236648f482SJens Wiklander 	case TEE_ALG_MD5:
246648f482SJens Wiklander 		res = crypto_md5_alloc_ctx(&c);
256648f482SJens Wiklander 		break;
266648f482SJens Wiklander 	case TEE_ALG_SHA1:
276648f482SJens Wiklander 		res = crypto_sha1_alloc_ctx(&c);
286648f482SJens Wiklander 		break;
296648f482SJens Wiklander 	case TEE_ALG_SHA224:
306648f482SJens Wiklander 		res = crypto_sha224_alloc_ctx(&c);
316648f482SJens Wiklander 		break;
326648f482SJens Wiklander 	case TEE_ALG_SHA256:
336648f482SJens Wiklander 		res = crypto_sha256_alloc_ctx(&c);
346648f482SJens Wiklander 		break;
356648f482SJens Wiklander 	case TEE_ALG_SHA384:
366648f482SJens Wiklander 		res = crypto_sha384_alloc_ctx(&c);
376648f482SJens Wiklander 		break;
386648f482SJens Wiklander 	case TEE_ALG_SHA512:
396648f482SJens Wiklander 		res = crypto_sha512_alloc_ctx(&c);
406648f482SJens Wiklander 		break;
416648f482SJens Wiklander 	default:
42b887bd8fSJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
43b887bd8fSJens Wiklander 	}
44b887bd8fSJens Wiklander 
456648f482SJens Wiklander 	if (!res)
466648f482SJens Wiklander 		*ctx = c;
476648f482SJens Wiklander 
486648f482SJens Wiklander 	return res;
496648f482SJens Wiklander }
506648f482SJens Wiklander 
516648f482SJens Wiklander static const struct crypto_hash_ops *hash_ops(void *ctx)
526648f482SJens Wiklander {
536648f482SJens Wiklander 	struct crypto_hash_ctx *c = ctx;
546648f482SJens Wiklander 
556648f482SJens Wiklander 	assert(c && c->ops);
566648f482SJens Wiklander 
576648f482SJens Wiklander 	return c->ops;
586648f482SJens Wiklander }
596648f482SJens Wiklander 
60ce7a47f5SJerome Forissier void crypto_hash_free_ctx(void *ctx, uint32_t algo __unused)
61ecf2e014SJens Wiklander {
62ce7a47f5SJerome Forissier 	if (ctx)
636648f482SJens Wiklander 		hash_ops(ctx)->free_ctx(ctx);
64ecf2e014SJens Wiklander }
65ecf2e014SJens Wiklander 
666648f482SJens Wiklander void crypto_hash_copy_state(void *dst_ctx, void *src_ctx,
67ecf2e014SJens Wiklander 			    uint32_t algo __unused)
68ecf2e014SJens Wiklander {
696648f482SJens Wiklander 	hash_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
70ecf2e014SJens Wiklander }
71ecf2e014SJens Wiklander 
726648f482SJens Wiklander TEE_Result crypto_hash_init(void *ctx, uint32_t algo __unused)
73b887bd8fSJens Wiklander {
746648f482SJens Wiklander 	return hash_ops(ctx)->init(ctx);
75b887bd8fSJens Wiklander }
766648f482SJens Wiklander 
776648f482SJens Wiklander TEE_Result crypto_hash_update(void *ctx, uint32_t algo __unused,
786648f482SJens Wiklander 			      const uint8_t *data, size_t len)
79b887bd8fSJens Wiklander {
806648f482SJens Wiklander 	return hash_ops(ctx)->update(ctx, data, len);
81b887bd8fSJens Wiklander }
826648f482SJens Wiklander 
836648f482SJens Wiklander TEE_Result crypto_hash_final(void *ctx, uint32_t algo __unused,
846648f482SJens Wiklander 			     uint8_t *digest, size_t len)
85b887bd8fSJens Wiklander {
866648f482SJens Wiklander 	return hash_ops(ctx)->final(ctx, digest, len);
87b887bd8fSJens Wiklander }
8882d91db1SJens Wiklander 
8982d91db1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_CIPHER)
9072a9b1a0SJens Wiklander TEE_Result crypto_cipher_alloc_ctx(void **ctx __unused, uint32_t algo __unused)
9182d91db1SJens Wiklander {
921c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
9382d91db1SJens Wiklander }
9482d91db1SJens Wiklander 
95ce7a47f5SJerome Forissier void crypto_cipher_free_ctx(void *ctx, uint32_t algo __unused)
9672a9b1a0SJens Wiklander {
97ce7a47f5SJerome Forissier 	if (ctx)
9872a9b1a0SJens Wiklander 		assert(0);
9972a9b1a0SJens Wiklander }
10072a9b1a0SJens Wiklander 
10172a9b1a0SJens Wiklander void crypto_cipher_copy_state(void *dst_ctx __unused, void *src_ctx __unused,
10272a9b1a0SJens Wiklander 			      uint32_t algo __unused)
10372a9b1a0SJens Wiklander {
10472a9b1a0SJens Wiklander 	assert(0);
10572a9b1a0SJens Wiklander }
10672a9b1a0SJens Wiklander 
10782d91db1SJens Wiklander TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused,
10882d91db1SJens Wiklander 			      TEE_OperationMode mode __unused,
10982d91db1SJens Wiklander 			      const uint8_t *key1 __unused,
11082d91db1SJens Wiklander 			      size_t key1_len __unused,
11182d91db1SJens Wiklander 			      const uint8_t *key2 __unused,
11282d91db1SJens Wiklander 			      size_t key2_len __unused,
11382d91db1SJens Wiklander 			      const uint8_t *iv __unused,
11482d91db1SJens Wiklander 			      size_t iv_len __unused)
11582d91db1SJens Wiklander {
1161c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
11782d91db1SJens Wiklander }
11882d91db1SJens Wiklander 
11982d91db1SJens Wiklander TEE_Result crypto_cipher_update(void *ctx __unused, uint32_t algo __unused,
12082d91db1SJens Wiklander 				TEE_OperationMode mode __unused,
12182d91db1SJens Wiklander 				bool last_block __unused,
12282d91db1SJens Wiklander 				const uint8_t *data __unused,
12382d91db1SJens Wiklander 				size_t len __unused, uint8_t *dst __unused)
12482d91db1SJens Wiklander {
1251c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
12682d91db1SJens Wiklander }
12782d91db1SJens Wiklander 
12882d91db1SJens Wiklander void crypto_cipher_final(void *ctx __unused, uint32_t algo __unused)
12982d91db1SJens Wiklander {
13082d91db1SJens Wiklander }
13182d91db1SJens Wiklander #endif /*_CFG_CRYPTO_WITH_CIPHER*/
132e9eaba5cSJens Wiklander 
1336d259e05SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo, size_t *size)
1346d259e05SJens Wiklander {
1356d259e05SJens Wiklander 	uint32_t class = TEE_ALG_GET_CLASS(algo);
1366d259e05SJens Wiklander 
1376d259e05SJens Wiklander 	if (class != TEE_OPERATION_CIPHER && class != TEE_OPERATION_MAC &&
1386d259e05SJens Wiklander 	    class != TEE_OPERATION_AE)
1396d259e05SJens Wiklander 		return TEE_ERROR_BAD_PARAMETERS;
1406d259e05SJens Wiklander 
1416d259e05SJens Wiklander 	switch (TEE_ALG_GET_MAIN_ALG(algo)) {
1426d259e05SJens Wiklander 	case TEE_MAIN_ALGO_AES:
1436d259e05SJens Wiklander 		*size = TEE_AES_BLOCK_SIZE;
1446d259e05SJens Wiklander 		return TEE_SUCCESS;
1456d259e05SJens Wiklander 	case TEE_MAIN_ALGO_DES:
1466d259e05SJens Wiklander 	case TEE_MAIN_ALGO_DES3:
1476d259e05SJens Wiklander 		*size = TEE_DES_BLOCK_SIZE;
1486d259e05SJens Wiklander 		return TEE_SUCCESS;
1496d259e05SJens Wiklander 	default:
1506d259e05SJens Wiklander 		return TEE_ERROR_NOT_SUPPORTED;
1516d259e05SJens Wiklander 	}
1526d259e05SJens Wiklander }
1536d259e05SJens Wiklander 
154*5da36a24SJens Wiklander TEE_Result crypto_mac_alloc_ctx(void **ctx, uint32_t algo)
155e9eaba5cSJens Wiklander {
156*5da36a24SJens Wiklander 	TEE_Result res = TEE_SUCCESS;
157*5da36a24SJens Wiklander 	struct crypto_mac_ctx *c = NULL;
158*5da36a24SJens Wiklander 
159*5da36a24SJens Wiklander 	switch (algo) {
160*5da36a24SJens Wiklander 	case TEE_ALG_HMAC_MD5:
161*5da36a24SJens Wiklander 		res = crypto_hmac_md5_alloc_ctx(&c);
162*5da36a24SJens Wiklander 		break;
163*5da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA1:
164*5da36a24SJens Wiklander 		res = crypto_hmac_sha1_alloc_ctx(&c);
165*5da36a24SJens Wiklander 		break;
166*5da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA224:
167*5da36a24SJens Wiklander 		res = crypto_hmac_sha224_alloc_ctx(&c);
168*5da36a24SJens Wiklander 		break;
169*5da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA256:
170*5da36a24SJens Wiklander 		res = crypto_hmac_sha256_alloc_ctx(&c);
171*5da36a24SJens Wiklander 		break;
172*5da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA384:
173*5da36a24SJens Wiklander 		res = crypto_hmac_sha384_alloc_ctx(&c);
174*5da36a24SJens Wiklander 		break;
175*5da36a24SJens Wiklander 	case TEE_ALG_HMAC_SHA512:
176*5da36a24SJens Wiklander 		res = crypto_hmac_sha512_alloc_ctx(&c);
177*5da36a24SJens Wiklander 		break;
178*5da36a24SJens Wiklander 	case TEE_ALG_AES_CBC_MAC_NOPAD:
179*5da36a24SJens Wiklander 		res = crypto_aes_cbc_mac_nopad_alloc_ctx(&c);
180*5da36a24SJens Wiklander 		break;
181*5da36a24SJens Wiklander 	case TEE_ALG_AES_CBC_MAC_PKCS5:
182*5da36a24SJens Wiklander 		res = crypto_aes_cbc_mac_pkcs5_alloc_ctx(&c);
183*5da36a24SJens Wiklander 		break;
184*5da36a24SJens Wiklander 	case TEE_ALG_DES_CBC_MAC_NOPAD:
185*5da36a24SJens Wiklander 		res = crypto_des_cbc_mac_nopad_alloc_ctx(&c);
186*5da36a24SJens Wiklander 		break;
187*5da36a24SJens Wiklander 	case TEE_ALG_DES_CBC_MAC_PKCS5:
188*5da36a24SJens Wiklander 		res = crypto_des_cbc_mac_pkcs5_alloc_ctx(&c);
189*5da36a24SJens Wiklander 		break;
190*5da36a24SJens Wiklander 	case TEE_ALG_DES3_CBC_MAC_NOPAD:
191*5da36a24SJens Wiklander 		res = crypto_des3_cbc_mac_nopad_alloc_ctx(&c);
192*5da36a24SJens Wiklander 		break;
193*5da36a24SJens Wiklander 	case TEE_ALG_DES3_CBC_MAC_PKCS5:
194*5da36a24SJens Wiklander 		res = crypto_des3_cbc_mac_pkcs5_alloc_ctx(&c);
195*5da36a24SJens Wiklander 		break;
196*5da36a24SJens Wiklander 	case TEE_ALG_AES_CMAC:
197*5da36a24SJens Wiklander 		res = crypto_aes_cmac_alloc_ctx(&c);
198*5da36a24SJens Wiklander 		break;
199*5da36a24SJens Wiklander 	default:
200*5da36a24SJens Wiklander 		return TEE_ERROR_NOT_SUPPORTED;
201*5da36a24SJens Wiklander 	}
202*5da36a24SJens Wiklander 
203*5da36a24SJens Wiklander 	if (!res)
204*5da36a24SJens Wiklander 		*ctx = c;
205*5da36a24SJens Wiklander 
206*5da36a24SJens Wiklander 	return res;
207*5da36a24SJens Wiklander }
208*5da36a24SJens Wiklander 
209*5da36a24SJens Wiklander static const struct crypto_mac_ops *mac_ops(void *ctx)
210*5da36a24SJens Wiklander {
211*5da36a24SJens Wiklander 	struct crypto_mac_ctx *c = ctx;
212*5da36a24SJens Wiklander 
213*5da36a24SJens Wiklander 	assert(c && c->ops);
214*5da36a24SJens Wiklander 
215*5da36a24SJens Wiklander 	return c->ops;
216e9eaba5cSJens Wiklander }
217e9eaba5cSJens Wiklander 
218ce7a47f5SJerome Forissier void crypto_mac_free_ctx(void *ctx, uint32_t algo __unused)
21982ef73bcSJens Wiklander {
220ce7a47f5SJerome Forissier 	if (ctx)
221*5da36a24SJens Wiklander 		mac_ops(ctx)->free_ctx(ctx);
22282ef73bcSJens Wiklander }
22382ef73bcSJens Wiklander 
224*5da36a24SJens Wiklander void crypto_mac_copy_state(void *dst_ctx, void *src_ctx, uint32_t algo __unused)
22582ef73bcSJens Wiklander {
226*5da36a24SJens Wiklander 	mac_ops(dst_ctx)->copy_state(dst_ctx, src_ctx);
22782ef73bcSJens Wiklander }
22882ef73bcSJens Wiklander 
229*5da36a24SJens Wiklander TEE_Result crypto_mac_init(void *ctx, uint32_t algo __unused,
230*5da36a24SJens Wiklander 			   const uint8_t *key, size_t len)
231e9eaba5cSJens Wiklander {
232*5da36a24SJens Wiklander 	return mac_ops(ctx)->init(ctx, key, len);
233e9eaba5cSJens Wiklander }
234e9eaba5cSJens Wiklander 
235*5da36a24SJens Wiklander TEE_Result crypto_mac_update(void *ctx, uint32_t algo __unused,
236*5da36a24SJens Wiklander 			     const uint8_t *data, size_t len)
237e9eaba5cSJens Wiklander {
238*5da36a24SJens Wiklander 	if (!len)
239*5da36a24SJens Wiklander 		return TEE_SUCCESS;
240*5da36a24SJens Wiklander 
241*5da36a24SJens Wiklander 	return mac_ops(ctx)->update(ctx, data, len);
242e9eaba5cSJens Wiklander }
243e9eaba5cSJens Wiklander 
244*5da36a24SJens Wiklander TEE_Result crypto_mac_final(void *ctx, uint32_t algo __unused,
245*5da36a24SJens Wiklander 			    uint8_t *digest, size_t digest_len)
246e9eaba5cSJens Wiklander {
247*5da36a24SJens Wiklander 	return mac_ops(ctx)->final(ctx, digest, digest_len);
248e9eaba5cSJens Wiklander }
249e9eaba5cSJens Wiklander 
250d7ac7d0fSJens Wiklander TEE_Result crypto_authenc_alloc_ctx(void **ctx, uint32_t algo)
2518875ce46SJens Wiklander {
252d0620b01SJens Wiklander 	switch (algo) {
253d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
254d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
255d7ac7d0fSJens Wiklander 		return crypto_aes_ccm_alloc_ctx(ctx);
256d0620b01SJens Wiklander #endif
257d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
258d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
259d7ac7d0fSJens Wiklander 		return crypto_aes_gcm_alloc_ctx(ctx);
260d0620b01SJens Wiklander #endif
261d0620b01SJens Wiklander 	default:
2628875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2638875ce46SJens Wiklander 	}
264d0620b01SJens Wiklander }
2658875ce46SJens Wiklander 
266d7ac7d0fSJens Wiklander void crypto_authenc_free_ctx(void *ctx, uint32_t algo)
267d7ac7d0fSJens Wiklander {
268d7ac7d0fSJens Wiklander 	switch (algo) {
269d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM)
270d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_CCM:
271d7ac7d0fSJens Wiklander 		crypto_aes_ccm_free_ctx(ctx);
272d7ac7d0fSJens Wiklander 		break;
273d7ac7d0fSJens Wiklander #endif
274d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM)
275d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_GCM:
276d7ac7d0fSJens Wiklander 		crypto_aes_gcm_free_ctx(ctx);
277d7ac7d0fSJens Wiklander 		break;
278d7ac7d0fSJens Wiklander #endif
279d7ac7d0fSJens Wiklander 	default:
280ce7a47f5SJerome Forissier 		if (ctx)
281d7ac7d0fSJens Wiklander 			assert(0);
282d7ac7d0fSJens Wiklander 	}
283d7ac7d0fSJens Wiklander }
284d7ac7d0fSJens Wiklander 
285d7ac7d0fSJens Wiklander void crypto_authenc_copy_state(void *dst_ctx, void *src_ctx, uint32_t algo)
286d7ac7d0fSJens Wiklander {
287d7ac7d0fSJens Wiklander 	switch (algo) {
288d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM)
289d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_CCM:
290d7ac7d0fSJens Wiklander 		crypto_aes_ccm_copy_state(dst_ctx, src_ctx);
291d7ac7d0fSJens Wiklander 		break;
292d7ac7d0fSJens Wiklander #endif
293d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM)
294d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_GCM:
295d7ac7d0fSJens Wiklander 		crypto_aes_gcm_copy_state(dst_ctx, src_ctx);
296d7ac7d0fSJens Wiklander 		break;
297d7ac7d0fSJens Wiklander #endif
298d7ac7d0fSJens Wiklander 	default:
299d7ac7d0fSJens Wiklander 		assert(0);
300d7ac7d0fSJens Wiklander 	}
301d7ac7d0fSJens Wiklander }
302d7ac7d0fSJens Wiklander 
303d0620b01SJens Wiklander TEE_Result crypto_authenc_init(void *ctx __maybe_unused,
304d0620b01SJens Wiklander 			       uint32_t algo __maybe_unused,
305d0620b01SJens Wiklander 			       TEE_OperationMode mode __maybe_unused,
306d0620b01SJens Wiklander 			       const uint8_t *key __maybe_unused,
307d0620b01SJens Wiklander 			       size_t key_len __maybe_unused,
308d0620b01SJens Wiklander 			       const uint8_t *nonce __maybe_unused,
309d0620b01SJens Wiklander 			       size_t nonce_len __maybe_unused,
310d0620b01SJens Wiklander 			       size_t tag_len __maybe_unused,
311d0620b01SJens Wiklander 			       size_t aad_len __maybe_unused,
312d0620b01SJens Wiklander 			       size_t payload_len __maybe_unused)
313d0620b01SJens Wiklander {
314d0620b01SJens Wiklander 	switch (algo) {
315d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
316d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
317d0620b01SJens Wiklander 		return crypto_aes_ccm_init(ctx, mode, key, key_len, nonce,
318d0620b01SJens Wiklander 					   nonce_len, tag_len, aad_len,
319d0620b01SJens Wiklander 					   payload_len);
320d0620b01SJens Wiklander #endif
321d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
322d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
323d0620b01SJens Wiklander 		return crypto_aes_gcm_init(ctx, mode, key, key_len, nonce,
324d0620b01SJens Wiklander 					   nonce_len, tag_len);
325d0620b01SJens Wiklander #endif
326d0620b01SJens Wiklander 	default:
327d0620b01SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
328d0620b01SJens Wiklander 	}
329d0620b01SJens Wiklander }
330d0620b01SJens Wiklander 
331d0620b01SJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx __maybe_unused,
332d0620b01SJens Wiklander 				     uint32_t algo __maybe_unused,
3338875ce46SJens Wiklander 				     TEE_OperationMode mode __unused,
334d0620b01SJens Wiklander 				     const uint8_t *data __maybe_unused,
335d0620b01SJens Wiklander 				     size_t len __maybe_unused)
3368875ce46SJens Wiklander {
337d0620b01SJens Wiklander 	switch (algo) {
338d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
339d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
340d0620b01SJens Wiklander 		return crypto_aes_ccm_update_aad(ctx, data, len);
341d0620b01SJens Wiklander #endif
342d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
343d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
344d0620b01SJens Wiklander 		return crypto_aes_gcm_update_aad(ctx, data, len);
345d0620b01SJens Wiklander #endif
346d0620b01SJens Wiklander 	default:
3478875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
3488875ce46SJens Wiklander 	}
349d0620b01SJens Wiklander }
3508875ce46SJens Wiklander 
351d0620b01SJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx __maybe_unused,
352d0620b01SJens Wiklander 					 uint32_t algo __maybe_unused,
353d0620b01SJens Wiklander 					 TEE_OperationMode mode __maybe_unused,
354d0620b01SJens Wiklander 					 const uint8_t *src_data __maybe_unused,
355d0620b01SJens Wiklander 					 size_t src_len __maybe_unused,
356d0620b01SJens Wiklander 					 uint8_t *dst_data __maybe_unused,
357d0620b01SJens Wiklander 					 size_t *dst_len __maybe_unused)
3588875ce46SJens Wiklander {
359d0620b01SJens Wiklander 	size_t dl = *dst_len;
360d0620b01SJens Wiklander 
361d0620b01SJens Wiklander 	*dst_len = src_len;
362d0620b01SJens Wiklander 	if (dl < src_len)
363d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
364d0620b01SJens Wiklander 
365d0620b01SJens Wiklander 	switch (algo) {
366d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
367d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
368d0620b01SJens Wiklander 		return crypto_aes_ccm_update_payload(ctx, mode, src_data,
369d0620b01SJens Wiklander 						     src_len, dst_data);
370d0620b01SJens Wiklander #endif
371d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
372d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
373d0620b01SJens Wiklander 		return crypto_aes_gcm_update_payload(ctx, mode, src_data,
374d0620b01SJens Wiklander 						     src_len, dst_data);
375d0620b01SJens Wiklander #endif
376d0620b01SJens Wiklander 	default:
3778875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
3788875ce46SJens Wiklander 	}
379d0620b01SJens Wiklander }
3808875ce46SJens Wiklander 
381d0620b01SJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx __maybe_unused,
382d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
383d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
384d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
385d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
386d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
387d0620b01SJens Wiklander 				    uint8_t *dst_tag __maybe_unused,
388d0620b01SJens Wiklander 				    size_t *dst_tag_len __maybe_unused)
3898875ce46SJens Wiklander {
390d0620b01SJens Wiklander 	size_t dl = *dst_len;
391d0620b01SJens Wiklander 
392d0620b01SJens Wiklander 	*dst_len = src_len;
393d0620b01SJens Wiklander 	if (dl < src_len)
394d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
395d0620b01SJens Wiklander 
396d0620b01SJens Wiklander 	switch (algo) {
397d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
398d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
399d0620b01SJens Wiklander 		return crypto_aes_ccm_enc_final(ctx, src_data, src_len,
400d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
401d0620b01SJens Wiklander #endif
402d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
403d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
404d0620b01SJens Wiklander 		return crypto_aes_gcm_enc_final(ctx, src_data, src_len,
405d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
406d0620b01SJens Wiklander #endif
407d0620b01SJens Wiklander 	default:
4088875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
4098875ce46SJens Wiklander 	}
410d0620b01SJens Wiklander }
4118875ce46SJens Wiklander 
412d0620b01SJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx __maybe_unused,
413d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
414d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
415d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
416d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
417d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
418d0620b01SJens Wiklander 				    const uint8_t *tag __maybe_unused,
419d0620b01SJens Wiklander 				    size_t tag_len __maybe_unused)
4208875ce46SJens Wiklander {
421d0620b01SJens Wiklander 	size_t dl = *dst_len;
422d0620b01SJens Wiklander 
423d0620b01SJens Wiklander 	*dst_len = src_len;
424d0620b01SJens Wiklander 	if (dl < src_len)
425d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
426d0620b01SJens Wiklander 
427d0620b01SJens Wiklander 	switch (algo) {
428d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
429d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
430d0620b01SJens Wiklander 		return crypto_aes_ccm_dec_final(ctx, src_data, src_len,
431d0620b01SJens Wiklander 						dst_data, tag, tag_len);
432d0620b01SJens Wiklander #endif
433d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
434d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
435d0620b01SJens Wiklander 		return crypto_aes_gcm_dec_final(ctx, src_data, src_len,
436d0620b01SJens Wiklander 						dst_data, tag, tag_len);
437d0620b01SJens Wiklander #endif
438d0620b01SJens Wiklander 	default:
4398875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
4408875ce46SJens Wiklander 	}
4418875ce46SJens Wiklander }
4428875ce46SJens Wiklander 
443d0620b01SJens Wiklander void crypto_authenc_final(void *ctx __maybe_unused,
444d0620b01SJens Wiklander 			  uint32_t algo __maybe_unused)
4458875ce46SJens Wiklander {
446d0620b01SJens Wiklander 	switch (algo) {
447d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
448d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
449d0620b01SJens Wiklander 		crypto_aes_ccm_final(ctx);
450d0620b01SJens Wiklander 		break;
451d0620b01SJens Wiklander #endif
452d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
453d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
454d0620b01SJens Wiklander 		crypto_aes_gcm_final(ctx);
455d0620b01SJens Wiklander 		break;
456d0620b01SJens Wiklander #endif
457d0620b01SJens Wiklander 	default:
458d0620b01SJens Wiklander 		break;
4598875ce46SJens Wiklander 	}
460d0620b01SJens Wiklander }
46133790cc1SJens Wiklander 
46233790cc1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_ACIPHER)
46333790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused)
46433790cc1SJens Wiklander {
46533790cc1SJens Wiklander 	return NULL;
46633790cc1SJens Wiklander }
46733790cc1SJens Wiklander 
46833790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused,
46933790cc1SJens Wiklander 				size_t fromsize __unused,
47033790cc1SJens Wiklander 				struct bignum *to __unused)
47133790cc1SJens Wiklander {
47233790cc1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
47333790cc1SJens Wiklander }
47433790cc1SJens Wiklander 
47533790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused)
47633790cc1SJens Wiklander {
47733790cc1SJens Wiklander 	return 0;
47833790cc1SJens Wiklander }
47933790cc1SJens Wiklander 
48033790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused)
48133790cc1SJens Wiklander {
48233790cc1SJens Wiklander 	return 0;
48333790cc1SJens Wiklander }
48433790cc1SJens Wiklander 
48533790cc1SJens Wiklander /*
48633790cc1SJens Wiklander  * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be
48733790cc1SJens Wiklander  * enough to guarantee that the functions calling this function aren't
48833790cc1SJens Wiklander  * called, but just in case add a panic() here to avoid unexpected
48933790cc1SJens Wiklander  * behavoir.
49033790cc1SJens Wiklander  */
49133790cc1SJens Wiklander static void bignum_cant_happen(void)
49233790cc1SJens Wiklander {
49333790cc1SJens Wiklander 	volatile bool b = true;
49433790cc1SJens Wiklander 
49533790cc1SJens Wiklander 	/* Avoid warning about function does not return */
49633790cc1SJens Wiklander 	if (b)
49733790cc1SJens Wiklander 		panic();
49833790cc1SJens Wiklander }
49933790cc1SJens Wiklander 
50033790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused,
50133790cc1SJens Wiklander 			  uint8_t *to __unused)
50233790cc1SJens Wiklander {
50333790cc1SJens Wiklander 	bignum_cant_happen();
50433790cc1SJens Wiklander }
50533790cc1SJens Wiklander 
50633790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused,
50733790cc1SJens Wiklander 			const struct bignum *from __unused)
50833790cc1SJens Wiklander {
50933790cc1SJens Wiklander 	bignum_cant_happen();
51033790cc1SJens Wiklander }
51133790cc1SJens Wiklander 
51233790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a)
51333790cc1SJens Wiklander {
51433790cc1SJens Wiklander 	if (a)
51533790cc1SJens Wiklander 		panic();
51633790cc1SJens Wiklander }
51733790cc1SJens Wiklander 
51833790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused)
51933790cc1SJens Wiklander {
52033790cc1SJens Wiklander 	bignum_cant_happen();
52133790cc1SJens Wiklander }
52233790cc1SJens Wiklander 
52333790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */
52433790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused,
52533790cc1SJens Wiklander 			      struct bignum *b __unused)
52633790cc1SJens Wiklander {
52733790cc1SJens Wiklander 	bignum_cant_happen();
52833790cc1SJens Wiklander 	return -1;
52933790cc1SJens Wiklander }
53033790cc1SJens Wiklander #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/
531291e5450SJens Wiklander 
532291e5450SJens Wiklander #if !defined(CFG_CRYPTO_RSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
533291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_rsa_keypair(struct rsa_keypair *s __unused,
534291e5450SJens Wiklander 					    size_t key_size_bits __unused)
535291e5450SJens Wiklander {
536291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
537291e5450SJens Wiklander }
538291e5450SJens Wiklander 
539291e5450SJens Wiklander TEE_Result
540291e5450SJens Wiklander crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s __unused,
541291e5450SJens Wiklander 				    size_t key_size_bits __unused)
542291e5450SJens Wiklander {
543291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
544291e5450SJens Wiklander }
545291e5450SJens Wiklander 
546291e5450SJens Wiklander void crypto_acipher_free_rsa_public_key(struct rsa_public_key *s __unused)
547291e5450SJens Wiklander {
548291e5450SJens Wiklander }
549291e5450SJens Wiklander 
550291e5450SJens Wiklander TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key __unused,
551291e5450SJens Wiklander 				      size_t key_size __unused)
552291e5450SJens Wiklander {
553291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
554291e5450SJens Wiklander }
555291e5450SJens Wiklander 
556291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_decrypt(struct rsa_keypair *key __unused,
557291e5450SJens Wiklander 					   const uint8_t *src __unused,
558291e5450SJens Wiklander 					   size_t src_len __unused,
559291e5450SJens Wiklander 					   uint8_t *dst __unused,
560291e5450SJens Wiklander 					   size_t *dst_len __unused)
561291e5450SJens Wiklander {
562291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
563291e5450SJens Wiklander }
564291e5450SJens Wiklander 
565291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_encrypt(struct rsa_public_key *key __unused,
566291e5450SJens Wiklander 					   const uint8_t *src __unused,
567291e5450SJens Wiklander 					   size_t src_len __unused,
568291e5450SJens Wiklander 					   uint8_t *dst __unused,
569291e5450SJens Wiklander 					   size_t *dst_len __unused)
570291e5450SJens Wiklander {
571291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
572291e5450SJens Wiklander }
573291e5450SJens Wiklander 
574291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_decrypt(uint32_t algo __unused,
575291e5450SJens Wiklander 					struct rsa_keypair *key __unused,
576291e5450SJens Wiklander 					const uint8_t *label __unused,
577291e5450SJens Wiklander 					size_t label_len __unused,
578291e5450SJens Wiklander 					const uint8_t *src __unused,
579291e5450SJens Wiklander 					size_t src_len __unused,
580291e5450SJens Wiklander 					uint8_t *dst __unused,
581291e5450SJens Wiklander 					size_t *dst_len __unused)
582291e5450SJens Wiklander {
583291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
584291e5450SJens Wiklander }
585291e5450SJens Wiklander 
586291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_encrypt(uint32_t algo __unused,
587291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
588291e5450SJens Wiklander 					const uint8_t *label __unused,
589291e5450SJens Wiklander 					size_t label_len __unused,
590291e5450SJens Wiklander 					const uint8_t *src __unused,
591291e5450SJens Wiklander 					size_t src_len __unused,
592291e5450SJens Wiklander 					uint8_t *dst __unused,
593291e5450SJens Wiklander 					size_t *dst_len __unused)
594291e5450SJens Wiklander {
595291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
596291e5450SJens Wiklander }
597291e5450SJens Wiklander 
598291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_sign(uint32_t algo __unused,
599291e5450SJens Wiklander 				      struct rsa_keypair *key __unused,
600291e5450SJens Wiklander 				      int salt_len __unused,
601291e5450SJens Wiklander 				      const uint8_t *msg __unused,
602291e5450SJens Wiklander 				      size_t msg_len __unused,
603291e5450SJens Wiklander 				      uint8_t *sig __unused,
604291e5450SJens Wiklander 				      size_t *sig_len __unused)
605291e5450SJens Wiklander {
606291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
607291e5450SJens Wiklander }
608291e5450SJens Wiklander 
609291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_verify(uint32_t algo __unused,
610291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
611291e5450SJens Wiklander 					int salt_len __unused,
612291e5450SJens Wiklander 					const uint8_t *msg __unused,
613291e5450SJens Wiklander 					size_t msg_len __unused,
614291e5450SJens Wiklander 					const uint8_t *sig __unused,
615291e5450SJens Wiklander 					size_t sig_len __unused)
616291e5450SJens Wiklander {
617291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
618291e5450SJens Wiklander }
619291e5450SJens Wiklander #endif /*!CFG_CRYPTO_RSA || !_CFG_CRYPTO_WITH_ACIPHER*/
620291e5450SJens Wiklander 
621291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
622291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s __unused,
623291e5450SJens Wiklander 					    size_t key_size_bits __unused)
624291e5450SJens Wiklander {
625291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
626291e5450SJens Wiklander }
627291e5450SJens Wiklander 
628291e5450SJens Wiklander TEE_Result
629291e5450SJens Wiklander crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s __unused,
630291e5450SJens Wiklander 				    size_t key_size_bits __unused)
631291e5450SJens Wiklander {
632291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
633291e5450SJens Wiklander }
634291e5450SJens Wiklander 
635291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dsa_key(struct dsa_keypair *key __unused,
636291e5450SJens Wiklander 				      size_t key_size __unused)
637291e5450SJens Wiklander {
638291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
639291e5450SJens Wiklander }
640291e5450SJens Wiklander 
641291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_sign(uint32_t algo __unused,
642291e5450SJens Wiklander 				   struct dsa_keypair *key __unused,
643291e5450SJens Wiklander 				   const uint8_t *msg __unused,
644291e5450SJens Wiklander 				   size_t msg_len __unused,
645291e5450SJens Wiklander 				   uint8_t *sig __unused,
646291e5450SJens Wiklander 				   size_t *sig_len __unused)
647291e5450SJens Wiklander {
648291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
649291e5450SJens Wiklander }
650291e5450SJens Wiklander 
651291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_verify(uint32_t algo __unused,
652291e5450SJens Wiklander 				     struct dsa_public_key *key __unused,
653291e5450SJens Wiklander 				     const uint8_t *msg __unused,
654291e5450SJens Wiklander 				     size_t msg_len __unused,
655291e5450SJens Wiklander 				     const uint8_t *sig __unused,
656291e5450SJens Wiklander 				     size_t sig_len __unused)
657291e5450SJens Wiklander {
658291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
659291e5450SJens Wiklander }
660291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DSA || !_CFG_CRYPTO_WITH_ACIPHER*/
661291e5450SJens Wiklander 
662291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DH) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
663291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s __unused,
664291e5450SJens Wiklander 					   size_t key_size_bits __unused)
665291e5450SJens Wiklander {
666291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
667291e5450SJens Wiklander }
668291e5450SJens Wiklander 
669291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dh_key(struct dh_keypair *key __unused,
670291e5450SJens Wiklander 				     struct bignum *q __unused,
671291e5450SJens Wiklander 				     size_t xbits __unused)
672291e5450SJens Wiklander {
673291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
674291e5450SJens Wiklander }
675291e5450SJens Wiklander 
676291e5450SJens Wiklander TEE_Result
677291e5450SJens Wiklander crypto_acipher_dh_shared_secret(struct dh_keypair *private_key __unused,
678291e5450SJens Wiklander 				struct bignum *public_key __unused,
679291e5450SJens Wiklander 				struct bignum *secret __unused)
680291e5450SJens Wiklander {
681291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
682291e5450SJens Wiklander }
683291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DH || !_CFG_CRYPTO_WITH_ACIPHER*/
684291e5450SJens Wiklander 
685291e5450SJens Wiklander #if !defined(CFG_CRYPTO_ECC) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
686291e5450SJens Wiklander TEE_Result
687291e5450SJens Wiklander crypto_acipher_alloc_ecc_public_key(struct ecc_public_key *s __unused,
688291e5450SJens Wiklander 				    size_t key_size_bits __unused)
689291e5450SJens Wiklander {
690291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
691291e5450SJens Wiklander }
692291e5450SJens Wiklander 
693291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_ecc_keypair(struct ecc_keypair *s __unused,
694291e5450SJens Wiklander 					    size_t key_size_bits __unused)
695291e5450SJens Wiklander {
696291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
697291e5450SJens Wiklander }
698291e5450SJens Wiklander 
699291e5450SJens Wiklander void crypto_acipher_free_ecc_public_key(struct ecc_public_key *s __unused)
700291e5450SJens Wiklander {
701291e5450SJens Wiklander }
702291e5450SJens Wiklander 
703291e5450SJens Wiklander TEE_Result crypto_acipher_gen_ecc_key(struct ecc_keypair *key __unused)
704291e5450SJens Wiklander {
705291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
706291e5450SJens Wiklander }
707291e5450SJens Wiklander 
708291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_sign(uint32_t algo __unused,
709291e5450SJens Wiklander 				   struct ecc_keypair *key __unused,
710291e5450SJens Wiklander 				   const uint8_t *msg __unused,
711291e5450SJens Wiklander 				   size_t msg_len __unused,
712291e5450SJens Wiklander 				   uint8_t *sig __unused,
713291e5450SJens Wiklander 				   size_t *sig_len __unused)
714291e5450SJens Wiklander {
715291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
716291e5450SJens Wiklander }
717291e5450SJens Wiklander 
718291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_verify(uint32_t algo __unused,
719291e5450SJens Wiklander 				     struct ecc_public_key *key __unused,
720291e5450SJens Wiklander 				     const uint8_t *msg __unused,
721291e5450SJens Wiklander 				     size_t msg_len __unused,
722291e5450SJens Wiklander 				     const uint8_t *sig __unused,
723291e5450SJens Wiklander 				     size_t sig_len __unused)
724291e5450SJens Wiklander {
725291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
726291e5450SJens Wiklander }
727291e5450SJens Wiklander 
728291e5450SJens Wiklander TEE_Result
729291e5450SJens Wiklander crypto_acipher_ecc_shared_secret(struct ecc_keypair *private_key __unused,
730291e5450SJens Wiklander 				 struct ecc_public_key *public_key __unused,
731291e5450SJens Wiklander 				 void *secret __unused,
732291e5450SJens Wiklander 				 unsigned long *secret_len __unused)
733291e5450SJens Wiklander {
734291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
735291e5450SJens Wiklander }
736291e5450SJens Wiklander #endif /*!CFG_CRYPTO_ECC || !_CFG_CRYPTO_WITH_ACIPHER*/
737