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