brintos

brintos / linux-shallow public Read only

0
0
Text · 7.1 KiB · e98e4e7 Raw
310 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * AMCC SoC PPC4xx Crypto Driver4 *5 * Copyright (c) 2008 Applied Micro Circuits Corporation.6 * All rights reserved. James Hsiao <jhsiao@amcc.com>7 *8 * This file defines the security context9 * associate format.10 */11 12#ifndef __CRYPTO4XX_SA_H__13#define __CRYPTO4XX_SA_H__14 15#define AES_IV_SIZE				1616 17/*18 * Contents of Dynamic Security Association (SA) with all possible fields19 */20union dynamic_sa_contents {21	struct {22		u32 arc4_state_ptr:1;23		u32 arc4_ij_ptr:1;24		u32 state_ptr:1;25		u32 iv3:1;26		u32 iv2:1;27		u32 iv1:1;28		u32 iv0:1;29		u32 seq_num_mask3:1;30		u32 seq_num_mask2:1;31		u32 seq_num_mask1:1;32		u32 seq_num_mask0:1;33		u32 seq_num1:1;34		u32 seq_num0:1;35		u32 spi:1;36		u32 outer_size:5;37		u32 inner_size:5;38		u32 key_size:4;39		u32 cmd_size:4;40	} bf;41	u32 w;42} __attribute__((packed));43 44#define DIR_OUTBOUND				045#define DIR_INBOUND				146#define SA_OP_GROUP_BASIC			047#define SA_OPCODE_ENCRYPT			048#define SA_OPCODE_DECRYPT			049#define SA_OPCODE_ENCRYPT_HASH			150#define SA_OPCODE_HASH_DECRYPT			151#define SA_OPCODE_HASH				352#define SA_CIPHER_ALG_DES			053#define SA_CIPHER_ALG_3DES			154#define SA_CIPHER_ALG_ARC4			255#define SA_CIPHER_ALG_AES			356#define SA_CIPHER_ALG_KASUMI			457#define SA_CIPHER_ALG_NULL			1558 59#define SA_HASH_ALG_MD5				060#define SA_HASH_ALG_SHA1			161#define SA_HASH_ALG_GHASH			1262#define SA_HASH_ALG_CBC_MAC			1463#define SA_HASH_ALG_NULL			1564#define SA_HASH_ALG_SHA1_DIGEST_SIZE		2065 66#define SA_LOAD_HASH_FROM_SA			067#define SA_LOAD_HASH_FROM_STATE			268#define SA_NOT_LOAD_HASH			369#define SA_LOAD_IV_FROM_SA			070#define SA_LOAD_IV_FROM_INPUT			171#define SA_LOAD_IV_FROM_STATE			272#define SA_LOAD_IV_GEN_IV			373 74#define SA_PAD_TYPE_CONSTANT			275#define SA_PAD_TYPE_ZERO			376#define SA_PAD_TYPE_TLS				577#define SA_PAD_TYPE_DTLS			578#define SA_NOT_SAVE_HASH			079#define SA_SAVE_HASH				180#define SA_NOT_SAVE_IV				081#define SA_SAVE_IV				182#define SA_HEADER_PROC				183#define SA_NO_HEADER_PROC			084 85union sa_command_0 {86	struct {87		u32 scatter:1;88		u32 gather:1;89		u32 save_hash_state:1;90		u32 save_iv:1;91		u32 load_hash_state:2;92		u32 load_iv:2;93		u32 digest_len:4;94		u32 hdr_proc:1;95		u32 extend_pad:1;96		u32 stream_cipher_pad:1;97		u32 rsv:1;98		u32 hash_alg:4;99		u32 cipher_alg:4;100		u32 pad_type:2;101		u32 op_group:2;102		u32 dir:1;103		u32 opcode:3;104	} bf;105	u32 w;106} __attribute__((packed));107 108#define CRYPTO_MODE_ECB				0109#define CRYPTO_MODE_CBC				1110#define CRYPTO_MODE_OFB				2111#define CRYPTO_MODE_CFB				3112#define CRYPTO_MODE_CTR				4113 114#define CRYPTO_FEEDBACK_MODE_NO_FB		0115#define CRYPTO_FEEDBACK_MODE_64BIT_OFB		0116#define CRYPTO_FEEDBACK_MODE_8BIT_CFB		1117#define CRYPTO_FEEDBACK_MODE_1BIT_CFB		2118#define CRYPTO_FEEDBACK_MODE_128BIT_CFB		3119 120#define SA_AES_KEY_LEN_128			2121#define SA_AES_KEY_LEN_192			3122#define SA_AES_KEY_LEN_256			4123 124#define SA_REV2					1125/*126 * The follow defines bits sa_command_1127 * In Basic hash mode  this bit define simple hash or hmac.128 * In IPsec mode, this bit define muting control.129 */130#define SA_HASH_MODE_HASH			0131#define SA_HASH_MODE_HMAC			1132#define SA_MC_ENABLE				0133#define SA_MC_DISABLE				1134#define SA_NOT_COPY_HDR				0135#define SA_COPY_HDR				1136#define SA_NOT_COPY_PAD				0137#define SA_COPY_PAD				1138#define SA_NOT_COPY_PAYLOAD			0139#define SA_COPY_PAYLOAD				1140#define SA_EXTENDED_SN_OFF			0141#define SA_EXTENDED_SN_ON			1142#define SA_SEQ_MASK_OFF				0143#define SA_SEQ_MASK_ON				1144 145union sa_command_1 {146	struct {147		u32 crypto_mode31:1;148		u32 save_arc4_state:1;149		u32 arc4_stateful:1;150		u32 key_len:5;151		u32 hash_crypto_offset:8;152		u32 sa_rev:2;153		u32 byte_offset:1;154		u32 hmac_muting:1;155		u32 feedback_mode:2;156		u32 crypto_mode9_8:2;157		u32 extended_seq_num:1;158		u32 seq_num_mask:1;159		u32 mutable_bit_proc:1;160		u32 ip_version:1;161		u32 copy_pad:1;162		u32 copy_payload:1;163		u32 copy_hdr:1;164		u32 rsv1:1;165	} bf;166	u32 w;167} __attribute__((packed));168 169struct dynamic_sa_ctl {170	union dynamic_sa_contents sa_contents;171	union sa_command_0 sa_command_0;172	union sa_command_1 sa_command_1;173} __attribute__((packed));174 175/*176 * State Record for Security Association (SA)177 */178struct  sa_state_record {179	__le32 save_iv[4];180	__le32 save_hash_byte_cnt[2];181	union {182		u32 save_digest[16]; /* for MD5/SHA */183		__le32 save_digest_le32[16]; /* GHASH / CBC */184	};185} __attribute__((packed));186 187/*188 * Security Association (SA) for AES128189 *190 */191struct dynamic_sa_aes128 {192	struct dynamic_sa_ctl	ctrl;193	__le32 key[4];194	__le32 iv[4]; /* for CBC, OFC, and CFB mode */195	u32 state_ptr;196	u32 reserved;197} __attribute__((packed));198 199#define SA_AES128_LEN		(sizeof(struct dynamic_sa_aes128)/4)200#define SA_AES128_CONTENTS	0x3e000042201 202/*203 * Security Association (SA) for AES192204 */205struct dynamic_sa_aes192 {206	struct dynamic_sa_ctl ctrl;207	__le32 key[6];208	__le32 iv[4]; /* for CBC, OFC, and CFB mode */209	u32 state_ptr;210	u32 reserved;211} __attribute__((packed));212 213#define SA_AES192_LEN		(sizeof(struct dynamic_sa_aes192)/4)214#define SA_AES192_CONTENTS	0x3e000062215 216/*217 * Security Association (SA) for AES256218 */219struct dynamic_sa_aes256 {220	struct dynamic_sa_ctl ctrl;221	__le32 key[8];222	__le32 iv[4]; /* for CBC, OFC, and CFB mode */223	u32 state_ptr;224	u32 reserved;225} __attribute__((packed));226 227#define SA_AES256_LEN		(sizeof(struct dynamic_sa_aes256)/4)228#define SA_AES256_CONTENTS	0x3e000082229#define SA_AES_CONTENTS		0x3e000002230 231/*232 * Security Association (SA) for AES128 CCM233 */234struct dynamic_sa_aes128_ccm {235	struct dynamic_sa_ctl ctrl;236	__le32 key[4];237	__le32 iv[4];238	u32 state_ptr;239	u32 reserved;240} __packed;241#define SA_AES128_CCM_LEN	(sizeof(struct dynamic_sa_aes128_ccm)/4)242#define SA_AES128_CCM_CONTENTS	0x3e000042243#define SA_AES_CCM_CONTENTS	0x3e000002244 245/*246 * Security Association (SA) for AES128_GCM247 */248struct dynamic_sa_aes128_gcm {249	struct dynamic_sa_ctl ctrl;250	__le32 key[4];251	__le32 inner_digest[4];252	__le32 iv[4];253	u32 state_ptr;254	u32 reserved;255} __packed;256 257#define SA_AES128_GCM_LEN	(sizeof(struct dynamic_sa_aes128_gcm)/4)258#define SA_AES128_GCM_CONTENTS	0x3e000442259#define SA_AES_GCM_CONTENTS	0x3e000402260 261/*262 * Security Association (SA) for HASH160: HMAC-SHA1263 */264struct dynamic_sa_hash160 {265	struct dynamic_sa_ctl ctrl;266	__le32 inner_digest[5];267	__le32 outer_digest[5];268	u32 state_ptr;269	u32 reserved;270} __attribute__((packed));271#define SA_HASH160_LEN		(sizeof(struct dynamic_sa_hash160)/4)272#define SA_HASH160_CONTENTS     0x2000a502273 274static inline u32275get_dynamic_sa_offset_state_ptr_field(struct dynamic_sa_ctl *cts)276{277	u32 offset;278 279	offset = cts->sa_contents.bf.key_size280		+ cts->sa_contents.bf.inner_size281		+ cts->sa_contents.bf.outer_size282		+ cts->sa_contents.bf.spi283		+ cts->sa_contents.bf.seq_num0284		+ cts->sa_contents.bf.seq_num1285		+ cts->sa_contents.bf.seq_num_mask0286		+ cts->sa_contents.bf.seq_num_mask1287		+ cts->sa_contents.bf.seq_num_mask2288		+ cts->sa_contents.bf.seq_num_mask3289		+ cts->sa_contents.bf.iv0290		+ cts->sa_contents.bf.iv1291		+ cts->sa_contents.bf.iv2292		+ cts->sa_contents.bf.iv3;293 294	return sizeof(struct dynamic_sa_ctl) + offset * 4;295}296 297static inline __le32 *get_dynamic_sa_key_field(struct dynamic_sa_ctl *cts)298{299	return (__le32 *) ((unsigned long)cts + sizeof(struct dynamic_sa_ctl));300}301 302static inline __le32 *get_dynamic_sa_inner_digest(struct dynamic_sa_ctl *cts)303{304	return (__le32 *) ((unsigned long)cts +305		sizeof(struct dynamic_sa_ctl) +306		cts->sa_contents.bf.key_size * 4);307}308 309#endif310