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