* Copyright (C) 2022-2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef HCF_PARAMS_PARSER_H
#define HCF_PARAMS_PARSER_H
#include <stdint.h>
#include "result.h"
typedef enum {
HCF_ALG_TYPE = 1,
HCF_ALG_KEY_TYPE,
HCF_ALG_MODE,
HCF_ALG_PADDING_TYPE,
HCF_ALG_PRIMES,
HCF_ALG_DIGEST,
HCF_ALG_MGF1_DIGEST,
HCF_ALG_TEXT_FORMAT,
HCF_ALG_SIGN_TYPE,
HCF_ALG_VERIFY_TYPE,
} HcfAlgParaType;
typedef enum {
HCF_ALG_AES = 1,
HCF_ALG_DES,
HCF_ALG_3DES,
HCF_ALG_RSA,
HCF_ALG_ECC,
HCF_ALG_DSA,
HCF_ALG_SM2,
HCF_ALG_SM4,
HCF_ALG_HMAC,
HCF_ALG_PKBDF2,
HCF_ALG_ECC_BRAINPOOL,
HCF_ALG_ED25519,
HCF_ALG_X25519,
HCF_ALG_DH,
HCF_ALG_HKDF,
HCF_ALG_SCRYPT,
HCF_ALG_X963KDF,
HCF_ALG_AES_WRAP,
HCF_ALG_CHACHA20,
HCF_ALG_CHACHA20_POLY1305,
HCF_ALG_RC2,
HCF_ALG_RC4,
HCF_ALG_BLOWFISH,
HCF_ALG_CAST,
HCF_ALG_ML_KEM,
HCF_ALG_ML_DSA,
} HcfAlgValue;
typedef enum {
HCF_ALG_ECC_192 = 1,
HCF_ALG_ECC_224,
HCF_ALG_ECC_256,
HCF_ALG_ECC_384,
HCF_ALG_ECC_521,
HCF_ALG_AES_128,
HCF_ALG_AES_192,
HCF_ALG_AES_256,
HCF_ALG_AES_128_WRAP,
HCF_ALG_AES_192_WRAP,
HCF_ALG_AES_256_WRAP,
HCF_ALG_SM4_128,
HCF_ALG_DES_64,
HCF_ALG_3DES_192,
HCF_ALG_CHACHA20_256,
HCF_ALG_MODE_NONE,
HCF_ALG_MODE_ECB,
HCF_ALG_MODE_CBC,
HCF_ALG_MODE_CTR,
HCF_ALG_MODE_OFB,
HCF_ALG_MODE_CFB,
HCF_ALG_MODE_CFB1,
HCF_ALG_MODE_CFB8,
HCF_ALG_MODE_CFB64,
HCF_ALG_MODE_CFB128,
HCF_ALG_MODE_CCM,
HCF_ALG_MODE_GCM,
HCF_ALG_MODE_XTS,
HCF_ALG_MODE_WRAP,
HCF_ALG_MODE_POLY1305,
HCF_ALG_NOPADDING,
HCF_ALG_PADDING_PKCS5,
HCF_ALG_PADDING_PKCS7,
HCF_OPENSSL_RSA_512,
HCF_OPENSSL_RSA_768,
HCF_OPENSSL_RSA_1024,
HCF_OPENSSL_RSA_2048,
HCF_OPENSSL_RSA_3072,
HCF_OPENSSL_RSA_4096,
HCF_OPENSSL_RSA_8192,
HCF_OPENSSL_RSA_PKCS1_PADDING,
HCF_OPENSSL_RSA_PKCS1_OAEP_PADDING,
HCF_OPENSSL_RSA_PSS_PADDING,
HCF_OPENSSL_DIGEST_NONE,
HCF_OPENSSL_DIGEST_MD5,
HCF_OPENSSL_DIGEST_SM3,
HCF_OPENSSL_DIGEST_SHA1,
HCF_OPENSSL_DIGEST_SHA224,
HCF_OPENSSL_DIGEST_SHA256,
HCF_OPENSSL_DIGEST_SHA384,
HCF_OPENSSL_DIGEST_SHA512,
HCF_OPENSSL_DIGEST_SHA3_256,
HCF_OPENSSL_DIGEST_SHA3_384,
HCF_OPENSSL_DIGEST_SHA3_512,
HCF_OPENSSL_PRIMES_2,
HCF_OPENSSL_PRIMES_3,
HCF_OPENSSL_PRIMES_4,
HCF_OPENSSL_PRIMES_5,
HCF_ALG_DSA_1024,
HCF_ALG_DSA_2048,
HCF_ALG_DSA_3072,
HCF_ALG_SM2_256,
HCF_ALG_DSA_DEFAULT,
HCF_ALG_RSA_DEFAULT,
HCF_ALG_ECC_DEFAULT,
HCF_ALG_SM2_DEFAULT,
HCF_ALG_AES_DEFAULT,
HCF_ALG_SM4_DEFAULT,
HCF_ALG_DES_DEFAULT,
HCF_ALG_3DES_DEFAULT,
HCF_ALG_HMAC_DEFAULT,
HCF_ALG_ECC_BRAINPOOL_DEFAULT,
HCF_ALG_X25519_DEFAULT,
HCF_ALG_DH_DEFAULT,
HCF_ALG_AES_WRAP_DEFAULT,
HCF_ALG_CHACHA20_DEFAULT,
HCF_ALG_RC2_DEFAULT,
HCF_ALG_RC4_DEFAULT,
HCF_ALG_BLOWFISH_DEFAULT,
HCF_ALG_CAST_DEFAULT,
HCF_ALG_ML_KEM_DEFAULT,
HCF_ALG_ML_DSA_DEFAULT,
HCF_ALG_PBKDF2_DEFAULT,
HCF_ALG_TEXT_FORMAT_C1C3C2,
HCF_ALG_TEXT_FORMAT_C1C2C3,
HCF_ALG_ECC_BP160R1,
HCF_ALG_ECC_BP160T1,
HCF_ALG_ECC_BP192R1,
HCF_ALG_ECC_BP192T1,
HCF_ALG_ECC_BP224R1,
HCF_ALG_ECC_BP224T1,
HCF_ALG_ECC_BP256R1,
HCF_ALG_ECC_BP256T1,
HCF_ALG_ECC_BP320R1,
HCF_ALG_ECC_BP320T1,
HCF_ALG_ECC_BP384R1,
HCF_ALG_ECC_BP384T1,
HCF_ALG_ECC_BP512R1,
HCF_ALG_ECC_BP512T1,
HCF_ALG_ECC_SECP256K1,
HCF_ALG_ED25519_256,
HCF_ALG_X25519_256,
HCF_ALG_ML_KEM_512,
HCF_ALG_ML_KEM_768,
HCF_ALG_ML_KEM_1024,
HCF_ALG_ML_DSA_44,
HCF_ALG_ML_DSA_65,
HCF_ALG_ML_DSA_87,
HCF_OPENSSL_DH_MODP_1536,
HCF_OPENSSL_DH_MODP_2048,
HCF_OPENSSL_DH_MODP_3072,
HCF_OPENSSL_DH_MODP_4096,
HCF_OPENSSL_DH_MODP_6144,
HCF_OPENSSL_DH_MODP_8192,
HCF_OPENSSL_DH_FFDHE_2048,
HCF_OPENSSL_DH_FFDHE_3072,
HCF_OPENSSL_DH_FFDHE_4096,
HCF_OPENSSL_DH_FFDHE_6144,
HCF_OPENSSL_DH_FFDHE_8192,
HCF_ALG_ONLY_SIGN,
HCF_ALG_ONLY_VERIFY,
HCF_ALG_VERIFY_RECOVER,
HCF_ALG_HKDF_DEFAULT,
HCF_ALG_SCRYPT_DEFAULT,
HCF_ALG_X963KDF_DEFAULT,
HCF_ALG_MODE_EXTRACT_AND_EXPAND,
HCF_ALG_MODE_EXTRACT_ONLY,
HCF_ALG_MODE_EXPAND_ONLY,
} HcfAlgParaValue;
typedef enum {
HCF_OPERATION_ONLY_SIGN = 1,
HCF_OPERATION_SIGN,
} HcfSignParams;
typedef enum {
HCF_OPERATION_ONLY_VERIFY = 1,
HCF_OPERATION_VERIFY,
} HcfVerifyParams;
typedef enum {
HCF_UNCOMPRESSED_FORMAT_VALUE = 1,
HCF_COMPRESSED_FORMAT_VALUE,
} HcfFormatValue;
typedef struct {
const char *formatName;
HcfFormatValue formatValue;
} HcfFormatMap;
typedef struct {
const char *tag;
HcfAlgParaType paraType;
HcfAlgParaValue paraValue;
} HcfParaConfig;
typedef struct {
const char *algNameStr;
HcfAlgValue algValue;
} HcfAlgMap;
typedef struct {
const char *curveNameStr;
HcfAlgParaValue algValue;
} HcfCurveMap;
typedef struct {
HcfAlgValue algo;
HcfAlgParaValue keySize;
HcfAlgParaValue mode;
HcfAlgParaValue paddingMode;
HcfAlgParaValue md;
HcfAlgParaValue mgf1md;
} CipherAttr;
typedef struct {
HcfAlgValue algo;
int32_t bits;
int32_t primes;
} HcfAsyKeyGenParams;
typedef struct {
HcfAlgValue algo;
HcfAlgParaValue padding;
HcfAlgParaValue md;
HcfAlgParaValue mgf1md;
HcfAlgParaValue operation;
} HcfSignatureParams;
typedef struct {
HcfAlgValue algo;
} HcfKeyAgreementParams;
typedef struct {
HcfAlgValue algo;
HcfAlgParaValue md;
HcfAlgParaValue mode;
} HcfKdfDeriveParams;
typedef HcfResult (*SetParameterFunc) (const HcfParaConfig* config, void *params);
#ifdef __cplusplus
extern "C" {
#endif
HcfResult ParseAndSetParameter(const char *paramsStr, void *params, SetParameterFunc setFunc);
HcfResult ParseAlgNameToParams(const char *algNameStr, HcfAsyKeyGenParams *params);
HcfResult ParseCurveNameToParams(const char *curveNameStr, HcfAsyKeyGenParams *params);
HcfResult GetAlgValueByCurveName(const char *curveNameStr, HcfAlgParaValue *algValue);
HcfResult GetFormatValueByFormatName(const char *formatName, HcfFormatValue *formatValue);
#ifdef __cplusplus
}
#endif
#endif