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 } HcfAlgValue; 51 52 typedef enum { 53 HCF_ALG_ECC_224 = 1, 54 HCF_ALG_ECC_256, 55 HCF_ALG_ECC_384, 56 HCF_ALG_ECC_521, 57 58 HCF_ALG_AES_128, 59 HCF_ALG_AES_192, 60 HCF_ALG_AES_256, 61 HCF_ALG_SM4_128, 62 HCF_ALG_3DES_192, 63 64 HCF_ALG_MODE_NONE, 65 HCF_ALG_MODE_ECB, 66 HCF_ALG_MODE_CBC, 67 HCF_ALG_MODE_CTR, 68 HCF_ALG_MODE_OFB, 69 HCF_ALG_MODE_CFB, 70 HCF_ALG_MODE_CFB1, 71 HCF_ALG_MODE_CFB8, 72 HCF_ALG_MODE_CFB64, 73 HCF_ALG_MODE_CFB128, 74 HCF_ALG_MODE_CCM, 75 HCF_ALG_MODE_GCM, 76 77 HCF_ALG_NOPADDING, 78 HCF_ALG_PADDING_PKCS5, 79 HCF_ALG_PADDING_PKCS7, 80 81 // rsa keysize 82 HCF_OPENSSL_RSA_512, 83 HCF_OPENSSL_RSA_768, 84 HCF_OPENSSL_RSA_1024, 85 HCF_OPENSSL_RSA_2048, 86 HCF_OPENSSL_RSA_3072, 87 HCF_OPENSSL_RSA_4096, 88 HCF_OPENSSL_RSA_8192, 89 90 // rsa cipher padding, 91 HCF_OPENSSL_RSA_PKCS1_PADDING, 92 HCF_OPENSSL_RSA_PKCS1_OAEP_PADDING, 93 HCF_OPENSSL_RSA_PSS_PADDING, 94 95 // digest 96 HCF_OPENSSL_DIGEST_NONE, 97 HCF_OPENSSL_DIGEST_MD5, 98 HCF_OPENSSL_DIGEST_SM3, 99 HCF_OPENSSL_DIGEST_SHA1, 100 HCF_OPENSSL_DIGEST_SHA224, 101 HCF_OPENSSL_DIGEST_SHA256, 102 HCF_OPENSSL_DIGEST_SHA384, 103 HCF_OPENSSL_DIGEST_SHA512, 104 105 // primes 106 HCF_OPENSSL_PRIMES_2, 107 HCF_OPENSSL_PRIMES_3, 108 HCF_OPENSSL_PRIMES_4, 109 HCF_OPENSSL_PRIMES_5, 110 111 // dsa 112 HCF_ALG_DSA_1024, 113 HCF_ALG_DSA_2048, 114 HCF_ALG_DSA_3072, 115 116 // sm2 117 HCF_ALG_SM2_256, 118 119 // only for algName(NO SIZE) 120 HCF_ALG_DSA_DEFAULT, 121 HCF_ALG_RSA_DEFAULT, 122 HCF_ALG_ECC_DEFAULT, 123 HCF_ALG_SM2_DEFAULT, 124 HCF_ALG_AES_DEFAULT, 125 HCF_ALG_SM4_DEFAULT, 126 HCF_ALG_3DES_DEFAULT, 127 HCF_ALG_HMAC_DEFAULT, 128 HCF_ALG_ECC_BRAINPOOL_DEFAULT, 129 HCF_ALG_X25519_DEFAULT, 130 HCF_ALG_DH_DEFAULT, 131 132 // key derivation function, PBKDF2 133 HCF_ALG_PBKDF2_DEFAULT, 134 135 // sm2 text format 136 HCF_ALG_TEXT_FORMAT_C1C3C2, 137 HCF_ALG_TEXT_FORMAT_C1C2C3, 138 139 // brainpool 140 HCF_ALG_ECC_BP160R1, 141 HCF_ALG_ECC_BP160T1, 142 HCF_ALG_ECC_BP192R1, 143 HCF_ALG_ECC_BP192T1, 144 HCF_ALG_ECC_BP224R1, 145 HCF_ALG_ECC_BP224T1, 146 HCF_ALG_ECC_BP256R1, 147 HCF_ALG_ECC_BP256T1, 148 HCF_ALG_ECC_BP320R1, 149 HCF_ALG_ECC_BP320T1, 150 HCF_ALG_ECC_BP384R1, 151 HCF_ALG_ECC_BP384T1, 152 HCF_ALG_ECC_BP512R1, 153 HCF_ALG_ECC_BP512T1, 154 155 HCF_ALG_ECC_SECP256K1, 156 157 // ed25519 158 HCF_ALG_ED25519_256, 159 HCF_ALG_X25519_256, 160 161 // DH keysize 162 HCF_OPENSSL_DH_MODP_1536, 163 HCF_OPENSSL_DH_MODP_2048, 164 HCF_OPENSSL_DH_MODP_3072, 165 HCF_OPENSSL_DH_MODP_4096, 166 HCF_OPENSSL_DH_MODP_6144, 167 HCF_OPENSSL_DH_MODP_8192, 168 HCF_OPENSSL_DH_FFDHE_2048, 169 HCF_OPENSSL_DH_FFDHE_3072, 170 HCF_OPENSSL_DH_FFDHE_4096, 171 HCF_OPENSSL_DH_FFDHE_6144, 172 HCF_OPENSSL_DH_FFDHE_8192, 173 174 HCF_ALG_ONLY_SIGN, 175 HCF_ALG_VERIFY_RECOVER, 176 // key derivation function, HKDF 177 HCF_ALG_HKDF_DEFAULT, 178 179 // hkdf mode 180 HCF_ALG_MODE_EXTRACT_AND_EXPAND, 181 HCF_ALG_MODE_EXTRACT_ONLY, 182 HCF_ALG_MODE_EXPAND_ONLY, 183 } HcfAlgParaValue; 184 185 typedef enum { 186 HCF_OPERATIOPN_ONLY_SIGN = 1, 187 HCF_OPERATION_SIGN, 188 } HcfSignParams; 189 190 typedef enum { 191 HCF_UNCOMPRESSED_FORMAT_VALUE = 1, 192 HCF_COMPRESSED_FORMAT_VALUE, 193 } HcfFormatValue; 194 195 typedef struct { 196 const char *formatName; 197 HcfFormatValue formatValue; 198 } HcfFormatMap; 199 200 typedef struct { 201 const char *tag; 202 HcfAlgParaType paraType; 203 HcfAlgParaValue paraValue; 204 } HcfParaConfig; 205 206 typedef struct { 207 const char *algNameStr; 208 HcfAlgValue algValue; 209 } HcfAlgMap; 210 211 typedef struct { 212 const char *curveNameStr; 213 HcfAlgParaValue algValue; 214 } HcfCurveMap; 215 216 typedef struct { 217 HcfAlgValue algo; 218 HcfAlgParaValue keySize; 219 HcfAlgParaValue mode; 220 HcfAlgParaValue paddingMode; 221 HcfAlgParaValue md; 222 HcfAlgParaValue mgf1md; 223 } CipherAttr; 224 225 typedef struct { 226 HcfAlgValue algo; // algType 227 int32_t bits; // keyLen 228 int32_t primes; // number of primes 229 } HcfAsyKeyGenParams; 230 231 typedef struct { 232 HcfAlgValue algo; // algType 233 HcfAlgParaValue padding; 234 HcfAlgParaValue md; 235 HcfAlgParaValue mgf1md; 236 HcfAlgParaValue operation; 237 } HcfSignatureParams; 238 239 typedef struct { 240 HcfAlgValue algo; 241 } HcfKeyAgreementParams; 242 243 typedef struct { 244 HcfAlgValue algo; // algType 245 HcfAlgParaValue md; 246 HcfAlgParaValue mode; 247 } HcfKdfDeriveParams; 248 249 typedef HcfResult (*SetParameterFunc) (const HcfParaConfig* config, void *params); 250 251 #ifdef __cplusplus 252 extern "C" { 253 #endif 254 255 HcfResult ParseAndSetParameter(const char *paramsStr, void *params, SetParameterFunc setFunc); 256 257 HcfResult ParseAlgNameToParams(const char *algNameStr, HcfAsyKeyGenParams *params); 258 259 HcfResult ParseCurveNameToParams(const char *curveNameStr, HcfAsyKeyGenParams *params); 260 261 HcfResult GetAlgValueByCurveName(const char *curveNameStr, HcfAlgParaValue *algValue); 262 263 HcfResult GetFormatValueByFormatName(const char *formatName, HcfFormatValue *formatValue); 264 265 #ifdef __cplusplus 266 } 267 #endif 268 #endif 269