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 #include <string>
17 #include "securec.h"
18 
19 #include "asy_key_generator.h"
20 #include "detailed_ecc_key_params.h"
21 #include "ecc_asy_key_common.h"
22 #include "ecc_asy_key_generator_openssl.h"
23 #include "ecc_openssl_common.h"
24 #include "ecc_openssl_common_param_spec.h"
25 #include "ecc_common.h"
26 #include "blob.h"
27 #include "memory_mock.h"
28 #include "openssl_adapter_mock.h"
29 #include "openssl_class.h"
30 #include "openssl_common.h"
31 #include "params_parser.h"
32 
33 static const bool IS_BIG_ENDIAN = IsBigEndian();
34 
ConstructEcc192CommParamsSpec(HcfAsyKeyParamsSpec ** spec)35 HcfResult ConstructEcc192CommParamsSpec(HcfAsyKeyParamsSpec **spec)
36 {
37     HcfEccCommParamsSpec *eccCommSpec = &g_ecc192CommSpec;
38     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
39 
40     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
41     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
42     eccCommSpec->field = tmpField;
43     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
44     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
45         (IS_BIG_ENDIAN ? g_ecc192CorrectBigP : g_ecc192CorrectLittleP);
46     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_SECP192R1_LEN;
47     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc192CorrectBigA : g_ecc192CorrectLittleA);
48     eccCommSpec->a.len = NID_SECP192R1_LEN;
49     eccCommSpec->b.data = (IS_BIG_ENDIAN ? g_ecc192CorrectBigB : g_ecc192CorrectLittleB);
50     eccCommSpec->b.len = NID_SECP192R1_LEN;
51     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc192CorrectBigGX : g_ecc192CorrectLittleGX);
52     eccCommSpec->g.x.len = NID_SECP192R1_LEN;
53     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc192CorrectBigGY : g_ecc192CorrectLittleGY);
54     eccCommSpec->g.y.len = NID_SECP192R1_LEN;
55     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc192CorrectBigN : g_ecc192CorrectLittleN);
56     eccCommSpec->n.len = NID_SECP192R1_LEN;
57     eccCommSpec->h = g_ecc192CorrectH;
58 
59     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
60     return HCF_SUCCESS;
61 }
62 
ConstructEcc224CommParamsSpec(HcfAsyKeyParamsSpec ** spec)63 HcfResult ConstructEcc224CommParamsSpec(HcfAsyKeyParamsSpec **spec)
64 {
65     HcfEccCommParamsSpec *eccCommSpec = &g_ecc224CommSpec;
66     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
67 
68     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
69     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
70     eccCommSpec->field = tmpField;
71     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
72     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
73         (IS_BIG_ENDIAN ? g_ecc224CorrectBigP : g_ecc224CorrectLittleP);
74     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_secp224r1_len;
75     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigA : g_ecc224CorrectLittleA);
76     eccCommSpec->a.len = NID_secp224r1_len;
77     eccCommSpec->b.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigB : g_ecc224CorrectLittleB);
78     eccCommSpec->b.len = NID_secp224r1_len;
79     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGX : g_ecc224CorrectLittleGX);
80     eccCommSpec->g.x.len = NID_secp224r1_len;
81     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGY : g_ecc224CorrectLittleGY);
82     eccCommSpec->g.y.len = NID_secp224r1_len;
83     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigN : g_ecc224CorrectLittleN);
84     eccCommSpec->n.len = NID_secp224r1_len;
85     eccCommSpec->h = g_ecc224CorrectH;
86 
87     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
88     return HCF_SUCCESS;
89 }
90 
ConstructEcc224PubKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)91 HcfResult ConstructEcc224PubKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
92 {
93     HcfEccPubKeyParamsSpec *eccPubKeySpec = &g_ecc224PubKeySpec;
94     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
95 
96     eccPubKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
97     eccPubKeySpec->base.base.specType = HCF_PUBLIC_KEY_SPEC;
98     eccPubKeySpec->base.field = tmpField;
99     eccPubKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
100     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.data =
101         (IS_BIG_ENDIAN ? g_ecc224CorrectBigP : g_ecc224CorrectLittleP);
102     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.len = NID_secp224r1_len;
103     eccPubKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigA : g_ecc224CorrectLittleA);
104     eccPubKeySpec->base.a.len = NID_secp224r1_len;
105     eccPubKeySpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigB : g_ecc224CorrectLittleB);
106     eccPubKeySpec->base.b.len = NID_secp224r1_len;
107     eccPubKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGX : g_ecc224CorrectLittleGX);
108     eccPubKeySpec->base.g.x.len = NID_secp224r1_len;
109     eccPubKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGY : g_ecc224CorrectLittleGY);
110     eccPubKeySpec->base.g.y.len = NID_secp224r1_len;
111     eccPubKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigN : g_ecc224CorrectLittleN);
112     eccPubKeySpec->base.n.len = NID_secp224r1_len;
113     eccPubKeySpec->base.h = g_ecc224CorrectH;
114     eccPubKeySpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigPkX : g_ecc224CorrectLittlePkX);
115     eccPubKeySpec->pk.x.len = NID_secp224r1_len;
116     eccPubKeySpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigPkY : g_ecc224CorrectLittlePkY);
117     eccPubKeySpec->pk.y.len = NID_secp224r1_len;
118 
119     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPubKeySpec);
120     return HCF_SUCCESS;
121 }
122 
ConstructEcc224PriKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)123 HcfResult ConstructEcc224PriKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
124 {
125     HcfEccPriKeyParamsSpec *eccPriKeySpec = &g_ecc224PriKeySpec;
126     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
127 
128     eccPriKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
129     eccPriKeySpec->base.base.specType = HCF_PRIVATE_KEY_SPEC;
130     eccPriKeySpec->base.field = tmpField;
131     eccPriKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
132     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.data =
133         (IS_BIG_ENDIAN ? g_ecc224CorrectBigP : g_ecc224CorrectLittleP);
134     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.len = NID_secp224r1_len;
135     eccPriKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigA : g_ecc224CorrectLittleA);
136     eccPriKeySpec->base.a.len = NID_secp224r1_len;
137     eccPriKeySpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigB : g_ecc224CorrectLittleB);
138     eccPriKeySpec->base.b.len = NID_secp224r1_len;
139     eccPriKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGX : g_ecc224CorrectLittleGX);
140     eccPriKeySpec->base.g.x.len = NID_secp224r1_len;
141     eccPriKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGY : g_ecc224CorrectLittleGY);
142     eccPriKeySpec->base.g.y.len = NID_secp224r1_len;
143     eccPriKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigN : g_ecc224CorrectLittleN);
144     eccPriKeySpec->base.n.len = NID_secp224r1_len;
145     eccPriKeySpec->base.h = g_ecc224CorrectH;
146     eccPriKeySpec->sk.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigSk : g_ecc224CorrectLittleSk);
147     eccPriKeySpec->sk.len = NID_secp224r1_len;
148 
149     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPriKeySpec);
150     return HCF_SUCCESS;
151 }
152 
ConstructEcc224KeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)153 HcfResult ConstructEcc224KeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
154 {
155     HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc224KeyPairSpec;
156     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
157 
158     eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
159     eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
160     eccKeyPairSpec->base.field = tmpField;
161     eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
162     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.data =
163         (IS_BIG_ENDIAN ? g_ecc224CorrectBigP : g_ecc224CorrectLittleP);
164     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.len = NID_secp224r1_len;
165     eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigA : g_ecc224CorrectLittleA);
166     eccKeyPairSpec->base.a.len = NID_secp224r1_len;
167     eccKeyPairSpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigB : g_ecc224CorrectLittleB);
168     eccKeyPairSpec->base.b.len = NID_secp224r1_len;
169     eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGX : g_ecc224CorrectLittleGX);
170     eccKeyPairSpec->base.g.x.len = NID_secp224r1_len;
171     eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGY : g_ecc224CorrectLittleGY);
172     eccKeyPairSpec->base.g.y.len = NID_secp224r1_len;
173     eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigN : g_ecc224CorrectLittleN);
174     eccKeyPairSpec->base.n.len = NID_secp224r1_len;
175     eccKeyPairSpec->base.h = g_ecc224CorrectH;
176     eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigPkX : g_ecc224CorrectLittlePkX);
177     eccKeyPairSpec->pk.x.len = NID_secp224r1_len;
178     eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigPkY : g_ecc224CorrectLittlePkY);
179     eccKeyPairSpec->pk.y.len = NID_secp224r1_len;
180     eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigSk : g_ecc224CorrectLittleSk);
181     eccKeyPairSpec->sk.len = NID_secp224r1_len;
182 
183     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccKeyPairSpec);
184     return HCF_SUCCESS;
185 }
186 
ConstructEcc256CommParamsSpec(HcfAsyKeyParamsSpec ** spec)187 HcfResult ConstructEcc256CommParamsSpec(HcfAsyKeyParamsSpec **spec)
188 {
189     HcfEccCommParamsSpec *eccCommSpec = &g_ecc256CommSpec;
190     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
191 
192     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
193     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
194     eccCommSpec->field = tmpField;
195     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
196     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
197         (IS_BIG_ENDIAN ? g_ecc256CorrectBigP : g_ecc256CorrectLittleP);
198     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_X9_62_prime256v1_len;
199     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigA : g_ecc256CorrectLittleA);
200     eccCommSpec->a.len = NID_X9_62_prime256v1_len;
201     eccCommSpec->b.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigB : g_ecc256CorrectLittleB);
202     eccCommSpec->b.len = NID_X9_62_prime256v1_len;
203     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGX : g_ecc256CorrectLittleGX);
204     eccCommSpec->g.x.len = NID_X9_62_prime256v1_len;
205     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGY : g_ecc256CorrectLittleGY);
206     eccCommSpec->g.y.len = NID_X9_62_prime256v1_len;
207     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigN : g_ecc256CorrectLittleN);
208     eccCommSpec->n.len = NID_X9_62_prime256v1_len;
209     eccCommSpec->h = g_ecc256CorrectH;
210 
211     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
212     return HCF_SUCCESS;
213 }
214 
ConstructEcc256PubKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)215 HcfResult ConstructEcc256PubKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
216 {
217     HcfEccPubKeyParamsSpec *eccPubKeySpec = &g_ecc256PubKeySpec;
218     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
219 
220     eccPubKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
221     eccPubKeySpec->base.base.specType = HCF_PUBLIC_KEY_SPEC;
222     eccPubKeySpec->base.field = tmpField;
223     eccPubKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
224     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.data =
225         (IS_BIG_ENDIAN ? g_ecc256CorrectBigP : g_ecc256CorrectLittleP);
226     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.len = NID_X9_62_prime256v1_len;
227     eccPubKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigA : g_ecc256CorrectLittleA);
228     eccPubKeySpec->base.a.len = NID_X9_62_prime256v1_len;
229     eccPubKeySpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigB : g_ecc256CorrectLittleB);
230     eccPubKeySpec->base.b.len = NID_X9_62_prime256v1_len;
231     eccPubKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGX : g_ecc256CorrectLittleGX);
232     eccPubKeySpec->base.g.x.len = NID_X9_62_prime256v1_len;
233     eccPubKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGY : g_ecc256CorrectLittleGY);
234     eccPubKeySpec->base.g.y.len = NID_X9_62_prime256v1_len;
235     eccPubKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigN : g_ecc256CorrectLittleN);
236     eccPubKeySpec->base.n.len = NID_X9_62_prime256v1_len;
237     eccPubKeySpec->base.h = g_ecc256CorrectH;
238     eccPubKeySpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigPkX : g_ecc256CorrectLittlePkX);
239     eccPubKeySpec->pk.x.len = NID_X9_62_prime256v1_len;
240     eccPubKeySpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigPkY : g_ecc256CorrectLittlePkY);
241     eccPubKeySpec->pk.y.len = NID_X9_62_prime256v1_len;
242 
243     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPubKeySpec);
244     return HCF_SUCCESS;
245 }
246 
ConstructEcc256PriKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)247 HcfResult ConstructEcc256PriKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
248 {
249     HcfEccPriKeyParamsSpec *eccPriKeySpec = &g_ecc256PriKeySpec;
250     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
251 
252     eccPriKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
253     eccPriKeySpec->base.base.specType = HCF_PRIVATE_KEY_SPEC;
254     eccPriKeySpec->base.field = tmpField;
255     eccPriKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
256     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.data =
257         (IS_BIG_ENDIAN ? g_ecc256CorrectBigP : g_ecc256CorrectLittleP);
258     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.len = NID_X9_62_prime256v1_len;
259     eccPriKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigA : g_ecc256CorrectLittleA);
260     eccPriKeySpec->base.a.len = NID_X9_62_prime256v1_len;
261     eccPriKeySpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigB : g_ecc256CorrectLittleB);
262     eccPriKeySpec->base.b.len = NID_X9_62_prime256v1_len;
263     eccPriKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGX : g_ecc256CorrectLittleGX);
264     eccPriKeySpec->base.g.x.len = NID_X9_62_prime256v1_len;
265     eccPriKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGY : g_ecc256CorrectLittleGY);
266     eccPriKeySpec->base.g.y.len = NID_X9_62_prime256v1_len;
267     eccPriKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigN : g_ecc256CorrectLittleN);
268     eccPriKeySpec->base.n.len = NID_X9_62_prime256v1_len;
269     eccPriKeySpec->base.h = g_ecc256CorrectH;
270     eccPriKeySpec->sk.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigSk : g_ecc256CorrectLittleSk);
271     eccPriKeySpec->sk.len = NID_X9_62_prime256v1_len;
272 
273     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPriKeySpec);
274     return HCF_SUCCESS;
275 }
276 
ConstructEcc256KeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)277 HcfResult ConstructEcc256KeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
278 {
279     HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc256KeyPairSpec;
280     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
281 
282     eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
283     eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
284     eccKeyPairSpec->base.field = tmpField;
285     eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
286     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.data =
287         (IS_BIG_ENDIAN ? g_ecc256CorrectBigP : g_ecc256CorrectLittleP);
288     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.len = NID_X9_62_prime256v1_len;
289     eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigA : g_ecc256CorrectLittleA);
290     eccKeyPairSpec->base.a.len = NID_X9_62_prime256v1_len;
291     eccKeyPairSpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigB : g_ecc256CorrectLittleB);
292     eccKeyPairSpec->base.b.len = NID_X9_62_prime256v1_len;
293     eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGX : g_ecc256CorrectLittleGX);
294     eccKeyPairSpec->base.g.x.len = NID_X9_62_prime256v1_len;
295     eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGY : g_ecc256CorrectLittleGY);
296     eccKeyPairSpec->base.g.y.len = NID_X9_62_prime256v1_len;
297     eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigN : g_ecc256CorrectLittleN);
298     eccKeyPairSpec->base.n.len = NID_X9_62_prime256v1_len;
299     eccKeyPairSpec->base.h = g_ecc256CorrectH;
300     eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigPkX : g_ecc256CorrectLittlePkX);
301     eccKeyPairSpec->pk.x.len = NID_X9_62_prime256v1_len;
302     eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigPkY : g_ecc256CorrectLittlePkY);
303     eccKeyPairSpec->pk.y.len = NID_X9_62_prime256v1_len;
304     eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigSk : g_ecc256CorrectLittleSk);
305     eccKeyPairSpec->sk.len = NID_X9_62_prime256v1_len;
306 
307     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccKeyPairSpec);
308     return HCF_SUCCESS;
309 }
310 
ConstructEcc384CommParamsSpec(HcfAsyKeyParamsSpec ** spec)311 HcfResult ConstructEcc384CommParamsSpec(HcfAsyKeyParamsSpec **spec)
312 {
313     HcfEccCommParamsSpec *eccCommSpec = &g_ecc384CommSpec;
314     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
315 
316     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
317     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
318     eccCommSpec->field = tmpField;
319     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
320     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
321         (IS_BIG_ENDIAN ? g_ecc384CorrectBigP : g_ecc384CorrectLittleP);
322     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_secp384r1_len;
323     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigA : g_ecc384CorrectLittleA);
324     eccCommSpec->a.len = NID_secp384r1_len;
325     eccCommSpec->b.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigB : g_ecc384CorrectLittleB);
326     eccCommSpec->b.len = NID_secp384r1_len;
327     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGX : g_ecc384CorrectLittleGX);
328     eccCommSpec->g.x.len = NID_secp384r1_len;
329     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGY : g_ecc384CorrectLittleGY);
330     eccCommSpec->g.y.len = NID_secp384r1_len;
331     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigN : g_ecc384CorrectLittleN);
332     eccCommSpec->n.len = NID_secp384r1_len;
333     eccCommSpec->h = g_ecc384CorrectH;
334 
335     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
336     return HCF_SUCCESS;
337 }
338 
ConstructEcc384PubKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)339 HcfResult ConstructEcc384PubKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
340 {
341     HcfEccPubKeyParamsSpec *eccPubKeySpec = &g_ecc384PubKeySpec;
342     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
343 
344     eccPubKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
345     eccPubKeySpec->base.base.specType = HCF_PUBLIC_KEY_SPEC;
346     eccPubKeySpec->base.field = tmpField;
347     eccPubKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
348     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.data =
349         (IS_BIG_ENDIAN ? g_ecc384CorrectBigP : g_ecc384CorrectLittleP);
350     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.len = NID_secp384r1_len;
351     eccPubKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigA : g_ecc384CorrectLittleA);
352     eccPubKeySpec->base.a.len = NID_secp384r1_len;
353     eccPubKeySpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigB : g_ecc384CorrectLittleB);
354     eccPubKeySpec->base.b.len = NID_secp384r1_len;
355     eccPubKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGX : g_ecc384CorrectLittleGX);
356     eccPubKeySpec->base.g.x.len = NID_secp384r1_len;
357     eccPubKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGY : g_ecc384CorrectLittleGY);
358     eccPubKeySpec->base.g.y.len = NID_secp384r1_len;
359     eccPubKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigN : g_ecc384CorrectLittleN);
360     eccPubKeySpec->base.n.len = NID_secp384r1_len;
361     eccPubKeySpec->base.h = g_ecc384CorrectH;
362     eccPubKeySpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigPkX : g_ecc384CorrectLittlePkX);
363     eccPubKeySpec->pk.x.len = NID_secp384r1_len;
364     eccPubKeySpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigPkY : g_ecc384CorrectLittlePkY);
365     eccPubKeySpec->pk.y.len = NID_secp384r1_len;
366 
367     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPubKeySpec);
368     return HCF_SUCCESS;
369 }
370 
ConstructEcc384PriKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)371 HcfResult ConstructEcc384PriKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
372 {
373     HcfEccPriKeyParamsSpec *eccPriKeySpec = &g_ecc384PriKeySpec;
374     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
375 
376     eccPriKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
377     eccPriKeySpec->base.base.specType = HCF_PRIVATE_KEY_SPEC;
378     eccPriKeySpec->base.field = tmpField;
379     eccPriKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
380     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.data =
381         (IS_BIG_ENDIAN ? g_ecc384CorrectBigP : g_ecc384CorrectLittleP);
382     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.len = NID_secp384r1_len;
383     eccPriKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigA : g_ecc384CorrectLittleA);
384     eccPriKeySpec->base.a.len = NID_secp384r1_len;
385     eccPriKeySpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigB : g_ecc384CorrectLittleB);
386     eccPriKeySpec->base.b.len = NID_secp384r1_len;
387     eccPriKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGX : g_ecc384CorrectLittleGX);
388     eccPriKeySpec->base.g.x.len = NID_secp384r1_len;
389     eccPriKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGY : g_ecc384CorrectLittleGY);
390     eccPriKeySpec->base.g.y.len = NID_secp384r1_len;
391     eccPriKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigN : g_ecc384CorrectLittleN);
392     eccPriKeySpec->base.n.len = NID_secp384r1_len;
393     eccPriKeySpec->base.h = g_ecc384CorrectH;
394     eccPriKeySpec->sk.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigSk : g_ecc384CorrectLittleSk);
395     eccPriKeySpec->sk.len = NID_secp384r1_len;
396 
397     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPriKeySpec);
398     return HCF_SUCCESS;
399 }
400 
ConstructEcc384KeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)401 HcfResult ConstructEcc384KeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
402 {
403     HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc384KeyPairSpec;
404     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
405 
406     eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
407     eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
408     eccKeyPairSpec->base.field = tmpField;
409     eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
410     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.data =
411         (IS_BIG_ENDIAN ? g_ecc384CorrectBigP : g_ecc384CorrectLittleP);
412     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.len = NID_secp384r1_len;
413     eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigA : g_ecc384CorrectLittleA);
414     eccKeyPairSpec->base.a.len = NID_secp384r1_len;
415     eccKeyPairSpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigB : g_ecc384CorrectLittleB);
416     eccKeyPairSpec->base.b.len = NID_secp384r1_len;
417     eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGX : g_ecc384CorrectLittleGX);
418     eccKeyPairSpec->base.g.x.len = NID_secp384r1_len;
419     eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGY : g_ecc384CorrectLittleGY);
420     eccKeyPairSpec->base.g.y.len = NID_secp384r1_len;
421     eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigN : g_ecc384CorrectLittleN);
422     eccKeyPairSpec->base.n.len = NID_secp384r1_len;
423     eccKeyPairSpec->base.h = g_ecc384CorrectH;
424     eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigPkX : g_ecc384CorrectLittlePkX);
425     eccKeyPairSpec->pk.x.len = NID_secp384r1_len;
426     eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigPkY : g_ecc384CorrectLittlePkY);
427     eccKeyPairSpec->pk.y.len = NID_secp384r1_len;
428     eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigSk : g_ecc384CorrectLittleSk);
429     eccKeyPairSpec->sk.len = NID_secp384r1_len;
430 
431     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccKeyPairSpec);
432     return HCF_SUCCESS;
433 }
434 
ConstructEcc521CommParamsSpec(HcfAsyKeyParamsSpec ** spec)435 HcfResult ConstructEcc521CommParamsSpec(HcfAsyKeyParamsSpec **spec)
436 {
437     HcfEccCommParamsSpec *eccCommSpec = &g_ecc521CommSpec;
438     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
439 
440     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
441     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
442     eccCommSpec->field = tmpField;
443     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
444     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
445         (IS_BIG_ENDIAN ? g_ecc521CorrectBigP : g_ecc521CorrectLittleP);
446     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_secp521r1_len;
447     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigA : g_ecc521CorrectLittleA);
448     eccCommSpec->a.len = NID_secp521r1_len;
449     eccCommSpec->b.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigB : g_ecc521CorrectLittleB);
450     eccCommSpec->b.len = NID_secp521r1_len;
451     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGX : g_ecc521CorrectLittleGX);
452     eccCommSpec->g.x.len = NID_secp521r1_len;
453     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGY : g_ecc521CorrectLittleGY);
454     eccCommSpec->g.y.len = NID_secp521r1_len;
455     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigN : g_ecc521CorrectLittleN);
456     eccCommSpec->n.len = NID_secp521r1_len;
457     eccCommSpec->h = g_ecc521CorrectH;
458 
459     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
460     return HCF_SUCCESS;
461 }
462 
ConstructEcc521PubKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)463 HcfResult ConstructEcc521PubKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
464 {
465     HcfEccPubKeyParamsSpec *eccPubKeySpec = &g_ecc521PubKeySpec;
466     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
467 
468     eccPubKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
469     eccPubKeySpec->base.base.specType = HCF_PUBLIC_KEY_SPEC;
470     eccPubKeySpec->base.field = tmpField;
471     eccPubKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
472     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.data =
473         (IS_BIG_ENDIAN ? g_ecc521CorrectBigP : g_ecc521CorrectLittleP);
474     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.len = NID_secp521r1_len;
475     eccPubKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigA : g_ecc521CorrectLittleA);
476     eccPubKeySpec->base.a.len = NID_secp521r1_len;
477     eccPubKeySpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigB : g_ecc521CorrectLittleB);
478     eccPubKeySpec->base.b.len = NID_secp521r1_len;
479     eccPubKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGX : g_ecc521CorrectLittleGX);
480     eccPubKeySpec->base.g.x.len = NID_secp521r1_len;
481     eccPubKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGY : g_ecc521CorrectLittleGY);
482     eccPubKeySpec->base.g.y.len = NID_secp521r1_len;
483     eccPubKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigN : g_ecc521CorrectLittleN);
484     eccPubKeySpec->base.n.len = NID_secp521r1_len;
485     eccPubKeySpec->base.h = g_ecc521CorrectH;
486     eccPubKeySpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigPkX : g_ecc521CorrectLittlePkX);
487     eccPubKeySpec->pk.x.len = NID_secp521r1_len;
488     eccPubKeySpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigPkY : g_ecc521CorrectLittlePkY);
489     eccPubKeySpec->pk.y.len = NID_secp521r1_len;
490 
491     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPubKeySpec);
492     return HCF_SUCCESS;
493 }
494 
ConstructEcc521PriKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)495 HcfResult ConstructEcc521PriKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
496 {
497     HcfEccPriKeyParamsSpec *eccPriKeySpec = &g_ecc521PriKeySpec;
498     HcfECField *tmpField = (HcfECField *)(&g_fieldFp);
499 
500     eccPriKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
501     eccPriKeySpec->base.base.specType = HCF_PRIVATE_KEY_SPEC;
502     eccPriKeySpec->base.field = tmpField;
503     eccPriKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
504     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.data =
505         (IS_BIG_ENDIAN ? g_ecc521CorrectBigP : g_ecc521CorrectLittleP);
506     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.len = NID_secp521r1_len;
507     eccPriKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigA : g_ecc521CorrectLittleA);
508     eccPriKeySpec->base.a.len = NID_secp521r1_len;
509     eccPriKeySpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigB : g_ecc521CorrectLittleB);
510     eccPriKeySpec->base.b.len = NID_secp521r1_len;
511     eccPriKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGX : g_ecc521CorrectLittleGX);
512     eccPriKeySpec->base.g.x.len = NID_secp521r1_len;
513     eccPriKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGY : g_ecc521CorrectLittleGY);
514     eccPriKeySpec->base.g.y.len = NID_secp521r1_len;
515     eccPriKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigN : g_ecc521CorrectLittleN);
516     eccPriKeySpec->base.n.len = NID_secp521r1_len;
517     eccPriKeySpec->base.h = g_ecc521CorrectH;
518     eccPriKeySpec->sk.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigSk : g_ecc521CorrectLittleSk);
519     eccPriKeySpec->sk.len = NID_secp521r1_len;
520 
521     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPriKeySpec);
522     return HCF_SUCCESS;
523 }
524 
ConstructEcc521KeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)525 HcfResult ConstructEcc521KeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
526 {
527     HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc521KeyPairSpec;
528     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
529 
530     eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
531     eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
532     eccKeyPairSpec->base.field = tmpField;
533     eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
534     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.data =
535         (IS_BIG_ENDIAN ? g_ecc521CorrectBigP : g_ecc521CorrectLittleP);
536     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.len = NID_secp521r1_len;
537     eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigA : g_ecc521CorrectLittleA);
538     eccKeyPairSpec->base.a.len = NID_secp521r1_len;
539     eccKeyPairSpec->base.b.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigB : g_ecc521CorrectLittleB);
540     eccKeyPairSpec->base.b.len = NID_secp521r1_len;
541     eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGX : g_ecc521CorrectLittleGX);
542     eccKeyPairSpec->base.g.x.len = NID_secp521r1_len;
543     eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGY : g_ecc521CorrectLittleGY);
544     eccKeyPairSpec->base.g.y.len = NID_secp521r1_len;
545     eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigN : g_ecc521CorrectLittleN);
546     eccKeyPairSpec->base.n.len = NID_secp521r1_len;
547     eccKeyPairSpec->base.h = g_ecc521CorrectH;
548     eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigPkX : g_ecc521CorrectLittlePkX);
549     eccKeyPairSpec->pk.x.len = NID_secp521r1_len;
550     eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigPkY : g_ecc521CorrectLittlePkY);
551     eccKeyPairSpec->pk.y.len = NID_secp521r1_len;
552     eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigSk : g_ecc521CorrectLittleSk);
553     eccKeyPairSpec->sk.len = NID_secp521r1_len;
554 
555     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccKeyPairSpec);
556     return HCF_SUCCESS;
557 }
558 
ConstructEcc224ErrCommParamsSpec(HcfAsyKeyParamsSpec ** spec)559 HcfResult ConstructEcc224ErrCommParamsSpec(HcfAsyKeyParamsSpec **spec)
560 {
561     HcfEccCommParamsSpec *eccCommSpec = &g_ecc224CommSpec;
562     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
563 
564     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
565     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
566     eccCommSpec->field = tmpField;
567     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
568     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
569         (IS_BIG_ENDIAN ? g_ecc224CorrectBigP : g_ecc224CorrectLittleP);
570     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_secp224r1_len;
571     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigA : g_ecc224CorrectLittleA);
572     eccCommSpec->a.len = NID_secp224r1_len;
573     eccCommSpec->b.data = nullptr;
574     eccCommSpec->b.len = 0;
575     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGX : g_ecc224CorrectLittleGX);
576     eccCommSpec->g.x.len = NID_secp224r1_len;
577     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGY : g_ecc224CorrectLittleGY);
578     eccCommSpec->g.y.len = NID_secp224r1_len;
579     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigN : g_ecc224CorrectLittleN);
580     eccCommSpec->n.len = NID_secp224r1_len;
581     eccCommSpec->h = g_ecc224CorrectH;
582 
583     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
584     return HCF_SUCCESS;
585 }
586 
ConstructEcc256ErrCommParamsSpec(HcfAsyKeyParamsSpec ** spec)587 HcfResult ConstructEcc256ErrCommParamsSpec(HcfAsyKeyParamsSpec **spec)
588 {
589     HcfEccCommParamsSpec *eccCommSpec = &g_ecc256CommSpec;
590     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
591 
592     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
593     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
594     eccCommSpec->field = tmpField;
595     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
596     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
597         (IS_BIG_ENDIAN ? g_ecc256CorrectBigP : g_ecc256CorrectLittleP);
598     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_X9_62_prime256v1_len;
599     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigA : g_ecc256CorrectLittleA);
600     eccCommSpec->a.len = NID_X9_62_prime256v1_len;
601     eccCommSpec->b.data = 0;
602     eccCommSpec->b.len = 0;
603     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGX : g_ecc256CorrectLittleGX);
604     eccCommSpec->g.x.len = NID_X9_62_prime256v1_len;
605     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigGY : g_ecc256CorrectLittleGY);
606     eccCommSpec->g.y.len = NID_X9_62_prime256v1_len;
607     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc256CorrectBigN : g_ecc256CorrectLittleN);
608     eccCommSpec->n.len = NID_X9_62_prime256v1_len;
609     eccCommSpec->h = g_ecc256CorrectH;
610 
611     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
612     return HCF_SUCCESS;
613 }
614 
ConstructEcc384ErrCommParamsSpec(HcfAsyKeyParamsSpec ** spec)615 HcfResult ConstructEcc384ErrCommParamsSpec(HcfAsyKeyParamsSpec **spec)
616 {
617     HcfEccCommParamsSpec *eccCommSpec = &g_ecc384CommSpec;
618     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
619 
620     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
621     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
622     eccCommSpec->field = tmpField;
623     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
624     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
625         (IS_BIG_ENDIAN ? g_ecc384CorrectBigP : g_ecc384CorrectLittleP);
626     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_secp384r1_len;
627     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigA : g_ecc384CorrectLittleA);
628     eccCommSpec->a.len = NID_secp384r1_len;
629     eccCommSpec->b.data = nullptr;
630     eccCommSpec->b.len = 0;
631     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGX : g_ecc384CorrectLittleGX);
632     eccCommSpec->g.x.len = NID_secp384r1_len;
633     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGY : g_ecc384CorrectLittleGY);
634     eccCommSpec->g.y.len = NID_secp384r1_len;
635     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigN : g_ecc384CorrectLittleN);
636     eccCommSpec->n.len = NID_secp384r1_len;
637     eccCommSpec->h = g_ecc384CorrectH;
638 
639     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
640     return HCF_SUCCESS;
641 }
642 
ConstructEcc521ErrCommParamsSpec(HcfAsyKeyParamsSpec ** spec)643 HcfResult ConstructEcc521ErrCommParamsSpec(HcfAsyKeyParamsSpec **spec)
644 {
645     HcfEccCommParamsSpec *eccCommSpec = &g_ecc521CommSpec;
646     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
647 
648     eccCommSpec->base.algName = const_cast<char *>(g_eccAlgName.c_str());
649     eccCommSpec->base.specType = HCF_COMMON_PARAMS_SPEC;
650     eccCommSpec->field = tmpField;
651     eccCommSpec->field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
652     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.data =
653         (IS_BIG_ENDIAN ? g_ecc521CorrectBigP : g_ecc521CorrectLittleP);
654     (reinterpret_cast<HcfECFieldFp *>(eccCommSpec->field))->p.len = NID_secp521r1_len;
655     eccCommSpec->a.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigA : g_ecc521CorrectLittleA);
656     eccCommSpec->a.len = NID_secp521r1_len;
657     eccCommSpec->b.data = nullptr;
658     eccCommSpec->b.len = 0;
659     eccCommSpec->g.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGX : g_ecc521CorrectLittleGX);
660     eccCommSpec->g.x.len = NID_secp521r1_len;
661     eccCommSpec->g.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGY : g_ecc521CorrectLittleGY);
662     eccCommSpec->g.y.len = NID_secp521r1_len;
663     eccCommSpec->n.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigN : g_ecc521CorrectLittleN);
664     eccCommSpec->n.len = NID_secp521r1_len;
665     eccCommSpec->h = g_ecc521CorrectH;
666 
667     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccCommSpec);
668     return HCF_SUCCESS;
669 }
670 
ConstructEcc384ErrKeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)671 HcfResult ConstructEcc384ErrKeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
672 {
673     HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc384KeyPairSpec;
674     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
675 
676     eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
677     eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
678     eccKeyPairSpec->base.field = tmpField;
679     eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
680     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.data =
681         (IS_BIG_ENDIAN ? g_ecc384CorrectBigP : g_ecc384CorrectLittleP);
682     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.len = NID_secp384r1_len;
683     eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigA : g_ecc384CorrectLittleA);
684     eccKeyPairSpec->base.a.len = NID_secp384r1_len;
685     eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGX : g_ecc384CorrectLittleGX);
686     eccKeyPairSpec->base.g.x.len = NID_secp384r1_len;
687     eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigGY : g_ecc384CorrectLittleGY);
688     eccKeyPairSpec->base.g.y.len = NID_secp384r1_len;
689     eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigN : g_ecc384CorrectLittleN);
690     eccKeyPairSpec->base.n.len = NID_secp384r1_len;
691     eccKeyPairSpec->base.h = g_ecc384CorrectH;
692     eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigPkX : g_ecc384CorrectLittlePkX);
693     eccKeyPairSpec->pk.x.len = NID_secp384r1_len;
694     eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigPkY : g_ecc384CorrectLittlePkY);
695     eccKeyPairSpec->pk.y.len = NID_secp384r1_len;
696     eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc384CorrectBigSk : g_ecc384CorrectLittleSk);
697     eccKeyPairSpec->sk.len = NID_secp384r1_len;
698 
699     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccKeyPairSpec);
700     return HCF_SUCCESS;
701 }
702 
ConstructEcc521ErrKeyPairParamsSpec(HcfAsyKeyParamsSpec ** spec)703 HcfResult ConstructEcc521ErrKeyPairParamsSpec(HcfAsyKeyParamsSpec **spec)
704 {
705     HcfEccKeyPairParamsSpec *eccKeyPairSpec = &g_ecc521KeyPairSpec;
706     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
707 
708     eccKeyPairSpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
709     eccKeyPairSpec->base.base.specType = HCF_KEY_PAIR_SPEC;
710     eccKeyPairSpec->base.field = tmpField;
711     eccKeyPairSpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
712     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.data =
713         (IS_BIG_ENDIAN ? g_ecc521CorrectBigP : g_ecc521CorrectLittleP);
714     (reinterpret_cast<HcfECFieldFp *>(eccKeyPairSpec->base.field))->p.len = NID_secp521r1_len;
715     eccKeyPairSpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigA : g_ecc521CorrectLittleA);
716     eccKeyPairSpec->base.a.len = NID_secp521r1_len;
717     eccKeyPairSpec->base.b.data = nullptr;
718     eccKeyPairSpec->base.b.len = 0;
719     eccKeyPairSpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGX : g_ecc521CorrectLittleGX);
720     eccKeyPairSpec->base.g.x.len = NID_secp521r1_len;
721     eccKeyPairSpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigGY : g_ecc521CorrectLittleGY);
722     eccKeyPairSpec->base.g.y.len = NID_secp521r1_len;
723     eccKeyPairSpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigN : g_ecc521CorrectLittleN);
724     eccKeyPairSpec->base.n.len = NID_secp521r1_len;
725     eccKeyPairSpec->base.h = g_ecc521CorrectH;
726     eccKeyPairSpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigPkX : g_ecc521CorrectLittlePkX);
727     eccKeyPairSpec->pk.x.len = NID_secp521r1_len;
728     eccKeyPairSpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigPkY : g_ecc521CorrectLittlePkY);
729     eccKeyPairSpec->pk.y.len = NID_secp521r1_len;
730     eccKeyPairSpec->sk.data = (IS_BIG_ENDIAN ? g_ecc521CorrectBigSk : g_ecc521CorrectLittleSk);
731     eccKeyPairSpec->sk.len = NID_secp521r1_len;
732 
733     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccKeyPairSpec);
734     return HCF_SUCCESS;
735 }
736 
ConstructEcc224ErrPubKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)737 HcfResult ConstructEcc224ErrPubKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
738 {
739     HcfEccPubKeyParamsSpec *eccPubKeySpec = &g_ecc224PubKeySpec;
740     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
741 
742     eccPubKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
743     eccPubKeySpec->base.base.specType = HCF_PUBLIC_KEY_SPEC;
744     eccPubKeySpec->base.field = tmpField;
745     eccPubKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
746     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.data =
747         (IS_BIG_ENDIAN ? g_ecc224CorrectBigP : g_ecc224CorrectLittleP);
748     (reinterpret_cast<HcfECFieldFp *>(eccPubKeySpec->base.field))->p.len = NID_secp224r1_len;
749     eccPubKeySpec->base.a.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigA : g_ecc224CorrectLittleA);
750     eccPubKeySpec->base.a.len = NID_secp224r1_len;
751     eccPubKeySpec->base.b.data = nullptr;
752     eccPubKeySpec->base.b.len = 0;
753     eccPubKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGX : g_ecc224CorrectLittleGX);
754     eccPubKeySpec->base.g.x.len = NID_secp224r1_len;
755     eccPubKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGY : g_ecc224CorrectLittleGY);
756     eccPubKeySpec->base.g.y.len = NID_secp224r1_len;
757     eccPubKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigN : g_ecc224CorrectLittleN);
758     eccPubKeySpec->base.n.len = NID_secp224r1_len;
759     eccPubKeySpec->base.h = g_ecc224CorrectH;
760     eccPubKeySpec->pk.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigPkX : g_ecc224CorrectLittlePkX);
761     eccPubKeySpec->pk.x.len = NID_secp224r1_len;
762     eccPubKeySpec->pk.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigPkY : g_ecc224CorrectLittlePkY);
763     eccPubKeySpec->pk.y.len = NID_secp224r1_len;
764 
765     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPubKeySpec);
766     return HCF_SUCCESS;
767 }
768 
ConstructEcc224ErrPriKeyParamsSpec(HcfAsyKeyParamsSpec ** spec)769 HcfResult ConstructEcc224ErrPriKeyParamsSpec(HcfAsyKeyParamsSpec **spec)
770 {
771     HcfEccPriKeyParamsSpec *eccPriKeySpec = &g_ecc224PriKeySpec;
772     HcfECField *tmpField = reinterpret_cast<HcfECField *>(&g_fieldFp);
773 
774     eccPriKeySpec->base.base.algName = const_cast<char *>(g_eccAlgName.c_str());
775     eccPriKeySpec->base.base.specType = HCF_PRIVATE_KEY_SPEC;
776     eccPriKeySpec->base.field = tmpField;
777     eccPriKeySpec->base.field->fieldType = const_cast<char *>(g_eccFieldType.c_str());
778     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.data =
779         (IS_BIG_ENDIAN ? g_ecc224CorrectBigP : g_ecc224CorrectLittleP);
780     (reinterpret_cast<HcfECFieldFp *>(eccPriKeySpec->base.field))->p.len = NID_secp224r1_len;
781     eccPriKeySpec->base.a.data = nullptr;
782     eccPriKeySpec->base.a.len = 0;
783     eccPriKeySpec->base.b.data = nullptr;
784     eccPriKeySpec->base.b.len = 0;
785     eccPriKeySpec->base.g.x.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGX : g_ecc224CorrectLittleGX);
786     eccPriKeySpec->base.g.x.len = NID_secp224r1_len;
787     eccPriKeySpec->base.g.y.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigGY : g_ecc224CorrectLittleGY);
788     eccPriKeySpec->base.g.y.len = NID_secp224r1_len;
789     eccPriKeySpec->base.n.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigN : g_ecc224CorrectLittleN);
790     eccPriKeySpec->base.n.len = NID_secp224r1_len;
791     eccPriKeySpec->base.h = g_ecc224CorrectH;
792     eccPriKeySpec->sk.data = (IS_BIG_ENDIAN ? g_ecc224CorrectBigSk : g_ecc224CorrectLittleSk);
793     eccPriKeySpec->sk.len = NID_secp224r1_len;
794 
795     *spec = reinterpret_cast<HcfAsyKeyParamsSpec *>(eccPriKeySpec);
796     return HCF_SUCCESS;
797 }
798