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 22typedef 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 35typedef 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 52typedef 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 183typedef enum { 184 HCF_OPERATIOPN_ONLY_SIGN = 1, 185 HCF_OPERATION_SIGN, 186} HcfSignParams; 187 188typedef enum { 189 HCF_UNCOMPRESSED_FORMAT_VALUE = 1, 190 HCF_COMPRESSED_FORMAT_VALUE, 191} HcfFormatValue; 192 193typedef struct { 194 const char *formatName; 195 HcfFormatValue formatValue; 196} HcfFormatMap; 197 198typedef struct { 199 const char *tag; 200 HcfAlgParaType paraType; 201 HcfAlgParaValue paraValue; 202} HcfParaConfig; 203 204typedef struct { 205 const char *algNameStr; 206 HcfAlgValue algValue; 207} HcfAlgMap; 208 209typedef struct { 210 const char *curveNameStr; 211 HcfAlgParaValue algValue; 212} HcfCurveMap; 213 214typedef struct { 215 HcfAlgValue algo; 216 HcfAlgParaValue keySize; 217 HcfAlgParaValue mode; 218 HcfAlgParaValue paddingMode; 219 HcfAlgParaValue md; 220 HcfAlgParaValue mgf1md; 221} CipherAttr; 222 223typedef struct { 224 HcfAlgValue algo; // algType 225 int32_t bits; // keyLen 226 int32_t primes; // number of primes 227} HcfAsyKeyGenParams; 228 229typedef struct { 230 HcfAlgValue algo; // algType 231 HcfAlgParaValue padding; 232 HcfAlgParaValue md; 233 HcfAlgParaValue mgf1md; 234 HcfAlgParaValue operation; 235} HcfSignatureParams; 236 237typedef struct { 238 HcfAlgValue algo; 239} HcfKeyAgreementParams; 240 241typedef struct { 242 HcfAlgValue algo; // algType 243 HcfAlgParaValue md; 244 HcfAlgParaValue mode; 245} HcfKdfDeriveParams; 246 247typedef HcfResult (*SetParameterFunc) (const HcfParaConfig* config, void *params); 248 249#ifdef __cplusplus 250extern "C" { 251#endif 252 253HcfResult ParseAndSetParameter(const char *paramsStr, void *params, SetParameterFunc setFunc); 254 255HcfResult ParseAlgNameToParams(const char *algNameStr, HcfAsyKeyGenParams *params); 256 257HcfResult ParseCurveNameToParams(const char *curveNameStr, HcfAsyKeyGenParams *params); 258 259HcfResult GetAlgValueByCurveName(const char *curveNameStr, HcfAlgParaValue *algValue); 260 261HcfResult GetFormatValueByFormatName(const char *formatName, HcfFormatValue *formatValue); 262 263#ifdef __cplusplus 264} 265#endif 266#endif 267