1/** 2 * AMCC SoC PPC4xx Crypto Driver 3 * 4 * Copyright (c) 2008 Applied Micro Circuits Corporation. 5 * All rights reserved. James Hsiao <jhsiao@amcc.com> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * This file defines the security context 18 * associate format. 19 */ 20 21#ifndef __CRYPTO4XX_SA_H__ 22#define __CRYPTO4XX_SA_H__ 23 24#define AES_IV_SIZE 16 25 26/** 27 * Contents of Dynamic Security Association (SA) with all possible fields 28 */ 29union dynamic_sa_contents { 30 struct { 31 u32 arc4_state_ptr:1; 32 u32 arc4_ij_ptr:1; 33 u32 state_ptr:1; 34 u32 iv3:1; 35 u32 iv2:1; 36 u32 iv1:1; 37 u32 iv0:1; 38 u32 seq_num_mask3:1; 39 u32 seq_num_mask2:1; 40 u32 seq_num_mask1:1; 41 u32 seq_num_mask0:1; 42 u32 seq_num1:1; 43 u32 seq_num0:1; 44 u32 spi:1; 45 u32 outer_size:5; 46 u32 inner_size:5; 47 u32 key_size:4; 48 u32 cmd_size:4; 49 } bf; 50 u32 w; 51} __attribute__((packed)); 52 53#define DIR_OUTBOUND 0 54#define DIR_INBOUND 1 55#define SA_OP_GROUP_BASIC 0 56#define SA_OPCODE_ENCRYPT 0 57#define SA_OPCODE_DECRYPT 0 58#define SA_OPCODE_HASH 3 59#define SA_CIPHER_ALG_DES 0 60#define SA_CIPHER_ALG_3DES 1 61#define SA_CIPHER_ALG_ARC4 2 62#define SA_CIPHER_ALG_AES 3 63#define SA_CIPHER_ALG_KASUMI 4 64#define SA_CIPHER_ALG_NULL 15 65 66#define SA_HASH_ALG_MD5 0 67#define SA_HASH_ALG_SHA1 1 68#define SA_HASH_ALG_NULL 15 69#define SA_HASH_ALG_SHA1_DIGEST_SIZE 20 70 71#define SA_LOAD_HASH_FROM_SA 0 72#define SA_LOAD_HASH_FROM_STATE 2 73#define SA_NOT_LOAD_HASH 3 74#define SA_LOAD_IV_FROM_SA 0 75#define SA_LOAD_IV_FROM_INPUT 1 76#define SA_LOAD_IV_FROM_STATE 2 77#define SA_LOAD_IV_GEN_IV 3 78 79#define SA_PAD_TYPE_CONSTANT 2 80#define SA_PAD_TYPE_ZERO 3 81#define SA_PAD_TYPE_TLS 5 82#define SA_PAD_TYPE_DTLS 5 83#define SA_NOT_SAVE_HASH 0 84#define SA_SAVE_HASH 1 85#define SA_NOT_SAVE_IV 0 86#define SA_SAVE_IV 1 87#define SA_HEADER_PROC 1 88#define SA_NO_HEADER_PROC 0 89 90union sa_command_0 { 91 struct { 92 u32 scatter:1; 93 u32 gather:1; 94 u32 save_hash_state:1; 95 u32 save_iv:1; 96 u32 load_hash_state:2; 97 u32 load_iv:2; 98 u32 digest_len:4; 99 u32 hdr_proc:1; 100 u32 extend_pad:1; 101 u32 stream_cipher_pad:1; 102 u32 rsv:1; 103 u32 hash_alg:4; 104 u32 cipher_alg:4; 105 u32 pad_type:2; 106 u32 op_group:2; 107 u32 dir:1; 108 u32 opcode:3; 109 } bf; 110 u32 w; 111} __attribute__((packed)); 112 113#define CRYPTO_MODE_ECB 0 114#define CRYPTO_MODE_CBC 1 115 116#define CRYPTO_FEEDBACK_MODE_NO_FB 0 117#define CRYPTO_FEEDBACK_MODE_64BIT_OFB 0 118#define CRYPTO_FEEDBACK_MODE_8BIT_CFB 1 119#define CRYPTO_FEEDBACK_MODE_1BIT_CFB 2 120#define CRYPTO_FEEDBACK_MODE_128BIT_CFB 3 121 122#define SA_AES_KEY_LEN_128 2 123#define SA_AES_KEY_LEN_192 3 124#define SA_AES_KEY_LEN_256 4 125 126#define SA_REV2 1 127/** 128 * The follow defines bits sa_command_1 129 * In Basic hash mode this bit define simple hash or hmac. 130 * In IPsec mode, this bit define muting control. 131 */ 132#define SA_HASH_MODE_HASH 0 133#define SA_HASH_MODE_HMAC 1 134#define SA_MC_ENABLE 0 135#define SA_MC_DISABLE 1 136#define SA_NOT_COPY_HDR 0 137#define SA_COPY_HDR 1 138#define SA_NOT_COPY_PAD 0 139#define SA_COPY_PAD 1 140#define SA_NOT_COPY_PAYLOAD 0 141#define SA_COPY_PAYLOAD 1 142#define SA_EXTENDED_SN_OFF 0 143#define SA_EXTENDED_SN_ON 1 144#define SA_SEQ_MASK_OFF 0 145#define SA_SEQ_MASK_ON 1 146 147union sa_command_1 { 148 struct { 149 u32 crypto_mode31:1; 150 u32 save_arc4_state:1; 151 u32 arc4_stateful:1; 152 u32 key_len:5; 153 u32 hash_crypto_offset:8; 154 u32 sa_rev:2; 155 u32 byte_offset:1; 156 u32 hmac_muting:1; 157 u32 feedback_mode:2; 158 u32 crypto_mode9_8:2; 159 u32 extended_seq_num:1; 160 u32 seq_num_mask:1; 161 u32 mutable_bit_proc:1; 162 u32 ip_version:1; 163 u32 copy_pad:1; 164 u32 copy_payload:1; 165 u32 copy_hdr:1; 166 u32 rsv1:1; 167 } bf; 168 u32 w; 169} __attribute__((packed)); 170 171struct dynamic_sa_ctl { 172 u32 sa_contents; 173 union sa_command_0 sa_command_0; 174 union sa_command_1 sa_command_1; 175} __attribute__((packed)); 176 177/** 178 * State Record for Security Association (SA) 179 */ 180struct sa_state_record { 181 u32 save_iv[4]; 182 u32 save_hash_byte_cnt[2]; 183 u32 save_digest[16]; 184} __attribute__((packed)); 185 186/** 187 * Security Association (SA) for AES128 188 * 189 */ 190struct dynamic_sa_aes128 { 191 struct dynamic_sa_ctl ctrl; 192 u32 key[4]; 193 u32 iv[4]; /* for CBC, OFC, and CFB mode */ 194 u32 state_ptr; 195 u32 reserved; 196} __attribute__((packed)); 197 198#define SA_AES128_LEN (sizeof(struct dynamic_sa_aes128)/4) 199#define SA_AES128_CONTENTS 0x3e000042 200 201/* 202 * Security Association (SA) for AES192 203 */ 204struct dynamic_sa_aes192 { 205 struct dynamic_sa_ctl ctrl; 206 u32 key[6]; 207 u32 iv[4]; /* for CBC, OFC, and CFB mode */ 208 u32 state_ptr; 209 u32 reserved; 210} __attribute__((packed)); 211 212#define SA_AES192_LEN (sizeof(struct dynamic_sa_aes192)/4) 213#define SA_AES192_CONTENTS 0x3e000062 214 215/** 216 * Security Association (SA) for AES256 217 */ 218struct dynamic_sa_aes256 { 219 struct dynamic_sa_ctl ctrl; 220 u32 key[8]; 221 u32 iv[4]; /* for CBC, OFC, and CFB mode */ 222 u32 state_ptr; 223 u32 reserved; 224} __attribute__((packed)); 225 226#define SA_AES256_LEN (sizeof(struct dynamic_sa_aes256)/4) 227#define SA_AES256_CONTENTS 0x3e000082 228#define SA_AES_CONTENTS 0x3e000002 229 230/** 231 * Security Association (SA) for HASH160: HMAC-SHA1 232 */ 233struct dynamic_sa_hash160 { 234 struct dynamic_sa_ctl ctrl; 235 u32 inner_digest[5]; 236 u32 outer_digest[5]; 237 u32 state_ptr; 238 u32 reserved; 239} __attribute__((packed)); 240#define SA_HASH160_LEN (sizeof(struct dynamic_sa_hash160)/4) 241#define SA_HASH160_CONTENTS 0x2000a502 242 243#endif 244