1492a19a0SVikas Gupta /* SPDX-License-Identifier: BSD-3-Clause 2492a19a0SVikas Gupta * Copyright(c) 2020 Broadcom 3492a19a0SVikas Gupta * All rights reserved. 4492a19a0SVikas Gupta */ 5492a19a0SVikas Gupta 6492a19a0SVikas Gupta #ifndef _BCMFS_SYM_ENGINE_H_ 7492a19a0SVikas Gupta #define _BCMFS_SYM_ENGINE_H_ 8492a19a0SVikas Gupta 9492a19a0SVikas Gupta #include <rte_crypto_sym.h> 10492a19a0SVikas Gupta 11492a19a0SVikas Gupta #include "bcmfs_dev_msg.h" 12492a19a0SVikas Gupta #include "bcmfs_sym_defs.h" 13492a19a0SVikas Gupta #include "bcmfs_sym_req.h" 14492a19a0SVikas Gupta 15*7be78d02SJosh Soref /* structure to hold element's attributes */ 16492a19a0SVikas Gupta struct fsattr { 17492a19a0SVikas Gupta void *va; 18492a19a0SVikas Gupta uint64_t pa; 19492a19a0SVikas Gupta uint64_t sz; 20492a19a0SVikas Gupta }; 21492a19a0SVikas Gupta 22492a19a0SVikas Gupta #define fsattr_va(__ptr) ((__ptr)->va) 23492a19a0SVikas Gupta #define fsattr_pa(__ptr) ((__ptr)->pa) 24492a19a0SVikas Gupta #define fsattr_sz(__ptr) ((__ptr)->sz) 25492a19a0SVikas Gupta 26492a19a0SVikas Gupta /* 27492a19a0SVikas Gupta * Macros for Crypto h/w constraints 28492a19a0SVikas Gupta */ 29492a19a0SVikas Gupta 30492a19a0SVikas Gupta #define BCMFS_CRYPTO_AES_BLOCK_SIZE 16 31492a19a0SVikas Gupta #define BCMFS_CRYPTO_AES_MIN_KEY_SIZE 16 32492a19a0SVikas Gupta #define BCMFS_CRYPTO_AES_MAX_KEY_SIZE 32 33492a19a0SVikas Gupta 34492a19a0SVikas Gupta #define BCMFS_CRYPTO_DES_BLOCK_SIZE 8 35492a19a0SVikas Gupta #define BCMFS_CRYPTO_DES_KEY_SIZE 8 36492a19a0SVikas Gupta 37492a19a0SVikas Gupta #define BCMFS_CRYPTO_3DES_BLOCK_SIZE 8 38492a19a0SVikas Gupta #define BCMFS_CRYPTO_3DES_KEY_SIZE (3 * 8) 39492a19a0SVikas Gupta 40492a19a0SVikas Gupta #define BCMFS_CRYPTO_MD5_DIGEST_SIZE 16 41492a19a0SVikas Gupta #define BCMFS_CRYPTO_MD5_BLOCK_SIZE 64 42492a19a0SVikas Gupta 43492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA1_DIGEST_SIZE 20 44492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA1_BLOCK_SIZE 64 45492a19a0SVikas Gupta 46492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA224_DIGEST_SIZE 28 47492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA224_BLOCK_SIZE 64 48492a19a0SVikas Gupta 49492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA256_DIGEST_SIZE 32 50492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA256_BLOCK_SIZE 64 51492a19a0SVikas Gupta 52492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA384_DIGEST_SIZE 48 53492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA384_BLOCK_SIZE 128 54492a19a0SVikas Gupta 55492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA512_DIGEST_SIZE 64 56492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA512_BLOCK_SIZE 128 57492a19a0SVikas Gupta 58492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_224_DIGEST_SIZE (224 / 8) 59492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_224_BLOCK_SIZE (200 - 2 * \ 60492a19a0SVikas Gupta BCMFS_CRYPTO_SHA3_224_DIGEST_SIZE) 61492a19a0SVikas Gupta 62492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_256_DIGEST_SIZE (256 / 8) 63492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_256_BLOCK_SIZE (200 - 2 * \ 64492a19a0SVikas Gupta BCMFS_CRYPTO_SHA3_256_DIGEST_SIZE) 65492a19a0SVikas Gupta 66492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_384_DIGEST_SIZE (384 / 8) 67492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_384_BLOCK_SIZE (200 - 2 * \ 68492a19a0SVikas Gupta BCMFS_CRYPTO_SHA3_384_DIGEST_SIZE) 69492a19a0SVikas Gupta 70492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_512_DIGEST_SIZE (512 / 8) 71492a19a0SVikas Gupta #define BCMFS_CRYPTO_SHA3_512_BLOCK_SIZE (200 - 2 * \ 72492a19a0SVikas Gupta BCMFS_CRYPTO_SHA3_512_DIGEST_SIZE) 73492a19a0SVikas Gupta 74492a19a0SVikas Gupta enum bcmfs_crypto_aes_cipher_key { 75492a19a0SVikas Gupta BCMFS_CRYPTO_AES128 = 16, 76492a19a0SVikas Gupta BCMFS_CRYPTO_AES192 = 24, 77492a19a0SVikas Gupta BCMFS_CRYPTO_AES256 = 32, 78492a19a0SVikas Gupta }; 79492a19a0SVikas Gupta 80492a19a0SVikas Gupta int 81492a19a0SVikas Gupta bcmfs_crypto_build_cipher_req(struct bcmfs_sym_request *req, 82492a19a0SVikas Gupta enum rte_crypto_cipher_algorithm c_algo, 83492a19a0SVikas Gupta enum rte_crypto_cipher_operation cop, 84492a19a0SVikas Gupta struct fsattr *src, struct fsattr *dst, 85492a19a0SVikas Gupta struct fsattr *key, struct fsattr *iv); 86492a19a0SVikas Gupta 87492a19a0SVikas Gupta int 88492a19a0SVikas Gupta bcmfs_crypto_build_auth_req(struct bcmfs_sym_request *req, 89492a19a0SVikas Gupta enum rte_crypto_auth_algorithm a_algo, 90492a19a0SVikas Gupta enum rte_crypto_auth_operation aop, 91492a19a0SVikas Gupta struct fsattr *src, struct fsattr *dst, 92492a19a0SVikas Gupta struct fsattr *mac, struct fsattr *key, 93492a19a0SVikas Gupta struct fsattr *iv); 94492a19a0SVikas Gupta 95492a19a0SVikas Gupta int 96492a19a0SVikas Gupta bcmfs_crypto_build_chain_request(struct bcmfs_sym_request *req, 97492a19a0SVikas Gupta enum rte_crypto_cipher_algorithm c_algo, 98492a19a0SVikas Gupta enum rte_crypto_cipher_operation cop, 99492a19a0SVikas Gupta enum rte_crypto_auth_algorithm a_algo, 100492a19a0SVikas Gupta enum rte_crypto_auth_operation aop, 101492a19a0SVikas Gupta struct fsattr *src, struct fsattr *dst, 102492a19a0SVikas Gupta struct fsattr *cipher_key, 103492a19a0SVikas Gupta struct fsattr *auth_key, 104492a19a0SVikas Gupta struct fsattr *iv, struct fsattr *aad, 105492a19a0SVikas Gupta struct fsattr *digest, bool cipher_first); 106492a19a0SVikas Gupta 107492a19a0SVikas Gupta int 108492a19a0SVikas Gupta bcmfs_crypto_build_aead_request(struct bcmfs_sym_request *req, 109492a19a0SVikas Gupta enum rte_crypto_aead_algorithm ae_algo, 110492a19a0SVikas Gupta enum rte_crypto_aead_operation aeop, 111492a19a0SVikas Gupta struct fsattr *src, struct fsattr *dst, 112492a19a0SVikas Gupta struct fsattr *key, struct fsattr *iv, 113492a19a0SVikas Gupta struct fsattr *aad, struct fsattr *digest); 114492a19a0SVikas Gupta 115492a19a0SVikas Gupta #endif /* _BCMFS_SYM_ENGINE_H_ */ 116