• 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 };
58 
59 struct HksAbility {
60     uint32_t id;
61     void *func;
62 };
63 
64 #define HKS_ABILITY_MAX_SIZE 128
65 
66 #define HKS_ABILITY_SHIFT 24
67 #define HKS_CRYPTO_OPERATION_SHIFT 16
68 
69 #define HKS_CRYPTO_ABILITY(type, alg) \
70     ((HKS_ABILITY_CRYPTO << HKS_ABILITY_SHIFT) | ((type) << HKS_CRYPTO_OPERATION_SHIFT) | (alg))
71 
72 #define HKS_CRYPTO_ABILITY_GENERATE_KEY(alg)    HKS_CRYPTO_ABILITY(HKS_OPERATION_GENERATE_KEY, alg)
73 #define HKS_CRYPTO_ABILITY_GET_PUBLIC_KEY(alg)  HKS_CRYPTO_ABILITY(HKS_OPERATION_GET_PUBLIC_KEY, alg)
74 #define HKS_CRYPTO_ABILITY_DERIVE_KEY(alg)      HKS_CRYPTO_ABILITY(HKS_OPERATION_DERIVE_KEY, alg)
75 #define HKS_CRYPTO_ABILITY_AGREE_KEY(alg)       HKS_CRYPTO_ABILITY(HKS_OPERATION_AGREE_KEY, alg)
76 #define HKS_CRYPTO_ABILITY_SIGN(alg)            HKS_CRYPTO_ABILITY(HKS_OPERATION_SIGN, alg)
77 #define HKS_CRYPTO_ABILITY_VERIFY(alg)          HKS_CRYPTO_ABILITY(HKS_OPERATION_VERIFY, alg)
78 
79 #define HKS_CRYPTO_ABILITY_HMAC                 HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC, 0)
80 #define HKS_CRYPTO_ABILITY_HMAC_INIT            HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC_INIT, 0)
81 #define HKS_CRYPTO_ABILITY_HMAC_UPDATE          HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC_UPDATE, 0)
82 #define HKS_CRYPTO_ABILITY_HMAC_FINAL           HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC_FINAL, 0)
83 #define HKS_CRYPTO_ABILITY_HMAC_FREE_CTX        HKS_CRYPTO_ABILITY(HKS_OPERATION_HMAC_FREE_CTX, 0)
84 
85 #define HKS_CRYPTO_ABILITY_HASH                 HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH, 0)
86 #define HKS_CRYPTO_ABILITY_HASH_INIT            HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH_INIT, 0)
87 #define HKS_CRYPTO_ABILITY_HASH_UPDATE          HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH_UPDATE, 0)
88 #define HKS_CRYPTO_ABILITY_HASH_FINAL           HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH_FINAL, 0)
89 #define HKS_CRYPTO_ABILITY_HASH_FREE_CTX        HKS_CRYPTO_ABILITY(HKS_OPERATION_HASH_FREE_CTX, 0)
90 
91 #define HKS_CRYPTO_ABILITY_ENCRYPT(alg)         HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT, alg)
92 #define HKS_CRYPTO_ABILITY_ENCRYPT_INIT(alg)    HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT_INIT, alg)
93 #define HKS_CRYPTO_ABILITY_ENCRYPT_UPDATE(alg)  HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT_UPDATE, alg)
94 #define HKS_CRYPTO_ABILITY_ENCRYPT_FINAL(alg)   HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT_FINAL, alg)
95 #define HKS_CRYPTO_ABILITY_ENCRYPT_FREE_CTX(alg)   HKS_CRYPTO_ABILITY(HKS_OPERATION_ENCRYPT_FREE_CTX, alg)
96 
97 #define HKS_CRYPTO_ABILITY_DECRYPT(alg)         HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT, alg)
98 #define HKS_CRYPTO_ABILITY_DECRYPT_INIT(alg)    HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT_INIT, alg)
99 #define HKS_CRYPTO_ABILITY_DECRYPT_UPDATE(alg)  HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT_UPDATE, alg)
100 #define HKS_CRYPTO_ABILITY_DECRYPT_FINAL(alg)   HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT_FINAL, alg)
101 #define HKS_CRYPTO_ABILITY_DECRYPT_FREE_CTX(alg)   HKS_CRYPTO_ABILITY(HKS_OPERATION_DECRYPT_FREE_CTX, alg)
102 
103 #define HKS_CRYPTO_ABILITY_GET_MAIN_KEY         HKS_CRYPTO_ABILITY(HKS_OPERATION_GET_MAIN_KEY, 0)
104 
105 #define HKS_CRYPTO_ABILITY_FILL_RANDOM          HKS_CRYPTO_ABILITY(HKS_OPERATION_FILL_RANDOM, 0)
106 #define HKS_CRYPTO_ABILITY_BN_EXP_MOD           HKS_CRYPTO_ABILITY(HKS_OPERATION_BN_EXP_MOD, 0)
107 #define HKS_CRYPTO_ABILITY_FILL_PRI_RANDOM          HKS_CRYPTO_ABILITY(HKS_OPERATION_FILL_PRI_RANDOM, 0)
108 
109 #ifdef __cplusplus
110 extern "C" {
111 #endif
112 
113 int32_t RegisterAbility(uint32_t id, void *func);
114 
115 void *GetAbility(uint32_t id);
116 
117 int32_t HksCryptoAbilityInit(void);
118 
119 #ifdef __cplusplus
120 }
121 #endif
122 
123 #endif /* HKS_ABILITY_H */
124