• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (C) 2022-2024 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 HCF_PARAMS_PARSER_H
17 #define HCF_PARAMS_PARSER_H
18 
19 #include <stdint.h>
20 #include "result.h"
21 
22 typedef enum {
23     HCF_ALG_TYPE = 1,
24     HCF_ALG_KEY_TYPE,
25     HCF_ALG_MODE,
26     HCF_ALG_PADDING_TYPE,
27     HCF_ALG_PRIMES,
28     HCF_ALG_DIGEST,
29     HCF_ALG_MGF1_DIGEST,
30     HCF_ALG_TEXT_FORMAT,
31     HCF_ALG_SIGN_TYPE,
32     HCF_ALG_VERIFY_TYPE,
33 } HcfAlgParaType;
34 
35 typedef enum {
36     HCF_ALG_AES = 1,
37     HCF_ALG_DES,
38     HCF_ALG_3DES,
39     HCF_ALG_RSA,
40     HCF_ALG_ECC,
41     HCF_ALG_DSA,
42     HCF_ALG_SM2,
43     HCF_ALG_SM4,
44     HCF_ALG_HMAC,
45     HCF_ALG_PKBDF2,
46     HCF_ALG_ECC_BRAINPOOL,
47     HCF_ALG_ED25519,
48     HCF_ALG_X25519,
49     HCF_ALG_DH,
50     HCF_ALG_HKDF,
51     HCF_ALG_SCRYPT,
52 } HcfAlgValue;
53 
54 typedef enum {
55     HCF_ALG_ECC_224 = 1,
56     HCF_ALG_ECC_256,
57     HCF_ALG_ECC_384,
58     HCF_ALG_ECC_521,
59 
60     HCF_ALG_AES_128,
61     HCF_ALG_AES_192,
62     HCF_ALG_AES_256,
63     HCF_ALG_SM4_128,
64     HCF_ALG_DES_64,
65     HCF_ALG_3DES_192,
66 
67     HCF_ALG_MODE_NONE,
68     HCF_ALG_MODE_ECB,
69     HCF_ALG_MODE_CBC,
70     HCF_ALG_MODE_CTR,
71     HCF_ALG_MODE_OFB,
72     HCF_ALG_MODE_CFB,
73     HCF_ALG_MODE_CFB1,
74     HCF_ALG_MODE_CFB8,
75     HCF_ALG_MODE_CFB64,
76     HCF_ALG_MODE_CFB128,
77     HCF_ALG_MODE_CCM,
78     HCF_ALG_MODE_GCM,
79 
80     HCF_ALG_NOPADDING,
81     HCF_ALG_PADDING_PKCS5,
82     HCF_ALG_PADDING_PKCS7,
83 
84     // rsa keysize
85     HCF_OPENSSL_RSA_512,
86     HCF_OPENSSL_RSA_768,
87     HCF_OPENSSL_RSA_1024,
88     HCF_OPENSSL_RSA_2048,
89     HCF_OPENSSL_RSA_3072,
90     HCF_OPENSSL_RSA_4096,
91     HCF_OPENSSL_RSA_8192,
92 
93     // rsa cipher padding,
94     HCF_OPENSSL_RSA_PKCS1_PADDING,
95     HCF_OPENSSL_RSA_PKCS1_OAEP_PADDING,
96     HCF_OPENSSL_RSA_PSS_PADDING,
97 
98     // digest
99     HCF_OPENSSL_DIGEST_NONE,
100     HCF_OPENSSL_DIGEST_MD5,
101     HCF_OPENSSL_DIGEST_SM3,
102     HCF_OPENSSL_DIGEST_SHA1,
103     HCF_OPENSSL_DIGEST_SHA224,
104     HCF_OPENSSL_DIGEST_SHA256,
105     HCF_OPENSSL_DIGEST_SHA384,
106     HCF_OPENSSL_DIGEST_SHA512,
107 
108     // primes
109     HCF_OPENSSL_PRIMES_2,
110     HCF_OPENSSL_PRIMES_3,
111     HCF_OPENSSL_PRIMES_4,
112     HCF_OPENSSL_PRIMES_5,
113 
114     // dsa
115     HCF_ALG_DSA_1024,
116     HCF_ALG_DSA_2048,
117     HCF_ALG_DSA_3072,
118 
119     // sm2
120     HCF_ALG_SM2_256,
121 
122     // only for algName(NO SIZE)
123     HCF_ALG_DSA_DEFAULT,
124     HCF_ALG_RSA_DEFAULT,
125     HCF_ALG_ECC_DEFAULT,
126     HCF_ALG_SM2_DEFAULT,
127     HCF_ALG_AES_DEFAULT,
128     HCF_ALG_SM4_DEFAULT,
129     HCF_ALG_DES_DEFAULT,
130     HCF_ALG_3DES_DEFAULT,
131     HCF_ALG_HMAC_DEFAULT,
132     HCF_ALG_ECC_BRAINPOOL_DEFAULT,
133     HCF_ALG_X25519_DEFAULT,
134     HCF_ALG_DH_DEFAULT,
135 
136     // key derivation function, PBKDF2
137     HCF_ALG_PBKDF2_DEFAULT,
138 
139     // sm2 text format
140     HCF_ALG_TEXT_FORMAT_C1C3C2,
141     HCF_ALG_TEXT_FORMAT_C1C2C3,
142 
143     // brainpool
144     HCF_ALG_ECC_BP160R1,
145     HCF_ALG_ECC_BP160T1,
146     HCF_ALG_ECC_BP192R1,
147     HCF_ALG_ECC_BP192T1,
148     HCF_ALG_ECC_BP224R1,
149     HCF_ALG_ECC_BP224T1,
150     HCF_ALG_ECC_BP256R1,
151     HCF_ALG_ECC_BP256T1,
152     HCF_ALG_ECC_BP320R1,
153     HCF_ALG_ECC_BP320T1,
154     HCF_ALG_ECC_BP384R1,
155     HCF_ALG_ECC_BP384T1,
156     HCF_ALG_ECC_BP512R1,
157     HCF_ALG_ECC_BP512T1,
158 
159     HCF_ALG_ECC_SECP256K1,
160 
161     // ed25519
162     HCF_ALG_ED25519_256,
163     HCF_ALG_X25519_256,
164 
165     // DH keysize
166     HCF_OPENSSL_DH_MODP_1536,
167     HCF_OPENSSL_DH_MODP_2048,
168     HCF_OPENSSL_DH_MODP_3072,
169     HCF_OPENSSL_DH_MODP_4096,
170     HCF_OPENSSL_DH_MODP_6144,
171     HCF_OPENSSL_DH_MODP_8192,
172     HCF_OPENSSL_DH_FFDHE_2048,
173     HCF_OPENSSL_DH_FFDHE_3072,
174     HCF_OPENSSL_DH_FFDHE_4096,
175     HCF_OPENSSL_DH_FFDHE_6144,
176     HCF_OPENSSL_DH_FFDHE_8192,
177 
178     HCF_ALG_ONLY_SIGN,
179     HCF_ALG_VERIFY_RECOVER,
180     // key derivation function, HKDF
181     HCF_ALG_HKDF_DEFAULT,
182     HCF_ALG_SCRYPT_DEFAULT,
183 
184     // hkdf mode
185     HCF_ALG_MODE_EXTRACT_AND_EXPAND,
186     HCF_ALG_MODE_EXTRACT_ONLY,
187     HCF_ALG_MODE_EXPAND_ONLY,
188 } HcfAlgParaValue;
189 
190 typedef enum {
191     HCF_OPERATIOPN_ONLY_SIGN = 1,
192     HCF_OPERATION_SIGN,
193 } HcfSignParams;
194 
195 typedef enum {
196     HCF_UNCOMPRESSED_FORMAT_VALUE = 1,
197     HCF_COMPRESSED_FORMAT_VALUE,
198 } HcfFormatValue;
199 
200 typedef struct {
201     const char *formatName;
202     HcfFormatValue formatValue;
203 } HcfFormatMap;
204 
205 typedef struct {
206     const char *tag;
207     HcfAlgParaType paraType;
208     HcfAlgParaValue paraValue;
209 } HcfParaConfig;
210 
211 typedef struct {
212     const char *algNameStr;
213     HcfAlgValue algValue;
214 } HcfAlgMap;
215 
216 typedef struct {
217     const char *curveNameStr;
218     HcfAlgParaValue algValue;
219 } HcfCurveMap;
220 
221 typedef struct {
222     HcfAlgValue algo;
223     HcfAlgParaValue keySize;
224     HcfAlgParaValue mode;
225     HcfAlgParaValue paddingMode;
226     HcfAlgParaValue md;
227     HcfAlgParaValue mgf1md;
228 } CipherAttr;
229 
230 typedef struct {
231     HcfAlgValue algo; // algType
232     int32_t bits; // keyLen
233     int32_t primes; // number of primes
234 } HcfAsyKeyGenParams;
235 
236 typedef struct {
237     HcfAlgValue algo; // algType
238     HcfAlgParaValue padding;
239     HcfAlgParaValue md;
240     HcfAlgParaValue mgf1md;
241     HcfAlgParaValue operation;
242 } HcfSignatureParams;
243 
244 typedef struct {
245     HcfAlgValue algo;
246 } HcfKeyAgreementParams;
247 
248 typedef struct {
249     HcfAlgValue algo; // algType
250     HcfAlgParaValue md;
251     HcfAlgParaValue mode;
252 } HcfKdfDeriveParams;
253 
254 typedef HcfResult (*SetParameterFunc) (const HcfParaConfig* config, void *params);
255 
256 #ifdef __cplusplus
257 extern "C" {
258 #endif
259 
260 HcfResult ParseAndSetParameter(const char *paramsStr, void *params, SetParameterFunc setFunc);
261 
262 HcfResult ParseAlgNameToParams(const char *algNameStr, HcfAsyKeyGenParams *params);
263 
264 HcfResult ParseCurveNameToParams(const char *curveNameStr, HcfAsyKeyGenParams *params);
265 
266 HcfResult GetAlgValueByCurveName(const char *curveNameStr, HcfAlgParaValue *algValue);
267 
268 HcfResult GetFormatValueByFormatName(const char *formatName, HcfFormatValue *formatValue);
269 
270 #ifdef __cplusplus
271 }
272 #endif
273 #endif
274