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)35HcfResult 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)63HcfResult 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)91HcfResult 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)123HcfResult 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)153HcfResult 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)187HcfResult 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)215HcfResult 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)247HcfResult 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)277HcfResult 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)311HcfResult 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)339HcfResult 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)371HcfResult 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)401HcfResult 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)435HcfResult 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)463HcfResult 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)495HcfResult 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)525HcfResult 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)559HcfResult 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)587HcfResult 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)615HcfResult 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)643HcfResult 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)671HcfResult 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)703HcfResult 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)737HcfResult 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)769HcfResult 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