Data Accelerator Offload
Loading...
Searching...
No Matches
dao_liquid_crypto.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: Marvell-MIT
2 * Copyright (c) 2025 Marvell.
3 */
4
5#ifndef __DAO_LIQUID_CRYPTO_H__
6#define __DAO_LIQUID_CRYPTO_H__
7
14#include <stdbool.h>
15#include <stdint.h>
16
17#include <dao_eth_trs.h>
18
20#define DAO_LC_VERSION "25.10.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
43
47struct dao_lc_buf {
49 void *data;
51 uint32_t total_len;
53 uint32_t frag_len;
56};
57
61/* Structure dao_lc_sym_op 8< */
67 uint64_t op_cookie;
69 uint64_t sess_id;
87 uint32_t cipher_offset;
96 uint32_t cipher_len;
101 uint32_t auth_offset;
106 uint32_t auth_len;
108 uint8_t *cipher_iv;
110 uint8_t *auth_iv;
112 uint8_t *aad;
114 uint16_t aad_len;
116 uint8_t *digest;
130 union {
137 };
138};
139/* >8 End of structure dao_lc_sym_op. */
140
160
231
242 uint64_t compcode : 7;
244 uint64_t doneint : 1;
249 uint64_t uc_compcode : 8;
251 uint64_t rlen : 16;
253 uint64_t spi : 32;
254
256 uint64_t esn;
257 } cn10k;
258
265 uint64_t compcode : 8;
270 uint64_t uc_compcode : 8;
272 uint64_t doneint : 1;
274 uint64_t reserved_17_63 : 47;
275
278 } cn9k;
279
281 uint64_t u64[2];
282};
283
295
303 uint8_t dev_id;
305 uint16_t nb_qp;
311 uint16_t cmd_qp_idx;
312};
313
341
351 union {
353 struct {
355 uint16_t data_out_len;
356 } rsa;
358 struct {
361 } ecdsa;
362 struct {
365 } key_wrap;
367 uint64_t u64;
368 };
370 uint64_t op_cookie;
371};
372
382
395
403 uint64_t sess_id;
405 uint64_t sess_cookie;
406};
407
415 uint8_t event_type;
416 union {
419 };
420};
421
437
447
459
490
500
510
550
566
571 /* Elliptic curve identifier for P-192 (secp192r1) */
572 DAO_LC_AE_EC_ID_P192 = 0,
573 /* Elliptic curve identifier for P-224 (secpr224r1) */
574 DAO_LC_AE_EC_ID_P224 = 1,
575 /* Elliptic curve identifier for P-256 (secpr256r1) */
576 DAO_LC_AE_EC_ID_P256 = 2,
577 /* Elliptic curve identifier for P-384 (secpr384r1) */
578 DAO_LC_AE_EC_ID_P384 = 3,
579 /* Elliptic curve identifier for P-521 (secpr521r1) */
580 DAO_LC_AE_EC_ID_P521 = 4,
584
595 uint64_t iv_source : 1;
600 uint64_t aes_key_len : 2;
602 uint64_t rsvd_59 : 1;
607 uint64_t enc_cipher : 4;
614 uint64_t auth_input_type : 1;
621 uint64_t auth_key_src : 1;
623 uint64_t rsvd_50_51 : 2;
628 uint64_t hash_type : 4;
630 uint64_t mac_len : 8;
632 uint64_t rsvd_16_39 : 24;
634 uint64_t hmac_key_sz : 16;
636 uint8_t encr_key[32];
638 uint8_t encr_iv[16];
640 uint8_t ipad[64];
645 uint8_t opad[64];
646};
647
662 struct {
673 uint16_t iv_len;
675 uint16_t aad_len;
677 uint16_t digest_len;
679 uint16_t key_wrap_len;
681 uint16_t kek_len;
693 struct {
695 uint16_t mod_len;
697 uint16_t exp_len;
699 uint16_t msg_len;
706 struct {
708 uint32_t rand_len;
710
719 struct {
725 uint16_t pkey_len;
727 uint16_t pubkey_x_len;
729 uint16_t pubkey_y_len;
731 uint16_t digest_len;
733 uint16_t nonce_len;
735 uint16_t sign_r_len;
737 uint16_t sign_s_len;
739
747 bool cmd_qp;
748};
749
763
781
799
820
829 uint8_t *key;
831 uint8_t *datetime;
833 uint8_t *seed;
835 uint8_t *out_seed;
836};
837
838struct dao_lc_random_op {
840 enum dao_lc_random_type type;
842 struct dao_lc_buf *out_buf;
844 uint32_t rand_len;
846 uint64_t op_cookie;
847
848 union {
850 struct dao_lc_random_op_x9_17 x9_17;
851 };
852};
853
865
881
893
907
924
940
961int dao_liquid_crypto_qp_configure(uint8_t dev_id, uint16_t qp_id, struct dao_lc_qp_conf *conf);
962
980int dao_liquid_crypto_dev_start(uint8_t dev_id);
981
994int dao_liquid_crypto_dev_stop(uint8_t dev_id);
995
1012
1032int dao_liquid_crypto_enqueue_op_passthrough(uint8_t dev_id, uint16_t qp_id, uint64_t op_cookie);
1033
1071int dao_liquid_crypto_enq_op_pkcs1v15enc(uint8_t dev_id, uint16_t qp_id,
1072 enum dao_liquid_crypto_rsa_key_type key_type,
1073 uint16_t mod_len, uint16_t exp_len, uint16_t msg_len,
1074 const uint8_t *mod, const uint8_t *exp, const uint8_t *msg,
1075 uint8_t *em, uint64_t op_cookie);
1076
1113int dao_liquid_crypto_enq_op_pkcs1v15dec(uint8_t dev_id, uint16_t qp_id,
1114 enum dao_liquid_crypto_rsa_key_type key_type,
1115 uint16_t mod_len, uint16_t exp_len, const uint8_t *mod,
1116 const uint8_t *exp, const uint8_t *em, uint8_t *msg,
1117 uint64_t op_cookie);
1118
1162int dao_liquid_crypto_enq_op_pkcs1v15enc_crt(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len,
1163 uint16_t msg_len, const uint8_t *q, const uint8_t *dQ,
1164 const uint8_t *p, const uint8_t *dP,
1165 const uint8_t *qInv, const uint8_t *msg, uint8_t *em,
1166 uint64_t op_cookie);
1167
1210int dao_liquid_crypto_enq_op_pkcs1v15dec_crt(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len,
1211 const uint8_t *q, const uint8_t *dQ, const uint8_t *p,
1212 const uint8_t *dP, const uint8_t *qInv,
1213 const uint8_t *em, uint8_t *msg, uint64_t op_cookie);
1214
1235int dao_liquid_crypto_enq_op_random(uint8_t dev_id, uint16_t qp_id, struct dao_lc_random_op *op);
1236
1263uint16_t dao_liquid_crypto_sym_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
1264 struct dao_lc_sym_op *op, uint16_t nb_ops);
1265
1288uint16_t dao_liquid_crypto_dequeue_burst(uint8_t dev_id, uint16_t qp_id, struct dao_lc_res *res,
1289 uint16_t nb_ops);
1290
1310int dao_liquid_crypto_sym_sess_create(uint8_t dev_id, const struct dao_lc_sym_ctx *ctx,
1311 uint64_t sess_cookie);
1312
1331int dao_liquid_crypto_sym_sess_destroy(uint8_t dev_id, uint64_t sess_id, uint64_t sess_cookie);
1332
1352uint16_t dao_liquid_crypto_cmd_event_dequeue(uint8_t dev_id, struct dao_lc_cmd_event *events,
1353 uint16_t nb_events);
1354
1406int dao_liquid_crypto_enq_op_ecdsa_sign(uint8_t dev_id, uint16_t qp_id,
1407 enum dao_liquid_crypto_ec_curve_type curve_id,
1408 uint16_t nonce_len, uint16_t pkey_len, uint16_t digest_len,
1409 const uint8_t *nonce, const uint8_t *pkey,
1410 const uint8_t *digest_data, uint8_t *rs_outdata,
1411 uint64_t op_cookie);
1412
1469int dao_liquid_crypto_enq_op_ecdsa_verify(uint8_t dev_id, uint16_t qp_id,
1470 enum dao_liquid_crypto_ec_curve_type curve_id,
1471 uint16_t r_len, uint16_t s_len, uint16_t digest_len,
1472 uint16_t qx_len, uint16_t qy_len, const uint8_t *r_data,
1473 const uint8_t *s_data, const uint8_t *digest,
1474 const uint8_t *qx_data, const uint8_t *qy_data,
1475 uint64_t op_cookie);
1476
1547int dao_liquid_crypto_enq_op_rsa_oaep_enc(uint8_t dev_id, uint16_t qp_id, uint8_t *label,
1548 uint16_t label_len, enum dao_lc_hash_type hash_type,
1549 uint16_t mod_len, uint16_t exp_len, uint16_t msg_len,
1550 const uint8_t *mod, const uint8_t *exp,
1551 const uint8_t *msg, uint8_t *em, uint64_t op_cookie);
1552
1600int dao_liquid_crypto_enq_op_rsa_oaep_exp_dec(uint8_t dev_id, uint16_t qp_id, uint8_t *label,
1601 uint16_t label_len, enum dao_lc_hash_type hash_type,
1602 uint16_t mod_len, uint16_t exp_len,
1603 const uint8_t *mod, const uint8_t *exp,
1604 const uint8_t *em, uint8_t *msg, uint64_t op_cookie);
1605
1606#endif /* __DAO_LIQUID_CRYPTO_H__ */
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_fini(void)
dao_liquid_crypto_ec_curve_type
@ DAO_LC_AE_EC_ID_PMAX
dao_lc_hash_digest_size
@ 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)
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_data, uint8_t *rs_outdata, uint64_t op_cookie)
dao_lc_fc_auth_key_src
@ DAO_LC_FC_AUTH_KEY_SRC_OP
@ DAO_LC_FC_AUTH_KEY_SRC_CTX
int dao_liquid_crypto_sym_sess_create(uint8_t dev_id, const struct dao_lc_sym_ctx *ctx, uint64_t sess_cookie)
dao_cpt_comp_code
@ DAO_CPT_COMP_NOT_DONE
@ DAO_CPT_COMP_HWERR
@ DAO_CPT_COMP_SWERR
@ DAO_CPT_COMP_INSTERR
@ DAO_CPT_COMP_WARN
@ DAO_CPT_COMP_GOOD
@ DAO_CPT_COMP_FAULT
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
@ 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
@ DAO_LC_SYM_OPCODE_HASH
@ DAO_LC_SYM_OPCODE_AES_KEY_WRAP
@ DAO_LC_SYM_OPCODE_HMAC
@ DAO_LC_SYM_OPCODE_FC
dao_lc_fc_iv_src
@ DAO_LC_FC_IV_SRC_CTX
@ DAO_LC_FC_IV_SRC_OP
dao_lc_aes_key_len_bytes
@ 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_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_comp_code
@ 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_ECC_PUB_KEY_INVALID
@ DAO_UC_SUCCESS
@ 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_PKCS_DECODING_ERROR
@ 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_PAI
@ DAO_UC_ECC_VERIFY_MISMATCH
@ DAO_UC_ERR_GC_AUTH_UNSUPPORTED
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
#define DAO_LC_MAX_AUTH_KEY_LEN
dao_lc_fc_enc_cipher
@ 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
@ DAO_LC_HASH_TYPE_GMAC
@ DAO_LC_HASH_TYPE_NULL
@ 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_CMAC
@ DAO_LC_HASH_TYPE_SHA2_SHA512
@ DAO_LC_HASH_TYPE_SM3
@ DAO_LC_HASH_TYPE_SHA3_SHA224
@ DAO_LC_HASH_TYPE_MD5
@ DAO_LC_HASH_TYPE_SHA2_SHA384
@ DAO_LC_HASH_TYPE_SHA1
@ DAO_LC_HASH_TYPE_SHA3_SHA512
uint16_t dao_liquid_crypto_dequeue_burst(uint8_t dev_id, uint16_t qp_id, struct dao_lc_res *res, uint16_t nb_ops)
dao_lc_random_type
@ DAO_LC_RANDOM_TYPE_HW
@ DAO_LC_RANDOM_TYPE_X9_17
#define DAO_LC_AES_MAX_KEY_ENC_KEY_LEN
dao_lc_cmd_event_type
@ 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)
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_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_init(void)
int dao_liquid_crypto_enq_op_rsa_oaep_exp_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, 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_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
uint8_t kek[DAO_LC_AES_MAX_KEY_ENC_KEY_LEN]
enum dao_lc_fc_aes_key_len aes_kek_type
uint32_t total_len
struct dao_lc_buf * next
uint32_t frag_len
struct dao_lc_cmd_sess_event sess_event
enum dao_liquid_crypto_ec_curve_type curve_id
struct dao_lc_feature_params::@11 rng
struct dao_lc_feature_params::@10 rsa
struct dao_lc_feature_params::@9 sym
struct dao_lc_feature_params::@12 ecc
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]
uint16_t ecc_rs_out_len
union dao_cpt_res_s res
uint16_t data_out_len
uint16_t wrap_unwrap_key_len
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
uint32_t wrap_unwrap_key_len
struct dao_lc_buf * in_buffer
struct dao_lc_buf * out_buffer