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