1 /* 2 * Copyright (C) 2022-2023 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 } HcfAlgParaType; 32 33 typedef enum { 34 HCF_ALG_AES = 1, 35 HCF_ALG_DES, 36 HCF_ALG_RSA, 37 HCF_ALG_ECC, 38 HCF_ALG_DSA, 39 HCF_ALG_SM2, 40 HCF_ALG_SM4, 41 HCF_ALG_HMAC, 42 HCF_ALG_PKBDF2, 43 HCF_ALG_ECC_BRAINPOOL, 44 HCF_ALG_ED25519, 45 HCF_ALG_X25519, 46 HCF_ALG_DH, 47 } HcfAlgValue; 48 49 typedef enum { 50 HCF_ALG_ECC_224 = 1, 51 HCF_ALG_ECC_256, 52 HCF_ALG_ECC_384, 53 HCF_ALG_ECC_521, 54 55 HCF_ALG_AES_128, 56 HCF_ALG_AES_192, 57 HCF_ALG_AES_256, 58 HCF_ALG_SM4_128, 59 HCF_ALG_3DES_192, 60 61 HCF_ALG_MODE_NONE, 62 HCF_ALG_MODE_ECB, 63 HCF_ALG_MODE_CBC, 64 HCF_ALG_MODE_CTR, 65 HCF_ALG_MODE_OFB, 66 HCF_ALG_MODE_CFB, 67 HCF_ALG_MODE_CFB1, 68 HCF_ALG_MODE_CFB8, 69 HCF_ALG_MODE_CFB64, 70 HCF_ALG_MODE_CFB128, 71 HCF_ALG_MODE_CCM, 72 HCF_ALG_MODE_GCM, 73 74 HCF_ALG_NOPADDING, 75 HCF_ALG_PADDING_PKCS5, 76 HCF_ALG_PADDING_PKCS7, 77 78 // rsa keysize 79 HCF_OPENSSL_RSA_512, 80 HCF_OPENSSL_RSA_768, 81 HCF_OPENSSL_RSA_1024, 82 HCF_OPENSSL_RSA_2048, 83 HCF_OPENSSL_RSA_3072, 84 HCF_OPENSSL_RSA_4096, 85 HCF_OPENSSL_RSA_8192, 86 87 // rsa cipher padding, 88 HCF_OPENSSL_RSA_PKCS1_PADDING, 89 HCF_OPENSSL_RSA_PKCS1_OAEP_PADDING, 90 HCF_OPENSSL_RSA_PSS_PADDING, 91 92 // digest 93 HCF_OPENSSL_DIGEST_NONE, 94 HCF_OPENSSL_DIGEST_MD5, 95 HCF_OPENSSL_DIGEST_SM3, 96 HCF_OPENSSL_DIGEST_SHA1, 97 HCF_OPENSSL_DIGEST_SHA224, 98 HCF_OPENSSL_DIGEST_SHA256, 99 HCF_OPENSSL_DIGEST_SHA384, 100 HCF_OPENSSL_DIGEST_SHA512, 101 102 // primes 103 HCF_OPENSSL_PRIMES_2, 104 HCF_OPENSSL_PRIMES_3, 105 HCF_OPENSSL_PRIMES_4, 106 HCF_OPENSSL_PRIMES_5, 107 108 // dsa 109 HCF_ALG_DSA_1024, 110 HCF_ALG_DSA_2048, 111 HCF_ALG_DSA_3072, 112 113 // sm2 114 HCF_ALG_SM2_256, 115 116 // only for algName(NO SIZE) 117 HCF_ALG_DSA_DEFAULT, 118 HCF_ALG_RSA_DEFAULT, 119 HCF_ALG_ECC_DEFAULT, 120 HCF_ALG_SM2_DEFAULT, 121 HCF_ALG_AES_DEFAULT, 122 HCF_ALG_SM4_DEFAULT, 123 HCF_ALG_3DES_DEFAULT, 124 HCF_ALG_HMAC_DEFAULT, 125 HCF_ALG_ECC_BRAINPOOL_DEFAULT, 126 HCF_ALG_X25519_DEFAULT, 127 HCF_ALG_DH_DEFAULT, 128 129 // key derivation function, PBKDF2 130 HCF_ALG_PBKDF2_DEFAULT, 131 132 // sm2 text format 133 HCF_ALG_TEXT_FORMAT_C1C3C2, 134 HCF_ALG_TEXT_FORMAT_C1C2C3, 135 136 // brainpool 137 HCF_ALG_ECC_BP160R1, 138 HCF_ALG_ECC_BP160T1, 139 HCF_ALG_ECC_BP192R1, 140 HCF_ALG_ECC_BP192T1, 141 HCF_ALG_ECC_BP224R1, 142 HCF_ALG_ECC_BP224T1, 143 HCF_ALG_ECC_BP256R1, 144 HCF_ALG_ECC_BP256T1, 145 HCF_ALG_ECC_BP320R1, 146 HCF_ALG_ECC_BP320T1, 147 HCF_ALG_ECC_BP384R1, 148 HCF_ALG_ECC_BP384T1, 149 HCF_ALG_ECC_BP512R1, 150 HCF_ALG_ECC_BP512T1, 151 152 // ed25519 153 HCF_ALG_ED25519_256, 154 HCF_ALG_X25519_256, 155 156 // DH keysize 157 HCF_OPENSSL_DH_MODP_1536, 158 HCF_OPENSSL_DH_MODP_2048, 159 HCF_OPENSSL_DH_MODP_3072, 160 HCF_OPENSSL_DH_MODP_4096, 161 HCF_OPENSSL_DH_MODP_6144, 162 HCF_OPENSSL_DH_MODP_8192, 163 HCF_OPENSSL_DH_FFDHE_2048, 164 HCF_OPENSSL_DH_FFDHE_3072, 165 HCF_OPENSSL_DH_FFDHE_4096, 166 HCF_OPENSSL_DH_FFDHE_6144, 167 HCF_OPENSSL_DH_FFDHE_8192, 168 } HcfAlgParaValue; 169 170 typedef struct { 171 const char *tag; 172 HcfAlgParaType paraType; 173 HcfAlgParaValue paraValue; 174 } HcfParaConfig; 175 176 typedef struct { 177 const char *algNameStr; 178 HcfAlgValue algValue; 179 } HcfAlgMap; 180 181 typedef struct { 182 const char *curveNameStr; 183 HcfAlgParaValue algValue; 184 } HcfCurveMap; 185 186 typedef struct { 187 HcfAlgValue algo; 188 HcfAlgParaValue keySize; 189 HcfAlgParaValue mode; 190 HcfAlgParaValue paddingMode; 191 HcfAlgParaValue md; 192 HcfAlgParaValue mgf1md; 193 } CipherAttr; 194 195 typedef struct { 196 HcfAlgValue algo; // algType 197 int32_t bits; // keyLen 198 int32_t primes; // number of primes 199 } HcfAsyKeyGenParams; 200 201 typedef struct { 202 HcfAlgValue algo; // algType 203 HcfAlgParaValue padding; 204 HcfAlgParaValue md; 205 HcfAlgParaValue mgf1md; 206 } HcfSignatureParams; 207 208 typedef struct { 209 HcfAlgValue algo; 210 } HcfKeyAgreementParams; 211 212 typedef struct { 213 HcfAlgValue algo; // algType 214 HcfAlgParaValue md; 215 } HcfKdfDeriveParams; 216 217 typedef HcfResult (*SetParameterFunc) (const HcfParaConfig* config, void *params); 218 219 #ifdef __cplusplus 220 extern "C" { 221 #endif 222 223 HcfResult ParseAndSetParameter(const char *paramsStr, void *params, SetParameterFunc setFunc); 224 225 HcfResult ParseAlgNameToParams(const char *algNameStr, HcfAsyKeyGenParams *params); 226 227 HcfResult ParseCurveNameToParams(const char *curveNameStr, HcfAsyKeyGenParams *params); 228 229 #ifdef __cplusplus 230 } 231 #endif 232 #endif 233