linux/drivers/crypto/amcc/crypto4xx_sa.h
<<
>>
Prefs
   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 * assoicate 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