• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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