• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef HKS_ABILITY_H
17 #define HKS_ABILITY_H
18 
19 #include <stdint.h>
20 
21 enum HksAbilityType {
22     HKS_ABILITY_CRYPTO = 1,
23     HKS_ABILITY_AUTH,
24 };
25 
26 enum HksOperationType {
27     HKS_OPERATION_GENERATE_KEY = 0x1,    /* generate key */
28     HKS_OPERATION_GET_PUBLIC_KEY = 0x2,  /* get public key */
29     HKS_OPERATION_DERIVE_KEY = 0x3,      /* derive key */
30     HKS_OPERATION_AGREE_KEY = 0x4,       /* agree key */
31     HKS_OPERATION_SIGN = 0x5,            /* sign */
32     HKS_OPERATION_VERIFY = 0x6,          /* verify */
33     HKS_OPERATION_HMAC_INIT = 0x7,       /* hmac init */
34     HKS_OPERATION_HMAC_UPDATE = 0x8,     /* hmac update */
35     HKS_OPERATION_HMAC_FINAL = 0x9,      /* hmac final */
36     HKS_OPERATION_HASH_INIT = 0xa,       /* hash init */
37     HKS_OPERATION_HASH_UPDATE = 0xb,     /* hash update */
38     HKS_OPERATION_HASH_FINAL = 0xc,      /* hash final */
39     HKS_OPERATION_ENCRYPT_INIT = 0xd,    /* encrypt init */
40     HKS_OPERATION_ENCRYPT_UPDATE = 0xe,  /* encrypt update */
41     HKS_OPERATION_ENCRYPT_FINAL = 0xf,   /* encrypt final */
42     HKS_OPERATION_DECRYPT_INIT = 0x10,   /* decrypt init */
43     HKS_OPERATION_DECRYPT_UPDATE = 0x11, /* decrypt update */
44     HKS_OPERATION_DECRYPT_FINAL = 0x12,  /* decrypt final */
45     HKS_OPERATION_GET_MAIN_KEY = 0x13,   /* get root main key */
46     HKS_OPERATION_FILL_RANDOM = 0x14,    /* fill random */
47     HKS_OPERATION_HMAC = 0x15,
48     HKS_OPERATION_HASH = 0x16,
49     HKS_OPERATION_ENCRYPT = 0x17,
50     HKS_OPERATION_DECRYPT = 0x18,
51     HKS_OPERATION_BN_EXP_MOD = 0x19,
52     HKS_OPERATION_HASH_FREE_CTX = 0x1a,                        /* hash free ctx */
53     HKS_OPERATION_HMAC_FREE_CTX = 0x1b,                        /* hmac free ctx */
54     HKS_OPERATION_ENCRYPT_FREE_CTX = 0x1c,                     /* encrypt free ctx */
55     HKS_OPERATION_DECRYPT_FREE_CTX = 0x1d,                     /* decrypt free ctx */
56     HKS_OPERATION_FILL_PRI_RANDOM = 0x1e,                      /* fill private random */
57     HKS_OPERATION_CHIPSET_PLATFORM_DERIVE_KEY_AND_ECDH = 0x1f, /* hardcoded key implementation did not use the enum */
58                                                                /* see hks_chipset_platform_key_hardcoded.c */
59     HKS_OPERATION_CHIPSET_PLATFORM_DERIVE_PUB_KEY = 0x20,      /* hardcoded key implementation did not use the enum */
60                                                                /* see hks_chipset_platform_key_hardcoded.c */
61     HKS_OPERATION_CMAC_INIT = 0x21,                            /* cmac init */
62     HKS_OPERATION_CMAC_UPDATE = 0x22,                          /* cmac update */
63     HKS_OPERATION_CMAC_FINAL = 0x23,                           /* cmac final */
64     HKS_OPERATION_CMAC_FREE_CTX = 0x24,                        /* cmac free ctx */
65     HKS_OPERATION_SIGN_ISO_IEC_9796_2 = 0x25,                  /* sign ISO/IEC 9796-2 */
66     HKS_OPERATION_VERIFY_ISO_IEC_9796_2 = 0x26,                /* verify ISO/IEC 9796-2 */
67 };
68 
69 struct HksAbility {
70     uint32_t id;
71     void *func;
72 };
73 
74 #define HKS_ABILITY_MAX_SIZE 128
75 
76 #define HKS_ABILITY_SHIFT 24
77 #define HKS_CRYPTO_OPERATION_SHIFT 16
78 
79 #define HKS_CRYPTO_ABILITY(type, alg) \
80     ((HKS_ABILITY_CRYPTO << HKS_ABILITY_SHIFT) | ((type) << HKS_CRYPTO_OPERATION_SHIFT) | (alg))
81 
82 #define HKS_CRYPTO_ABILITY_GENERATE_KEY(alg)    HKS_CRYPTO_ABILITY(HKS_OPERATION_GENERATE_KEY, alg)
83 #define HKS_CRYPTO_ABILITY_GET_PUBLIC_KEY(alg)  HKS_CRYPTO_ABILITY(HKS_OPERATION_GET_PUBLIC_KEY, alg)
84 #define HKS_CRYPTO_ABILITY_DERIVE_KEY(alg)      HKS_CRYPTO_ABILITY(HKS_OPERATION_DERIVE_KEY, alg)
85 #define HKS_CRYPTO_ABILITY_AGREE_KEY(alg)       HKS_CRYPTO_ABILITY(HKS_OPERATION_AGREE_KEY, alg)
86 #define HKS_CRYPTO_ABILITY_SIGN(alg)            HKS_CRYPTO_ABILITY(HKS_OPERATION_SIGN, alg)
87 #define HKS_CRYPTO_ABILITY_VERIFY(alg)          HKS_CRYPTO_ABILITY(HKS_OPERATION_VERIFY, alg)
88 
89 #define HKS_CRYPTO_ABILITY_SIGN_ISO_IEC_9796_2  HKS_CRYPTO_ABILITY(HKS_OPERATION_SIGN_ISO_IEC_9796_2, 0)
90 #define HKS_CRYPTO_ABILITY_VERIFY_ISO_IEC_9796_2  HKS_CRYPTO_ABILITY(HKS_OPERATION_VERIFY_ISO_IEC_9796_2, 0)
91 
92 #define HKS_CRYPTO_ABILITY_HMAC                 HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC, 0)
93 #define HKS_CRYPTO_ABILITY_HMAC_INIT            HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC_INIT, 0)
94 #define HKS_CRYPTO_ABILITY_HMAC_UPDATE          HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC_UPDATE, 0)
95 #define HKS_CRYPTO_ABILITY_HMAC_FINAL           HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC_FINAL, 0)
96 #define HKS_CRYPTO_ABILITY_HMAC_FREE_CTX        HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC_FREE_CTX, 0)
97 
98 #define HKS_CRYPTO_ABILITY_CMAC_INIT            HKS_CRYPTO_ABILITY(HKS_OPERATION_CMAC_INIT, 0)
99 #define HKS_CRYPTO_ABILITY_CMAC_UPDATE          HKS_CRYPTO_ABILITY(HKS_OPERATION_CMAC_UPDATE, 0)
100 #define HKS_CRYPTO_ABILITY_CMAC_FINAL           HKS_CRYPTO_ABILITY(HKS_OPERATION_CMAC_FINAL, 0)
101 #define HKS_CRYPTO_ABILITY_CMAC_FREE_CTX        HKS_CRYPTO_ABILITY(HKS_OPERATION_CMAC_FREE_CTX, 0)
102 
103 #define HKS_CRYPTO_ABILITY_HASH                 HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH, 0)
104 #define HKS_CRYPTO_ABILITY_HASH_INIT            HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH_INIT, 0)
105 #define HKS_CRYPTO_ABILITY_HASH_UPDATE          HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH_UPDATE, 0)
106 #define HKS_CRYPTO_ABILITY_HASH_FINAL           HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH_FINAL, 0)
107 #define HKS_CRYPTO_ABILITY_HASH_FREE_CTX        HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH_FREE_CTX, 0)
108 
109 #define HKS_CRYPTO_ABILITY_ENCRYPT(alg)         HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT, alg)
110 #define HKS_CRYPTO_ABILITY_ENCRYPT_INIT(alg)    HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT_INIT, alg)
111 #define HKS_CRYPTO_ABILITY_ENCRYPT_UPDATE(alg)  HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT_UPDATE, alg)
112 #define HKS_CRYPTO_ABILITY_ENCRYPT_FINAL(alg)   HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT_FINAL, alg)
113 #define HKS_CRYPTO_ABILITY_ENCRYPT_FREE_CTX(alg)   HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT_FREE_CTX, alg)
114 
115 #define HKS_CRYPTO_ABILITY_DECRYPT(alg)         HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT, alg)
116 #define HKS_CRYPTO_ABILITY_DECRYPT_INIT(alg)    HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT_INIT, alg)
117 #define HKS_CRYPTO_ABILITY_DECRYPT_UPDATE(alg)  HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT_UPDATE, alg)
118 #define HKS_CRYPTO_ABILITY_DECRYPT_FINAL(alg)   HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT_FINAL, alg)
119 #define HKS_CRYPTO_ABILITY_DECRYPT_FREE_CTX(alg)   HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT_FREE_CTX, alg)
120 
121 #define HKS_CRYPTO_ABILITY_GET_MAIN_KEY         HKS_CRYPTO_ABILITY(HKS_OPERATION_GET_MAIN_KEY, 0)
122 
123 #define HKS_CRYPTO_ABILITY_FILL_RANDOM          HKS_CRYPTO_ABILITY(HKS_OPERATION_FILL_RANDOM, 0)
124 #define HKS_CRYPTO_ABILITY_BN_EXP_MOD           HKS_CRYPTO_ABILITY(HKS_OPERATION_BN_EXP_MOD, 0)
125 #define HKS_CRYPTO_ABILITY_FILL_PRI_RANDOM          HKS_CRYPTO_ABILITY(HKS_OPERATION_FILL_PRI_RANDOM, 0)
126 
127 #ifdef __cplusplus
128 extern "C" {
129 #endif
130 
131 int32_t RegisterAbility(uint32_t id, void *func);
132 
133 void *GetAbility(uint32_t id);
134 
135 int32_t HksCryptoAbilityInit(void);
136 
137 #ifdef __cplusplus
138 }
139 #endif
140 
141 #endif /* HKS_ABILITY_H */
142