#define _CPT_MCODE_DEFINES_H_
#include <rte_byteorder.h>
+#include <rte_crypto_asym.h>
#include <rte_memory.h>
/*
#define CPT_MAJOR_OP_KASUMI 0x38
#define CPT_MAJOR_OP_MISC 0x01
+/* AE opcodes */
+#define CPT_MAJOR_OP_MODEX 0x03
+#define CPT_MAJOR_OP_ECDSA 0x04
+#define CPT_MAJOR_OP_ECC 0x05
+#define CPT_MINOR_OP_MODEX 0x01
+#define CPT_MINOR_OP_PKCS_ENC 0x02
+#define CPT_MINOR_OP_PKCS_ENC_CRT 0x03
+#define CPT_MINOR_OP_PKCS_DEC 0x04
+#define CPT_MINOR_OP_PKCS_DEC_CRT 0x05
+#define CPT_MINOR_OP_MODEX_CRT 0x06
+#define CPT_MINOR_OP_ECDSA_SIGN 0x01
+#define CPT_MINOR_OP_ECDSA_VERIFY 0x02
+#define CPT_MINOR_OP_ECC_UMP 0x03
+
+#define CPT_BLOCK_TYPE1 0
+#define CPT_BLOCK_TYPE2 1
+
#define CPT_BYTE_16 16
#define CPT_BYTE_24 24
#define CPT_BYTE_32 32
CPT_8X_COMP_E_LAST_ENTRY = (0xFF)
} cpt_comp_e_t;
+/**
+ * Enumeration cpt_ec_id
+ *
+ * Enumerates supported elliptic curves
+ */
+typedef enum {
+ CPT_EC_ID_P192 = 0,
+ CPT_EC_ID_P224 = 1,
+ CPT_EC_ID_P256 = 2,
+ CPT_EC_ID_P384 = 3,
+ CPT_EC_ID_P521 = 4,
+ CPT_EC_ID_PMAX = 5
+} cpt_ec_id_t;
+
typedef struct sglist_comp {
union {
uint64_t len;
uint16_t is_null:1;
/** Flag for GMAC */
uint16_t is_gmac:1;
+ /** Engine group */
+ uint16_t egrp:3;
/** AAD length */
uint16_t aad_length;
/** MAC len in bytes */
phys_addr_t ctx_dma_addr;
};
-typedef union {
- uint64_t flags;
- struct {
-#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
- uint64_t enc_cipher : 4;
- uint64_t reserved1 : 1;
- uint64_t aes_key : 2;
- uint64_t iv_source : 1;
- uint64_t hash_type : 4;
- uint64_t reserved2 : 3;
- uint64_t auth_input_type : 1;
- uint64_t mac_len : 8;
- uint64_t reserved3 : 8;
- uint64_t encr_offset : 16;
- uint64_t iv_offset : 8;
- uint64_t auth_offset : 8;
-#else
- uint64_t auth_offset : 8;
- uint64_t iv_offset : 8;
- uint64_t encr_offset : 16;
- uint64_t reserved3 : 8;
- uint64_t mac_len : 8;
- uint64_t auth_input_type : 1;
- uint64_t reserved2 : 3;
- uint64_t hash_type : 4;
- uint64_t iv_source : 1;
- uint64_t aes_key : 2;
- uint64_t reserved1 : 1;
- uint64_t enc_cipher : 4;
-#endif
- } e;
-} encr_ctrl_t;
-
typedef struct {
- encr_ctrl_t enc_ctrl;
+ uint64_t iv_source : 1;
+ uint64_t aes_key : 2;
+ uint64_t rsvd_60 : 1;
+ uint64_t enc_cipher : 4;
+ uint64_t auth_input_type : 1;
+ uint64_t rsvd_52_54 : 3;
+ uint64_t hash_type : 4;
+ uint64_t mac_len : 8;
+ uint64_t rsvd_39_0 : 40;
uint8_t encr_key[32];
uint8_t encr_iv[16];
} mc_enc_context_t;
uint64_t hmac :1;
uint64_t zsk_flags :3;
uint64_t k_ecb :1;
- uint64_t snow3g :1;
- uint64_t rsvd :22;
+ uint64_t snow3g :2;
+ uint64_t rsvd :21;
/* Below fields are accessed by hardware */
union {
mc_fc_context_t fctx;
mc_zuc_snow3g_ctx_t zs_ctx;
mc_kasumi_ctx_t k_ctx;
};
- uint8_t auth_key[64];
+ uint8_t auth_key[1024];
+};
+
+/* Prime and order fields of built-in elliptic curves */
+struct cpt_ec_group {
+ struct {
+ /* P521 maximum length */
+ uint8_t data[66];
+ unsigned int length;
+ } prime;
+
+ struct {
+ /* P521 maximum length */
+ uint8_t data[66];
+ unsigned int length;
+ } order;
+};
+
+struct cpt_asym_ec_ctx {
+ /* Prime length defined by microcode for EC operations */
+ uint8_t curveid;
+};
+
+struct cpt_asym_sess_misc {
+ enum rte_crypto_asym_xform_type xfrm_type;
+ union {
+ struct rte_crypto_rsa_xform rsa_ctx;
+ struct rte_crypto_modex_xform mod_ctx;
+ struct cpt_asym_ec_ctx ec_ctx;
+ };
};
/* Buffer pointer */
} fc_params_t;
+/*
+ * Parameters for asymmetric operations
+ */
+struct asym_op_params {
+ struct cpt_request_info *req;
+ phys_addr_t meta_buf;
+};
+
/*
* Parameters for digest
* generate requests
/* Helper macros */
-#define CPT_P_ENC_CTRL(fctx) fctx->enc.enc_ctrl.e
-
#define SRC_IOV_SIZE \
(sizeof(iov_ptr_t) + (sizeof(buf_ptr_t) * CPT_MAX_SG_CNT))
#define DST_IOV_SIZE \
#define SESS_PRIV(__sess) \
(void *)((uint8_t *)__sess + sizeof(struct cpt_sess_misc))
+/*
+ * Get the session size
+ *
+ * @return
+ * - session size
+ */
+static __rte_always_inline unsigned int
+cpt_get_session_size(void)
+{
+ unsigned int ctx_len = sizeof(struct cpt_ctx);
+ return (sizeof(struct cpt_sess_misc) + RTE_ALIGN_CEIL(ctx_len, 8));
+}
#endif /* _CPT_MCODE_DEFINES_H_ */