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.09.1"
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_MAX_DIGEST_LEN 255
34#define DAO_LC_MAX_AUTH_KEY_LEN 1024
35
39struct dao_lc_buf {
41 void *data;
43 uint32_t total_len;
45 uint32_t frag_len;
48};
49
53/* Structure dao_lc_sym_op 8< */
59 uint64_t op_cookie;
61 uint64_t sess_id;
79 uint32_t cipher_offset;
88 uint32_t cipher_len;
93 uint32_t auth_offset;
98 uint32_t auth_len;
100 uint8_t *cipher_iv;
102 uint8_t *auth_iv;
104 uint8_t *aad;
106 uint16_t aad_len;
108 uint8_t *digest;
110 union {
115 };
116};
117/* >8 End of structure dao_lc_sym_op. */
118
138
191
202 uint64_t compcode : 7;
204 uint64_t doneint : 1;
209 uint64_t uc_compcode : 8;
211 uint64_t rlen : 16;
213 uint64_t spi : 32;
214
216 uint64_t esn;
217 } cn10k;
218
225 uint64_t compcode : 8;
230 uint64_t uc_compcode : 8;
232 uint64_t doneint : 1;
234 uint64_t reserved_17_63 : 47;
235
238 } cn9k;
239
241 uint64_t u64[2];
242};
243
255
263 uint8_t dev_id;
265 uint16_t nb_qp;
271 uint16_t cmd_qp_idx;
272};
273
301
311 union {
313 struct {
315 uint16_t data_out_len;
316 } rsa;
318 struct {
321 } ecdsa;
323 uint64_t u64;
324 };
326 uint64_t op_cookie;
327};
328
338
351
359 uint64_t sess_id;
361 uint64_t sess_cookie;
362};
363
371 uint8_t event_type;
372 union {
375 };
376};
377
391
401
413
444
454
464
504
509 /* Elliptic curve identifier for P-192 (secp192r1) */
510 DAO_LC_AE_EC_ID_P192 = 0,
511 /* Elliptic curve identifier for P-224 (secpr224r1) */
512 DAO_LC_AE_EC_ID_P224 = 1,
513 /* Elliptic curve identifier for P-256 (secpr256r1) */
514 DAO_LC_AE_EC_ID_P256 = 2,
515 /* Elliptic curve identifier for P-384 (secpr384r1) */
516 DAO_LC_AE_EC_ID_P384 = 3,
517 /* Elliptic curve identifier for P-521 (secpr521r1) */
518 DAO_LC_AE_EC_ID_P521 = 4,
522
532
543 uint64_t iv_source : 1;
548 uint64_t aes_key_len : 2;
550 uint64_t rsvd_59 : 1;
555 uint64_t enc_cipher : 4;
562 uint64_t auth_input_type : 1;
569 uint64_t auth_key_src : 1;
571 uint64_t rsvd_50_51 : 2;
576 uint64_t hash_type : 4;
578 uint64_t mac_len : 8;
580 uint64_t rsvd_16_39 : 24;
582 uint64_t hmac_key_sz : 16;
584 uint8_t encr_key[32];
586 uint8_t encr_iv[16];
588 uint8_t ipad[64];
593 uint8_t opad[64];
594};
595
610 struct {
620 uint16_t iv_len;
622 uint16_t aad_len;
624 uint16_t digest_len;
636 struct {
638 uint16_t mod_len;
640 uint16_t exp_len;
642 uint16_t msg_len;
649 struct {
651 uint32_t rand_len;
653
662 struct {
668 uint16_t pkey_len;
670 uint16_t pubkey_x_len;
672 uint16_t pubkey_y_len;
674 uint16_t digest_len;
676 uint16_t nonce_len;
678 uint16_t sign_r_len;
680 uint16_t sign_s_len;
682
690 bool cmd_qp;
691};
692
706
714 uint16_t iv_len;
715 union {
720 };
721};
722
743
752 uint8_t *key;
754 uint8_t *datetime;
756 uint8_t *seed;
758 uint8_t *out_seed;
759};
760
761struct dao_lc_random_op {
763 enum dao_lc_random_type type;
765 struct dao_lc_buf *out_buf;
767 uint32_t rand_len;
769 uint64_t op_cookie;
770
771 union {
773 struct dao_lc_random_op_x9_17 x9_17;
774 };
775};
776
792
804
818
835
851
872int dao_liquid_crypto_qp_configure(uint8_t dev_id, uint16_t qp_id, struct dao_lc_qp_conf *conf);
873
891int dao_liquid_crypto_dev_start(uint8_t dev_id);
892
905int dao_liquid_crypto_dev_stop(uint8_t dev_id);
906
923
943int dao_liquid_crypto_enqueue_op_passthrough(uint8_t dev_id, uint16_t qp_id, uint64_t op_cookie);
944
982int dao_liquid_crypto_enq_op_pkcs1v15enc(uint8_t dev_id, uint16_t qp_id,
983 enum dao_liquid_crypto_rsa_key_type key_type,
984 uint16_t mod_len, uint16_t exp_len, uint16_t msg_len,
985 uint8_t *mod, uint8_t *exp, uint8_t *msg, uint8_t *em,
986 uint64_t op_cookie);
987
1024int dao_liquid_crypto_enq_op_pkcs1v15dec(uint8_t dev_id, uint16_t qp_id,
1025 enum dao_liquid_crypto_rsa_key_type key_type,
1026 uint16_t mod_len, uint16_t exp_len, uint8_t *mod,
1027 uint8_t *exp, uint8_t *em, uint8_t *msg,
1028 uint64_t op_cookie);
1029
1073int dao_liquid_crypto_enq_op_pkcs1v15enc_crt(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len,
1074 uint16_t msg_len, uint8_t *q, uint8_t *dQ, uint8_t *p,
1075 uint8_t *dP, uint8_t *qInv, uint8_t *msg, uint8_t *em,
1076 uint64_t op_cookie);
1077
1120int dao_liquid_crypto_enq_op_pkcs1v15dec_crt(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len,
1121 uint8_t *q, uint8_t *dQ, uint8_t *p, uint8_t *dP,
1122 uint8_t *qInv, uint8_t *em, uint8_t *msg,
1123 uint64_t op_cookie);
1124
1145int dao_liquid_crypto_enq_op_random(uint8_t dev_id, uint16_t qp_id, struct dao_lc_random_op *op);
1146
1173uint16_t dao_liquid_crypto_sym_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
1174 struct dao_lc_sym_op *op, uint16_t nb_ops);
1175
1198uint16_t dao_liquid_crypto_dequeue_burst(uint8_t dev_id, uint16_t qp_id, struct dao_lc_res *res,
1199 uint16_t nb_ops);
1200
1220int dao_liquid_crypto_sym_sess_create(uint8_t dev_id, const struct dao_lc_sym_ctx *ctx,
1221 uint64_t sess_cookie);
1222
1241int dao_liquid_crypto_sym_sess_destroy(uint8_t dev_id, uint64_t sess_id, uint64_t sess_cookie);
1242
1262uint16_t dao_liquid_crypto_cmd_event_dequeue(uint8_t dev_id, struct dao_lc_cmd_event *events,
1263 uint16_t nb_events);
1264
1311int dao_liquid_crypto_enq_op_ecdsa_sign(uint8_t dev_id, uint16_t qp_id,
1312 enum dao_liquid_crypto_ec_curve_type curve_id,
1313 uint16_t nonce_len, uint16_t pkey_len, uint16_t digest_len,
1314 uint8_t *nonce, uint8_t *pkey, uint8_t *digest_data,
1315 uint8_t *rs_outdata, uint64_t op_cookie);
1316
1366int dao_liquid_crypto_enq_op_ecdsa_verify(uint8_t dev_id, uint16_t qp_id,
1367 enum dao_liquid_crypto_ec_curve_type curve_id,
1368 uint16_t r_len, uint16_t s_len, uint16_t digest_len,
1369 uint16_t qx_len, uint16_t qy_len, uint8_t *r_data,
1370 uint8_t *s_data, uint8_t *digest, uint8_t *qx_data,
1371 uint8_t *qy_data, uint64_t op_cookie);
1372
1373#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, uint8_t *q, uint8_t *dQ, uint8_t *p, uint8_t *dP, uint8_t *qInv, 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
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, uint8_t *r_data, uint8_t *s_data, uint8_t *digest, uint8_t *qx_data, uint8_t *qy_data, uint64_t op_cookie)
int dao_liquid_crypto_info_get(struct dao_lc_info *info)
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, uint8_t *mod, uint8_t *exp, uint8_t *em, uint8_t *msg, 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_HMAC
@ DAO_LC_SYM_OPCODE_FC
dao_lc_ecdsa_sign_type
@ DAO_LC_AE_ECDSA_SIGN
@ DAO_LC_AE_ECDSA_VERIFY
dao_lc_fc_iv_src
@ DAO_LC_FC_IV_SRC_CTX
@ DAO_LC_FC_IV_SRC_OP
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_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_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_dev_start(uint8_t dev_id)
int dao_liquid_crypto_enq_op_pkcs1v15dec_crt(uint8_t dev_id, uint16_t qp_id, uint16_t mod_len, uint8_t *q, uint8_t *dQ, uint8_t *p, uint8_t *dP, uint8_t *qInv, uint8_t *em, uint8_t *msg, uint64_t op_cookie)
int dao_liquid_crypto_sym_sess_destroy(uint8_t dev_id, uint64_t sess_id, uint64_t sess_cookie)
#define DAO_CRYPTO_VERSION_LEN
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, uint8_t *mod, uint8_t *exp, uint8_t *msg, uint8_t *em, uint64_t op_cookie)
#define DAO_LC_MAX_AUTH_KEY_LEN
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, uint8_t *nonce, uint8_t *pkey, uint8_t *digest_data, uint8_t *rs_outdata, uint64_t op_cookie)
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
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_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
uint32_t total_len
struct dao_lc_buf * next
uint32_t frag_len
struct dao_lc_cmd_sess_event sess_event
struct dao_lc_feature_params::@10 rng
enum dao_liquid_crypto_ec_curve_type curve_id
struct dao_lc_feature_params::@8 sym
struct dao_lc_feature_params::@11 ecc
struct dao_lc_feature_params::@9 rsa
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
struct dao_lc_sym_fc_ctx fc
struct dao_lc_hmac_hash_ctx hash
enum dao_lc_sym_opcode opcode
struct dao_lc_buf * in_buffer
struct dao_lc_buf * out_buffer