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 // ed25519 156 HCF_ALG_ED25519_256, 157 HCF_ALG_X25519_256, 158 159 // DH keysize 160 HCF_OPENSSL_DH_MODP_1536, 161 HCF_OPENSSL_DH_MODP_2048, 162 HCF_OPENSSL_DH_MODP_3072, 163 HCF_OPENSSL_DH_MODP_4096, 164 HCF_OPENSSL_DH_MODP_6144, 165 HCF_OPENSSL_DH_MODP_8192, 166 HCF_OPENSSL_DH_FFDHE_2048, 167 HCF_OPENSSL_DH_FFDHE_3072, 168 HCF_OPENSSL_DH_FFDHE_4096, 169 HCF_OPENSSL_DH_FFDHE_6144, 170 HCF_OPENSSL_DH_FFDHE_8192, 171 172 HCF_ALG_ONLY_SIGN, 173 HCF_ALG_VERIFY_RECOVER, 174 // key derivation function, HKDF 175 HCF_ALG_HKDF_DEFAULT, 176 177 // hkdf mode 178 HCF_ALG_MODE_EXTRACT_AND_EXPAND, 179 HCF_ALG_MODE_EXTRACT_ONLY, 180 HCF_ALG_MODE_EXPAND_ONLY, 181 } HcfAlgParaValue; 182 183 typedef enum { 184 HCF_OPERATIOPN_ONLY_SIGN = 1, 185 HCF_OPERATION_SIGN, 186 } HcfSignParams; 187 188 typedef enum { 189 HCF_UNCOMPRESSED_FORMAT_VALUE = 1, 190 HCF_COMPRESSED_FORMAT_VALUE, 191 } HcfFormatValue; 192 193 typedef struct { 194 const char *formatName; 195 HcfFormatValue formatValue; 196 } HcfFormatMap; 197 198 typedef struct { 199 const char *tag; 200 HcfAlgParaType paraType; 201 HcfAlgParaValue paraValue; 202 } HcfParaConfig; 203 204 typedef struct { 205 const char *algNameStr; 206 HcfAlgValue algValue; 207 } HcfAlgMap; 208 209 typedef struct { 210 const char *curveNameStr; 211 HcfAlgParaValue algValue; 212 } HcfCurveMap; 213 214 typedef struct { 215 HcfAlgValue algo; 216 HcfAlgParaValue keySize; 217 HcfAlgParaValue mode; 218 HcfAlgParaValue paddingMode; 219 HcfAlgParaValue md; 220 HcfAlgParaValue mgf1md; 221 } CipherAttr; 222 223 typedef struct { 224 HcfAlgValue algo; // algType 225 int32_t bits; // keyLen 226 int32_t primes; // number of primes 227 } HcfAsyKeyGenParams; 228 229 typedef struct { 230 HcfAlgValue algo; // algType 231 HcfAlgParaValue padding; 232 HcfAlgParaValue md; 233 HcfAlgParaValue mgf1md; 234 HcfAlgParaValue operation; 235 } HcfSignatureParams; 236 237 typedef struct { 238 HcfAlgValue algo; 239 } HcfKeyAgreementParams; 240 241 typedef struct { 242 HcfAlgValue algo; // algType 243 HcfAlgParaValue md; 244 HcfAlgParaValue mode; 245 } HcfKdfDeriveParams; 246 247 typedef HcfResult (*SetParameterFunc) (const HcfParaConfig* config, void *params); 248 249 #ifdef __cplusplus 250 extern "C" { 251 #endif 252 253 HcfResult ParseAndSetParameter(const char *paramsStr, void *params, SetParameterFunc setFunc); 254 255 HcfResult ParseAlgNameToParams(const char *algNameStr, HcfAsyKeyGenParams *params); 256 257 HcfResult ParseCurveNameToParams(const char *curveNameStr, HcfAsyKeyGenParams *params); 258 259 HcfResult GetAlgValueByCurveName(const char *curveNameStr, HcfAlgParaValue *algValue); 260 261 HcfResult GetFormatValueByFormatName(const char *formatName, HcfFormatValue *formatValue); 262 263 #ifdef __cplusplus 264 } 265 #endif 266 #endif 267