11b8d9b87Sopenharmony_ci/* 21b8d9b87Sopenharmony_ci* Copyright (C) 2022-2024 Huawei Device Co., Ltd. 31b8d9b87Sopenharmony_ci* Licensed under the Apache License, Version 2.0 (the "License"); 41b8d9b87Sopenharmony_ci* you may not use this file except in compliance with the License. 51b8d9b87Sopenharmony_ci* You may obtain a copy of the License at 61b8d9b87Sopenharmony_ci* 71b8d9b87Sopenharmony_ci* http://www.apache.org/licenses/LICENSE-2.0 81b8d9b87Sopenharmony_ci* 91b8d9b87Sopenharmony_ci* Unless required by applicable law or agreed to in writing, software 101b8d9b87Sopenharmony_ci* distributed under the License is distributed on an "AS IS" BASIS, 111b8d9b87Sopenharmony_ci* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121b8d9b87Sopenharmony_ci* See the License for the specific language governing permissions and 131b8d9b87Sopenharmony_ci* limitations under the License. 141b8d9b87Sopenharmony_ci*/ 151b8d9b87Sopenharmony_ci 161b8d9b87Sopenharmony_ci#ifndef HCF_PARAMS_PARSER_H 171b8d9b87Sopenharmony_ci#define HCF_PARAMS_PARSER_H 181b8d9b87Sopenharmony_ci 191b8d9b87Sopenharmony_ci#include <stdint.h> 201b8d9b87Sopenharmony_ci#include "result.h" 211b8d9b87Sopenharmony_ci 221b8d9b87Sopenharmony_citypedef enum { 231b8d9b87Sopenharmony_ci HCF_ALG_TYPE = 1, 241b8d9b87Sopenharmony_ci HCF_ALG_KEY_TYPE, 251b8d9b87Sopenharmony_ci HCF_ALG_MODE, 261b8d9b87Sopenharmony_ci HCF_ALG_PADDING_TYPE, 271b8d9b87Sopenharmony_ci HCF_ALG_PRIMES, 281b8d9b87Sopenharmony_ci HCF_ALG_DIGEST, 291b8d9b87Sopenharmony_ci HCF_ALG_MGF1_DIGEST, 301b8d9b87Sopenharmony_ci HCF_ALG_TEXT_FORMAT, 311b8d9b87Sopenharmony_ci HCF_ALG_SIGN_TYPE, 321b8d9b87Sopenharmony_ci HCF_ALG_VERIFY_TYPE, 331b8d9b87Sopenharmony_ci} HcfAlgParaType; 341b8d9b87Sopenharmony_ci 351b8d9b87Sopenharmony_citypedef enum { 361b8d9b87Sopenharmony_ci HCF_ALG_AES = 1, 371b8d9b87Sopenharmony_ci HCF_ALG_DES, 381b8d9b87Sopenharmony_ci HCF_ALG_RSA, 391b8d9b87Sopenharmony_ci HCF_ALG_ECC, 401b8d9b87Sopenharmony_ci HCF_ALG_DSA, 411b8d9b87Sopenharmony_ci HCF_ALG_SM2, 421b8d9b87Sopenharmony_ci HCF_ALG_SM4, 431b8d9b87Sopenharmony_ci HCF_ALG_HMAC, 441b8d9b87Sopenharmony_ci HCF_ALG_PKBDF2, 451b8d9b87Sopenharmony_ci HCF_ALG_ECC_BRAINPOOL, 461b8d9b87Sopenharmony_ci HCF_ALG_ED25519, 471b8d9b87Sopenharmony_ci HCF_ALG_X25519, 481b8d9b87Sopenharmony_ci HCF_ALG_DH, 491b8d9b87Sopenharmony_ci HCF_ALG_HKDF, 501b8d9b87Sopenharmony_ci} HcfAlgValue; 511b8d9b87Sopenharmony_ci 521b8d9b87Sopenharmony_citypedef enum { 531b8d9b87Sopenharmony_ci HCF_ALG_ECC_224 = 1, 541b8d9b87Sopenharmony_ci HCF_ALG_ECC_256, 551b8d9b87Sopenharmony_ci HCF_ALG_ECC_384, 561b8d9b87Sopenharmony_ci HCF_ALG_ECC_521, 571b8d9b87Sopenharmony_ci 581b8d9b87Sopenharmony_ci HCF_ALG_AES_128, 591b8d9b87Sopenharmony_ci HCF_ALG_AES_192, 601b8d9b87Sopenharmony_ci HCF_ALG_AES_256, 611b8d9b87Sopenharmony_ci HCF_ALG_SM4_128, 621b8d9b87Sopenharmony_ci HCF_ALG_3DES_192, 631b8d9b87Sopenharmony_ci 641b8d9b87Sopenharmony_ci HCF_ALG_MODE_NONE, 651b8d9b87Sopenharmony_ci HCF_ALG_MODE_ECB, 661b8d9b87Sopenharmony_ci HCF_ALG_MODE_CBC, 671b8d9b87Sopenharmony_ci HCF_ALG_MODE_CTR, 681b8d9b87Sopenharmony_ci HCF_ALG_MODE_OFB, 691b8d9b87Sopenharmony_ci HCF_ALG_MODE_CFB, 701b8d9b87Sopenharmony_ci HCF_ALG_MODE_CFB1, 711b8d9b87Sopenharmony_ci HCF_ALG_MODE_CFB8, 721b8d9b87Sopenharmony_ci HCF_ALG_MODE_CFB64, 731b8d9b87Sopenharmony_ci HCF_ALG_MODE_CFB128, 741b8d9b87Sopenharmony_ci HCF_ALG_MODE_CCM, 751b8d9b87Sopenharmony_ci HCF_ALG_MODE_GCM, 761b8d9b87Sopenharmony_ci 771b8d9b87Sopenharmony_ci HCF_ALG_NOPADDING, 781b8d9b87Sopenharmony_ci HCF_ALG_PADDING_PKCS5, 791b8d9b87Sopenharmony_ci HCF_ALG_PADDING_PKCS7, 801b8d9b87Sopenharmony_ci 811b8d9b87Sopenharmony_ci // rsa keysize 821b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_512, 831b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_768, 841b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_1024, 851b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_2048, 861b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_3072, 871b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_4096, 881b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_8192, 891b8d9b87Sopenharmony_ci 901b8d9b87Sopenharmony_ci // rsa cipher padding, 911b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_PKCS1_PADDING, 921b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_PKCS1_OAEP_PADDING, 931b8d9b87Sopenharmony_ci HCF_OPENSSL_RSA_PSS_PADDING, 941b8d9b87Sopenharmony_ci 951b8d9b87Sopenharmony_ci // digest 961b8d9b87Sopenharmony_ci HCF_OPENSSL_DIGEST_NONE, 971b8d9b87Sopenharmony_ci HCF_OPENSSL_DIGEST_MD5, 981b8d9b87Sopenharmony_ci HCF_OPENSSL_DIGEST_SM3, 991b8d9b87Sopenharmony_ci HCF_OPENSSL_DIGEST_SHA1, 1001b8d9b87Sopenharmony_ci HCF_OPENSSL_DIGEST_SHA224, 1011b8d9b87Sopenharmony_ci HCF_OPENSSL_DIGEST_SHA256, 1021b8d9b87Sopenharmony_ci HCF_OPENSSL_DIGEST_SHA384, 1031b8d9b87Sopenharmony_ci HCF_OPENSSL_DIGEST_SHA512, 1041b8d9b87Sopenharmony_ci 1051b8d9b87Sopenharmony_ci // primes 1061b8d9b87Sopenharmony_ci HCF_OPENSSL_PRIMES_2, 1071b8d9b87Sopenharmony_ci HCF_OPENSSL_PRIMES_3, 1081b8d9b87Sopenharmony_ci HCF_OPENSSL_PRIMES_4, 1091b8d9b87Sopenharmony_ci HCF_OPENSSL_PRIMES_5, 1101b8d9b87Sopenharmony_ci 1111b8d9b87Sopenharmony_ci // dsa 1121b8d9b87Sopenharmony_ci HCF_ALG_DSA_1024, 1131b8d9b87Sopenharmony_ci HCF_ALG_DSA_2048, 1141b8d9b87Sopenharmony_ci HCF_ALG_DSA_3072, 1151b8d9b87Sopenharmony_ci 1161b8d9b87Sopenharmony_ci // sm2 1171b8d9b87Sopenharmony_ci HCF_ALG_SM2_256, 1181b8d9b87Sopenharmony_ci 1191b8d9b87Sopenharmony_ci // only for algName(NO SIZE) 1201b8d9b87Sopenharmony_ci HCF_ALG_DSA_DEFAULT, 1211b8d9b87Sopenharmony_ci HCF_ALG_RSA_DEFAULT, 1221b8d9b87Sopenharmony_ci HCF_ALG_ECC_DEFAULT, 1231b8d9b87Sopenharmony_ci HCF_ALG_SM2_DEFAULT, 1241b8d9b87Sopenharmony_ci HCF_ALG_AES_DEFAULT, 1251b8d9b87Sopenharmony_ci HCF_ALG_SM4_DEFAULT, 1261b8d9b87Sopenharmony_ci HCF_ALG_3DES_DEFAULT, 1271b8d9b87Sopenharmony_ci HCF_ALG_HMAC_DEFAULT, 1281b8d9b87Sopenharmony_ci HCF_ALG_ECC_BRAINPOOL_DEFAULT, 1291b8d9b87Sopenharmony_ci HCF_ALG_X25519_DEFAULT, 1301b8d9b87Sopenharmony_ci HCF_ALG_DH_DEFAULT, 1311b8d9b87Sopenharmony_ci 1321b8d9b87Sopenharmony_ci // key derivation function, PBKDF2 1331b8d9b87Sopenharmony_ci HCF_ALG_PBKDF2_DEFAULT, 1341b8d9b87Sopenharmony_ci 1351b8d9b87Sopenharmony_ci // sm2 text format 1361b8d9b87Sopenharmony_ci HCF_ALG_TEXT_FORMAT_C1C3C2, 1371b8d9b87Sopenharmony_ci HCF_ALG_TEXT_FORMAT_C1C2C3, 1381b8d9b87Sopenharmony_ci 1391b8d9b87Sopenharmony_ci // brainpool 1401b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP160R1, 1411b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP160T1, 1421b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP192R1, 1431b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP192T1, 1441b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP224R1, 1451b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP224T1, 1461b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP256R1, 1471b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP256T1, 1481b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP320R1, 1491b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP320T1, 1501b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP384R1, 1511b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP384T1, 1521b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP512R1, 1531b8d9b87Sopenharmony_ci HCF_ALG_ECC_BP512T1, 1541b8d9b87Sopenharmony_ci 1551b8d9b87Sopenharmony_ci // ed25519 1561b8d9b87Sopenharmony_ci HCF_ALG_ED25519_256, 1571b8d9b87Sopenharmony_ci HCF_ALG_X25519_256, 1581b8d9b87Sopenharmony_ci 1591b8d9b87Sopenharmony_ci // DH keysize 1601b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_MODP_1536, 1611b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_MODP_2048, 1621b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_MODP_3072, 1631b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_MODP_4096, 1641b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_MODP_6144, 1651b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_MODP_8192, 1661b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_FFDHE_2048, 1671b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_FFDHE_3072, 1681b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_FFDHE_4096, 1691b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_FFDHE_6144, 1701b8d9b87Sopenharmony_ci HCF_OPENSSL_DH_FFDHE_8192, 1711b8d9b87Sopenharmony_ci 1721b8d9b87Sopenharmony_ci HCF_ALG_ONLY_SIGN, 1731b8d9b87Sopenharmony_ci HCF_ALG_VERIFY_RECOVER, 1741b8d9b87Sopenharmony_ci // key derivation function, HKDF 1751b8d9b87Sopenharmony_ci HCF_ALG_HKDF_DEFAULT, 1761b8d9b87Sopenharmony_ci 1771b8d9b87Sopenharmony_ci // hkdf mode 1781b8d9b87Sopenharmony_ci HCF_ALG_MODE_EXTRACT_AND_EXPAND, 1791b8d9b87Sopenharmony_ci HCF_ALG_MODE_EXTRACT_ONLY, 1801b8d9b87Sopenharmony_ci HCF_ALG_MODE_EXPAND_ONLY, 1811b8d9b87Sopenharmony_ci} HcfAlgParaValue; 1821b8d9b87Sopenharmony_ci 1831b8d9b87Sopenharmony_citypedef enum { 1841b8d9b87Sopenharmony_ci HCF_OPERATIOPN_ONLY_SIGN = 1, 1851b8d9b87Sopenharmony_ci HCF_OPERATION_SIGN, 1861b8d9b87Sopenharmony_ci} HcfSignParams; 1871b8d9b87Sopenharmony_ci 1881b8d9b87Sopenharmony_citypedef enum { 1891b8d9b87Sopenharmony_ci HCF_UNCOMPRESSED_FORMAT_VALUE = 1, 1901b8d9b87Sopenharmony_ci HCF_COMPRESSED_FORMAT_VALUE, 1911b8d9b87Sopenharmony_ci} HcfFormatValue; 1921b8d9b87Sopenharmony_ci 1931b8d9b87Sopenharmony_citypedef struct { 1941b8d9b87Sopenharmony_ci const char *formatName; 1951b8d9b87Sopenharmony_ci HcfFormatValue formatValue; 1961b8d9b87Sopenharmony_ci} HcfFormatMap; 1971b8d9b87Sopenharmony_ci 1981b8d9b87Sopenharmony_citypedef struct { 1991b8d9b87Sopenharmony_ci const char *tag; 2001b8d9b87Sopenharmony_ci HcfAlgParaType paraType; 2011b8d9b87Sopenharmony_ci HcfAlgParaValue paraValue; 2021b8d9b87Sopenharmony_ci} HcfParaConfig; 2031b8d9b87Sopenharmony_ci 2041b8d9b87Sopenharmony_citypedef struct { 2051b8d9b87Sopenharmony_ci const char *algNameStr; 2061b8d9b87Sopenharmony_ci HcfAlgValue algValue; 2071b8d9b87Sopenharmony_ci} HcfAlgMap; 2081b8d9b87Sopenharmony_ci 2091b8d9b87Sopenharmony_citypedef struct { 2101b8d9b87Sopenharmony_ci const char *curveNameStr; 2111b8d9b87Sopenharmony_ci HcfAlgParaValue algValue; 2121b8d9b87Sopenharmony_ci} HcfCurveMap; 2131b8d9b87Sopenharmony_ci 2141b8d9b87Sopenharmony_citypedef struct { 2151b8d9b87Sopenharmony_ci HcfAlgValue algo; 2161b8d9b87Sopenharmony_ci HcfAlgParaValue keySize; 2171b8d9b87Sopenharmony_ci HcfAlgParaValue mode; 2181b8d9b87Sopenharmony_ci HcfAlgParaValue paddingMode; 2191b8d9b87Sopenharmony_ci HcfAlgParaValue md; 2201b8d9b87Sopenharmony_ci HcfAlgParaValue mgf1md; 2211b8d9b87Sopenharmony_ci} CipherAttr; 2221b8d9b87Sopenharmony_ci 2231b8d9b87Sopenharmony_citypedef struct { 2241b8d9b87Sopenharmony_ci HcfAlgValue algo; // algType 2251b8d9b87Sopenharmony_ci int32_t bits; // keyLen 2261b8d9b87Sopenharmony_ci int32_t primes; // number of primes 2271b8d9b87Sopenharmony_ci} HcfAsyKeyGenParams; 2281b8d9b87Sopenharmony_ci 2291b8d9b87Sopenharmony_citypedef struct { 2301b8d9b87Sopenharmony_ci HcfAlgValue algo; // algType 2311b8d9b87Sopenharmony_ci HcfAlgParaValue padding; 2321b8d9b87Sopenharmony_ci HcfAlgParaValue md; 2331b8d9b87Sopenharmony_ci HcfAlgParaValue mgf1md; 2341b8d9b87Sopenharmony_ci HcfAlgParaValue operation; 2351b8d9b87Sopenharmony_ci} HcfSignatureParams; 2361b8d9b87Sopenharmony_ci 2371b8d9b87Sopenharmony_citypedef struct { 2381b8d9b87Sopenharmony_ci HcfAlgValue algo; 2391b8d9b87Sopenharmony_ci} HcfKeyAgreementParams; 2401b8d9b87Sopenharmony_ci 2411b8d9b87Sopenharmony_citypedef struct { 2421b8d9b87Sopenharmony_ci HcfAlgValue algo; // algType 2431b8d9b87Sopenharmony_ci HcfAlgParaValue md; 2441b8d9b87Sopenharmony_ci HcfAlgParaValue mode; 2451b8d9b87Sopenharmony_ci} HcfKdfDeriveParams; 2461b8d9b87Sopenharmony_ci 2471b8d9b87Sopenharmony_citypedef HcfResult (*SetParameterFunc) (const HcfParaConfig* config, void *params); 2481b8d9b87Sopenharmony_ci 2491b8d9b87Sopenharmony_ci#ifdef __cplusplus 2501b8d9b87Sopenharmony_ciextern "C" { 2511b8d9b87Sopenharmony_ci#endif 2521b8d9b87Sopenharmony_ci 2531b8d9b87Sopenharmony_ciHcfResult ParseAndSetParameter(const char *paramsStr, void *params, SetParameterFunc setFunc); 2541b8d9b87Sopenharmony_ci 2551b8d9b87Sopenharmony_ciHcfResult ParseAlgNameToParams(const char *algNameStr, HcfAsyKeyGenParams *params); 2561b8d9b87Sopenharmony_ci 2571b8d9b87Sopenharmony_ciHcfResult ParseCurveNameToParams(const char *curveNameStr, HcfAsyKeyGenParams *params); 2581b8d9b87Sopenharmony_ci 2591b8d9b87Sopenharmony_ciHcfResult GetAlgValueByCurveName(const char *curveNameStr, HcfAlgParaValue *algValue); 2601b8d9b87Sopenharmony_ci 2611b8d9b87Sopenharmony_ciHcfResult GetFormatValueByFormatName(const char *formatName, HcfFormatValue *formatValue); 2621b8d9b87Sopenharmony_ci 2631b8d9b87Sopenharmony_ci#ifdef __cplusplus 2641b8d9b87Sopenharmony_ci} 2651b8d9b87Sopenharmony_ci#endif 2661b8d9b87Sopenharmony_ci#endif 267