1 /* 2 * Copyright (C) 2022 Huawei Technologies Co., Ltd. 3 * Licensed under the Mulan PSL v2. 4 * You can use this software according to the terms and conditions of the Mulan PSL v2. 5 * You may obtain a copy of Mulan PSL v2 at: 6 * http://license.coscl.org.cn/MulanPSL2 7 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR 8 * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR 9 * PURPOSE. 10 * See the Mulan PSL v2 for more details. 11 */ 12 #ifndef CRYPTO_MGR_SYSCALL_H 13 #define CRYPTO_MGR_SYSCALL_H 14 15 #include <stdint.h> 16 #include <stdbool.h> 17 #include "tee_driver_module.h" 18 19 #define AES_MAC_LEN 16 20 #define CIPHER_CACHE_LEN 16 21 #define CACHED_RANDOM_SIZE 4096 22 #define ONE_BLOCK_SIZE 16 23 #define TOTAL_RANDOM_BLOCK (CACHED_RANDOM_SIZE / ONE_BLOCK_SIZE) 24 25 #define CRYPTO_SECRET_OFFSET_0 0 26 #define CRYPTO_SIGNATURE_OFFSET_0 0 27 #define CRYPTO_DATA_OUT_OFFSET_0 0 28 #define CRYPTO_DATA_OUT_OFFSET_1 1 29 #define CRYPTO_E_VALUE_OFFSET_1 1 30 #define CRYPTO_TAG_OUT_OFFSET_1 1 31 #define CRYPTO_TAG_OUT_OFFSET_2 2 32 #define CRYPTO_IV_OFFSET_1 1 33 #define CRYPTO_IV_OFFSET_2 2 34 #define CRYPTO_IV_OFFSET_3 3 35 #define CRYPTO_PARAM_COUNT_1 1 36 #define CRYPTO_PARAM_COUNT_2 2 37 #define CRYPTO_PARAM_COUNT_3 3 38 #define CRYPTO_PARAM_COUNT_4 4 39 #define CRYPTO_PARAM_COUNT_5 5 40 #define CRYPTO_PARAM_COUNT_MAX 5 41 #define SHARE_MEMORY_MAX_SIZE (10 * 1024 * 1024) /* shared mem max size 10M */ 42 #define INVALID_MEMORY_SIZE 0xFFFFFFFF 43 #define MAX_CRYPTO_CTX_SIZE (1024 * 1024) 44 #define DATA_SIZE_MAX 512 45 46 struct crypto_ioctl { 47 uint64_t buf; 48 uint32_t buf_len; 49 uint32_t total_nums; 50 uint8_t data_1[DATA_SIZE_MAX]; 51 uint8_t data_2[DATA_SIZE_MAX]; 52 uint32_t data_size_1; 53 uint32_t data_size_2; 54 uint32_t arg1; 55 uint32_t arg2; 56 uint32_t arg3; 57 uint32_t arg4; 58 uint32_t arg5; 59 uint32_t arg6; 60 uint32_t arg7; 61 uint32_t arg8; 62 }; 63 64 /* CRYPTO HAL */ 65 enum crypto_hal { 66 IOCTRL_CRYPTO_BASE = 0xc700, 67 IOCTRL_CRYPTO_GET_CTX_SIZE = 0xc701, 68 IOCTRL_CRYPTO_CTX_COPY = 0xc702, 69 IOCTRL_CRYPTO_HASH_INIT = 0xc703, 70 IOCTRL_CRYPTO_HASH_UPDATE = 0xc704, 71 IOCTRL_CRYPTO_HASH_DOFINAL = 0xc705, 72 IOCTRL_CRYPTO_HASH = 0xc706, 73 IOCTRL_CRYPTO_HMAC_INIT = 0xc707, 74 IOCTRL_CRYPTO_HMAC_UPDATE = 0xc708, 75 IOCTRL_CRYPTO_HMAC_DOFINAL = 0xc709, 76 IOCTRL_CRYPTO_HMAC = 0xc70a, 77 IOCTRL_CRYPTO_CIPHER_INIT = 0xc70b, 78 IOCTRL_CRYPTO_CIPHER_UPDATE = 0xc70c, 79 IOCTRL_CRYPTO_CIPHER_DOFINAL = 0xc70d, 80 IOCTRL_CRYPTO_CIPHER = 0xc70e, 81 IOCTRL_CRYPTO_AE_INIT = 0xc70f, 82 IOCTRL_CRYPTO_AE_UPDATE_AAD = 0xc710, 83 IOCTRL_CRYPTO_AE_UPDATE = 0xc711, 84 IOCTRL_CRYPTO_AE_ENC_FINAL = 0xc712, 85 IOCTRL_CRYPTO_AE_DEC_FINAL = 0xc713, 86 IOCTRL_CRYPTO_RSA_GENERATE_KEYPAIR = 0xc714, 87 IOCTRL_CRYPTO_RSA_ENCRYPT = 0xc715, 88 IOCTRL_CRYPTO_RSA_DECRYPT = 0xc716, 89 IOCTRL_CRYPTO_RSA_SIGN_DIGEST = 0xc717, 90 IOCTRL_CRYPTO_RSA_VERIFY_DIGEST = 0xc718, 91 IOCTRL_CRYPTO_ECC_GENERATE_KEYPAIR = 0xc719, 92 IOCTRL_CRYPTO_ECC_ENCRYPT = 0xc71a, 93 IOCTRL_CRYPTO_ECC_DECRYPT = 0xc71b, 94 IOCTRL_CRYPTO_ECC_SIGN_DIGEST = 0xc71c, 95 IOCTRL_CRYPTO_ECC_VERIFY_DIGEST = 0xc71d, 96 IOCTRL_CRYPTO_ECDH_DERIVE_KEY = 0xc71e, 97 IOCTRL_CRYPTO_DH_GENERATE_KEY = 0xc71f, 98 IOCTRL_CRYPTO_DH_DERIVE_KEY = 0xc720, 99 IOCTRL_CRYPTO_GENERATE_RANDOM = 0xc721, 100 IOCTRL_CRYPTO_DERIVE_ROOT_KEY = 0xc722, 101 IOCTRL_CRYPTO_PBKDF2 = 0xc723, 102 IOCTRL_CRYPTO_GET_DRV_ABILITY = 0xc724, 103 IOCTRL_CRYPTO_GET_ENTROPY = 0xc725, 104 IOCTRL_CRYPTO_LOAD_DRV = 0xc726, 105 IOCTRL_CRYPTO_CHECK_ALG_SUPPORT = 0xc727, 106 IOCTRL_CRYPTO_GET_OEMKEY = 0xc728, 107 IOCTRL_CRYPTO_MAX = 0xc729 108 }; 109 110 int32_t crypto_ioctl_func(const struct drv_data *drv, uint32_t cmd, unsigned long args, uint32_t args_len); 111 uint8_t *get_ctx_ctx_buf(void); 112 int32_t crypto_ioctl_suspend(void); 113 int32_t crypto_ioctl_resume(void); 114 115 #endif 116