xref: /optee_os/core/crypto/crypto.c (revision ce7a47f5e6c618287915a46c77646a755208c315)
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>
1133790cc1SJens Wiklander #include <kernel/panic.h>
12d7ac7d0fSJens Wiklander #include <stdlib.h>
13d7ac7d0fSJens Wiklander #include <string.h>
14b887bd8fSJens Wiklander 
15b887bd8fSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_HASH)
16ecf2e014SJens Wiklander TEE_Result crypto_hash_alloc_ctx(void **ctx __unused, uint32_t algo __unused)
17b887bd8fSJens Wiklander {
18b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
19b887bd8fSJens Wiklander }
20b887bd8fSJens Wiklander 
21*ce7a47f5SJerome Forissier void crypto_hash_free_ctx(void *ctx, uint32_t algo __unused)
22ecf2e014SJens Wiklander {
23*ce7a47f5SJerome Forissier 	if (ctx)
24ecf2e014SJens Wiklander 		assert(0);
25ecf2e014SJens Wiklander }
26ecf2e014SJens Wiklander 
27ecf2e014SJens Wiklander void crypto_hash_copy_state(void *dst_ctx __unused, void *src_ctx __unused,
28ecf2e014SJens Wiklander 			    uint32_t algo __unused)
29ecf2e014SJens Wiklander {
30ecf2e014SJens Wiklander 	assert(0);
31ecf2e014SJens Wiklander }
32ecf2e014SJens Wiklander 
33b887bd8fSJens Wiklander TEE_Result crypto_hash_init(void *ctx __unused, uint32_t algo __unused)
34b887bd8fSJens Wiklander {
35b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
36b887bd8fSJens Wiklander }
37b887bd8fSJens Wiklander TEE_Result crypto_hash_update(void *ctx __unused, uint32_t algo __unused,
38b887bd8fSJens Wiklander 			      const uint8_t *data __unused, size_t len __unused)
39b887bd8fSJens Wiklander {
40b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
41b887bd8fSJens Wiklander }
42b887bd8fSJens Wiklander TEE_Result crypto_hash_final(void *ctx __unused, uint32_t algo __unused,
43b887bd8fSJens Wiklander 			     uint8_t *digest __unused, size_t len __unused)
44b887bd8fSJens Wiklander {
45b887bd8fSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
46b887bd8fSJens Wiklander }
47b887bd8fSJens Wiklander #endif /*_CFG_CRYPTO_WITH_HASH*/
4882d91db1SJens Wiklander 
4982d91db1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_CIPHER)
5072a9b1a0SJens Wiklander TEE_Result crypto_cipher_alloc_ctx(void **ctx __unused, uint32_t algo __unused)
5182d91db1SJens Wiklander {
521c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
5382d91db1SJens Wiklander }
5482d91db1SJens Wiklander 
55*ce7a47f5SJerome Forissier void crypto_cipher_free_ctx(void *ctx, uint32_t algo __unused)
5672a9b1a0SJens Wiklander {
57*ce7a47f5SJerome Forissier 	if (ctx)
5872a9b1a0SJens Wiklander 		assert(0);
5972a9b1a0SJens Wiklander }
6072a9b1a0SJens Wiklander 
6172a9b1a0SJens Wiklander void crypto_cipher_copy_state(void *dst_ctx __unused, void *src_ctx __unused,
6272a9b1a0SJens Wiklander 			      uint32_t algo __unused)
6372a9b1a0SJens Wiklander {
6472a9b1a0SJens Wiklander 	assert(0);
6572a9b1a0SJens Wiklander }
6672a9b1a0SJens Wiklander 
6782d91db1SJens Wiklander TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused,
6882d91db1SJens Wiklander 			      TEE_OperationMode mode __unused,
6982d91db1SJens Wiklander 			      const uint8_t *key1 __unused,
7082d91db1SJens Wiklander 			      size_t key1_len __unused,
7182d91db1SJens Wiklander 			      const uint8_t *key2 __unused,
7282d91db1SJens Wiklander 			      size_t key2_len __unused,
7382d91db1SJens Wiklander 			      const uint8_t *iv __unused,
7482d91db1SJens Wiklander 			      size_t iv_len __unused)
7582d91db1SJens Wiklander {
761c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
7782d91db1SJens Wiklander }
7882d91db1SJens Wiklander 
7982d91db1SJens Wiklander TEE_Result crypto_cipher_update(void *ctx __unused, uint32_t algo __unused,
8082d91db1SJens Wiklander 				TEE_OperationMode mode __unused,
8182d91db1SJens Wiklander 				bool last_block __unused,
8282d91db1SJens Wiklander 				const uint8_t *data __unused,
8382d91db1SJens Wiklander 				size_t len __unused, uint8_t *dst __unused)
8482d91db1SJens Wiklander {
851c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
8682d91db1SJens Wiklander }
8782d91db1SJens Wiklander 
8882d91db1SJens Wiklander void crypto_cipher_final(void *ctx __unused, uint32_t algo __unused)
8982d91db1SJens Wiklander {
9082d91db1SJens Wiklander }
9182d91db1SJens Wiklander 
9282d91db1SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo __unused,
9382d91db1SJens Wiklander 					size_t *size __unused)
9482d91db1SJens Wiklander {
951c5fdd1fSJerome Forissier 	return TEE_ERROR_NOT_IMPLEMENTED;
9682d91db1SJens Wiklander }
9782d91db1SJens Wiklander #endif /*_CFG_CRYPTO_WITH_CIPHER*/
98e9eaba5cSJens Wiklander 
99e9eaba5cSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_MAC)
10082ef73bcSJens Wiklander TEE_Result crypto_mac_alloc_ctx(void **ctx __unused, uint32_t algo __unused)
101e9eaba5cSJens Wiklander {
102e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
103e9eaba5cSJens Wiklander }
104e9eaba5cSJens Wiklander 
105*ce7a47f5SJerome Forissier void crypto_mac_free_ctx(void *ctx, uint32_t algo __unused)
10682ef73bcSJens Wiklander {
107*ce7a47f5SJerome Forissier 	if (ctx)
10882ef73bcSJens Wiklander 		assert(0);
10982ef73bcSJens Wiklander }
11082ef73bcSJens Wiklander 
11182ef73bcSJens Wiklander void crypto_mac_copy_state(void *dst_ctx __unused, void *src_ctx __unused,
11282ef73bcSJens Wiklander 			   uint32_t algo __unused)
11382ef73bcSJens Wiklander {
11482ef73bcSJens Wiklander 	assert(0);
11582ef73bcSJens Wiklander }
11682ef73bcSJens Wiklander 
117e9eaba5cSJens Wiklander TEE_Result crypto_mac_init(void *ctx __unused, uint32_t algo __unused,
118e9eaba5cSJens Wiklander 			   const uint8_t *key __unused, size_t len __unused)
119e9eaba5cSJens Wiklander {
120e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
121e9eaba5cSJens Wiklander }
122e9eaba5cSJens Wiklander 
123e9eaba5cSJens Wiklander TEE_Result crypto_mac_update(void *ctx __unused, uint32_t algo __unused,
124e9eaba5cSJens Wiklander 			     const uint8_t *data __unused, size_t len __unused)
125e9eaba5cSJens Wiklander {
126e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
127e9eaba5cSJens Wiklander }
128e9eaba5cSJens Wiklander 
129e9eaba5cSJens Wiklander TEE_Result crypto_mac_final(void *ctx __unused, uint32_t algo __unused,
130e9eaba5cSJens Wiklander 			    uint8_t *digest __unused,
131e9eaba5cSJens Wiklander 			    size_t digest_len __unused)
132e9eaba5cSJens Wiklander {
133e9eaba5cSJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
134e9eaba5cSJens Wiklander }
135e9eaba5cSJens Wiklander #endif /*_CFG_CRYPTO_WITH_MAC*/
136e9eaba5cSJens Wiklander 
137d7ac7d0fSJens Wiklander TEE_Result crypto_authenc_alloc_ctx(void **ctx, uint32_t algo)
1388875ce46SJens Wiklander {
139d0620b01SJens Wiklander 	switch (algo) {
140d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
141d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
142d7ac7d0fSJens Wiklander 		return crypto_aes_ccm_alloc_ctx(ctx);
143d0620b01SJens Wiklander #endif
144d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
145d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
146d7ac7d0fSJens Wiklander 		return crypto_aes_gcm_alloc_ctx(ctx);
147d0620b01SJens Wiklander #endif
148d0620b01SJens Wiklander 	default:
1498875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
1508875ce46SJens Wiklander 	}
151d0620b01SJens Wiklander }
1528875ce46SJens Wiklander 
153d7ac7d0fSJens Wiklander void crypto_authenc_free_ctx(void *ctx, uint32_t algo)
154d7ac7d0fSJens Wiklander {
155d7ac7d0fSJens Wiklander 	switch (algo) {
156d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM)
157d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_CCM:
158d7ac7d0fSJens Wiklander 		crypto_aes_ccm_free_ctx(ctx);
159d7ac7d0fSJens Wiklander 		break;
160d7ac7d0fSJens Wiklander #endif
161d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM)
162d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_GCM:
163d7ac7d0fSJens Wiklander 		crypto_aes_gcm_free_ctx(ctx);
164d7ac7d0fSJens Wiklander 		break;
165d7ac7d0fSJens Wiklander #endif
166d7ac7d0fSJens Wiklander 	default:
167*ce7a47f5SJerome Forissier 		if (ctx)
168d7ac7d0fSJens Wiklander 			assert(0);
169d7ac7d0fSJens Wiklander 	}
170d7ac7d0fSJens Wiklander }
171d7ac7d0fSJens Wiklander 
172d7ac7d0fSJens Wiklander void crypto_authenc_copy_state(void *dst_ctx, void *src_ctx, uint32_t algo)
173d7ac7d0fSJens Wiklander {
174d7ac7d0fSJens Wiklander 	switch (algo) {
175d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM)
176d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_CCM:
177d7ac7d0fSJens Wiklander 		crypto_aes_ccm_copy_state(dst_ctx, src_ctx);
178d7ac7d0fSJens Wiklander 		break;
179d7ac7d0fSJens Wiklander #endif
180d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM)
181d7ac7d0fSJens Wiklander 	case TEE_ALG_AES_GCM:
182d7ac7d0fSJens Wiklander 		crypto_aes_gcm_copy_state(dst_ctx, src_ctx);
183d7ac7d0fSJens Wiklander 		break;
184d7ac7d0fSJens Wiklander #endif
185d7ac7d0fSJens Wiklander 	default:
186d7ac7d0fSJens Wiklander 		assert(0);
187d7ac7d0fSJens Wiklander 	}
188d7ac7d0fSJens Wiklander }
189d7ac7d0fSJens Wiklander 
190d0620b01SJens Wiklander TEE_Result crypto_authenc_init(void *ctx __maybe_unused,
191d0620b01SJens Wiklander 			       uint32_t algo __maybe_unused,
192d0620b01SJens Wiklander 			       TEE_OperationMode mode __maybe_unused,
193d0620b01SJens Wiklander 			       const uint8_t *key __maybe_unused,
194d0620b01SJens Wiklander 			       size_t key_len __maybe_unused,
195d0620b01SJens Wiklander 			       const uint8_t *nonce __maybe_unused,
196d0620b01SJens Wiklander 			       size_t nonce_len __maybe_unused,
197d0620b01SJens Wiklander 			       size_t tag_len __maybe_unused,
198d0620b01SJens Wiklander 			       size_t aad_len __maybe_unused,
199d0620b01SJens Wiklander 			       size_t payload_len __maybe_unused)
200d0620b01SJens Wiklander {
201d0620b01SJens Wiklander 	switch (algo) {
202d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
203d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
204d0620b01SJens Wiklander 		return crypto_aes_ccm_init(ctx, mode, key, key_len, nonce,
205d0620b01SJens Wiklander 					   nonce_len, tag_len, aad_len,
206d0620b01SJens Wiklander 					   payload_len);
207d0620b01SJens Wiklander #endif
208d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
209d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
210d0620b01SJens Wiklander 		return crypto_aes_gcm_init(ctx, mode, key, key_len, nonce,
211d0620b01SJens Wiklander 					   nonce_len, tag_len);
212d0620b01SJens Wiklander #endif
213d0620b01SJens Wiklander 	default:
214d0620b01SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
215d0620b01SJens Wiklander 	}
216d0620b01SJens Wiklander }
217d0620b01SJens Wiklander 
218d0620b01SJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx __maybe_unused,
219d0620b01SJens Wiklander 				     uint32_t algo __maybe_unused,
2208875ce46SJens Wiklander 				     TEE_OperationMode mode __unused,
221d0620b01SJens Wiklander 				     const uint8_t *data __maybe_unused,
222d0620b01SJens Wiklander 				     size_t len __maybe_unused)
2238875ce46SJens Wiklander {
224d0620b01SJens Wiklander 	switch (algo) {
225d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
226d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
227d0620b01SJens Wiklander 		return crypto_aes_ccm_update_aad(ctx, data, len);
228d0620b01SJens Wiklander #endif
229d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
230d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
231d0620b01SJens Wiklander 		return crypto_aes_gcm_update_aad(ctx, data, len);
232d0620b01SJens Wiklander #endif
233d0620b01SJens Wiklander 	default:
2348875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2358875ce46SJens Wiklander 	}
236d0620b01SJens Wiklander }
2378875ce46SJens Wiklander 
238d0620b01SJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx __maybe_unused,
239d0620b01SJens Wiklander 					 uint32_t algo __maybe_unused,
240d0620b01SJens Wiklander 					 TEE_OperationMode mode __maybe_unused,
241d0620b01SJens Wiklander 					 const uint8_t *src_data __maybe_unused,
242d0620b01SJens Wiklander 					 size_t src_len __maybe_unused,
243d0620b01SJens Wiklander 					 uint8_t *dst_data __maybe_unused,
244d0620b01SJens Wiklander 					 size_t *dst_len __maybe_unused)
2458875ce46SJens Wiklander {
246d0620b01SJens Wiklander 	size_t dl = *dst_len;
247d0620b01SJens Wiklander 
248d0620b01SJens Wiklander 	*dst_len = src_len;
249d0620b01SJens Wiklander 	if (dl < src_len)
250d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
251d0620b01SJens Wiklander 
252d0620b01SJens Wiklander 	switch (algo) {
253d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
254d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
255d0620b01SJens Wiklander 		return crypto_aes_ccm_update_payload(ctx, mode, src_data,
256d0620b01SJens Wiklander 						     src_len, dst_data);
257d0620b01SJens Wiklander #endif
258d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
259d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
260d0620b01SJens Wiklander 		return crypto_aes_gcm_update_payload(ctx, mode, src_data,
261d0620b01SJens Wiklander 						     src_len, dst_data);
262d0620b01SJens Wiklander #endif
263d0620b01SJens Wiklander 	default:
2648875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2658875ce46SJens Wiklander 	}
266d0620b01SJens Wiklander }
2678875ce46SJens Wiklander 
268d0620b01SJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx __maybe_unused,
269d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
270d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
271d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
272d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
273d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
274d0620b01SJens Wiklander 				    uint8_t *dst_tag __maybe_unused,
275d0620b01SJens Wiklander 				    size_t *dst_tag_len __maybe_unused)
2768875ce46SJens Wiklander {
277d0620b01SJens Wiklander 	size_t dl = *dst_len;
278d0620b01SJens Wiklander 
279d0620b01SJens Wiklander 	*dst_len = src_len;
280d0620b01SJens Wiklander 	if (dl < src_len)
281d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
282d0620b01SJens Wiklander 
283d0620b01SJens Wiklander 	switch (algo) {
284d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
285d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
286d0620b01SJens Wiklander 		return crypto_aes_ccm_enc_final(ctx, src_data, src_len,
287d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
288d0620b01SJens Wiklander #endif
289d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
290d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
291d0620b01SJens Wiklander 		return crypto_aes_gcm_enc_final(ctx, src_data, src_len,
292d0620b01SJens Wiklander 						dst_data, dst_tag, dst_tag_len);
293d0620b01SJens Wiklander #endif
294d0620b01SJens Wiklander 	default:
2958875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
2968875ce46SJens Wiklander 	}
297d0620b01SJens Wiklander }
2988875ce46SJens Wiklander 
299d0620b01SJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx __maybe_unused,
300d0620b01SJens Wiklander 				    uint32_t algo __maybe_unused,
301d0620b01SJens Wiklander 				    const uint8_t *src_data __maybe_unused,
302d0620b01SJens Wiklander 				    size_t src_len __maybe_unused,
303d0620b01SJens Wiklander 				    uint8_t *dst_data __maybe_unused,
304d0620b01SJens Wiklander 				    size_t *dst_len __maybe_unused,
305d0620b01SJens Wiklander 				    const uint8_t *tag __maybe_unused,
306d0620b01SJens Wiklander 				    size_t tag_len __maybe_unused)
3078875ce46SJens Wiklander {
308d0620b01SJens Wiklander 	size_t dl = *dst_len;
309d0620b01SJens Wiklander 
310d0620b01SJens Wiklander 	*dst_len = src_len;
311d0620b01SJens Wiklander 	if (dl < src_len)
312d0620b01SJens Wiklander 		return TEE_ERROR_SHORT_BUFFER;
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_dec_final(ctx, src_data, src_len,
318d0620b01SJens Wiklander 						dst_data, tag, tag_len);
319d0620b01SJens Wiklander #endif
320d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
321d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
322d0620b01SJens Wiklander 		return crypto_aes_gcm_dec_final(ctx, src_data, src_len,
323d0620b01SJens Wiklander 						dst_data, tag, tag_len);
324d0620b01SJens Wiklander #endif
325d0620b01SJens Wiklander 	default:
3268875ce46SJens Wiklander 		return TEE_ERROR_NOT_IMPLEMENTED;
3278875ce46SJens Wiklander 	}
3288875ce46SJens Wiklander }
3298875ce46SJens Wiklander 
330d0620b01SJens Wiklander void crypto_authenc_final(void *ctx __maybe_unused,
331d0620b01SJens Wiklander 			  uint32_t algo __maybe_unused)
3328875ce46SJens Wiklander {
333d0620b01SJens Wiklander 	switch (algo) {
334d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM)
335d0620b01SJens Wiklander 	case TEE_ALG_AES_CCM:
336d0620b01SJens Wiklander 		crypto_aes_ccm_final(ctx);
337d0620b01SJens Wiklander 		break;
338d0620b01SJens Wiklander #endif
339d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM)
340d0620b01SJens Wiklander 	case TEE_ALG_AES_GCM:
341d0620b01SJens Wiklander 		crypto_aes_gcm_final(ctx);
342d0620b01SJens Wiklander 		break;
343d0620b01SJens Wiklander #endif
344d0620b01SJens Wiklander 	default:
345d0620b01SJens Wiklander 		break;
3468875ce46SJens Wiklander 	}
347d0620b01SJens Wiklander }
34833790cc1SJens Wiklander 
34933790cc1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_ACIPHER)
35033790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused)
35133790cc1SJens Wiklander {
35233790cc1SJens Wiklander 	return NULL;
35333790cc1SJens Wiklander }
35433790cc1SJens Wiklander 
35533790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused,
35633790cc1SJens Wiklander 				size_t fromsize __unused,
35733790cc1SJens Wiklander 				struct bignum *to __unused)
35833790cc1SJens Wiklander {
35933790cc1SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
36033790cc1SJens Wiklander }
36133790cc1SJens Wiklander 
36233790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused)
36333790cc1SJens Wiklander {
36433790cc1SJens Wiklander 	return 0;
36533790cc1SJens Wiklander }
36633790cc1SJens Wiklander 
36733790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused)
36833790cc1SJens Wiklander {
36933790cc1SJens Wiklander 	return 0;
37033790cc1SJens Wiklander }
37133790cc1SJens Wiklander 
37233790cc1SJens Wiklander /*
37333790cc1SJens Wiklander  * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be
37433790cc1SJens Wiklander  * enough to guarantee that the functions calling this function aren't
37533790cc1SJens Wiklander  * called, but just in case add a panic() here to avoid unexpected
37633790cc1SJens Wiklander  * behavoir.
37733790cc1SJens Wiklander  */
37833790cc1SJens Wiklander static void bignum_cant_happen(void)
37933790cc1SJens Wiklander {
38033790cc1SJens Wiklander 	volatile bool b = true;
38133790cc1SJens Wiklander 
38233790cc1SJens Wiklander 	/* Avoid warning about function does not return */
38333790cc1SJens Wiklander 	if (b)
38433790cc1SJens Wiklander 		panic();
38533790cc1SJens Wiklander }
38633790cc1SJens Wiklander 
38733790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused,
38833790cc1SJens Wiklander 			  uint8_t *to __unused)
38933790cc1SJens Wiklander {
39033790cc1SJens Wiklander 	bignum_cant_happen();
39133790cc1SJens Wiklander }
39233790cc1SJens Wiklander 
39333790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused,
39433790cc1SJens Wiklander 			const struct bignum *from __unused)
39533790cc1SJens Wiklander {
39633790cc1SJens Wiklander 	bignum_cant_happen();
39733790cc1SJens Wiklander }
39833790cc1SJens Wiklander 
39933790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a)
40033790cc1SJens Wiklander {
40133790cc1SJens Wiklander 	if (a)
40233790cc1SJens Wiklander 		panic();
40333790cc1SJens Wiklander }
40433790cc1SJens Wiklander 
40533790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused)
40633790cc1SJens Wiklander {
40733790cc1SJens Wiklander 	bignum_cant_happen();
40833790cc1SJens Wiklander }
40933790cc1SJens Wiklander 
41033790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */
41133790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused,
41233790cc1SJens Wiklander 			      struct bignum *b __unused)
41333790cc1SJens Wiklander {
41433790cc1SJens Wiklander 	bignum_cant_happen();
41533790cc1SJens Wiklander 	return -1;
41633790cc1SJens Wiklander }
41733790cc1SJens Wiklander #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/
418291e5450SJens Wiklander 
419291e5450SJens Wiklander #if !defined(CFG_CRYPTO_RSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
420291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_rsa_keypair(struct rsa_keypair *s __unused,
421291e5450SJens Wiklander 					    size_t key_size_bits __unused)
422291e5450SJens Wiklander {
423291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
424291e5450SJens Wiklander }
425291e5450SJens Wiklander 
426291e5450SJens Wiklander TEE_Result
427291e5450SJens Wiklander crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s __unused,
428291e5450SJens Wiklander 				    size_t key_size_bits __unused)
429291e5450SJens Wiklander {
430291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
431291e5450SJens Wiklander }
432291e5450SJens Wiklander 
433291e5450SJens Wiklander void crypto_acipher_free_rsa_public_key(struct rsa_public_key *s __unused)
434291e5450SJens Wiklander {
435291e5450SJens Wiklander }
436291e5450SJens Wiklander 
437291e5450SJens Wiklander TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key __unused,
438291e5450SJens Wiklander 				      size_t key_size __unused)
439291e5450SJens Wiklander {
440291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
441291e5450SJens Wiklander }
442291e5450SJens Wiklander 
443291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_decrypt(struct rsa_keypair *key __unused,
444291e5450SJens Wiklander 					   const uint8_t *src __unused,
445291e5450SJens Wiklander 					   size_t src_len __unused,
446291e5450SJens Wiklander 					   uint8_t *dst __unused,
447291e5450SJens Wiklander 					   size_t *dst_len __unused)
448291e5450SJens Wiklander {
449291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
450291e5450SJens Wiklander }
451291e5450SJens Wiklander 
452291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_encrypt(struct rsa_public_key *key __unused,
453291e5450SJens Wiklander 					   const uint8_t *src __unused,
454291e5450SJens Wiklander 					   size_t src_len __unused,
455291e5450SJens Wiklander 					   uint8_t *dst __unused,
456291e5450SJens Wiklander 					   size_t *dst_len __unused)
457291e5450SJens Wiklander {
458291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
459291e5450SJens Wiklander }
460291e5450SJens Wiklander 
461291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_decrypt(uint32_t algo __unused,
462291e5450SJens Wiklander 					struct rsa_keypair *key __unused,
463291e5450SJens Wiklander 					const uint8_t *label __unused,
464291e5450SJens Wiklander 					size_t label_len __unused,
465291e5450SJens Wiklander 					const uint8_t *src __unused,
466291e5450SJens Wiklander 					size_t src_len __unused,
467291e5450SJens Wiklander 					uint8_t *dst __unused,
468291e5450SJens Wiklander 					size_t *dst_len __unused)
469291e5450SJens Wiklander {
470291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
471291e5450SJens Wiklander }
472291e5450SJens Wiklander 
473291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_encrypt(uint32_t algo __unused,
474291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
475291e5450SJens Wiklander 					const uint8_t *label __unused,
476291e5450SJens Wiklander 					size_t label_len __unused,
477291e5450SJens Wiklander 					const uint8_t *src __unused,
478291e5450SJens Wiklander 					size_t src_len __unused,
479291e5450SJens Wiklander 					uint8_t *dst __unused,
480291e5450SJens Wiklander 					size_t *dst_len __unused)
481291e5450SJens Wiklander {
482291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
483291e5450SJens Wiklander }
484291e5450SJens Wiklander 
485291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_sign(uint32_t algo __unused,
486291e5450SJens Wiklander 				      struct rsa_keypair *key __unused,
487291e5450SJens Wiklander 				      int salt_len __unused,
488291e5450SJens Wiklander 				      const uint8_t *msg __unused,
489291e5450SJens Wiklander 				      size_t msg_len __unused,
490291e5450SJens Wiklander 				      uint8_t *sig __unused,
491291e5450SJens Wiklander 				      size_t *sig_len __unused)
492291e5450SJens Wiklander {
493291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
494291e5450SJens Wiklander }
495291e5450SJens Wiklander 
496291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_verify(uint32_t algo __unused,
497291e5450SJens Wiklander 					struct rsa_public_key *key __unused,
498291e5450SJens Wiklander 					int salt_len __unused,
499291e5450SJens Wiklander 					const uint8_t *msg __unused,
500291e5450SJens Wiklander 					size_t msg_len __unused,
501291e5450SJens Wiklander 					const uint8_t *sig __unused,
502291e5450SJens Wiklander 					size_t sig_len __unused)
503291e5450SJens Wiklander {
504291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
505291e5450SJens Wiklander }
506291e5450SJens Wiklander #endif /*!CFG_CRYPTO_RSA || !_CFG_CRYPTO_WITH_ACIPHER*/
507291e5450SJens Wiklander 
508291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
509291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s __unused,
510291e5450SJens Wiklander 					    size_t key_size_bits __unused)
511291e5450SJens Wiklander {
512291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
513291e5450SJens Wiklander }
514291e5450SJens Wiklander 
515291e5450SJens Wiklander TEE_Result
516291e5450SJens Wiklander crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s __unused,
517291e5450SJens Wiklander 				    size_t key_size_bits __unused)
518291e5450SJens Wiklander {
519291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
520291e5450SJens Wiklander }
521291e5450SJens Wiklander 
522291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dsa_key(struct dsa_keypair *key __unused,
523291e5450SJens Wiklander 				      size_t key_size __unused)
524291e5450SJens Wiklander {
525291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
526291e5450SJens Wiklander }
527291e5450SJens Wiklander 
528291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_sign(uint32_t algo __unused,
529291e5450SJens Wiklander 				   struct dsa_keypair *key __unused,
530291e5450SJens Wiklander 				   const uint8_t *msg __unused,
531291e5450SJens Wiklander 				   size_t msg_len __unused,
532291e5450SJens Wiklander 				   uint8_t *sig __unused,
533291e5450SJens Wiklander 				   size_t *sig_len __unused)
534291e5450SJens Wiklander {
535291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
536291e5450SJens Wiklander }
537291e5450SJens Wiklander 
538291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_verify(uint32_t algo __unused,
539291e5450SJens Wiklander 				     struct dsa_public_key *key __unused,
540291e5450SJens Wiklander 				     const uint8_t *msg __unused,
541291e5450SJens Wiklander 				     size_t msg_len __unused,
542291e5450SJens Wiklander 				     const uint8_t *sig __unused,
543291e5450SJens Wiklander 				     size_t sig_len __unused)
544291e5450SJens Wiklander {
545291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
546291e5450SJens Wiklander }
547291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DSA || !_CFG_CRYPTO_WITH_ACIPHER*/
548291e5450SJens Wiklander 
549291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DH) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
550291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s __unused,
551291e5450SJens Wiklander 					   size_t key_size_bits __unused)
552291e5450SJens Wiklander {
553291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
554291e5450SJens Wiklander }
555291e5450SJens Wiklander 
556291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dh_key(struct dh_keypair *key __unused,
557291e5450SJens Wiklander 				     struct bignum *q __unused,
558291e5450SJens Wiklander 				     size_t xbits __unused)
559291e5450SJens Wiklander {
560291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
561291e5450SJens Wiklander }
562291e5450SJens Wiklander 
563291e5450SJens Wiklander TEE_Result
564291e5450SJens Wiklander crypto_acipher_dh_shared_secret(struct dh_keypair *private_key __unused,
565291e5450SJens Wiklander 				struct bignum *public_key __unused,
566291e5450SJens Wiklander 				struct bignum *secret __unused)
567291e5450SJens Wiklander {
568291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
569291e5450SJens Wiklander }
570291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DH || !_CFG_CRYPTO_WITH_ACIPHER*/
571291e5450SJens Wiklander 
572291e5450SJens Wiklander #if !defined(CFG_CRYPTO_ECC) || !defined(_CFG_CRYPTO_WITH_ACIPHER)
573291e5450SJens Wiklander TEE_Result
574291e5450SJens Wiklander crypto_acipher_alloc_ecc_public_key(struct ecc_public_key *s __unused,
575291e5450SJens Wiklander 				    size_t key_size_bits __unused)
576291e5450SJens Wiklander {
577291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
578291e5450SJens Wiklander }
579291e5450SJens Wiklander 
580291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_ecc_keypair(struct ecc_keypair *s __unused,
581291e5450SJens Wiklander 					    size_t key_size_bits __unused)
582291e5450SJens Wiklander {
583291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
584291e5450SJens Wiklander }
585291e5450SJens Wiklander 
586291e5450SJens Wiklander void crypto_acipher_free_ecc_public_key(struct ecc_public_key *s __unused)
587291e5450SJens Wiklander {
588291e5450SJens Wiklander }
589291e5450SJens Wiklander 
590291e5450SJens Wiklander TEE_Result crypto_acipher_gen_ecc_key(struct ecc_keypair *key __unused)
591291e5450SJens Wiklander {
592291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
593291e5450SJens Wiklander }
594291e5450SJens Wiklander 
595291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_sign(uint32_t algo __unused,
596291e5450SJens Wiklander 				   struct ecc_keypair *key __unused,
597291e5450SJens Wiklander 				   const uint8_t *msg __unused,
598291e5450SJens Wiklander 				   size_t msg_len __unused,
599291e5450SJens Wiklander 				   uint8_t *sig __unused,
600291e5450SJens Wiklander 				   size_t *sig_len __unused)
601291e5450SJens Wiklander {
602291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
603291e5450SJens Wiklander }
604291e5450SJens Wiklander 
605291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_verify(uint32_t algo __unused,
606291e5450SJens Wiklander 				     struct ecc_public_key *key __unused,
607291e5450SJens Wiklander 				     const uint8_t *msg __unused,
608291e5450SJens Wiklander 				     size_t msg_len __unused,
609291e5450SJens Wiklander 				     const uint8_t *sig __unused,
610291e5450SJens Wiklander 				     size_t sig_len __unused)
611291e5450SJens Wiklander {
612291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
613291e5450SJens Wiklander }
614291e5450SJens Wiklander 
615291e5450SJens Wiklander TEE_Result
616291e5450SJens Wiklander crypto_acipher_ecc_shared_secret(struct ecc_keypair *private_key __unused,
617291e5450SJens Wiklander 				 struct ecc_public_key *public_key __unused,
618291e5450SJens Wiklander 				 void *secret __unused,
619291e5450SJens Wiklander 				 unsigned long *secret_len __unused)
620291e5450SJens Wiklander {
621291e5450SJens Wiklander 	return TEE_ERROR_NOT_IMPLEMENTED;
622291e5450SJens Wiklander }
623291e5450SJens Wiklander #endif /*!CFG_CRYPTO_ECC || !_CFG_CRYPTO_WITH_ACIPHER*/
624