xref: /optee_os/core/crypto/crypto.c (revision 82ef73bc2be676a5bd5c1590acca8540869d1d4f)
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)
461c5fdd1fSJerome Forissier TEE_Result crypto_cipher_get_ctx_size(uint32_t algo __unused,
471c5fdd1fSJerome Forissier 				      size_t *size __unused)
4882d91db1SJens Wiklander {
491c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
5082d91db1SJens Wiklander }
5182d91db1SJens Wiklander 
5282d91db1SJens Wiklander TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused,
5382d91db1SJens Wiklander 			      TEE_OperationMode mode __unused,
5482d91db1SJens Wiklander 			      const uint8_t *key1 __unused,
5582d91db1SJens Wiklander 			      size_t key1_len __unused,
5682d91db1SJens Wiklander 			      const uint8_t *key2 __unused,
5782d91db1SJens Wiklander 			      size_t key2_len __unused,
5882d91db1SJens Wiklander 			      const uint8_t *iv __unused,
5982d91db1SJens Wiklander 			      size_t iv_len __unused)
6082d91db1SJens Wiklander {
611c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
6282d91db1SJens Wiklander }
6382d91db1SJens Wiklander 
6482d91db1SJens Wiklander TEE_Result crypto_cipher_update(void *ctx __unused, uint32_t algo __unused,
6582d91db1SJens Wiklander 				TEE_OperationMode mode __unused,
6682d91db1SJens Wiklander 				bool last_block __unused,
6782d91db1SJens Wiklander 				const uint8_t *data __unused,
6882d91db1SJens Wiklander 				size_t len __unused, uint8_t *dst __unused)
6982d91db1SJens Wiklander {
701c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
7182d91db1SJens Wiklander }
7282d91db1SJens Wiklander 
7382d91db1SJens Wiklander void crypto_cipher_final(void *ctx __unused, uint32_t algo __unused)
7482d91db1SJens Wiklander {
7582d91db1SJens Wiklander }
7682d91db1SJens Wiklander 
7782d91db1SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo __unused,
7882d91db1SJens Wiklander 					size_t *size __unused)
7982d91db1SJens Wiklander {
801c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
8182d91db1SJens Wiklander }
8282d91db1SJens Wiklander #endif /*_CFG_CRYPTO_WITH_CIPHER*/
83e9eaba5cSJens Wiklander 
84e9eaba5cSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_MAC)
85*82ef73bcSJens Wiklander TEE_Result crypto_mac_alloc_ctx(void **ctx __unused, uint32_t algo __unused)
86e9eaba5cSJens Wiklander {
87e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
88e9eaba5cSJens Wiklander }
89e9eaba5cSJens Wiklander 
90*82ef73bcSJens Wiklander void crypto_mac_free_ctx(void *ctx __unused, uint32_t algo __unused)
91*82ef73bcSJens Wiklander {
92*82ef73bcSJens Wiklander 	assert(0);
93*82ef73bcSJens Wiklander }
94*82ef73bcSJens Wiklander 
95*82ef73bcSJens Wiklander void crypto_mac_copy_state(void *dst_ctx __unused, void *src_ctx __unused,
96*82ef73bcSJens Wiklander 			   uint32_t algo __unused)
97*82ef73bcSJens Wiklander {
98*82ef73bcSJens Wiklander 	assert(0);
99*82ef73bcSJens Wiklander }
100*82ef73bcSJens Wiklander 
101e9eaba5cSJens Wiklander TEE_Result crypto_mac_init(void *ctx __unused, uint32_t algo __unused,
102e9eaba5cSJens Wiklander 			   const uint8_t *key __unused, size_t len __unused)
103e9eaba5cSJens Wiklander {
104e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
105e9eaba5cSJens Wiklander }
106e9eaba5cSJens Wiklander 
107e9eaba5cSJens Wiklander TEE_Result crypto_mac_update(void *ctx __unused, uint32_t algo __unused,
108e9eaba5cSJens Wiklander 			     const uint8_t *data __unused, size_t len __unused)
109e9eaba5cSJens Wiklander {
110e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
111e9eaba5cSJens Wiklander }
112e9eaba5cSJens Wiklander 
113e9eaba5cSJens Wiklander TEE_Result crypto_mac_final(void *ctx __unused, uint32_t algo __unused,
114e9eaba5cSJens Wiklander 			    uint8_t *digest __unused,
115e9eaba5cSJens Wiklander 			    size_t digest_len __unused)
116e9eaba5cSJens Wiklander {
117e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
118e9eaba5cSJens Wiklander }
119e9eaba5cSJens Wiklander #endif /*_CFG_CRYPTO_WITH_MAC*/
120e9eaba5cSJens Wiklander 
121d0620b01SJens Wiklander TEE_Result crypto_authenc_get_ctx_size(uint32_t algo __maybe_unused,
122d0620b01SJens Wiklander 				       size_t *size __maybe_unused)
1238875ce46SJens Wiklander {
124d0620b01SJens Wiklander 	switch (algo) {
125d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
126d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
127d0620b01SJens Wiklander 		*size = crypto_aes_ccm_get_ctx_size();
128d0620b01SJens Wiklander 		return TEE_SUCCESS;
129d0620b01SJens Wiklander #endif
130d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
131d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
132d0620b01SJens Wiklander 		*size = crypto_aes_gcm_get_ctx_size();
133d0620b01SJens Wiklander 		return TEE_SUCCESS;
134d0620b01SJens Wiklander #endif
135d0620b01SJens Wiklander 	default:
1368875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
1378875ce46SJens Wiklander 	}
138d0620b01SJens Wiklander }
1398875ce46SJens Wiklander 
140d0620b01SJens Wiklander TEE_Result crypto_authenc_init(void *ctx __maybe_unused,
141d0620b01SJens Wiklander 			       uint32_t algo __maybe_unused,
142d0620b01SJens Wiklander 			       TEE_OperationMode mode __maybe_unused,
143d0620b01SJens Wiklander 			       const uint8_t *key __maybe_unused,
144d0620b01SJens Wiklander 			       size_t key_len __maybe_unused,
145d0620b01SJens Wiklander 			       const uint8_t *nonce __maybe_unused,
146d0620b01SJens Wiklander 			       size_t nonce_len __maybe_unused,
147d0620b01SJens Wiklander 			       size_t tag_len __maybe_unused,
148d0620b01SJens Wiklander 			       size_t aad_len __maybe_unused,
149d0620b01SJens Wiklander 			       size_t payload_len __maybe_unused)
150d0620b01SJens Wiklander {
151d0620b01SJens Wiklander 	switch (algo) {
152d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
153d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
154d0620b01SJens Wiklander 		return crypto_aes_ccm_init(ctx, mode, key, key_len, nonce,
155d0620b01SJens Wiklander 					   nonce_len, tag_len, aad_len,
156d0620b01SJens Wiklander 					   payload_len);
157d0620b01SJens Wiklander #endif
158d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
159d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
160d0620b01SJens Wiklander 		return crypto_aes_gcm_init(ctx, mode, key, key_len, nonce,
161d0620b01SJens Wiklander 					   nonce_len, tag_len);
162d0620b01SJens Wiklander #endif
163d0620b01SJens Wiklander 	default:
164d0620b01SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
165d0620b01SJens Wiklander 	}
166d0620b01SJens Wiklander }
167d0620b01SJens Wiklander 
168d0620b01SJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx __maybe_unused,
169d0620b01SJens Wiklander 				     uint32_t algo __maybe_unused,
1708875ce46SJens Wiklander 				     TEE_OperationMode mode __unused,
171d0620b01SJens Wiklander 				     const uint8_t *data __maybe_unused,
172d0620b01SJens Wiklander 				     size_t len __maybe_unused)
1738875ce46SJens Wiklander {
174d0620b01SJens Wiklander 	switch (algo) {
175d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
176d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
177d0620b01SJens Wiklander 		return crypto_aes_ccm_update_aad(ctx, data, len);
178d0620b01SJens Wiklander #endif
179d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
180d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
181d0620b01SJens Wiklander 		return crypto_aes_gcm_update_aad(ctx, data, len);
182d0620b01SJens Wiklander #endif
183d0620b01SJens Wiklander 	default:
1848875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
1858875ce46SJens Wiklander 	}
186d0620b01SJens Wiklander }
1878875ce46SJens Wiklander 
188d0620b01SJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx __maybe_unused,
189d0620b01SJens Wiklander 					 uint32_t algo __maybe_unused,
190d0620b01SJens Wiklander 					 TEE_OperationMode mode __maybe_unused,
191d0620b01SJens Wiklander 					 const uint8_t *src_data __maybe_unused,
192d0620b01SJens Wiklander 					 size_t src_len __maybe_unused,
193d0620b01SJens Wiklander 					 uint8_t *dst_data __maybe_unused,
194d0620b01SJens Wiklander 					 size_t *dst_len __maybe_unused)
1958875ce46SJens Wiklander {
196d0620b01SJens Wiklander 	size_t dl = *dst_len;
197d0620b01SJens Wiklander 
198d0620b01SJens Wiklander 	*dst_len = src_len;
199d0620b01SJens Wiklander 	if (dl < src_len)
200d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
201d0620b01SJens Wiklander 
202d0620b01SJens Wiklander 	switch (algo) {
203d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
204d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
205d0620b01SJens Wiklander 		return crypto_aes_ccm_update_payload(ctx, mode, src_data,
206d0620b01SJens Wiklander 						     src_len, dst_data);
207d0620b01SJens Wiklander #endif
208d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
209d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
210d0620b01SJens Wiklander 		return crypto_aes_gcm_update_payload(ctx, mode, src_data,
211d0620b01SJens Wiklander 						     src_len, dst_data);
212d0620b01SJens Wiklander #endif
213d0620b01SJens Wiklander 	default:
2148875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2158875ce46SJens Wiklander 	}
216d0620b01SJens Wiklander }
2178875ce46SJens Wiklander 
218d0620b01SJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx __maybe_unused,
219d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
220d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
221d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
222d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
223d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
224d0620b01SJens Wiklander 				    uint8_t *dst_tag __maybe_unused,
225d0620b01SJens Wiklander 				    size_t *dst_tag_len __maybe_unused)
2268875ce46SJens Wiklander {
227d0620b01SJens Wiklander 	size_t dl = *dst_len;
228d0620b01SJens Wiklander 
229d0620b01SJens Wiklander 	*dst_len = src_len;
230d0620b01SJens Wiklander 	if (dl < src_len)
231d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
232d0620b01SJens Wiklander 
233d0620b01SJens Wiklander 	switch (algo) {
234d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
235d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
236d0620b01SJens Wiklander 		return crypto_aes_ccm_enc_final(ctx, src_data, src_len,
237d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
238d0620b01SJens Wiklander #endif
239d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
240d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
241d0620b01SJens Wiklander 		return crypto_aes_gcm_enc_final(ctx, src_data, src_len,
242d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
243d0620b01SJens Wiklander #endif
244d0620b01SJens Wiklander 	default:
2458875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2468875ce46SJens Wiklander 	}
247d0620b01SJens Wiklander }
2488875ce46SJens Wiklander 
249d0620b01SJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx __maybe_unused,
250d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
251d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
252d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
253d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
254d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
255d0620b01SJens Wiklander 				    const uint8_t *tag __maybe_unused,
256d0620b01SJens Wiklander 				    size_t tag_len __maybe_unused)
2578875ce46SJens Wiklander {
258d0620b01SJens Wiklander 	size_t dl = *dst_len;
259d0620b01SJens Wiklander 
260d0620b01SJens Wiklander 	*dst_len = src_len;
261d0620b01SJens Wiklander 	if (dl < src_len)
262d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
263d0620b01SJens Wiklander 
264d0620b01SJens Wiklander 	switch (algo) {
265d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
266d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
267d0620b01SJens Wiklander 		return crypto_aes_ccm_dec_final(ctx, src_data, src_len,
268d0620b01SJens Wiklander 						dst_data, tag, tag_len);
269d0620b01SJens Wiklander #endif
270d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
271d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
272d0620b01SJens Wiklander 		return crypto_aes_gcm_dec_final(ctx, src_data, src_len,
273d0620b01SJens Wiklander 						dst_data, tag, tag_len);
274d0620b01SJens Wiklander #endif
275d0620b01SJens Wiklander 	default:
2768875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2778875ce46SJens Wiklander 	}
2788875ce46SJens Wiklander }
2798875ce46SJens Wiklander 
280d0620b01SJens Wiklander void crypto_authenc_final(void *ctx __maybe_unused,
281d0620b01SJens Wiklander 			  uint32_t algo __maybe_unused)
2828875ce46SJens Wiklander {
283d0620b01SJens Wiklander 	switch (algo) {
284d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
285d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
286d0620b01SJens Wiklander 		crypto_aes_ccm_final(ctx);
287d0620b01SJens Wiklander 		break;
288d0620b01SJens Wiklander #endif
289d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
290d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
291d0620b01SJens Wiklander 		crypto_aes_gcm_final(ctx);
292d0620b01SJens Wiklander 		break;
293d0620b01SJens Wiklander #endif
294d0620b01SJens Wiklander 	default:
295d0620b01SJens Wiklander 		break;
2968875ce46SJens Wiklander 	}
297d0620b01SJens Wiklander }
29833790cc1SJens Wiklander 
29933790cc1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_ACIPHER)
30033790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused)
30133790cc1SJens Wiklander {
30233790cc1SJens Wiklander 	return NULL;
30333790cc1SJens Wiklander }
30433790cc1SJens Wiklander 
30533790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused,
30633790cc1SJens Wiklander 				size_t fromsize __unused,
30733790cc1SJens Wiklander 				struct bignum *to __unused)
30833790cc1SJens Wiklander {
30933790cc1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
31033790cc1SJens Wiklander }
31133790cc1SJens Wiklander 
31233790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused)
31333790cc1SJens Wiklander {
31433790cc1SJens Wiklander 	return 0;
31533790cc1SJens Wiklander }
31633790cc1SJens Wiklander 
31733790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused)
31833790cc1SJens Wiklander {
31933790cc1SJens Wiklander 	return 0;
32033790cc1SJens Wiklander }
32133790cc1SJens Wiklander 
32233790cc1SJens Wiklander /*
32333790cc1SJens Wiklander  * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be
32433790cc1SJens Wiklander  * enough to guarantee that the functions calling this function aren't
32533790cc1SJens Wiklander  * called, but just in case add a panic() here to avoid unexpected
32633790cc1SJens Wiklander  * behavoir.
32733790cc1SJens Wiklander  */
32833790cc1SJens Wiklander static void bignum_cant_happen(void)
32933790cc1SJens Wiklander {
33033790cc1SJens Wiklander 	volatile bool b = true;
33133790cc1SJens Wiklander 
33233790cc1SJens Wiklander 	/* Avoid warning about function does not return */
33333790cc1SJens Wiklander 	if (b)
33433790cc1SJens Wiklander 		panic();
33533790cc1SJens Wiklander }
33633790cc1SJens Wiklander 
33733790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused,
33833790cc1SJens Wiklander 			  uint8_t *to __unused)
33933790cc1SJens Wiklander {
34033790cc1SJens Wiklander 	bignum_cant_happen();
34133790cc1SJens Wiklander }
34233790cc1SJens Wiklander 
34333790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused,
34433790cc1SJens Wiklander 			const struct bignum *from __unused)
34533790cc1SJens Wiklander {
34633790cc1SJens Wiklander 	bignum_cant_happen();
34733790cc1SJens Wiklander }
34833790cc1SJens Wiklander 
34933790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a)
35033790cc1SJens Wiklander {
35133790cc1SJens Wiklander 	if (a)
35233790cc1SJens Wiklander 		panic();
35333790cc1SJens Wiklander }
35433790cc1SJens Wiklander 
35533790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused)
35633790cc1SJens Wiklander {
35733790cc1SJens Wiklander 	bignum_cant_happen();
35833790cc1SJens Wiklander }
35933790cc1SJens Wiklander 
36033790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */
36133790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused,
36233790cc1SJens Wiklander 			      struct bignum *b __unused)
36333790cc1SJens Wiklander {
36433790cc1SJens Wiklander 	bignum_cant_happen();
36533790cc1SJens Wiklander 	return -1;
36633790cc1SJens Wiklander }
36733790cc1SJens Wiklander #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/
368291e5450SJens Wiklander 
369291e5450SJens Wiklander #if !defined(CFG_CRYPTO_RSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
370291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_rsa_keypair(struct rsa_keypair *s __unused,
371291e5450SJens Wiklander 					    size_t key_size_bits __unused)
372291e5450SJens Wiklander {
373291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
374291e5450SJens Wiklander }
375291e5450SJens Wiklander 
376291e5450SJens Wiklander TEE_Result
377291e5450SJens Wiklander crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s __unused,
378291e5450SJens Wiklander 				    size_t key_size_bits __unused)
379291e5450SJens Wiklander {
380291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
381291e5450SJens Wiklander }
382291e5450SJens Wiklander 
383291e5450SJens Wiklander void crypto_acipher_free_rsa_public_key(struct rsa_public_key *s __unused)
384291e5450SJens Wiklander {
385291e5450SJens Wiklander }
386291e5450SJens Wiklander 
387291e5450SJens Wiklander TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key __unused,
388291e5450SJens Wiklander 				      size_t key_size __unused)
389291e5450SJens Wiklander {
390291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
391291e5450SJens Wiklander }
392291e5450SJens Wiklander 
393291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_decrypt(struct rsa_keypair *key __unused,
394291e5450SJens Wiklander 					   const uint8_t *src __unused,
395291e5450SJens Wiklander 					   size_t src_len __unused,
396291e5450SJens Wiklander 					   uint8_t *dst __unused,
397291e5450SJens Wiklander 					   size_t *dst_len __unused)
398291e5450SJens Wiklander {
399291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
400291e5450SJens Wiklander }
401291e5450SJens Wiklander 
402291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_encrypt(struct rsa_public_key *key __unused,
403291e5450SJens Wiklander 					   const uint8_t *src __unused,
404291e5450SJens Wiklander 					   size_t src_len __unused,
405291e5450SJens Wiklander 					   uint8_t *dst __unused,
406291e5450SJens Wiklander 					   size_t *dst_len __unused)
407291e5450SJens Wiklander {
408291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
409291e5450SJens Wiklander }
410291e5450SJens Wiklander 
411291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_decrypt(uint32_t algo __unused,
412291e5450SJens Wiklander 					struct rsa_keypair *key __unused,
413291e5450SJens Wiklander 					const uint8_t *label __unused,
414291e5450SJens Wiklander 					size_t label_len __unused,
415291e5450SJens Wiklander 					const uint8_t *src __unused,
416291e5450SJens Wiklander 					size_t src_len __unused,
417291e5450SJens Wiklander 					uint8_t *dst __unused,
418291e5450SJens Wiklander 					size_t *dst_len __unused)
419291e5450SJens Wiklander {
420291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
421291e5450SJens Wiklander }
422291e5450SJens Wiklander 
423291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_encrypt(uint32_t algo __unused,
424291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
425291e5450SJens Wiklander 					const uint8_t *label __unused,
426291e5450SJens Wiklander 					size_t label_len __unused,
427291e5450SJens Wiklander 					const uint8_t *src __unused,
428291e5450SJens Wiklander 					size_t src_len __unused,
429291e5450SJens Wiklander 					uint8_t *dst __unused,
430291e5450SJens Wiklander 					size_t *dst_len __unused)
431291e5450SJens Wiklander {
432291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
433291e5450SJens Wiklander }
434291e5450SJens Wiklander 
435291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_sign(uint32_t algo __unused,
436291e5450SJens Wiklander 				      struct rsa_keypair *key __unused,
437291e5450SJens Wiklander 				      int salt_len __unused,
438291e5450SJens Wiklander 				      const uint8_t *msg __unused,
439291e5450SJens Wiklander 				      size_t msg_len __unused,
440291e5450SJens Wiklander 				      uint8_t *sig __unused,
441291e5450SJens Wiklander 				      size_t *sig_len __unused)
442291e5450SJens Wiklander {
443291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
444291e5450SJens Wiklander }
445291e5450SJens Wiklander 
446291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_verify(uint32_t algo __unused,
447291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
448291e5450SJens Wiklander 					int salt_len __unused,
449291e5450SJens Wiklander 					const uint8_t *msg __unused,
450291e5450SJens Wiklander 					size_t msg_len __unused,
451291e5450SJens Wiklander 					const uint8_t *sig __unused,
452291e5450SJens Wiklander 					size_t sig_len __unused)
453291e5450SJens Wiklander {
454291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
455291e5450SJens Wiklander }
456291e5450SJens Wiklander #endif /*!CFG_CRYPTO_RSA || !_CFG_CRYPTO_WITH_ACIPHER*/
457291e5450SJens Wiklander 
458291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
459291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s __unused,
460291e5450SJens Wiklander 					    size_t key_size_bits __unused)
461291e5450SJens Wiklander {
462291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
463291e5450SJens Wiklander }
464291e5450SJens Wiklander 
465291e5450SJens Wiklander TEE_Result
466291e5450SJens Wiklander crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s __unused,
467291e5450SJens Wiklander 				    size_t key_size_bits __unused)
468291e5450SJens Wiklander {
469291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
470291e5450SJens Wiklander }
471291e5450SJens Wiklander 
472291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dsa_key(struct dsa_keypair *key __unused,
473291e5450SJens Wiklander 				      size_t key_size __unused)
474291e5450SJens Wiklander {
475291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
476291e5450SJens Wiklander }
477291e5450SJens Wiklander 
478291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_sign(uint32_t algo __unused,
479291e5450SJens Wiklander 				   struct dsa_keypair *key __unused,
480291e5450SJens Wiklander 				   const uint8_t *msg __unused,
481291e5450SJens Wiklander 				   size_t msg_len __unused,
482291e5450SJens Wiklander 				   uint8_t *sig __unused,
483291e5450SJens Wiklander 				   size_t *sig_len __unused)
484291e5450SJens Wiklander {
485291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
486291e5450SJens Wiklander }
487291e5450SJens Wiklander 
488291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_verify(uint32_t algo __unused,
489291e5450SJens Wiklander 				     struct dsa_public_key *key __unused,
490291e5450SJens Wiklander 				     const uint8_t *msg __unused,
491291e5450SJens Wiklander 				     size_t msg_len __unused,
492291e5450SJens Wiklander 				     const uint8_t *sig __unused,
493291e5450SJens Wiklander 				     size_t sig_len __unused)
494291e5450SJens Wiklander {
495291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
496291e5450SJens Wiklander }
497291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DSA || !_CFG_CRYPTO_WITH_ACIPHER*/
498291e5450SJens Wiklander 
499291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DH) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
500291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s __unused,
501291e5450SJens Wiklander 					   size_t key_size_bits __unused)
502291e5450SJens Wiklander {
503291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
504291e5450SJens Wiklander }
505291e5450SJens Wiklander 
506291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dh_key(struct dh_keypair *key __unused,
507291e5450SJens Wiklander 				     struct bignum *q __unused,
508291e5450SJens Wiklander 				     size_t xbits __unused)
509291e5450SJens Wiklander {
510291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
511291e5450SJens Wiklander }
512291e5450SJens Wiklander 
513291e5450SJens Wiklander TEE_Result
514291e5450SJens Wiklander crypto_acipher_dh_shared_secret(struct dh_keypair *private_key __unused,
515291e5450SJens Wiklander 				struct bignum *public_key __unused,
516291e5450SJens Wiklander 				struct bignum *secret __unused)
517291e5450SJens Wiklander {
518291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
519291e5450SJens Wiklander }
520291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DH || !_CFG_CRYPTO_WITH_ACIPHER*/
521291e5450SJens Wiklander 
522291e5450SJens Wiklander #if !defined(CFG_CRYPTO_ECC) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
523291e5450SJens Wiklander TEE_Result
524291e5450SJens Wiklander crypto_acipher_alloc_ecc_public_key(struct ecc_public_key *s __unused,
525291e5450SJens Wiklander 				    size_t key_size_bits __unused)
526291e5450SJens Wiklander {
527291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
528291e5450SJens Wiklander }
529291e5450SJens Wiklander 
530291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_ecc_keypair(struct ecc_keypair *s __unused,
531291e5450SJens Wiklander 					    size_t key_size_bits __unused)
532291e5450SJens Wiklander {
533291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
534291e5450SJens Wiklander }
535291e5450SJens Wiklander 
536291e5450SJens Wiklander void crypto_acipher_free_ecc_public_key(struct ecc_public_key *s __unused)
537291e5450SJens Wiklander {
538291e5450SJens Wiklander }
539291e5450SJens Wiklander 
540291e5450SJens Wiklander TEE_Result crypto_acipher_gen_ecc_key(struct ecc_keypair *key __unused)
541291e5450SJens Wiklander {
542291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
543291e5450SJens Wiklander }
544291e5450SJens Wiklander 
545291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_sign(uint32_t algo __unused,
546291e5450SJens Wiklander 				   struct ecc_keypair *key __unused,
547291e5450SJens Wiklander 				   const uint8_t *msg __unused,
548291e5450SJens Wiklander 				   size_t msg_len __unused,
549291e5450SJens Wiklander 				   uint8_t *sig __unused,
550291e5450SJens Wiklander 				   size_t *sig_len __unused)
551291e5450SJens Wiklander {
552291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
553291e5450SJens Wiklander }
554291e5450SJens Wiklander 
555291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_verify(uint32_t algo __unused,
556291e5450SJens Wiklander 				     struct ecc_public_key *key __unused,
557291e5450SJens Wiklander 				     const uint8_t *msg __unused,
558291e5450SJens Wiklander 				     size_t msg_len __unused,
559291e5450SJens Wiklander 				     const 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
566291e5450SJens Wiklander crypto_acipher_ecc_shared_secret(struct ecc_keypair *private_key __unused,
567291e5450SJens Wiklander 				 struct ecc_public_key *public_key __unused,
568291e5450SJens Wiklander 				 void *secret __unused,
569291e5450SJens Wiklander 				 unsigned long *secret_len __unused)
570291e5450SJens Wiklander {
571291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
572291e5450SJens Wiklander }
573291e5450SJens Wiklander #endif /*!CFG_CRYPTO_ECC || !_CFG_CRYPTO_WITH_ACIPHER*/
574