1fb7ef469SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause 2b887bd8fSJens Wiklander /* 3b887bd8fSJens Wiklander * Copyright (c) 2017, Linaro Limited 4b887bd8fSJens Wiklander */ 5b887bd8fSJens Wiklander 6*d7ac7d0fSJens 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> 12*d7ac7d0fSJens Wiklander #include <stdlib.h> 13*d7ac7d0fSJens 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 21ecf2e014SJens Wiklander void crypto_hash_free_ctx(void *ctx __unused, uint32_t algo __unused) 22ecf2e014SJens Wiklander { 23ecf2e014SJens Wiklander assert(0); 24ecf2e014SJens Wiklander } 25ecf2e014SJens Wiklander 26ecf2e014SJens Wiklander void crypto_hash_copy_state(void *dst_ctx __unused, void *src_ctx __unused, 27ecf2e014SJens Wiklander uint32_t algo __unused) 28ecf2e014SJens Wiklander { 29ecf2e014SJens Wiklander assert(0); 30ecf2e014SJens Wiklander } 31ecf2e014SJens Wiklander 32b887bd8fSJens Wiklander TEE_Result crypto_hash_init(void *ctx __unused, uint32_t algo __unused) 33b887bd8fSJens Wiklander { 34b887bd8fSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 35b887bd8fSJens Wiklander } 36b887bd8fSJens Wiklander TEE_Result crypto_hash_update(void *ctx __unused, uint32_t algo __unused, 37b887bd8fSJens Wiklander const uint8_t *data __unused, size_t len __unused) 38b887bd8fSJens Wiklander { 39b887bd8fSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 40b887bd8fSJens Wiklander } 41b887bd8fSJens Wiklander TEE_Result crypto_hash_final(void *ctx __unused, uint32_t algo __unused, 42b887bd8fSJens Wiklander uint8_t *digest __unused, size_t len __unused) 43b887bd8fSJens Wiklander { 44b887bd8fSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 45b887bd8fSJens Wiklander } 46b887bd8fSJens Wiklander #endif /*_CFG_CRYPTO_WITH_HASH*/ 4782d91db1SJens Wiklander 4882d91db1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_CIPHER) 4972a9b1a0SJens Wiklander TEE_Result crypto_cipher_alloc_ctx(void **ctx __unused, uint32_t algo __unused) 5082d91db1SJens Wiklander { 511c5fdd1fSJerome Forissier return TEE_ERROR_NOT_IMPLEMENTED; 5282d91db1SJens Wiklander } 5382d91db1SJens Wiklander 5472a9b1a0SJens Wiklander void crypto_cipher_free_ctx(void *ctx __unused, uint32_t algo __unused) 5572a9b1a0SJens Wiklander { 5672a9b1a0SJens Wiklander assert(0); 5772a9b1a0SJens Wiklander } 5872a9b1a0SJens Wiklander 5972a9b1a0SJens Wiklander void crypto_cipher_copy_state(void *dst_ctx __unused, void *src_ctx __unused, 6072a9b1a0SJens Wiklander uint32_t algo __unused) 6172a9b1a0SJens Wiklander { 6272a9b1a0SJens Wiklander assert(0); 6372a9b1a0SJens Wiklander } 6472a9b1a0SJens Wiklander 6582d91db1SJens Wiklander TEE_Result crypto_cipher_init(void *ctx __unused, uint32_t algo __unused, 6682d91db1SJens Wiklander TEE_OperationMode mode __unused, 6782d91db1SJens Wiklander const uint8_t *key1 __unused, 6882d91db1SJens Wiklander size_t key1_len __unused, 6982d91db1SJens Wiklander const uint8_t *key2 __unused, 7082d91db1SJens Wiklander size_t key2_len __unused, 7182d91db1SJens Wiklander const uint8_t *iv __unused, 7282d91db1SJens Wiklander size_t iv_len __unused) 7382d91db1SJens Wiklander { 741c5fdd1fSJerome Forissier return TEE_ERROR_NOT_IMPLEMENTED; 7582d91db1SJens Wiklander } 7682d91db1SJens Wiklander 7782d91db1SJens Wiklander TEE_Result crypto_cipher_update(void *ctx __unused, uint32_t algo __unused, 7882d91db1SJens Wiklander TEE_OperationMode mode __unused, 7982d91db1SJens Wiklander bool last_block __unused, 8082d91db1SJens Wiklander const uint8_t *data __unused, 8182d91db1SJens Wiklander size_t len __unused, uint8_t *dst __unused) 8282d91db1SJens Wiklander { 831c5fdd1fSJerome Forissier return TEE_ERROR_NOT_IMPLEMENTED; 8482d91db1SJens Wiklander } 8582d91db1SJens Wiklander 8682d91db1SJens Wiklander void crypto_cipher_final(void *ctx __unused, uint32_t algo __unused) 8782d91db1SJens Wiklander { 8882d91db1SJens Wiklander } 8982d91db1SJens Wiklander 9082d91db1SJens Wiklander TEE_Result crypto_cipher_get_block_size(uint32_t algo __unused, 9182d91db1SJens Wiklander size_t *size __unused) 9282d91db1SJens Wiklander { 931c5fdd1fSJerome Forissier return TEE_ERROR_NOT_IMPLEMENTED; 9482d91db1SJens Wiklander } 9582d91db1SJens Wiklander #endif /*_CFG_CRYPTO_WITH_CIPHER*/ 96e9eaba5cSJens Wiklander 97e9eaba5cSJens Wiklander #if !defined(_CFG_CRYPTO_WITH_MAC) 9882ef73bcSJens Wiklander TEE_Result crypto_mac_alloc_ctx(void **ctx __unused, uint32_t algo __unused) 99e9eaba5cSJens Wiklander { 100e9eaba5cSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 101e9eaba5cSJens Wiklander } 102e9eaba5cSJens Wiklander 10382ef73bcSJens Wiklander void crypto_mac_free_ctx(void *ctx __unused, uint32_t algo __unused) 10482ef73bcSJens Wiklander { 10582ef73bcSJens Wiklander assert(0); 10682ef73bcSJens Wiklander } 10782ef73bcSJens Wiklander 10882ef73bcSJens Wiklander void crypto_mac_copy_state(void *dst_ctx __unused, void *src_ctx __unused, 10982ef73bcSJens Wiklander uint32_t algo __unused) 11082ef73bcSJens Wiklander { 11182ef73bcSJens Wiklander assert(0); 11282ef73bcSJens Wiklander } 11382ef73bcSJens Wiklander 114e9eaba5cSJens Wiklander TEE_Result crypto_mac_init(void *ctx __unused, uint32_t algo __unused, 115e9eaba5cSJens Wiklander const uint8_t *key __unused, size_t len __unused) 116e9eaba5cSJens Wiklander { 117e9eaba5cSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 118e9eaba5cSJens Wiklander } 119e9eaba5cSJens Wiklander 120e9eaba5cSJens Wiklander TEE_Result crypto_mac_update(void *ctx __unused, uint32_t algo __unused, 121e9eaba5cSJens Wiklander const uint8_t *data __unused, size_t len __unused) 122e9eaba5cSJens Wiklander { 123e9eaba5cSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 124e9eaba5cSJens Wiklander } 125e9eaba5cSJens Wiklander 126e9eaba5cSJens Wiklander TEE_Result crypto_mac_final(void *ctx __unused, uint32_t algo __unused, 127e9eaba5cSJens Wiklander uint8_t *digest __unused, 128e9eaba5cSJens Wiklander size_t digest_len __unused) 129e9eaba5cSJens Wiklander { 130e9eaba5cSJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 131e9eaba5cSJens Wiklander } 132e9eaba5cSJens Wiklander #endif /*_CFG_CRYPTO_WITH_MAC*/ 133e9eaba5cSJens Wiklander 134*d7ac7d0fSJens Wiklander TEE_Result crypto_authenc_alloc_ctx(void **ctx, uint32_t algo) 1358875ce46SJens Wiklander { 136d0620b01SJens Wiklander switch (algo) { 137d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 138d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 139*d7ac7d0fSJens Wiklander return crypto_aes_ccm_alloc_ctx(ctx); 140d0620b01SJens Wiklander #endif 141d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 142d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 143*d7ac7d0fSJens Wiklander return crypto_aes_gcm_alloc_ctx(ctx); 144d0620b01SJens Wiklander #endif 145d0620b01SJens Wiklander default: 1468875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 1478875ce46SJens Wiklander } 148d0620b01SJens Wiklander } 1498875ce46SJens Wiklander 150*d7ac7d0fSJens Wiklander void crypto_authenc_free_ctx(void *ctx, uint32_t algo) 151*d7ac7d0fSJens Wiklander { 152*d7ac7d0fSJens Wiklander switch (algo) { 153*d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM) 154*d7ac7d0fSJens Wiklander case TEE_ALG_AES_CCM: 155*d7ac7d0fSJens Wiklander crypto_aes_ccm_free_ctx(ctx); 156*d7ac7d0fSJens Wiklander break; 157*d7ac7d0fSJens Wiklander #endif 158*d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM) 159*d7ac7d0fSJens Wiklander case TEE_ALG_AES_GCM: 160*d7ac7d0fSJens Wiklander crypto_aes_gcm_free_ctx(ctx); 161*d7ac7d0fSJens Wiklander break; 162*d7ac7d0fSJens Wiklander #endif 163*d7ac7d0fSJens Wiklander default: 164*d7ac7d0fSJens Wiklander assert(0); 165*d7ac7d0fSJens Wiklander } 166*d7ac7d0fSJens Wiklander } 167*d7ac7d0fSJens Wiklander 168*d7ac7d0fSJens Wiklander void crypto_authenc_copy_state(void *dst_ctx, void *src_ctx, uint32_t algo) 169*d7ac7d0fSJens Wiklander { 170*d7ac7d0fSJens Wiklander switch (algo) { 171*d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_CCM) 172*d7ac7d0fSJens Wiklander case TEE_ALG_AES_CCM: 173*d7ac7d0fSJens Wiklander crypto_aes_ccm_copy_state(dst_ctx, src_ctx); 174*d7ac7d0fSJens Wiklander break; 175*d7ac7d0fSJens Wiklander #endif 176*d7ac7d0fSJens Wiklander #if defined(CFG_CRYPTO_GCM) 177*d7ac7d0fSJens Wiklander case TEE_ALG_AES_GCM: 178*d7ac7d0fSJens Wiklander crypto_aes_gcm_copy_state(dst_ctx, src_ctx); 179*d7ac7d0fSJens Wiklander break; 180*d7ac7d0fSJens Wiklander #endif 181*d7ac7d0fSJens Wiklander default: 182*d7ac7d0fSJens Wiklander assert(0); 183*d7ac7d0fSJens Wiklander } 184*d7ac7d0fSJens Wiklander } 185*d7ac7d0fSJens Wiklander 186d0620b01SJens Wiklander TEE_Result crypto_authenc_init(void *ctx __maybe_unused, 187d0620b01SJens Wiklander uint32_t algo __maybe_unused, 188d0620b01SJens Wiklander TEE_OperationMode mode __maybe_unused, 189d0620b01SJens Wiklander const uint8_t *key __maybe_unused, 190d0620b01SJens Wiklander size_t key_len __maybe_unused, 191d0620b01SJens Wiklander const uint8_t *nonce __maybe_unused, 192d0620b01SJens Wiklander size_t nonce_len __maybe_unused, 193d0620b01SJens Wiklander size_t tag_len __maybe_unused, 194d0620b01SJens Wiklander size_t aad_len __maybe_unused, 195d0620b01SJens Wiklander size_t payload_len __maybe_unused) 196d0620b01SJens Wiklander { 197d0620b01SJens Wiklander switch (algo) { 198d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 199d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 200d0620b01SJens Wiklander return crypto_aes_ccm_init(ctx, mode, key, key_len, nonce, 201d0620b01SJens Wiklander nonce_len, tag_len, aad_len, 202d0620b01SJens Wiklander payload_len); 203d0620b01SJens Wiklander #endif 204d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 205d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 206d0620b01SJens Wiklander return crypto_aes_gcm_init(ctx, mode, key, key_len, nonce, 207d0620b01SJens Wiklander nonce_len, tag_len); 208d0620b01SJens Wiklander #endif 209d0620b01SJens Wiklander default: 210d0620b01SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 211d0620b01SJens Wiklander } 212d0620b01SJens Wiklander } 213d0620b01SJens Wiklander 214d0620b01SJens Wiklander TEE_Result crypto_authenc_update_aad(void *ctx __maybe_unused, 215d0620b01SJens Wiklander uint32_t algo __maybe_unused, 2168875ce46SJens Wiklander TEE_OperationMode mode __unused, 217d0620b01SJens Wiklander const uint8_t *data __maybe_unused, 218d0620b01SJens Wiklander size_t len __maybe_unused) 2198875ce46SJens Wiklander { 220d0620b01SJens Wiklander switch (algo) { 221d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 222d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 223d0620b01SJens Wiklander return crypto_aes_ccm_update_aad(ctx, data, len); 224d0620b01SJens Wiklander #endif 225d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 226d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 227d0620b01SJens Wiklander return crypto_aes_gcm_update_aad(ctx, data, len); 228d0620b01SJens Wiklander #endif 229d0620b01SJens Wiklander default: 2308875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 2318875ce46SJens Wiklander } 232d0620b01SJens Wiklander } 2338875ce46SJens Wiklander 234d0620b01SJens Wiklander TEE_Result crypto_authenc_update_payload(void *ctx __maybe_unused, 235d0620b01SJens Wiklander uint32_t algo __maybe_unused, 236d0620b01SJens Wiklander TEE_OperationMode mode __maybe_unused, 237d0620b01SJens Wiklander const uint8_t *src_data __maybe_unused, 238d0620b01SJens Wiklander size_t src_len __maybe_unused, 239d0620b01SJens Wiklander uint8_t *dst_data __maybe_unused, 240d0620b01SJens Wiklander size_t *dst_len __maybe_unused) 2418875ce46SJens Wiklander { 242d0620b01SJens Wiklander size_t dl = *dst_len; 243d0620b01SJens Wiklander 244d0620b01SJens Wiklander *dst_len = src_len; 245d0620b01SJens Wiklander if (dl < src_len) 246d0620b01SJens Wiklander return TEE_ERROR_SHORT_BUFFER; 247d0620b01SJens Wiklander 248d0620b01SJens Wiklander switch (algo) { 249d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 250d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 251d0620b01SJens Wiklander return crypto_aes_ccm_update_payload(ctx, mode, src_data, 252d0620b01SJens Wiklander src_len, dst_data); 253d0620b01SJens Wiklander #endif 254d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 255d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 256d0620b01SJens Wiklander return crypto_aes_gcm_update_payload(ctx, mode, src_data, 257d0620b01SJens Wiklander src_len, dst_data); 258d0620b01SJens Wiklander #endif 259d0620b01SJens Wiklander default: 2608875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 2618875ce46SJens Wiklander } 262d0620b01SJens Wiklander } 2638875ce46SJens Wiklander 264d0620b01SJens Wiklander TEE_Result crypto_authenc_enc_final(void *ctx __maybe_unused, 265d0620b01SJens Wiklander uint32_t algo __maybe_unused, 266d0620b01SJens Wiklander const uint8_t *src_data __maybe_unused, 267d0620b01SJens Wiklander size_t src_len __maybe_unused, 268d0620b01SJens Wiklander uint8_t *dst_data __maybe_unused, 269d0620b01SJens Wiklander size_t *dst_len __maybe_unused, 270d0620b01SJens Wiklander uint8_t *dst_tag __maybe_unused, 271d0620b01SJens Wiklander size_t *dst_tag_len __maybe_unused) 2728875ce46SJens Wiklander { 273d0620b01SJens Wiklander size_t dl = *dst_len; 274d0620b01SJens Wiklander 275d0620b01SJens Wiklander *dst_len = src_len; 276d0620b01SJens Wiklander if (dl < src_len) 277d0620b01SJens Wiklander return TEE_ERROR_SHORT_BUFFER; 278d0620b01SJens Wiklander 279d0620b01SJens Wiklander switch (algo) { 280d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 281d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 282d0620b01SJens Wiklander return crypto_aes_ccm_enc_final(ctx, src_data, src_len, 283d0620b01SJens Wiklander dst_data, dst_tag, dst_tag_len); 284d0620b01SJens Wiklander #endif 285d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 286d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 287d0620b01SJens Wiklander return crypto_aes_gcm_enc_final(ctx, src_data, src_len, 288d0620b01SJens Wiklander dst_data, dst_tag, dst_tag_len); 289d0620b01SJens Wiklander #endif 290d0620b01SJens Wiklander default: 2918875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 2928875ce46SJens Wiklander } 293d0620b01SJens Wiklander } 2948875ce46SJens Wiklander 295d0620b01SJens Wiklander TEE_Result crypto_authenc_dec_final(void *ctx __maybe_unused, 296d0620b01SJens Wiklander uint32_t algo __maybe_unused, 297d0620b01SJens Wiklander const uint8_t *src_data __maybe_unused, 298d0620b01SJens Wiklander size_t src_len __maybe_unused, 299d0620b01SJens Wiklander uint8_t *dst_data __maybe_unused, 300d0620b01SJens Wiklander size_t *dst_len __maybe_unused, 301d0620b01SJens Wiklander const uint8_t *tag __maybe_unused, 302d0620b01SJens Wiklander size_t tag_len __maybe_unused) 3038875ce46SJens Wiklander { 304d0620b01SJens Wiklander size_t dl = *dst_len; 305d0620b01SJens Wiklander 306d0620b01SJens Wiklander *dst_len = src_len; 307d0620b01SJens Wiklander if (dl < src_len) 308d0620b01SJens Wiklander return TEE_ERROR_SHORT_BUFFER; 309d0620b01SJens Wiklander 310d0620b01SJens Wiklander switch (algo) { 311d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 312d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 313d0620b01SJens Wiklander return crypto_aes_ccm_dec_final(ctx, src_data, src_len, 314d0620b01SJens Wiklander dst_data, tag, tag_len); 315d0620b01SJens Wiklander #endif 316d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 317d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 318d0620b01SJens Wiklander return crypto_aes_gcm_dec_final(ctx, src_data, src_len, 319d0620b01SJens Wiklander dst_data, tag, tag_len); 320d0620b01SJens Wiklander #endif 321d0620b01SJens Wiklander default: 3228875ce46SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 3238875ce46SJens Wiklander } 3248875ce46SJens Wiklander } 3258875ce46SJens Wiklander 326d0620b01SJens Wiklander void crypto_authenc_final(void *ctx __maybe_unused, 327d0620b01SJens Wiklander uint32_t algo __maybe_unused) 3288875ce46SJens Wiklander { 329d0620b01SJens Wiklander switch (algo) { 330d0620b01SJens Wiklander #if defined(CFG_CRYPTO_CCM) 331d0620b01SJens Wiklander case TEE_ALG_AES_CCM: 332d0620b01SJens Wiklander crypto_aes_ccm_final(ctx); 333d0620b01SJens Wiklander break; 334d0620b01SJens Wiklander #endif 335d0620b01SJens Wiklander #if defined(CFG_CRYPTO_GCM) 336d0620b01SJens Wiklander case TEE_ALG_AES_GCM: 337d0620b01SJens Wiklander crypto_aes_gcm_final(ctx); 338d0620b01SJens Wiklander break; 339d0620b01SJens Wiklander #endif 340d0620b01SJens Wiklander default: 341d0620b01SJens Wiklander break; 3428875ce46SJens Wiklander } 343d0620b01SJens Wiklander } 34433790cc1SJens Wiklander 34533790cc1SJens Wiklander #if !defined(_CFG_CRYPTO_WITH_ACIPHER) 34633790cc1SJens Wiklander struct bignum *crypto_bignum_allocate(size_t size_bits __unused) 34733790cc1SJens Wiklander { 34833790cc1SJens Wiklander return NULL; 34933790cc1SJens Wiklander } 35033790cc1SJens Wiklander 35133790cc1SJens Wiklander TEE_Result crypto_bignum_bin2bn(const uint8_t *from __unused, 35233790cc1SJens Wiklander size_t fromsize __unused, 35333790cc1SJens Wiklander struct bignum *to __unused) 35433790cc1SJens Wiklander { 35533790cc1SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 35633790cc1SJens Wiklander } 35733790cc1SJens Wiklander 35833790cc1SJens Wiklander size_t crypto_bignum_num_bytes(struct bignum *a __unused) 35933790cc1SJens Wiklander { 36033790cc1SJens Wiklander return 0; 36133790cc1SJens Wiklander } 36233790cc1SJens Wiklander 36333790cc1SJens Wiklander size_t crypto_bignum_num_bits(struct bignum *a __unused) 36433790cc1SJens Wiklander { 36533790cc1SJens Wiklander return 0; 36633790cc1SJens Wiklander } 36733790cc1SJens Wiklander 36833790cc1SJens Wiklander /* 36933790cc1SJens Wiklander * crypto_bignum_allocate() and crypto_bignum_bin2bn() failing should be 37033790cc1SJens Wiklander * enough to guarantee that the functions calling this function aren't 37133790cc1SJens Wiklander * called, but just in case add a panic() here to avoid unexpected 37233790cc1SJens Wiklander * behavoir. 37333790cc1SJens Wiklander */ 37433790cc1SJens Wiklander static void bignum_cant_happen(void) 37533790cc1SJens Wiklander { 37633790cc1SJens Wiklander volatile bool b = true; 37733790cc1SJens Wiklander 37833790cc1SJens Wiklander /* Avoid warning about function does not return */ 37933790cc1SJens Wiklander if (b) 38033790cc1SJens Wiklander panic(); 38133790cc1SJens Wiklander } 38233790cc1SJens Wiklander 38333790cc1SJens Wiklander void crypto_bignum_bn2bin(const struct bignum *from __unused, 38433790cc1SJens Wiklander uint8_t *to __unused) 38533790cc1SJens Wiklander { 38633790cc1SJens Wiklander bignum_cant_happen(); 38733790cc1SJens Wiklander } 38833790cc1SJens Wiklander 38933790cc1SJens Wiklander void crypto_bignum_copy(struct bignum *to __unused, 39033790cc1SJens Wiklander const struct bignum *from __unused) 39133790cc1SJens Wiklander { 39233790cc1SJens Wiklander bignum_cant_happen(); 39333790cc1SJens Wiklander } 39433790cc1SJens Wiklander 39533790cc1SJens Wiklander void crypto_bignum_free(struct bignum *a) 39633790cc1SJens Wiklander { 39733790cc1SJens Wiklander if (a) 39833790cc1SJens Wiklander panic(); 39933790cc1SJens Wiklander } 40033790cc1SJens Wiklander 40133790cc1SJens Wiklander void crypto_bignum_clear(struct bignum *a __unused) 40233790cc1SJens Wiklander { 40333790cc1SJens Wiklander bignum_cant_happen(); 40433790cc1SJens Wiklander } 40533790cc1SJens Wiklander 40633790cc1SJens Wiklander /* return -1 if a<b, 0 if a==b, +1 if a>b */ 40733790cc1SJens Wiklander int32_t crypto_bignum_compare(struct bignum *a __unused, 40833790cc1SJens Wiklander struct bignum *b __unused) 40933790cc1SJens Wiklander { 41033790cc1SJens Wiklander bignum_cant_happen(); 41133790cc1SJens Wiklander return -1; 41233790cc1SJens Wiklander } 41333790cc1SJens Wiklander #endif /*!_CFG_CRYPTO_WITH_ACIPHER*/ 414291e5450SJens Wiklander 415291e5450SJens Wiklander #if !defined(CFG_CRYPTO_RSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER) 416291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_rsa_keypair(struct rsa_keypair *s __unused, 417291e5450SJens Wiklander size_t key_size_bits __unused) 418291e5450SJens Wiklander { 419291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 420291e5450SJens Wiklander } 421291e5450SJens Wiklander 422291e5450SJens Wiklander TEE_Result 423291e5450SJens Wiklander crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s __unused, 424291e5450SJens Wiklander size_t key_size_bits __unused) 425291e5450SJens Wiklander { 426291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 427291e5450SJens Wiklander } 428291e5450SJens Wiklander 429291e5450SJens Wiklander void crypto_acipher_free_rsa_public_key(struct rsa_public_key *s __unused) 430291e5450SJens Wiklander { 431291e5450SJens Wiklander } 432291e5450SJens Wiklander 433291e5450SJens Wiklander TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key __unused, 434291e5450SJens Wiklander size_t key_size __unused) 435291e5450SJens Wiklander { 436291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 437291e5450SJens Wiklander } 438291e5450SJens Wiklander 439291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_decrypt(struct rsa_keypair *key __unused, 440291e5450SJens Wiklander const uint8_t *src __unused, 441291e5450SJens Wiklander size_t src_len __unused, 442291e5450SJens Wiklander uint8_t *dst __unused, 443291e5450SJens Wiklander size_t *dst_len __unused) 444291e5450SJens Wiklander { 445291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 446291e5450SJens Wiklander } 447291e5450SJens Wiklander 448291e5450SJens Wiklander TEE_Result crypto_acipher_rsanopad_encrypt(struct rsa_public_key *key __unused, 449291e5450SJens Wiklander const uint8_t *src __unused, 450291e5450SJens Wiklander size_t src_len __unused, 451291e5450SJens Wiklander uint8_t *dst __unused, 452291e5450SJens Wiklander size_t *dst_len __unused) 453291e5450SJens Wiklander { 454291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 455291e5450SJens Wiklander } 456291e5450SJens Wiklander 457291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_decrypt(uint32_t algo __unused, 458291e5450SJens Wiklander struct rsa_keypair *key __unused, 459291e5450SJens Wiklander const uint8_t *label __unused, 460291e5450SJens Wiklander size_t label_len __unused, 461291e5450SJens Wiklander const uint8_t *src __unused, 462291e5450SJens Wiklander size_t src_len __unused, 463291e5450SJens Wiklander uint8_t *dst __unused, 464291e5450SJens Wiklander size_t *dst_len __unused) 465291e5450SJens Wiklander { 466291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 467291e5450SJens Wiklander } 468291e5450SJens Wiklander 469291e5450SJens Wiklander TEE_Result crypto_acipher_rsaes_encrypt(uint32_t algo __unused, 470291e5450SJens Wiklander struct rsa_public_key *key __unused, 471291e5450SJens Wiklander const uint8_t *label __unused, 472291e5450SJens Wiklander size_t label_len __unused, 473291e5450SJens Wiklander const uint8_t *src __unused, 474291e5450SJens Wiklander size_t src_len __unused, 475291e5450SJens Wiklander uint8_t *dst __unused, 476291e5450SJens Wiklander size_t *dst_len __unused) 477291e5450SJens Wiklander { 478291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 479291e5450SJens Wiklander } 480291e5450SJens Wiklander 481291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_sign(uint32_t algo __unused, 482291e5450SJens Wiklander struct rsa_keypair *key __unused, 483291e5450SJens Wiklander int salt_len __unused, 484291e5450SJens Wiklander const uint8_t *msg __unused, 485291e5450SJens Wiklander size_t msg_len __unused, 486291e5450SJens Wiklander uint8_t *sig __unused, 487291e5450SJens Wiklander size_t *sig_len __unused) 488291e5450SJens Wiklander { 489291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 490291e5450SJens Wiklander } 491291e5450SJens Wiklander 492291e5450SJens Wiklander TEE_Result crypto_acipher_rsassa_verify(uint32_t algo __unused, 493291e5450SJens Wiklander struct rsa_public_key *key __unused, 494291e5450SJens Wiklander int salt_len __unused, 495291e5450SJens Wiklander const uint8_t *msg __unused, 496291e5450SJens Wiklander size_t msg_len __unused, 497291e5450SJens Wiklander const uint8_t *sig __unused, 498291e5450SJens Wiklander size_t sig_len __unused) 499291e5450SJens Wiklander { 500291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 501291e5450SJens Wiklander } 502291e5450SJens Wiklander #endif /*!CFG_CRYPTO_RSA || !_CFG_CRYPTO_WITH_ACIPHER*/ 503291e5450SJens Wiklander 504291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DSA) || !defined(_CFG_CRYPTO_WITH_ACIPHER) 505291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s __unused, 506291e5450SJens Wiklander size_t key_size_bits __unused) 507291e5450SJens Wiklander { 508291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 509291e5450SJens Wiklander } 510291e5450SJens Wiklander 511291e5450SJens Wiklander TEE_Result 512291e5450SJens Wiklander crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s __unused, 513291e5450SJens Wiklander size_t key_size_bits __unused) 514291e5450SJens Wiklander { 515291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 516291e5450SJens Wiklander } 517291e5450SJens Wiklander 518291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dsa_key(struct dsa_keypair *key __unused, 519291e5450SJens Wiklander size_t key_size __unused) 520291e5450SJens Wiklander { 521291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 522291e5450SJens Wiklander } 523291e5450SJens Wiklander 524291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_sign(uint32_t algo __unused, 525291e5450SJens Wiklander struct dsa_keypair *key __unused, 526291e5450SJens Wiklander const uint8_t *msg __unused, 527291e5450SJens Wiklander size_t msg_len __unused, 528291e5450SJens Wiklander uint8_t *sig __unused, 529291e5450SJens Wiklander size_t *sig_len __unused) 530291e5450SJens Wiklander { 531291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 532291e5450SJens Wiklander } 533291e5450SJens Wiklander 534291e5450SJens Wiklander TEE_Result crypto_acipher_dsa_verify(uint32_t algo __unused, 535291e5450SJens Wiklander struct dsa_public_key *key __unused, 536291e5450SJens Wiklander const uint8_t *msg __unused, 537291e5450SJens Wiklander size_t msg_len __unused, 538291e5450SJens Wiklander const uint8_t *sig __unused, 539291e5450SJens Wiklander size_t sig_len __unused) 540291e5450SJens Wiklander { 541291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 542291e5450SJens Wiklander } 543291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DSA || !_CFG_CRYPTO_WITH_ACIPHER*/ 544291e5450SJens Wiklander 545291e5450SJens Wiklander #if !defined(CFG_CRYPTO_DH) || !defined(_CFG_CRYPTO_WITH_ACIPHER) 546291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s __unused, 547291e5450SJens Wiklander size_t key_size_bits __unused) 548291e5450SJens Wiklander { 549291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 550291e5450SJens Wiklander } 551291e5450SJens Wiklander 552291e5450SJens Wiklander TEE_Result crypto_acipher_gen_dh_key(struct dh_keypair *key __unused, 553291e5450SJens Wiklander struct bignum *q __unused, 554291e5450SJens Wiklander size_t xbits __unused) 555291e5450SJens Wiklander { 556291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 557291e5450SJens Wiklander } 558291e5450SJens Wiklander 559291e5450SJens Wiklander TEE_Result 560291e5450SJens Wiklander crypto_acipher_dh_shared_secret(struct dh_keypair *private_key __unused, 561291e5450SJens Wiklander struct bignum *public_key __unused, 562291e5450SJens Wiklander struct bignum *secret __unused) 563291e5450SJens Wiklander { 564291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 565291e5450SJens Wiklander } 566291e5450SJens Wiklander #endif /*!CFG_CRYPTO_DH || !_CFG_CRYPTO_WITH_ACIPHER*/ 567291e5450SJens Wiklander 568291e5450SJens Wiklander #if !defined(CFG_CRYPTO_ECC) || !defined(_CFG_CRYPTO_WITH_ACIPHER) 569291e5450SJens Wiklander TEE_Result 570291e5450SJens Wiklander crypto_acipher_alloc_ecc_public_key(struct ecc_public_key *s __unused, 571291e5450SJens Wiklander size_t key_size_bits __unused) 572291e5450SJens Wiklander { 573291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 574291e5450SJens Wiklander } 575291e5450SJens Wiklander 576291e5450SJens Wiklander TEE_Result crypto_acipher_alloc_ecc_keypair(struct ecc_keypair *s __unused, 577291e5450SJens Wiklander size_t key_size_bits __unused) 578291e5450SJens Wiklander { 579291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 580291e5450SJens Wiklander } 581291e5450SJens Wiklander 582291e5450SJens Wiklander void crypto_acipher_free_ecc_public_key(struct ecc_public_key *s __unused) 583291e5450SJens Wiklander { 584291e5450SJens Wiklander } 585291e5450SJens Wiklander 586291e5450SJens Wiklander TEE_Result crypto_acipher_gen_ecc_key(struct ecc_keypair *key __unused) 587291e5450SJens Wiklander { 588291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 589291e5450SJens Wiklander } 590291e5450SJens Wiklander 591291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_sign(uint32_t algo __unused, 592291e5450SJens Wiklander struct ecc_keypair *key __unused, 593291e5450SJens Wiklander const uint8_t *msg __unused, 594291e5450SJens Wiklander size_t msg_len __unused, 595291e5450SJens Wiklander uint8_t *sig __unused, 596291e5450SJens Wiklander size_t *sig_len __unused) 597291e5450SJens Wiklander { 598291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 599291e5450SJens Wiklander } 600291e5450SJens Wiklander 601291e5450SJens Wiklander TEE_Result crypto_acipher_ecc_verify(uint32_t algo __unused, 602291e5450SJens Wiklander struct ecc_public_key *key __unused, 603291e5450SJens Wiklander const uint8_t *msg __unused, 604291e5450SJens Wiklander size_t msg_len __unused, 605291e5450SJens Wiklander const uint8_t *sig __unused, 606291e5450SJens Wiklander size_t sig_len __unused) 607291e5450SJens Wiklander { 608291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 609291e5450SJens Wiklander } 610291e5450SJens Wiklander 611291e5450SJens Wiklander TEE_Result 612291e5450SJens Wiklander crypto_acipher_ecc_shared_secret(struct ecc_keypair *private_key __unused, 613291e5450SJens Wiklander struct ecc_public_key *public_key __unused, 614291e5450SJens Wiklander void *secret __unused, 615291e5450SJens Wiklander unsigned long *secret_len __unused) 616291e5450SJens Wiklander { 617291e5450SJens Wiklander return TEE_ERROR_NOT_IMPLEMENTED; 618291e5450SJens Wiklander } 619291e5450SJens Wiklander #endif /*!CFG_CRYPTO_ECC || !_CFG_CRYPTO_WITH_ACIPHER*/ 620