xref: /optee_os/core/crypto/crypto.c (revision 72a9b1a0e974745d99fff64a70544f2ee8dcec32)
1fb7ef469SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause
2b887bd8fSJens Wiklander /*
3b887bd8fSJens Wiklander  * Copyright (c) 2017, Linaro Limited
4b887bd8fSJens Wiklander  */
5b887bd8fSJens Wiklander 
6b887bd8fSJens Wiklander #include <compiler.h>
7d0620b01SJens Wiklander #include <crypto/aes-ccm.h>
8d0620b01SJens Wiklander #include <crypto/aes-gcm.h>
9e1770e71SJens Wiklander #include <crypto/crypto.h>
1033790cc1SJens Wiklander #include <kernel/panic.h>
11b887bd8fSJens Wiklander 
12b887bd8fSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_HASH)
13ecf2e014SJens Wiklander TEE_Result crypto_hash_alloc_ctx(void **ctx __unused, uint32_t algo __unused)
14b887bd8fSJens Wiklander {
15b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
16b887bd8fSJens Wiklander }
17b887bd8fSJens Wiklander 
18ecf2e014SJens Wiklander void crypto_hash_free_ctx(void *ctx __unused, uint32_t algo __unused)
19ecf2e014SJens Wiklander {
20ecf2e014SJens Wiklander 	assert(0);
21ecf2e014SJens Wiklander }
22ecf2e014SJens Wiklander 
23ecf2e014SJens Wiklander void crypto_hash_copy_state(void *dst_ctx __unused, void *src_ctx __unused,
24ecf2e014SJens Wiklander 			    uint32_t algo __unused)
25ecf2e014SJens Wiklander {
26ecf2e014SJens Wiklander 	assert(0);
27ecf2e014SJens Wiklander }
28ecf2e014SJens Wiklander 
29b887bd8fSJens Wiklander TEE_Result crypto_hash_init(void *ctx __unused, uint32_t algo __unused)
30b887bd8fSJens Wiklander {
31b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
32b887bd8fSJens Wiklander }
33b887bd8fSJens Wiklander TEE_Result crypto_hash_update(void *ctx __unused, uint32_t algo __unused,
34b887bd8fSJens Wiklander 			      const uint8_t *data __unused, size_t len __unused)
35b887bd8fSJens Wiklander {
36b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
37b887bd8fSJens Wiklander }
38b887bd8fSJens Wiklander TEE_Result crypto_hash_final(void *ctx __unused, uint32_t algo __unused,
39b887bd8fSJens Wiklander 			     uint8_t *digest __unused, size_t len __unused)
40b887bd8fSJens Wiklander {
41b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
42b887bd8fSJens Wiklander }
43b887bd8fSJens Wiklander #endif /*_CFG_CRYPTO_WITH_HASH*/
4482d91db1SJens Wiklander 
4582d91db1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_CIPHER)
46*72a9b1a0SJens Wiklander TEE_Result crypto_cipher_alloc_ctx(void **ctx __unused, uint32_t algo __unused)
4782d91db1SJens Wiklander {
481c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
4982d91db1SJens Wiklander }
5082d91db1SJens Wiklander 
51*72a9b1a0SJens Wiklander void crypto_cipher_free_ctx(void *ctx __unused, uint32_t algo __unused)
52*72a9b1a0SJens Wiklander {
53*72a9b1a0SJens Wiklander 	assert(0);
54*72a9b1a0SJens Wiklander }
55*72a9b1a0SJens Wiklander 
56*72a9b1a0SJens Wiklander void crypto_cipher_copy_state(void *dst_ctx __unused, void *src_ctx __unused,
57*72a9b1a0SJens Wiklander 			      uint32_t algo __unused)
58*72a9b1a0SJens Wiklander {
59*72a9b1a0SJens Wiklander 	assert(0);
60*72a9b1a0SJens Wiklander }
61*72a9b1a0SJens Wiklander 
6282d91db1SJens Wiklander TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused,
6382d91db1SJens Wiklander 			      TEE_OperationMode mode __unused,
6482d91db1SJens Wiklander 			      const uint8_t *key1 __unused,
6582d91db1SJens Wiklander 			      size_t key1_len __unused,
6682d91db1SJens Wiklander 			      const uint8_t *key2 __unused,
6782d91db1SJens Wiklander 			      size_t key2_len __unused,
6882d91db1SJens Wiklander 			      const uint8_t *iv __unused,
6982d91db1SJens Wiklander 			      size_t iv_len __unused)
7082d91db1SJens Wiklander {
711c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
7282d91db1SJens Wiklander }
7382d91db1SJens Wiklander 
7482d91db1SJens Wiklander TEE_Result crypto_cipher_update(void *ctx __unused, uint32_t algo __unused,
7582d91db1SJens Wiklander 				TEE_OperationMode mode __unused,
7682d91db1SJens Wiklander 				bool last_block __unused,
7782d91db1SJens Wiklander 				const uint8_t *data __unused,
7882d91db1SJens Wiklander 				size_t len __unused, uint8_t *dst __unused)
7982d91db1SJens Wiklander {
801c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
8182d91db1SJens Wiklander }
8282d91db1SJens Wiklander 
8382d91db1SJens Wiklander void crypto_cipher_final(void *ctx __unused, uint32_t algo __unused)
8482d91db1SJens Wiklander {
8582d91db1SJens Wiklander }
8682d91db1SJens Wiklander 
8782d91db1SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo __unused,
8882d91db1SJens Wiklander 					size_t *size __unused)
8982d91db1SJens Wiklander {
901c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
9182d91db1SJens Wiklander }
9282d91db1SJens Wiklander #endif /*_CFG_CRYPTO_WITH_CIPHER*/
93e9eaba5cSJens Wiklander 
94e9eaba5cSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_MAC)
9582ef73bcSJens Wiklander TEE_Result crypto_mac_alloc_ctx(void **ctx __unused, uint32_t algo __unused)
96e9eaba5cSJens Wiklander {
97e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
98e9eaba5cSJens Wiklander }
99e9eaba5cSJens Wiklander 
10082ef73bcSJens Wiklander void crypto_mac_free_ctx(void *ctx __unused, uint32_t algo __unused)
10182ef73bcSJens Wiklander {
10282ef73bcSJens Wiklander 	assert(0);
10382ef73bcSJens Wiklander }
10482ef73bcSJens Wiklander 
10582ef73bcSJens Wiklander void crypto_mac_copy_state(void *dst_ctx __unused, void *src_ctx __unused,
10682ef73bcSJens Wiklander 			   uint32_t algo __unused)
10782ef73bcSJens Wiklander {
10882ef73bcSJens Wiklander 	assert(0);
10982ef73bcSJens Wiklander }
11082ef73bcSJens Wiklander 
111e9eaba5cSJens Wiklander TEE_Result crypto_mac_init(void *ctx __unused, uint32_t algo __unused,
112e9eaba5cSJens Wiklander 			   const uint8_t *key __unused, size_t len __unused)
113e9eaba5cSJens Wiklander {
114e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
115e9eaba5cSJens Wiklander }
116e9eaba5cSJens Wiklander 
117e9eaba5cSJens Wiklander TEE_Result crypto_mac_update(void *ctx __unused, uint32_t algo __unused,
118e9eaba5cSJens Wiklander 			     const uint8_t *data __unused, size_t len __unused)
119e9eaba5cSJens Wiklander {
120e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
121e9eaba5cSJens Wiklander }
122e9eaba5cSJens Wiklander 
123e9eaba5cSJens Wiklander TEE_Result crypto_mac_final(void *ctx __unused, uint32_t algo __unused,
124e9eaba5cSJens Wiklander 			    uint8_t *digest __unused,
125e9eaba5cSJens Wiklander 			    size_t digest_len __unused)
126e9eaba5cSJens Wiklander {
127e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
128e9eaba5cSJens Wiklander }
129e9eaba5cSJens Wiklander #endif /*_CFG_CRYPTO_WITH_MAC*/
130e9eaba5cSJens Wiklander 
131d0620b01SJens Wiklander TEE_Result crypto_authenc_get_ctx_size(uint32_t algo __maybe_unused,
132d0620b01SJens Wiklander 				       size_t *size __maybe_unused)
1338875ce46SJens Wiklander {
134d0620b01SJens Wiklander 	switch (algo) {
135d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
136d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
137d0620b01SJens Wiklander 		*size = crypto_aes_ccm_get_ctx_size();
138d0620b01SJens Wiklander 		return TEE_SUCCESS;
139d0620b01SJens Wiklander #endif
140d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
141d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
142d0620b01SJens Wiklander 		*size = crypto_aes_gcm_get_ctx_size();
143d0620b01SJens Wiklander 		return TEE_SUCCESS;
144d0620b01SJens Wiklander #endif
145d0620b01SJens Wiklander 	default:
1468875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
1478875ce46SJens Wiklander 	}
148d0620b01SJens Wiklander }
1498875ce46SJens Wiklander 
150d0620b01SJens Wiklander TEE_Result crypto_authenc_init(void *ctx __maybe_unused,
151d0620b01SJens Wiklander 			       uint32_t algo __maybe_unused,
152d0620b01SJens Wiklander 			       TEE_OperationMode mode __maybe_unused,
153d0620b01SJens Wiklander 			       const uint8_t *key __maybe_unused,
154d0620b01SJens Wiklander 			       size_t key_len __maybe_unused,
155d0620b01SJens Wiklander 			       const uint8_t *nonce __maybe_unused,
156d0620b01SJens Wiklander 			       size_t nonce_len __maybe_unused,
157d0620b01SJens Wiklander 			       size_t tag_len __maybe_unused,
158d0620b01SJens Wiklander 			       size_t aad_len __maybe_unused,
159d0620b01SJens Wiklander 			       size_t payload_len __maybe_unused)
160d0620b01SJens Wiklander {
161d0620b01SJens Wiklander 	switch (algo) {
162d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
163d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
164d0620b01SJens Wiklander 		return crypto_aes_ccm_init(ctx, mode, key, key_len, nonce,
165d0620b01SJens Wiklander 					   nonce_len, tag_len, aad_len,
166d0620b01SJens Wiklander 					   payload_len);
167d0620b01SJens Wiklander #endif
168d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
169d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
170d0620b01SJens Wiklander 		return crypto_aes_gcm_init(ctx, mode, key, key_len, nonce,
171d0620b01SJens Wiklander 					   nonce_len, tag_len);
172d0620b01SJens Wiklander #endif
173d0620b01SJens Wiklander 	default:
174d0620b01SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
175d0620b01SJens Wiklander 	}
176d0620b01SJens Wiklander }
177d0620b01SJens Wiklander 
178d0620b01SJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx __maybe_unused,
179d0620b01SJens Wiklander 				     uint32_t algo __maybe_unused,
1808875ce46SJens Wiklander 				     TEE_OperationMode mode __unused,
181d0620b01SJens Wiklander 				     const uint8_t *data __maybe_unused,
182d0620b01SJens Wiklander 				     size_t len __maybe_unused)
1838875ce46SJens Wiklander {
184d0620b01SJens Wiklander 	switch (algo) {
185d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
186d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
187d0620b01SJens Wiklander 		return crypto_aes_ccm_update_aad(ctx, data, len);
188d0620b01SJens Wiklander #endif
189d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
190d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
191d0620b01SJens Wiklander 		return crypto_aes_gcm_update_aad(ctx, data, len);
192d0620b01SJens Wiklander #endif
193d0620b01SJens Wiklander 	default:
1948875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
1958875ce46SJens Wiklander 	}
196d0620b01SJens Wiklander }
1978875ce46SJens Wiklander 
198d0620b01SJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx __maybe_unused,
199d0620b01SJens Wiklander 					 uint32_t algo __maybe_unused,
200d0620b01SJens Wiklander 					 TEE_OperationMode mode __maybe_unused,
201d0620b01SJens Wiklander 					 const uint8_t *src_data __maybe_unused,
202d0620b01SJens Wiklander 					 size_t src_len __maybe_unused,
203d0620b01SJens Wiklander 					 uint8_t *dst_data __maybe_unused,
204d0620b01SJens Wiklander 					 size_t *dst_len __maybe_unused)
2058875ce46SJens Wiklander {
206d0620b01SJens Wiklander 	size_t dl = *dst_len;
207d0620b01SJens Wiklander 
208d0620b01SJens Wiklander 	*dst_len = src_len;
209d0620b01SJens Wiklander 	if (dl < src_len)
210d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
211d0620b01SJens Wiklander 
212d0620b01SJens Wiklander 	switch (algo) {
213d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
214d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
215d0620b01SJens Wiklander 		return crypto_aes_ccm_update_payload(ctx, mode, src_data,
216d0620b01SJens Wiklander 						     src_len, dst_data);
217d0620b01SJens Wiklander #endif
218d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
219d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
220d0620b01SJens Wiklander 		return crypto_aes_gcm_update_payload(ctx, mode, src_data,
221d0620b01SJens Wiklander 						     src_len, dst_data);
222d0620b01SJens Wiklander #endif
223d0620b01SJens Wiklander 	default:
2248875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2258875ce46SJens Wiklander 	}
226d0620b01SJens Wiklander }
2278875ce46SJens Wiklander 
228d0620b01SJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx __maybe_unused,
229d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
230d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
231d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
232d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
233d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
234d0620b01SJens Wiklander 				    uint8_t *dst_tag __maybe_unused,
235d0620b01SJens Wiklander 				    size_t *dst_tag_len __maybe_unused)
2368875ce46SJens Wiklander {
237d0620b01SJens Wiklander 	size_t dl = *dst_len;
238d0620b01SJens Wiklander 
239d0620b01SJens Wiklander 	*dst_len = src_len;
240d0620b01SJens Wiklander 	if (dl < src_len)
241d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
242d0620b01SJens Wiklander 
243d0620b01SJens Wiklander 	switch (algo) {
244d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
245d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
246d0620b01SJens Wiklander 		return crypto_aes_ccm_enc_final(ctx, src_data, src_len,
247d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
248d0620b01SJens Wiklander #endif
249d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
250d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
251d0620b01SJens Wiklander 		return crypto_aes_gcm_enc_final(ctx, src_data, src_len,
252d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
253d0620b01SJens Wiklander #endif
254d0620b01SJens Wiklander 	default:
2558875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2568875ce46SJens Wiklander 	}
257d0620b01SJens Wiklander }
2588875ce46SJens Wiklander 
259d0620b01SJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx __maybe_unused,
260d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
261d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
262d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
263d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
264d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
265d0620b01SJens Wiklander 				    const uint8_t *tag __maybe_unused,
266d0620b01SJens Wiklander 				    size_t tag_len __maybe_unused)
2678875ce46SJens Wiklander {
268d0620b01SJens Wiklander 	size_t dl = *dst_len;
269d0620b01SJens Wiklander 
270d0620b01SJens Wiklander 	*dst_len = src_len;
271d0620b01SJens Wiklander 	if (dl < src_len)
272d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
273d0620b01SJens Wiklander 
274d0620b01SJens Wiklander 	switch (algo) {
275d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
276d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
277d0620b01SJens Wiklander 		return crypto_aes_ccm_dec_final(ctx, src_data, src_len,
278d0620b01SJens Wiklander 						dst_data, tag, tag_len);
279d0620b01SJens Wiklander #endif
280d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
281d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
282d0620b01SJens Wiklander 		return crypto_aes_gcm_dec_final(ctx, src_data, src_len,
283d0620b01SJens Wiklander 						dst_data, tag, tag_len);
284d0620b01SJens Wiklander #endif
285d0620b01SJens Wiklander 	default:
2868875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2878875ce46SJens Wiklander 	}
2888875ce46SJens Wiklander }
2898875ce46SJens Wiklander 
290d0620b01SJens Wiklander void crypto_authenc_final(void *ctx __maybe_unused,
291d0620b01SJens Wiklander 			  uint32_t algo __maybe_unused)
2928875ce46SJens Wiklander {
293d0620b01SJens Wiklander 	switch (algo) {
294d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
295d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
296d0620b01SJens Wiklander 		crypto_aes_ccm_final(ctx);
297d0620b01SJens Wiklander 		break;
298d0620b01SJens Wiklander #endif
299d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
300d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
301d0620b01SJens Wiklander 		crypto_aes_gcm_final(ctx);
302d0620b01SJens Wiklander 		break;
303d0620b01SJens Wiklander #endif
304d0620b01SJens Wiklander 	default:
305d0620b01SJens Wiklander 		break;
3068875ce46SJens Wiklander 	}
307d0620b01SJens Wiklander }
30833790cc1SJens Wiklander 
30933790cc1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_ACIPHER)
31033790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused)
31133790cc1SJens Wiklander {
31233790cc1SJens Wiklander 	return NULL;
31333790cc1SJens Wiklander }
31433790cc1SJens Wiklander 
31533790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused,
31633790cc1SJens Wiklander 				size_t fromsize __unused,
31733790cc1SJens Wiklander 				struct bignum *to __unused)
31833790cc1SJens Wiklander {
31933790cc1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
32033790cc1SJens Wiklander }
32133790cc1SJens Wiklander 
32233790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused)
32333790cc1SJens Wiklander {
32433790cc1SJens Wiklander 	return 0;
32533790cc1SJens Wiklander }
32633790cc1SJens Wiklander 
32733790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused)
32833790cc1SJens Wiklander {
32933790cc1SJens Wiklander 	return 0;
33033790cc1SJens Wiklander }
33133790cc1SJens Wiklander 
33233790cc1SJens Wiklander /*
33333790cc1SJens Wiklander  * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be
33433790cc1SJens Wiklander  * enough to guarantee that the functions calling this function aren't
33533790cc1SJens Wiklander  * called, but just in case add a panic() here to avoid unexpected
33633790cc1SJens Wiklander  * behavoir.
33733790cc1SJens Wiklander  */
33833790cc1SJens Wiklander static void bignum_cant_happen(void)
33933790cc1SJens Wiklander {
34033790cc1SJens Wiklander 	volatile bool b = true;
34133790cc1SJens Wiklander 
34233790cc1SJens Wiklander 	/* Avoid warning about function does not return */
34333790cc1SJens Wiklander 	if (b)
34433790cc1SJens Wiklander 		panic();
34533790cc1SJens Wiklander }
34633790cc1SJens Wiklander 
34733790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused,
34833790cc1SJens Wiklander 			  uint8_t *to __unused)
34933790cc1SJens Wiklander {
35033790cc1SJens Wiklander 	bignum_cant_happen();
35133790cc1SJens Wiklander }
35233790cc1SJens Wiklander 
35333790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused,
35433790cc1SJens Wiklander 			const struct bignum *from __unused)
35533790cc1SJens Wiklander {
35633790cc1SJens Wiklander 	bignum_cant_happen();
35733790cc1SJens Wiklander }
35833790cc1SJens Wiklander 
35933790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a)
36033790cc1SJens Wiklander {
36133790cc1SJens Wiklander 	if (a)
36233790cc1SJens Wiklander 		panic();
36333790cc1SJens Wiklander }
36433790cc1SJens Wiklander 
36533790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused)
36633790cc1SJens Wiklander {
36733790cc1SJens Wiklander 	bignum_cant_happen();
36833790cc1SJens Wiklander }
36933790cc1SJens Wiklander 
37033790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */
37133790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused,
37233790cc1SJens Wiklander 			      struct bignum *b __unused)
37333790cc1SJens Wiklander {
37433790cc1SJens Wiklander 	bignum_cant_happen();
37533790cc1SJens Wiklander 	return -1;
37633790cc1SJens Wiklander }
37733790cc1SJens Wiklander #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/
378291e5450SJens Wiklander 
379291e5450SJens Wiklander #if !defined(CFG_CRYPTO_RSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
380291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_rsa_keypair(struct rsa_keypair *s __unused,
381291e5450SJens Wiklander 					    size_t key_size_bits __unused)
382291e5450SJens Wiklander {
383291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
384291e5450SJens Wiklander }
385291e5450SJens Wiklander 
386291e5450SJens Wiklander TEE_Result
387291e5450SJens Wiklander crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s __unused,
388291e5450SJens Wiklander 				    size_t key_size_bits __unused)
389291e5450SJens Wiklander {
390291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
391291e5450SJens Wiklander }
392291e5450SJens Wiklander 
393291e5450SJens Wiklander void crypto_acipher_free_rsa_public_key(struct rsa_public_key *s __unused)
394291e5450SJens Wiklander {
395291e5450SJens Wiklander }
396291e5450SJens Wiklander 
397291e5450SJens Wiklander TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key __unused,
398291e5450SJens Wiklander 				      size_t key_size __unused)
399291e5450SJens Wiklander {
400291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
401291e5450SJens Wiklander }
402291e5450SJens Wiklander 
403291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_decrypt(struct rsa_keypair *key __unused,
404291e5450SJens Wiklander 					   const uint8_t *src __unused,
405291e5450SJens Wiklander 					   size_t src_len __unused,
406291e5450SJens Wiklander 					   uint8_t *dst __unused,
407291e5450SJens Wiklander 					   size_t *dst_len __unused)
408291e5450SJens Wiklander {
409291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
410291e5450SJens Wiklander }
411291e5450SJens Wiklander 
412291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_encrypt(struct rsa_public_key *key __unused,
413291e5450SJens Wiklander 					   const uint8_t *src __unused,
414291e5450SJens Wiklander 					   size_t src_len __unused,
415291e5450SJens Wiklander 					   uint8_t *dst __unused,
416291e5450SJens Wiklander 					   size_t *dst_len __unused)
417291e5450SJens Wiklander {
418291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
419291e5450SJens Wiklander }
420291e5450SJens Wiklander 
421291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_decrypt(uint32_t algo __unused,
422291e5450SJens Wiklander 					struct rsa_keypair *key __unused,
423291e5450SJens Wiklander 					const uint8_t *label __unused,
424291e5450SJens Wiklander 					size_t label_len __unused,
425291e5450SJens Wiklander 					const uint8_t *src __unused,
426291e5450SJens Wiklander 					size_t src_len __unused,
427291e5450SJens Wiklander 					uint8_t *dst __unused,
428291e5450SJens Wiklander 					size_t *dst_len __unused)
429291e5450SJens Wiklander {
430291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
431291e5450SJens Wiklander }
432291e5450SJens Wiklander 
433291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_encrypt(uint32_t algo __unused,
434291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
435291e5450SJens Wiklander 					const uint8_t *label __unused,
436291e5450SJens Wiklander 					size_t label_len __unused,
437291e5450SJens Wiklander 					const uint8_t *src __unused,
438291e5450SJens Wiklander 					size_t src_len __unused,
439291e5450SJens Wiklander 					uint8_t *dst __unused,
440291e5450SJens Wiklander 					size_t *dst_len __unused)
441291e5450SJens Wiklander {
442291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
443291e5450SJens Wiklander }
444291e5450SJens Wiklander 
445291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_sign(uint32_t algo __unused,
446291e5450SJens Wiklander 				      struct rsa_keypair *key __unused,
447291e5450SJens Wiklander 				      int salt_len __unused,
448291e5450SJens Wiklander 				      const uint8_t *msg __unused,
449291e5450SJens Wiklander 				      size_t msg_len __unused,
450291e5450SJens Wiklander 				      uint8_t *sig __unused,
451291e5450SJens Wiklander 				      size_t *sig_len __unused)
452291e5450SJens Wiklander {
453291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
454291e5450SJens Wiklander }
455291e5450SJens Wiklander 
456291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_verify(uint32_t algo __unused,
457291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
458291e5450SJens Wiklander 					int salt_len __unused,
459291e5450SJens Wiklander 					const uint8_t *msg __unused,
460291e5450SJens Wiklander 					size_t msg_len __unused,
461291e5450SJens Wiklander 					const uint8_t *sig __unused,
462291e5450SJens Wiklander 					size_t sig_len __unused)
463291e5450SJens Wiklander {
464291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
465291e5450SJens Wiklander }
466291e5450SJens Wiklander #endif /*!CFG_CRYPTO_RSA || !_CFG_CRYPTO_WITH_ACIPHER*/
467291e5450SJens Wiklander 
468291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
469291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s __unused,
470291e5450SJens Wiklander 					    size_t key_size_bits __unused)
471291e5450SJens Wiklander {
472291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
473291e5450SJens Wiklander }
474291e5450SJens Wiklander 
475291e5450SJens Wiklander TEE_Result
476291e5450SJens Wiklander crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s __unused,
477291e5450SJens Wiklander 				    size_t key_size_bits __unused)
478291e5450SJens Wiklander {
479291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
480291e5450SJens Wiklander }
481291e5450SJens Wiklander 
482291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dsa_key(struct dsa_keypair *key __unused,
483291e5450SJens Wiklander 				      size_t key_size __unused)
484291e5450SJens Wiklander {
485291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
486291e5450SJens Wiklander }
487291e5450SJens Wiklander 
488291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_sign(uint32_t algo __unused,
489291e5450SJens Wiklander 				   struct dsa_keypair *key __unused,
490291e5450SJens Wiklander 				   const uint8_t *msg __unused,
491291e5450SJens Wiklander 				   size_t msg_len __unused,
492291e5450SJens Wiklander 				   uint8_t *sig __unused,
493291e5450SJens Wiklander 				   size_t *sig_len __unused)
494291e5450SJens Wiklander {
495291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
496291e5450SJens Wiklander }
497291e5450SJens Wiklander 
498291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_verify(uint32_t algo __unused,
499291e5450SJens Wiklander 				     struct dsa_public_key *key __unused,
500291e5450SJens Wiklander 				     const uint8_t *msg __unused,
501291e5450SJens Wiklander 				     size_t msg_len __unused,
502291e5450SJens Wiklander 				     const uint8_t *sig __unused,
503291e5450SJens Wiklander 				     size_t sig_len __unused)
504291e5450SJens Wiklander {
505291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
506291e5450SJens Wiklander }
507291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DSA || !_CFG_CRYPTO_WITH_ACIPHER*/
508291e5450SJens Wiklander 
509291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DH) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
510291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s __unused,
511291e5450SJens Wiklander 					   size_t key_size_bits __unused)
512291e5450SJens Wiklander {
513291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
514291e5450SJens Wiklander }
515291e5450SJens Wiklander 
516291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dh_key(struct dh_keypair *key __unused,
517291e5450SJens Wiklander 				     struct bignum *q __unused,
518291e5450SJens Wiklander 				     size_t xbits __unused)
519291e5450SJens Wiklander {
520291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
521291e5450SJens Wiklander }
522291e5450SJens Wiklander 
523291e5450SJens Wiklander TEE_Result
524291e5450SJens Wiklander crypto_acipher_dh_shared_secret(struct dh_keypair *private_key __unused,
525291e5450SJens Wiklander 				struct bignum *public_key __unused,
526291e5450SJens Wiklander 				struct bignum *secret __unused)
527291e5450SJens Wiklander {
528291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
529291e5450SJens Wiklander }
530291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DH || !_CFG_CRYPTO_WITH_ACIPHER*/
531291e5450SJens Wiklander 
532291e5450SJens Wiklander #if !defined(CFG_CRYPTO_ECC) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
533291e5450SJens Wiklander TEE_Result
534291e5450SJens Wiklander crypto_acipher_alloc_ecc_public_key(struct ecc_public_key *s __unused,
535291e5450SJens Wiklander 				    size_t key_size_bits __unused)
536291e5450SJens Wiklander {
537291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
538291e5450SJens Wiklander }
539291e5450SJens Wiklander 
540291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_ecc_keypair(struct ecc_keypair *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_ecc_public_key(struct ecc_public_key *s __unused)
547291e5450SJens Wiklander {
548291e5450SJens Wiklander }
549291e5450SJens Wiklander 
550291e5450SJens Wiklander TEE_Result crypto_acipher_gen_ecc_key(struct ecc_keypair *key __unused)
551291e5450SJens Wiklander {
552291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
553291e5450SJens Wiklander }
554291e5450SJens Wiklander 
555291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_sign(uint32_t algo __unused,
556291e5450SJens Wiklander 				   struct ecc_keypair *key __unused,
557291e5450SJens Wiklander 				   const uint8_t *msg __unused,
558291e5450SJens Wiklander 				   size_t msg_len __unused,
559291e5450SJens Wiklander 				   uint8_t *sig __unused,
560291e5450SJens Wiklander 				   size_t *sig_len __unused)
561291e5450SJens Wiklander {
562291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
563291e5450SJens Wiklander }
564291e5450SJens Wiklander 
565291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_verify(uint32_t algo __unused,
566291e5450SJens Wiklander 				     struct ecc_public_key *key __unused,
567291e5450SJens Wiklander 				     const uint8_t *msg __unused,
568291e5450SJens Wiklander 				     size_t msg_len __unused,
569291e5450SJens Wiklander 				     const uint8_t *sig __unused,
570291e5450SJens Wiklander 				     size_t sig_len __unused)
571291e5450SJens Wiklander {
572291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
573291e5450SJens Wiklander }
574291e5450SJens Wiklander 
575291e5450SJens Wiklander TEE_Result
576291e5450SJens Wiklander crypto_acipher_ecc_shared_secret(struct ecc_keypair *private_key __unused,
577291e5450SJens Wiklander 				 struct ecc_public_key *public_key __unused,
578291e5450SJens Wiklander 				 void *secret __unused,
579291e5450SJens Wiklander 				 unsigned long *secret_len __unused)
580291e5450SJens Wiklander {
581291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
582291e5450SJens Wiklander }
583291e5450SJens Wiklander #endif /*!CFG_CRYPTO_ECC || !_CFG_CRYPTO_WITH_ACIPHER*/
584