1 /*- 2 * Copyright (c) 2017 Chelsio Communications, Inc. 3 * All rights reserved. 4 * Written by: John Baldwin <jhb@FreeBSD.org> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 */ 29 30 #ifndef __T4_CRYPTO_H__ 31 #define __T4_CRYPTO_H__ 32 33 /* From chr_core.h */ 34 #define PAD_ERROR_BIT 1 35 #define CHK_PAD_ERR_BIT(x) (((x) >> PAD_ERROR_BIT) & 1) 36 37 #define MAC_ERROR_BIT 0 38 #define CHK_MAC_ERR_BIT(x) (((x) >> MAC_ERROR_BIT) & 1) 39 #define MAX_SALT 4 40 41 struct _key_ctx { 42 __be32 ctx_hdr; 43 u8 salt[MAX_SALT]; 44 __be64 reserverd; 45 unsigned char key[0]; 46 }; 47 48 struct chcr_wr { 49 struct fw_crypto_lookaside_wr wreq; 50 struct ulp_txpkt ulptx; 51 struct ulptx_idata sc_imm; 52 struct cpl_tx_sec_pdu sec_cpl; 53 struct _key_ctx key_ctx; 54 }; 55 56 /* From chr_algo.h */ 57 58 /* Crypto key context */ 59 #define S_KEY_CONTEXT_CTX_LEN 24 60 #define M_KEY_CONTEXT_CTX_LEN 0xff 61 #define V_KEY_CONTEXT_CTX_LEN(x) ((x) << S_KEY_CONTEXT_CTX_LEN) 62 #define G_KEY_CONTEXT_CTX_LEN(x) \ 63 (((x) >> S_KEY_CONTEXT_CTX_LEN) & M_KEY_CONTEXT_CTX_LEN) 64 65 #define S_KEY_CONTEXT_DUAL_CK 12 66 #define M_KEY_CONTEXT_DUAL_CK 0x1 67 #define V_KEY_CONTEXT_DUAL_CK(x) ((x) << S_KEY_CONTEXT_DUAL_CK) 68 #define G_KEY_CONTEXT_DUAL_CK(x) \ 69 (((x) >> S_KEY_CONTEXT_DUAL_CK) & M_KEY_CONTEXT_DUAL_CK) 70 #define F_KEY_CONTEXT_DUAL_CK V_KEY_CONTEXT_DUAL_CK(1U) 71 72 #define S_KEY_CONTEXT_OPAD_PRESENT 11 73 #define M_KEY_CONTEXT_OPAD_PRESENT 0x1 74 #define V_KEY_CONTEXT_OPAD_PRESENT(x) ((x) << S_KEY_CONTEXT_OPAD_PRESENT) 75 #define G_KEY_CONTEXT_OPAD_PRESENT(x) \ 76 (((x) >> S_KEY_CONTEXT_OPAD_PRESENT) & \ 77 M_KEY_CONTEXT_OPAD_PRESENT) 78 #define F_KEY_CONTEXT_OPAD_PRESENT V_KEY_CONTEXT_OPAD_PRESENT(1U) 79 80 #define S_KEY_CONTEXT_SALT_PRESENT 10 81 #define M_KEY_CONTEXT_SALT_PRESENT 0x1 82 #define V_KEY_CONTEXT_SALT_PRESENT(x) ((x) << S_KEY_CONTEXT_SALT_PRESENT) 83 #define G_KEY_CONTEXT_SALT_PRESENT(x) \ 84 (((x) >> S_KEY_CONTEXT_SALT_PRESENT) & \ 85 M_KEY_CONTEXT_SALT_PRESENT) 86 #define F_KEY_CONTEXT_SALT_PRESENT V_KEY_CONTEXT_SALT_PRESENT(1U) 87 88 #define S_KEY_CONTEXT_CK_SIZE 6 89 #define M_KEY_CONTEXT_CK_SIZE 0xf 90 #define V_KEY_CONTEXT_CK_SIZE(x) ((x) << S_KEY_CONTEXT_CK_SIZE) 91 #define G_KEY_CONTEXT_CK_SIZE(x) \ 92 (((x) >> S_KEY_CONTEXT_CK_SIZE) & M_KEY_CONTEXT_CK_SIZE) 93 94 #define S_KEY_CONTEXT_MK_SIZE 2 95 #define M_KEY_CONTEXT_MK_SIZE 0xf 96 #define V_KEY_CONTEXT_MK_SIZE(x) ((x) << S_KEY_CONTEXT_MK_SIZE) 97 #define G_KEY_CONTEXT_MK_SIZE(x) \ 98 (((x) >> S_KEY_CONTEXT_MK_SIZE) & M_KEY_CONTEXT_MK_SIZE) 99 100 #define S_KEY_CONTEXT_VALID 0 101 #define M_KEY_CONTEXT_VALID 0x1 102 #define V_KEY_CONTEXT_VALID(x) ((x) << S_KEY_CONTEXT_VALID) 103 #define G_KEY_CONTEXT_VALID(x) \ 104 (((x) >> S_KEY_CONTEXT_VALID) & \ 105 M_KEY_CONTEXT_VALID) 106 #define F_KEY_CONTEXT_VALID V_KEY_CONTEXT_VALID(1U) 107 108 #define CHCR_HASH_MAX_DIGEST_SIZE 64 109 110 #define DUMMY_BYTES 16 111 112 #define TRANSHDR_SIZE(kctx_len)\ 113 (sizeof(struct chcr_wr) +\ 114 kctx_len) 115 #define CIPHER_TRANSHDR_SIZE(kctx_len, sge_pairs) \ 116 (TRANSHDR_SIZE((kctx_len)) + (sge_pairs) +\ 117 sizeof(struct cpl_rx_phys_dsgl)) 118 #define HASH_TRANSHDR_SIZE(kctx_len)\ 119 (TRANSHDR_SIZE(kctx_len) + DUMMY_BYTES) 120 121 #define CRYPTO_MAX_IMM_TX_PKT_LEN 256 122 123 struct phys_sge_pairs { 124 __be16 len[8]; 125 __be64 addr[8]; 126 }; 127 128 /* From chr_crypto.h */ 129 #define CHCR_AES_MAX_KEY_LEN (AES_XTS_MAX_KEY) 130 #define CHCR_MAX_CRYPTO_IV_LEN 16 /* AES IV len */ 131 132 #define CHCR_ENCRYPT_OP 0 133 #define CHCR_DECRYPT_OP 1 134 135 #define SCMD_ENCDECCTRL_ENCRYPT 0 136 #define SCMD_ENCDECCTRL_DECRYPT 1 137 138 #define SCMD_PROTO_VERSION_TLS_1_2 0 139 #define SCMD_PROTO_VERSION_TLS_1_1 1 140 #define SCMD_PROTO_VERSION_GENERIC 4 141 142 #define SCMD_CIPH_MODE_NOP 0 143 #define SCMD_CIPH_MODE_AES_CBC 1 144 #define SCMD_CIPH_MODE_AES_GCM 2 145 #define SCMD_CIPH_MODE_AES_CTR 3 146 #define SCMD_CIPH_MODE_GENERIC_AES 4 147 #define SCMD_CIPH_MODE_AES_XTS 6 148 #define SCMD_CIPH_MODE_AES_CCM 7 149 150 #define SCMD_AUTH_MODE_NOP 0 151 #define SCMD_AUTH_MODE_SHA1 1 152 #define SCMD_AUTH_MODE_SHA224 2 153 #define SCMD_AUTH_MODE_SHA256 3 154 #define SCMD_AUTH_MODE_GHASH 4 155 #define SCMD_AUTH_MODE_SHA512_224 5 156 #define SCMD_AUTH_MODE_SHA512_256 6 157 #define SCMD_AUTH_MODE_SHA512_384 7 158 #define SCMD_AUTH_MODE_SHA512_512 8 159 #define SCMD_AUTH_MODE_CBCMAC 9 160 #define SCMD_AUTH_MODE_CMAC 10 161 162 #define SCMD_HMAC_CTRL_NOP 0 163 #define SCMD_HMAC_CTRL_NO_TRUNC 1 164 #define SCMD_HMAC_CTRL_TRUNC_RFC4366 2 165 #define SCMD_HMAC_CTRL_IPSEC_96BIT 3 166 #define SCMD_HMAC_CTRL_PL1 4 167 #define SCMD_HMAC_CTRL_PL2 5 168 #define SCMD_HMAC_CTRL_PL3 6 169 #define SCMD_HMAC_CTRL_DIV2 7 170 171 /* This are not really mac key size. They are intermediate values 172 * of sha engine and its size 173 */ 174 #define CHCR_KEYCTX_MAC_KEY_SIZE_128 0 175 #define CHCR_KEYCTX_MAC_KEY_SIZE_160 1 176 #define CHCR_KEYCTX_MAC_KEY_SIZE_192 2 177 #define CHCR_KEYCTX_MAC_KEY_SIZE_256 3 178 #define CHCR_KEYCTX_MAC_KEY_SIZE_512 4 179 #define CHCR_KEYCTX_CIPHER_KEY_SIZE_128 0 180 #define CHCR_KEYCTX_CIPHER_KEY_SIZE_192 1 181 #define CHCR_KEYCTX_CIPHER_KEY_SIZE_256 2 182 #define CHCR_KEYCTX_NO_KEY 15 183 184 #define IV_NOP 0 185 #define IV_IMMEDIATE 1 186 #define IV_DSGL 2 187 188 #define CHCR_HASH_MAX_BLOCK_SIZE_64 64 189 #define CHCR_HASH_MAX_BLOCK_SIZE_128 128 190 191 #endif /* !__T4_CRYPTO_H__ */ 192