5#ifndef __DAO_LIQUID_CRYPTO_H__
6#define __DAO_LIQUID_CRYPTO_H__
20#define DAO_LC_VERSION "26.06.0"
22#define DAO_CRYPTO_VERSION_LEN 32
24#define DAO_CRYPTO_MAX_NB_DEV 1
26#define DAO_CMD_QP_IDX_INVALID 0xFFFF
28#define DAO_LC_SESS_ID_INVALID 0
30#define DAO_LC_SESS_ID_HASH 1
32#define DAO_LC_SESS_ID_AES_KEY_WRAP 2
34#define DAO_LC_MAX_DIGEST_LEN 255
36#define DAO_LC_MAX_AUTH_KEY_LEN 1024
38#define DAO_LC_AES_KEY_WRAP_MAX_KEY_DATA_LEN 3072
40#define DAO_LC_AES_MAX_KEY_ENC_KEY_LEN 32
42#define DAO_LC_AES_KEY_WRAP_IV_LEN 8
44#define DAO_LC_RSA_OAEP_MAX_LABEL_LEN 1024
46#define DAO_LC_RSA_OAEP_MAX_MOD_LEN 988
48#define DAO_LC_SHA3_MAX_CUSTOM_STRING_LEN 511
50#define DAO_LC_SHA3_MAX_FUNCTION_NAME_LEN 511
52#define DAO_LC_KMAC_MAX_AUTH_KEY_LEN 511
54#define DAO_LC_COMPRESS_MIN_COMP_LEVEL 1
56#define DAO_LC_COMPRESS_MAX_COMP_LEVEL 9
58#define DAO_LC_COMPRESS_MAX_SEG_SIZE 16384
60#define DAO_LC_MAX_AAD_LEN 1024
62#define DAO_LC_MAX_MOD_LEN 1024
727 DAO_LC_FC_CIPHER_THEN_AUTH = 0,
729 DAO_LC_FC_AUTH_THEN_CIPHER = 1
821 DAO_LC_AE_EC_ID_P192 = 0,
823 DAO_LC_AE_EC_ID_P224 = 1,
825 DAO_LC_AE_EC_ID_P256 = 2,
827 DAO_LC_AE_EC_ID_P384 = 3,
829 DAO_LC_AE_EC_ID_P521 = 4,
1035 bool is_pqc_enabled;
1040 bool is_compdev_enabled;
1146struct dao_lc_random_op {
1419 uint16_t mod_len, uint16_t exp_len, uint16_t msg_len,
1420 const uint8_t *mod,
const uint8_t *exp,
const uint8_t *msg,
1421 uint8_t *em, uint64_t op_cookie);
1461 uint16_t mod_len, uint16_t exp_len,
const uint8_t *mod,
1462 const uint8_t *exp,
const uint8_t *em, uint8_t *msg,
1463 uint64_t op_cookie);
1509 uint16_t msg_len,
const uint8_t *q,
const uint8_t *dQ,
1510 const uint8_t *p,
const uint8_t *dP,
1511 const uint8_t *qInv,
const uint8_t *msg, uint8_t *em,
1512 uint64_t op_cookie);
1557 const uint8_t *q,
const uint8_t *dQ,
const uint8_t *p,
1558 const uint8_t *dP,
const uint8_t *qInv,
1559 const uint8_t *em, uint8_t *msg, uint64_t op_cookie);
1605 uint16_t exp_len, uint16_t msg_len,
const uint8_t *mod,
1606 const uint8_t *exp,
const uint8_t *msg, uint8_t *result,
1607 uint64_t op_cookie);
1660 uint16_t msg_len,
const uint8_t *q,
const uint8_t *dQ,
1661 const uint8_t *p,
const uint8_t *dP,
const uint8_t *qInv,
1662 const uint8_t *msg, uint8_t *result, uint64_t op_cookie);
1706#define DAO_LC_ML_KEYPAIR_SEED_LEN (64)
1707#define DAO_LC_ML_KEM_SHARED_SECRET_LEN (32)
1710#define DAO_LC_ML_DSA_CTX_LEN_MAX (255)
1712#define DAO_LC_ML_KEM_512_PUB_KEY_LEN (800)
1713#define DAO_LC_ML_KEM_512_PRIV_KEY_LEN (1632)
1714#define DAO_LC_ML_KEM_512_CIPHERTEXT_LEN (768)
1716#define DAO_LC_ML_KEM_768_PUB_KEY_LEN (1184)
1717#define DAO_LC_ML_KEM_768_PRIV_KEY_LEN (2400)
1718#define DAO_LC_ML_KEM_768_CIPHERTEXT_LEN (1088)
1720#define DAO_LC_ML_KEM_1024_PUB_KEY_LEN (1568)
1721#define DAO_LC_ML_KEM_1024_PRIV_KEY_LEN (3168)
1722#define DAO_LC_ML_KEM_1024_CIPHERTEXT_LEN (1568)
1724#define DAO_LC_ML_DSA_44_PUB_KEY_LEN (1312)
1725#define DAO_LC_ML_DSA_44_PRIV_KEY_LEN (2560)
1726#define DAO_LC_ML_DSA_44_SIGNATURE_LEN (2420)
1728#define DAO_LC_ML_DSA_65_PUB_KEY_LEN (1952)
1729#define DAO_LC_ML_DSA_65_PRIV_KEY_LEN (4032)
1730#define DAO_LC_ML_DSA_65_SIGNATURE_LEN (3309)
1732#define DAO_LC_ML_DSA_87_PUB_KEY_LEN (2592)
1733#define DAO_LC_ML_DSA_87_PRIV_KEY_LEN (4896)
1734#define DAO_LC_ML_DSA_87_SIGNATURE_LEN (4627)
1737#define DAO_LC_ML_DSA_MAX_MSG_LEN (10240)
1739static uint16_t pqc_ml_pub_key_len[] = {[
DAO_LC_ML_KEM_512] = DAO_LC_ML_KEM_512_PUB_KEY_LEN,
1746static uint16_t pqc_ml_priv_key_len[] = {[
DAO_LC_ML_KEM_512] = DAO_LC_ML_KEM_512_PRIV_KEY_LEN,
1753static uint16_t pqc_ml_signature_len[] = {
1763static uint16_t pqc_ml_ciphertext_len[] = {
1772static inline uint16_t
1775 return pqc_ml_pub_key_len[alg];
1778static inline uint16_t
1781 return pqc_ml_priv_key_len[alg];
1784static inline uint16_t
1787 return pqc_ml_signature_len[alg];
1790static inline uint16_t
1793 return pqc_ml_ciphertext_len[alg];
1899 uint64_t op_cookie);
1997 uint64_t sess_cookie);
2045 uint16_t nb_events);
2111 uint16_t nonce_len, uint16_t pkey_len, uint16_t digest_len,
2112 const uint8_t *nonce,
const uint8_t *pkey,
2113 const uint8_t *digest, uint8_t *rs_outdata,
2114 uint64_t op_cookie);
2178 uint16_t r_len, uint16_t s_len, uint16_t digest_len,
2179 uint16_t qx_len, uint16_t qy_len,
const uint8_t *r_data,
2180 const uint8_t *s_data,
const uint8_t *digest,
2181 const uint8_t *qx_data,
const uint8_t *qy_data,
2182 uint64_t op_cookie);
2258 uint16_t mod_len, uint16_t exp_len, uint16_t msg_len,
2259 const uint8_t *mod,
const uint8_t *exp,
2260 const uint8_t *msg, uint8_t *em, uint64_t op_cookie);
2312 uint16_t label_len, uint8_t *label,
2314 const uint8_t *mod, uint16_t exp_len,
2315 const uint8_t *exp,
const uint8_t *em,
2316 uint8_t *msg, uint64_t op_cookie);
2378 uint8_t *p, uint8_t *dP, uint8_t *q, uint8_t *dQ,
2379 uint8_t *qInv, uint8_t *em, uint8_t *msg,
2380 uint64_t op_cookie);
2425 uint64_t op_cookie);
int dao_liquid_crypto_enq_op_pkcs1v15enc_crt(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len, uint16_t msg_len, const uint8_t *q, const uint8_t *dQ, const uint8_t *p, const uint8_t *dP, const uint8_t *qInv, const uint8_t *msg, uint8_t *em, uint64_t op_cookie)
int dao_liquid_crypto_enq_op_rsa_oaep_pvt_crt_dec(uint8_t dev_id, uint16_t qp_id, uint8_t *label, uint16_t label_len, enum dao_lc_hash_type hash_type, uint16_t mod_len, uint8_t *p, uint8_t *dP, uint8_t *q, uint8_t *dQ, uint8_t *qInv, uint8_t *em, uint8_t *msg, uint64_t op_cookie)
@ DAO_LC_ML_DSA_OP_VERIFY
@ DAO_LC_ML_DSA_OP_KEYGEN
@ DAO_LC_ML_KEM_OP_KEYGEN
int dao_liquid_crypto_fini(void)
dao_liquid_crypto_ec_curve_type
@ DAO_LC_HASH_DIGEST_SIZE_SHA2_SHA512
@ DAO_LC_HASH_DIGEST_SIZE_SHA2_SHA384
@ DAO_LC_HASH_DIGEST_SIZE_SHA1
@ DAO_LC_HASH_DIGEST_SIZE_SHA2_SHA256
@ DAO_LC_HASH_DIGEST_SIZE_SHA2_SHA224
int dao_liquid_crypto_info_get(struct dao_lc_info *info)
@ DAO_PQC_COMP_LIB_ERROR_LIBOQS
int dao_liquid_crypto_enq_op_modex_exp(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len, uint16_t exp_len, uint16_t msg_len, const uint8_t *mod, const uint8_t *exp, const uint8_t *msg, uint8_t *result, uint64_t op_cookie)
@ DAO_LC_FC_AUTH_KEY_SRC_OP
@ DAO_LC_FC_AUTH_KEY_SRC_CTX
@ DAO_LC_COMP_ALGO_UNSPECIFIED
@ DAO_LC_COMP_ALGO_DEFLATE
int dao_liquid_crypto_sym_sess_create(uint8_t dev_id, const struct dao_lc_sym_ctx *ctx, uint64_t sess_cookie)
int dao_liquid_crypto_qp_configure(uint8_t dev_id, uint16_t qp_id, struct dao_lc_qp_conf *conf)
@ DAO_LC_FC_AES_KEY_LEN_192
@ DAO_LC_FC_AES_KEY_LEN_128
@ DAO_LC_FC_AES_KEY_LEN_256
@ DAO_LC_SYM_OPCODE_AES_KEY_WRAP
@ DAO_LC_AES_KEY_LEN_32_BYTES
@ DAO_LC_AES_KEY_LEN_24_BYTES
@ DAO_LC_AES_KEY_LEN_16_BYTES
dao_lc_fc_auth_input_type
@ DAO_LC_FC_AUTH_INPUT_OPAD_IPAD
@ DAO_LC_FC_AUTH_INPUT_KEY
uint16_t dao_liquid_crypto_seg_size_calc(struct dao_lc_feature_params *params)
int dao_liquid_crypto_enq_op_modex_crt(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len, uint16_t msg_len, const uint8_t *q, const uint8_t *dQ, const uint8_t *p, const uint8_t *dP, const uint8_t *qInv, const uint8_t *msg, uint8_t *result, uint64_t op_cookie)
int dao_liquid_crypto_enq_op_ecdsa_verify(uint8_t dev_id, uint16_t qp_id, enum dao_liquid_crypto_ec_curve_type curve_id, uint16_t r_len, uint16_t s_len, uint16_t digest_len, uint16_t qx_len, uint16_t qy_len, const uint8_t *r_data, const uint8_t *s_data, const uint8_t *digest, const uint8_t *qx_data, const uint8_t *qy_data, uint64_t op_cookie)
int dao_liquid_crypto_dev_destroy(uint8_t dev_id)
@ DAO_UC_ERR_GC_CIPHER_UNSUPPORTED
@ DAO_UC_ERR_GC_ICV_MISCOMPARE
@ DAO_UC_ECC_SIGN_S_INVALID
@ DAO_UC_RSA_MOD_LEN_INVALID
@ DAO_UC_RSA_MOD_LEN_NOT_EVEN
@ DAO_UC_ECC_CURVE_INVALID
@ DAO_UC_RSA_OAEP_DECODING_ERROR
@ DAO_UC_ECC_PUB_KEY_INVALID
@ DAO_UC_ECC_DATA_LEN_INVALID
@ DAO_UC_RSA_PKCS_DEC_INCORRECT
@ DAO_UC_ECC_SIGN_R_INVALID
@ DAO_UC_ERR_GC_CTX_LEN_INVALID
@ DAO_UC_ERR_GC_DATA_LEN_INVALID
@ DAO_UC_ERR_GC_KEY_DATA_LEN_INVALID
@ DAO_UC_ERR_GC_OFFSET_INVALID
@ DAO_UC_ERR_GC_DATA_UNALIGNED
@ DAO_UC_ERR_GC_KEY_LEN_INVALID
@ DAO_UC_RSA_SG_NOT_SUPPORTED
@ DAO_UC_ECC_VERIFY_MISMATCH
@ DAO_UC_ERR_GC_AUTH_UNSUPPORTED
@ DAO_LC_COMP_HUFFMAN_DYNAMIC
@ DAO_LC_COMP_HUFFMAN_FIXED
@ DAO_LC_COMP_HUFFMAN_MAX
int dao_liquid_crypto_qp_inflight_req_count(uint8_t dev_id, uint16_t qp_id)
int dao_liquid_crypto_enq_op_pkcs1v15dec_crt(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len, const uint8_t *q, const uint8_t *dQ, const uint8_t *p, const uint8_t *dP, const uint8_t *qInv, const uint8_t *em, uint8_t *msg, uint64_t op_cookie)
int dao_liquid_crypto_enq_op_pkcs1v15enc(uint8_t dev_id, uint16_t qp_id, enum dao_liquid_crypto_rsa_key_type key_type, uint16_t mod_len, uint16_t exp_len, uint16_t msg_len, const uint8_t *mod, const uint8_t *exp, const uint8_t *msg, uint8_t *em, uint64_t op_cookie)
int dao_liquid_crypto_dev_start(uint8_t dev_id)
int dao_liquid_crypto_sym_sess_destroy(uint8_t dev_id, uint64_t sess_id, uint64_t sess_cookie)
#define DAO_CRYPTO_VERSION_LEN
@ DAO_LC_COMP_OP_DECOMPRESS
@ DAO_LC_COMP_OP_COMPRESS
#define DAO_LC_MAX_AUTH_KEY_LEN
int dao_liquid_crypto_enq_op_rsa_oaep_pvt_exp_dec(uint8_t dev_id, uint16_t qp_id, uint16_t label_len, uint8_t *label, enum dao_lc_hash_type hash_type, uint16_t mod_len, const uint8_t *mod, uint16_t exp_len, const uint8_t *exp, const uint8_t *em, uint8_t *msg, uint64_t op_cookie)
int dao_liquid_crypto_enq_comp_op_deflate(uint8_t dev_id, uint16_t qp_id, struct dao_lc_comp_req_params *req, uint64_t op_cookie)
@ DAO_LC_FC_ENC_CIPHER_CHACHA
@ DAO_LC_FC_ENC_CIPHER_AES_CCM
@ DAO_LC_FC_ENC_CIPHER_AES_CTR
@ DAO_LC_FC_ENC_CIPHER_3DES_CBC
@ DAO_LC_FC_ENC_CIPHER_AES_CFB
@ DAO_LC_FC_ENC_CIPHER_3DES_ECB
@ DAO_LC_FC_ENC_CIPHER_AES_XTS
@ DAO_LC_FC_ENC_CIPHER_AES_CBC
@ DAO_LC_FC_ENC_CIPHER_AES_GCM
@ DAO_LC_FC_ENC_CIPHER_NULL
@ DAO_LC_FC_ENC_CIPHER_AES_ECB
#define DAO_CRYPTO_MAX_NB_DEV
int dao_liquid_crypto_dev_stop(uint8_t dev_id)
int dao_liquid_crypto_enqueue_op_passthrough(uint8_t dev_id, uint16_t qp_id, uint64_t op_cookie)
@ DAO_LC_HASH_TYPE_SHA3_CSHAKE256
@ DAO_LC_HASH_TYPE_SHA3_SHAKE128
@ DAO_LC_HASH_TYPE_SHA3_SHA384
@ DAO_LC_HASH_TYPE_SHA2_SHA256
@ DAO_LC_HASH_TYPE_POLY1305
@ DAO_LC_HASH_TYPE_SHA3_SHA256
@ DAO_LC_HASH_TYPE_SHA3_SHAKE256
@ DAO_LC_HASH_TYPE_SHA2_SHA224
@ DAO_LC_HASH_TYPE_SHA3_KMAC128
@ DAO_LC_HASH_TYPE_SHA2_SHA512
@ DAO_LC_HASH_TYPE_SHA3_SHA224
@ DAO_LC_HASH_TYPE_SHA3_CSHAKE128
@ DAO_LC_HASH_TYPE_SHA2_SHA384
@ DAO_LC_HASH_TYPE_SHA3_KMAC256
@ DAO_LC_HASH_TYPE_SHA3_SHA512
int dao_liquid_crypto_pqc_enqueue(uint8_t dev_id, uint16_t qp_id, struct dao_lc_pqc_op *op, uint64_t op_cookie)
uint16_t dao_liquid_crypto_dequeue_burst(uint8_t dev_id, uint16_t qp_id, struct dao_lc_res *res, uint16_t nb_ops)
int dao_liquid_crypto_dev_caps_get(struct dao_lc_dev_caps *lc_caps)
@ DAO_LC_RANDOM_TYPE_X9_17
#define DAO_LC_AES_MAX_KEY_ENC_KEY_LEN
@ DAO_LC_CMD_EVENT_SESS_CREATE
@ DAO_LC_CMD_EVENT_SESS_DESTROY
uint16_t dao_liquid_crypto_cmd_event_dequeue(uint8_t dev_id, struct dao_lc_cmd_event *events, uint16_t nb_events)
@ DAO_LC_COMP_OP_STATUS_DEV_DISABLED
@ DAO_LC_COMP_OP_STATUS_OUT_OF_SPACE_TERMINATED
@ DAO_LC_COMP_OP_STATUS_INVALID_ARGS
@ DAO_LC_COMP_OP_STATUS_OUT_OF_SPACE_RECOVERABLE
@ DAO_LC_COMP_OP_STATUS_SUCCESS
@ DAO_LC_COMP_OP_STATUS_ERROR
@ DAO_LC_COMP_OP_STATUS_RESP_BUF_SPACE_ISSUE
@ DAO_LC_COMP_OP_STATUS_INVALID_STATE
@ DAO_LC_COMP_OP_STATUS_NOT_PROCESSED
int dao_liquid_crypto_enq_op_rsa_oaep_enc(uint8_t dev_id, uint16_t qp_id, uint8_t *label, uint16_t label_len, enum dao_lc_hash_type hash_type, uint16_t mod_len, uint16_t exp_len, uint16_t msg_len, const uint8_t *mod, const uint8_t *exp, const uint8_t *msg, uint8_t *em, uint64_t op_cookie)
int dao_liquid_crypto_enq_decomp_op_deflate(uint8_t dev_id, uint16_t qp_id, struct dao_lc_decomp_req_params *req, uint64_t op_cookie)
int dao_liquid_crypto_enq_op_pkcs1v15dec(uint8_t dev_id, uint16_t qp_id, enum dao_liquid_crypto_rsa_key_type key_type, uint16_t mod_len, uint16_t exp_len, const uint8_t *mod, const uint8_t *exp, const uint8_t *em, uint8_t *msg, uint64_t op_cookie)
int dao_liquid_crypto_enq_op_ecdsa_sign(uint8_t dev_id, uint16_t qp_id, enum dao_liquid_crypto_ec_curve_type curve_id, uint16_t nonce_len, uint16_t pkey_len, uint16_t digest_len, const uint8_t *nonce, const uint8_t *pkey, const uint8_t *digest, uint8_t *rs_outdata, uint64_t op_cookie)
int dao_liquid_crypto_init(void)
int dao_liquid_crypto_enq_op_random(uint8_t dev_id, uint16_t qp_id, struct dao_lc_random_op *op)
uint16_t dao_liquid_crypto_sym_enqueue_burst(uint8_t dev_id, uint16_t qp_id, struct dao_lc_sym_op *op, uint16_t nb_ops)
int dao_liquid_crypto_dev_create(struct dao_lc_dev_conf *conf)
dao_liquid_crypto_rsa_key_type
@ DAO_LC_RSA_KEY_TYPE_PRIVATE
@ DAO_LC_RSA_KEY_TYPE_PUBLIC
enum dao_lc_comp_op_status status
uint8_t kek[DAO_LC_AES_MAX_KEY_ENC_KEY_LEN]
enum dao_lc_fc_aes_key_len aes_kek_type
struct dao_lc_cmd_sess_event sess_event
enum dao_lc_comp_huffman huff_enc_type
struct dao_lc_feature_params::@21 ecc
uint16_t cipher_auth_payload_len
enum dao_liquid_crypto_ec_curve_type curve_id
struct dao_lc_feature_params::@20 rng
struct dao_lc_feature_params::@17 sym
struct dao_lc_feature_params::@18 rsa
uint16_t hmac_auth_key_len
struct dao_lc_feature_params::@22 rsa_oaep
enum dao_lc_hash_type hash_type
uint16_t custom_string_len
uint8_t is_rsa_oaep_enabled
struct dao_lc_feature_params::@19 modex
uint16_t function_name_len
enum dao_lc_fc_aes_key_len aes_kek_type
enum dao_lc_hash_type hmac_hash_type
uint8_t hmac_auth_key[DAO_LC_MAX_AUTH_KEY_LEN]
uint16_t nb_qp[DAO_CRYPTO_MAX_NB_DEV]
char version[DAO_CRYPTO_VERSION_LEN]
enum dao_lc_pqc_op_type op_type
struct dao_lc_pqc_op::@29::@31 keygen
const uint8_t * signature
struct dao_lc_pqc_op::@29::@34 sign
struct dao_lc_pqc_op::@29::@35 verify
struct dao_lc_pqc_op::@29::@32 encap
struct dao_lc_pqc_op::@29::@33 decap
const uint8_t * ciphertext
bool out_of_order_delivery_en
struct dao_compdev_res compdev_res
uint16_t wrap_unwrap_key_len
enum dao_lc_fc_chain_order chain_order
struct dao_lc_sym_fc_ctx fc
struct dao_lc_hmac_hash_ctx hash
struct dao_lc_aes_key_wrap_ctx aes_key_wrap
enum dao_lc_sym_opcode opcode
uint16_t custom_string_len
uint16_t function_name_len
uint16_t custom_string_len
uint32_t wrap_unwrap_key_len
struct dao_lc_sym_op_kmac_params kmac_params
struct dao_lc_buf * in_buffer
struct dao_lc_sym_op_cshake_params cshake_params
struct dao_lc_buf * out_buffer