14ed19f0dSVikas Gupta /* SPDX-License-Identifier: BSD-3-Clause 24ed19f0dSVikas Gupta * Copyright(c) 2020 Broadcom 34ed19f0dSVikas Gupta * All rights reserved. 44ed19f0dSVikas Gupta */ 54ed19f0dSVikas Gupta 64ed19f0dSVikas Gupta #ifndef _BCMFS_SYM_SESSION_H_ 74ed19f0dSVikas Gupta #define _BCMFS_SYM_SESSION_H_ 84ed19f0dSVikas Gupta 94ed19f0dSVikas Gupta #include <stdbool.h> 104ed19f0dSVikas Gupta #include <rte_crypto.h> 11af668035SAkhil Goyal #include <cryptodev_pmd.h> 124ed19f0dSVikas Gupta 134ed19f0dSVikas Gupta #include "bcmfs_sym_defs.h" 144ed19f0dSVikas Gupta #include "bcmfs_sym_req.h" 154ed19f0dSVikas Gupta 164ed19f0dSVikas Gupta /* BCMFS_SYM operation order mode enumerator */ 174ed19f0dSVikas Gupta enum bcmfs_sym_chain_order { 184ed19f0dSVikas Gupta BCMFS_SYM_CHAIN_ONLY_CIPHER, 194ed19f0dSVikas Gupta BCMFS_SYM_CHAIN_ONLY_AUTH, 204ed19f0dSVikas Gupta BCMFS_SYM_CHAIN_CIPHER_AUTH, 214ed19f0dSVikas Gupta BCMFS_SYM_CHAIN_AUTH_CIPHER, 224ed19f0dSVikas Gupta BCMFS_SYM_CHAIN_AEAD, 234ed19f0dSVikas Gupta BCMFS_SYM_CHAIN_NOT_SUPPORTED 244ed19f0dSVikas Gupta }; 254ed19f0dSVikas Gupta 264ed19f0dSVikas Gupta /* BCMFS_SYM crypto private session structure */ 27*27595cd8STyler Retzlaff struct __rte_cache_aligned bcmfs_sym_session { 284ed19f0dSVikas Gupta enum bcmfs_sym_chain_order chain_order; 294ed19f0dSVikas Gupta 304ed19f0dSVikas Gupta /* Cipher Parameters */ 314ed19f0dSVikas Gupta struct { 324ed19f0dSVikas Gupta enum rte_crypto_cipher_operation op; 334ed19f0dSVikas Gupta /* Cipher operation */ 344ed19f0dSVikas Gupta enum rte_crypto_cipher_algorithm algo; 354ed19f0dSVikas Gupta /* Cipher algorithm */ 364ed19f0dSVikas Gupta struct { 374ed19f0dSVikas Gupta uint8_t data[BCMFS_MAX_KEY_SIZE]; 384ed19f0dSVikas Gupta size_t length; 394ed19f0dSVikas Gupta } key; 404ed19f0dSVikas Gupta struct { 414ed19f0dSVikas Gupta uint16_t offset; 424ed19f0dSVikas Gupta uint16_t length; 434ed19f0dSVikas Gupta } iv; 444ed19f0dSVikas Gupta } cipher; 454ed19f0dSVikas Gupta 464ed19f0dSVikas Gupta /* Authentication Parameters */ 474ed19f0dSVikas Gupta struct { 484ed19f0dSVikas Gupta enum rte_crypto_auth_operation op; 494ed19f0dSVikas Gupta /* Auth operation */ 504ed19f0dSVikas Gupta enum rte_crypto_auth_algorithm algo; 514ed19f0dSVikas Gupta /* Auth algorithm */ 524ed19f0dSVikas Gupta 534ed19f0dSVikas Gupta struct { 544ed19f0dSVikas Gupta uint8_t data[BCMFS_MAX_KEY_SIZE]; 554ed19f0dSVikas Gupta size_t length; 564ed19f0dSVikas Gupta } key; 574ed19f0dSVikas Gupta struct { 584ed19f0dSVikas Gupta uint16_t offset; 594ed19f0dSVikas Gupta uint16_t length; 604ed19f0dSVikas Gupta } iv; 614ed19f0dSVikas Gupta 624ed19f0dSVikas Gupta uint16_t digest_length; 634ed19f0dSVikas Gupta } auth; 644ed19f0dSVikas Gupta 654ed19f0dSVikas Gupta /* Aead Parameters */ 664ed19f0dSVikas Gupta struct { 674ed19f0dSVikas Gupta enum rte_crypto_aead_operation op; 684ed19f0dSVikas Gupta /* AEAD operation */ 694ed19f0dSVikas Gupta enum rte_crypto_aead_algorithm algo; 704ed19f0dSVikas Gupta /* AEAD algorithm */ 714ed19f0dSVikas Gupta struct { 724ed19f0dSVikas Gupta uint8_t data[BCMFS_MAX_KEY_SIZE]; 734ed19f0dSVikas Gupta size_t length; 744ed19f0dSVikas Gupta } key; 754ed19f0dSVikas Gupta struct { 764ed19f0dSVikas Gupta uint16_t offset; 774ed19f0dSVikas Gupta uint16_t length; 784ed19f0dSVikas Gupta } iv; 794ed19f0dSVikas Gupta 804ed19f0dSVikas Gupta uint16_t digest_length; 814ed19f0dSVikas Gupta 824ed19f0dSVikas Gupta uint16_t aad_length; 834ed19f0dSVikas Gupta } aead; 844ed19f0dSVikas Gupta 854ed19f0dSVikas Gupta bool cipher_first; 86*27595cd8STyler Retzlaff }; 874ed19f0dSVikas Gupta 884ed19f0dSVikas Gupta int 894ed19f0dSVikas Gupta bcmfs_process_crypto_op(struct rte_crypto_op *op, 904ed19f0dSVikas Gupta struct bcmfs_sym_session *sess, 914ed19f0dSVikas Gupta struct bcmfs_sym_request *req); 924ed19f0dSVikas Gupta 934ed19f0dSVikas Gupta int 944ed19f0dSVikas Gupta bcmfs_sym_session_configure(struct rte_cryptodev *dev, 954ed19f0dSVikas Gupta struct rte_crypto_sym_xform *xform, 96bdce2564SAkhil Goyal struct rte_cryptodev_sym_session *sess); 974ed19f0dSVikas Gupta 984ed19f0dSVikas Gupta void 994ed19f0dSVikas Gupta bcmfs_sym_session_clear(struct rte_cryptodev *dev, 1004ed19f0dSVikas Gupta struct rte_cryptodev_sym_session *sess); 1014ed19f0dSVikas Gupta 1024ed19f0dSVikas Gupta unsigned int 1034ed19f0dSVikas Gupta bcmfs_sym_session_get_private_size(struct rte_cryptodev *dev __rte_unused); 1044ed19f0dSVikas Gupta 1054ed19f0dSVikas Gupta struct bcmfs_sym_session * 1064ed19f0dSVikas Gupta bcmfs_sym_get_session(struct rte_crypto_op *op); 1074ed19f0dSVikas Gupta 1084ed19f0dSVikas Gupta #endif /* _BCMFS_SYM_SESSION_H_ */ 109