1 /* 2 * Copyright (C) 2022-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef HCF_PARAMS_PARSER_H 17 #define HCF_PARAMS_PARSER_H 18 19 #include <stdint.h> 20 #include "result.h" 21 22 typedef enum { 23 HCF_ALG_TYPE = 1, 24 HCF_ALG_KEY_TYPE, 25 HCF_ALG_MODE, 26 HCF_ALG_PADDING_TYPE, 27 HCF_ALG_PRIMES, 28 HCF_ALG_DIGEST, 29 HCF_ALG_MGF1_DIGEST, 30 HCF_ALG_TEXT_FORMAT, 31 HCF_ALG_SIGN_TYPE, 32 HCF_ALG_VERIFY_TYPE, 33 } HcfAlgParaType; 34 35 typedef enum { 36 HCF_ALG_AES = 1, 37 HCF_ALG_DES, 38 HCF_ALG_3DES, 39 HCF_ALG_RSA, 40 HCF_ALG_ECC, 41 HCF_ALG_DSA, 42 HCF_ALG_SM2, 43 HCF_ALG_SM4, 44 HCF_ALG_HMAC, 45 HCF_ALG_PKBDF2, 46 HCF_ALG_ECC_BRAINPOOL, 47 HCF_ALG_ED25519, 48 HCF_ALG_X25519, 49 HCF_ALG_DH, 50 HCF_ALG_HKDF, 51 HCF_ALG_SCRYPT, 52 } HcfAlgValue; 53 54 typedef enum { 55 HCF_ALG_ECC_224 = 1, 56 HCF_ALG_ECC_256, 57 HCF_ALG_ECC_384, 58 HCF_ALG_ECC_521, 59 60 HCF_ALG_AES_128, 61 HCF_ALG_AES_192, 62 HCF_ALG_AES_256, 63 HCF_ALG_SM4_128, 64 HCF_ALG_DES_64, 65 HCF_ALG_3DES_192, 66 67 HCF_ALG_MODE_NONE, 68 HCF_ALG_MODE_ECB, 69 HCF_ALG_MODE_CBC, 70 HCF_ALG_MODE_CTR, 71 HCF_ALG_MODE_OFB, 72 HCF_ALG_MODE_CFB, 73 HCF_ALG_MODE_CFB1, 74 HCF_ALG_MODE_CFB8, 75 HCF_ALG_MODE_CFB64, 76 HCF_ALG_MODE_CFB128, 77 HCF_ALG_MODE_CCM, 78 HCF_ALG_MODE_GCM, 79 80 HCF_ALG_NOPADDING, 81 HCF_ALG_PADDING_PKCS5, 82 HCF_ALG_PADDING_PKCS7, 83 84 // rsa keysize 85 HCF_OPENSSL_RSA_512, 86 HCF_OPENSSL_RSA_768, 87 HCF_OPENSSL_RSA_1024, 88 HCF_OPENSSL_RSA_2048, 89 HCF_OPENSSL_RSA_3072, 90 HCF_OPENSSL_RSA_4096, 91 HCF_OPENSSL_RSA_8192, 92 93 // rsa cipher padding, 94 HCF_OPENSSL_RSA_PKCS1_PADDING, 95 HCF_OPENSSL_RSA_PKCS1_OAEP_PADDING, 96 HCF_OPENSSL_RSA_PSS_PADDING, 97 98 // digest 99 HCF_OPENSSL_DIGEST_NONE, 100 HCF_OPENSSL_DIGEST_MD5, 101 HCF_OPENSSL_DIGEST_SM3, 102 HCF_OPENSSL_DIGEST_SHA1, 103 HCF_OPENSSL_DIGEST_SHA224, 104 HCF_OPENSSL_DIGEST_SHA256, 105 HCF_OPENSSL_DIGEST_SHA384, 106 HCF_OPENSSL_DIGEST_SHA512, 107 108 // primes 109 HCF_OPENSSL_PRIMES_2, 110 HCF_OPENSSL_PRIMES_3, 111 HCF_OPENSSL_PRIMES_4, 112 HCF_OPENSSL_PRIMES_5, 113 114 // dsa 115 HCF_ALG_DSA_1024, 116 HCF_ALG_DSA_2048, 117 HCF_ALG_DSA_3072, 118 119 // sm2 120 HCF_ALG_SM2_256, 121 122 // only for algName(NO SIZE) 123 HCF_ALG_DSA_DEFAULT, 124 HCF_ALG_RSA_DEFAULT, 125 HCF_ALG_ECC_DEFAULT, 126 HCF_ALG_SM2_DEFAULT, 127 HCF_ALG_AES_DEFAULT, 128 HCF_ALG_SM4_DEFAULT, 129 HCF_ALG_DES_DEFAULT, 130 HCF_ALG_3DES_DEFAULT, 131 HCF_ALG_HMAC_DEFAULT, 132 HCF_ALG_ECC_BRAINPOOL_DEFAULT, 133 HCF_ALG_X25519_DEFAULT, 134 HCF_ALG_DH_DEFAULT, 135 136 // key derivation function, PBKDF2 137 HCF_ALG_PBKDF2_DEFAULT, 138 139 // sm2 text format 140 HCF_ALG_TEXT_FORMAT_C1C3C2, 141 HCF_ALG_TEXT_FORMAT_C1C2C3, 142 143 // brainpool 144 HCF_ALG_ECC_BP160R1, 145 HCF_ALG_ECC_BP160T1, 146 HCF_ALG_ECC_BP192R1, 147 HCF_ALG_ECC_BP192T1, 148 HCF_ALG_ECC_BP224R1, 149 HCF_ALG_ECC_BP224T1, 150 HCF_ALG_ECC_BP256R1, 151 HCF_ALG_ECC_BP256T1, 152 HCF_ALG_ECC_BP320R1, 153 HCF_ALG_ECC_BP320T1, 154 HCF_ALG_ECC_BP384R1, 155 HCF_ALG_ECC_BP384T1, 156 HCF_ALG_ECC_BP512R1, 157 HCF_ALG_ECC_BP512T1, 158 159 HCF_ALG_ECC_SECP256K1, 160 161 // ed25519 162 HCF_ALG_ED25519_256, 163 HCF_ALG_X25519_256, 164 165 // DH keysize 166 HCF_OPENSSL_DH_MODP_1536, 167 HCF_OPENSSL_DH_MODP_2048, 168 HCF_OPENSSL_DH_MODP_3072, 169 HCF_OPENSSL_DH_MODP_4096, 170 HCF_OPENSSL_DH_MODP_6144, 171 HCF_OPENSSL_DH_MODP_8192, 172 HCF_OPENSSL_DH_FFDHE_2048, 173 HCF_OPENSSL_DH_FFDHE_3072, 174 HCF_OPENSSL_DH_FFDHE_4096, 175 HCF_OPENSSL_DH_FFDHE_6144, 176 HCF_OPENSSL_DH_FFDHE_8192, 177 178 HCF_ALG_ONLY_SIGN, 179 HCF_ALG_VERIFY_RECOVER, 180 // key derivation function, HKDF 181 HCF_ALG_HKDF_DEFAULT, 182 HCF_ALG_SCRYPT_DEFAULT, 183 184 // hkdf mode 185 HCF_ALG_MODE_EXTRACT_AND_EXPAND, 186 HCF_ALG_MODE_EXTRACT_ONLY, 187 HCF_ALG_MODE_EXPAND_ONLY, 188 } HcfAlgParaValue; 189 190 typedef enum { 191 HCF_OPERATIOPN_ONLY_SIGN = 1, 192 HCF_OPERATION_SIGN, 193 } HcfSignParams; 194 195 typedef enum { 196 HCF_UNCOMPRESSED_FORMAT_VALUE = 1, 197 HCF_COMPRESSED_FORMAT_VALUE, 198 } HcfFormatValue; 199 200 typedef struct { 201 const char *formatName; 202 HcfFormatValue formatValue; 203 } HcfFormatMap; 204 205 typedef struct { 206 const char *tag; 207 HcfAlgParaType paraType; 208 HcfAlgParaValue paraValue; 209 } HcfParaConfig; 210 211 typedef struct { 212 const char *algNameStr; 213 HcfAlgValue algValue; 214 } HcfAlgMap; 215 216 typedef struct { 217 const char *curveNameStr; 218 HcfAlgParaValue algValue; 219 } HcfCurveMap; 220 221 typedef struct { 222 HcfAlgValue algo; 223 HcfAlgParaValue keySize; 224 HcfAlgParaValue mode; 225 HcfAlgParaValue paddingMode; 226 HcfAlgParaValue md; 227 HcfAlgParaValue mgf1md; 228 } CipherAttr; 229 230 typedef struct { 231 HcfAlgValue algo; // algType 232 int32_t bits; // keyLen 233 int32_t primes; // number of primes 234 } HcfAsyKeyGenParams; 235 236 typedef struct { 237 HcfAlgValue algo; // algType 238 HcfAlgParaValue padding; 239 HcfAlgParaValue md; 240 HcfAlgParaValue mgf1md; 241 HcfAlgParaValue operation; 242 } HcfSignatureParams; 243 244 typedef struct { 245 HcfAlgValue algo; 246 } HcfKeyAgreementParams; 247 248 typedef struct { 249 HcfAlgValue algo; // algType 250 HcfAlgParaValue md; 251 HcfAlgParaValue mode; 252 } HcfKdfDeriveParams; 253 254 typedef HcfResult (*SetParameterFunc) (const HcfParaConfig* config, void *params); 255 256 #ifdef __cplusplus 257 extern "C" { 258 #endif 259 260 HcfResult ParseAndSetParameter(const char *paramsStr, void *params, SetParameterFunc setFunc); 261 262 HcfResult ParseAlgNameToParams(const char *algNameStr, HcfAsyKeyGenParams *params); 263 264 HcfResult ParseCurveNameToParams(const char *curveNameStr, HcfAsyKeyGenParams *params); 265 266 HcfResult GetAlgValueByCurveName(const char *curveNameStr, HcfAlgParaValue *algValue); 267 268 HcfResult GetFormatValueByFormatName(const char *formatName, HcfFormatValue *formatValue); 269 270 #ifdef __cplusplus 271 } 272 #endif 273 #endif 274