1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2020 Broadcom 3 * All rights reserved. 4 */ 5 6 #ifndef _BCMFS_SYM_ENGINE_H_ 7 #define _BCMFS_SYM_ENGINE_H_ 8 9 #include <rte_crypto_sym.h> 10 11 #include "bcmfs_dev_msg.h" 12 #include "bcmfs_sym_defs.h" 13 #include "bcmfs_sym_req.h" 14 15 /* structure to hold element's attributes */ 16 struct fsattr { 17 void *va; 18 uint64_t pa; 19 uint64_t sz; 20 }; 21 22 #define fsattr_va(__ptr) ((__ptr)->va) 23 #define fsattr_pa(__ptr) ((__ptr)->pa) 24 #define fsattr_sz(__ptr) ((__ptr)->sz) 25 26 /* 27 * Macros for Crypto h/w constraints 28 */ 29 30 #define BCMFS_CRYPTO_AES_BLOCK_SIZE 16 31 #define BCMFS_CRYPTO_AES_MIN_KEY_SIZE 16 32 #define BCMFS_CRYPTO_AES_MAX_KEY_SIZE 32 33 34 #define BCMFS_CRYPTO_DES_BLOCK_SIZE 8 35 #define BCMFS_CRYPTO_DES_KEY_SIZE 8 36 37 #define BCMFS_CRYPTO_3DES_BLOCK_SIZE 8 38 #define BCMFS_CRYPTO_3DES_KEY_SIZE (3 * 8) 39 40 #define BCMFS_CRYPTO_MD5_DIGEST_SIZE 16 41 #define BCMFS_CRYPTO_MD5_BLOCK_SIZE 64 42 43 #define BCMFS_CRYPTO_SHA1_DIGEST_SIZE 20 44 #define BCMFS_CRYPTO_SHA1_BLOCK_SIZE 64 45 46 #define BCMFS_CRYPTO_SHA224_DIGEST_SIZE 28 47 #define BCMFS_CRYPTO_SHA224_BLOCK_SIZE 64 48 49 #define BCMFS_CRYPTO_SHA256_DIGEST_SIZE 32 50 #define BCMFS_CRYPTO_SHA256_BLOCK_SIZE 64 51 52 #define BCMFS_CRYPTO_SHA384_DIGEST_SIZE 48 53 #define BCMFS_CRYPTO_SHA384_BLOCK_SIZE 128 54 55 #define BCMFS_CRYPTO_SHA512_DIGEST_SIZE 64 56 #define BCMFS_CRYPTO_SHA512_BLOCK_SIZE 128 57 58 #define BCMFS_CRYPTO_SHA3_224_DIGEST_SIZE (224 / 8) 59 #define BCMFS_CRYPTO_SHA3_224_BLOCK_SIZE (200 - 2 * \ 60 BCMFS_CRYPTO_SHA3_224_DIGEST_SIZE) 61 62 #define BCMFS_CRYPTO_SHA3_256_DIGEST_SIZE (256 / 8) 63 #define BCMFS_CRYPTO_SHA3_256_BLOCK_SIZE (200 - 2 * \ 64 BCMFS_CRYPTO_SHA3_256_DIGEST_SIZE) 65 66 #define BCMFS_CRYPTO_SHA3_384_DIGEST_SIZE (384 / 8) 67 #define BCMFS_CRYPTO_SHA3_384_BLOCK_SIZE (200 - 2 * \ 68 BCMFS_CRYPTO_SHA3_384_DIGEST_SIZE) 69 70 #define BCMFS_CRYPTO_SHA3_512_DIGEST_SIZE (512 / 8) 71 #define BCMFS_CRYPTO_SHA3_512_BLOCK_SIZE (200 - 2 * \ 72 BCMFS_CRYPTO_SHA3_512_DIGEST_SIZE) 73 74 enum bcmfs_crypto_aes_cipher_key { 75 BCMFS_CRYPTO_AES128 = 16, 76 BCMFS_CRYPTO_AES192 = 24, 77 BCMFS_CRYPTO_AES256 = 32, 78 }; 79 80 int 81 bcmfs_crypto_build_cipher_req(struct bcmfs_sym_request *req, 82 enum rte_crypto_cipher_algorithm c_algo, 83 enum rte_crypto_cipher_operation cop, 84 struct fsattr *src, struct fsattr *dst, 85 struct fsattr *key, struct fsattr *iv); 86 87 int 88 bcmfs_crypto_build_auth_req(struct bcmfs_sym_request *req, 89 enum rte_crypto_auth_algorithm a_algo, 90 enum rte_crypto_auth_operation aop, 91 struct fsattr *src, struct fsattr *dst, 92 struct fsattr *mac, struct fsattr *key, 93 struct fsattr *iv); 94 95 int 96 bcmfs_crypto_build_chain_request(struct bcmfs_sym_request *req, 97 enum rte_crypto_cipher_algorithm c_algo, 98 enum rte_crypto_cipher_operation cop, 99 enum rte_crypto_auth_algorithm a_algo, 100 enum rte_crypto_auth_operation aop, 101 struct fsattr *src, struct fsattr *dst, 102 struct fsattr *cipher_key, 103 struct fsattr *auth_key, 104 struct fsattr *iv, struct fsattr *aad, 105 struct fsattr *digest, bool cipher_first); 106 107 int 108 bcmfs_crypto_build_aead_request(struct bcmfs_sym_request *req, 109 enum rte_crypto_aead_algorithm ae_algo, 110 enum rte_crypto_aead_operation aeop, 111 struct fsattr *src, struct fsattr *dst, 112 struct fsattr *key, struct fsattr *iv, 113 struct fsattr *aad, struct fsattr *digest); 114 115 #endif /* _BCMFS_SYM_ENGINE_H_ */ 116