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