linux/drivers/crypto/nx/nx_csbcpb.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2
   3#ifndef __NX_CSBCPB_H__
   4#define __NX_CSBCPB_H__
   5
   6struct cop_symcpb_aes_ecb {
   7        u8 key[32];
   8        u8 __rsvd[80];
   9} __packed;
  10
  11struct cop_symcpb_aes_cbc {
  12        u8 iv[16];
  13        u8 key[32];
  14        u8 cv[16];
  15        u32 spbc;
  16        u8 __rsvd[44];
  17} __packed;
  18
  19struct cop_symcpb_aes_gca {
  20        u8 in_pat[16];
  21        u8 key[32];
  22        u8 out_pat[16];
  23        u32 spbc;
  24        u8 __rsvd[44];
  25} __packed;
  26
  27struct cop_symcpb_aes_gcm {
  28        u8 in_pat_or_aad[16];
  29        u8 iv_or_cnt[16];
  30        u64 bit_length_aad;
  31        u64 bit_length_data;
  32        u8 in_s0[16];
  33        u8 key[32];
  34        u8 __rsvd1[16];
  35        u8 out_pat_or_mac[16];
  36        u8 out_s0[16];
  37        u8 out_cnt[16];
  38        u32 spbc;
  39        u8 __rsvd2[12];
  40} __packed;
  41
  42struct cop_symcpb_aes_ctr {
  43        u8 iv[16];
  44        u8 key[32];
  45        u8 cv[16];
  46        u32 spbc;
  47        u8 __rsvd2[44];
  48} __packed;
  49
  50struct cop_symcpb_aes_cca {
  51        u8 b0[16];
  52        u8 b1[16];
  53        u8 key[16];
  54        u8 out_pat_or_b0[16];
  55        u32 spbc;
  56        u8 __rsvd[44];
  57} __packed;
  58
  59struct cop_symcpb_aes_ccm {
  60        u8 in_pat_or_b0[16];
  61        u8 iv_or_ctr[16];
  62        u8 in_s0[16];
  63        u8 key[16];
  64        u8 __rsvd1[48];
  65        u8 out_pat_or_mac[16];
  66        u8 out_s0[16];
  67        u8 out_ctr[16];
  68        u32 spbc;
  69        u8 __rsvd2[12];
  70} __packed;
  71
  72struct cop_symcpb_aes_xcbc {
  73        u8 cv[16];
  74        u8 key[16];
  75        u8 __rsvd1[16];
  76        u8 out_cv_mac[16];
  77        u32 spbc;
  78        u8 __rsvd2[44];
  79} __packed;
  80
  81struct cop_symcpb_sha256 {
  82        u64 message_bit_length;
  83        u64 __rsvd1;
  84        u8 input_partial_digest[32];
  85        u8 message_digest[32];
  86        u32 spbc;
  87        u8 __rsvd2[44];
  88} __packed;
  89
  90struct cop_symcpb_sha512 {
  91        u64 message_bit_length_hi;
  92        u64 message_bit_length_lo;
  93        u8 input_partial_digest[64];
  94        u8 __rsvd1[32];
  95        u8 message_digest[64];
  96        u32 spbc;
  97        u8 __rsvd2[76];
  98} __packed;
  99
 100#define NX_FDM_INTERMEDIATE             0x01
 101#define NX_FDM_CONTINUATION             0x02
 102#define NX_FDM_ENDE_ENCRYPT             0x80
 103
 104#define NX_CPB_FDM(c)                   ((c)->cpb.hdr.fdm)
 105#define NX_CPB_KS_DS(c)                 ((c)->cpb.hdr.ks_ds)
 106
 107#define NX_CPB_KEY_SIZE(c)              (NX_CPB_KS_DS(c) >> 4)
 108#define NX_CPB_SET_KEY_SIZE(c, x)       NX_CPB_KS_DS(c) |= ((x) << 4)
 109#define NX_CPB_SET_DIGEST_SIZE(c, x)    NX_CPB_KS_DS(c) |= (x)
 110
 111struct cop_symcpb_header {
 112        u8 mode;
 113        u8 fdm;
 114        u8 ks_ds;
 115        u8 pad_byte;
 116        u8 __rsvd[12];
 117} __packed;
 118
 119struct cop_parameter_block {
 120        struct cop_symcpb_header hdr;
 121        union {
 122                struct cop_symcpb_aes_ecb  aes_ecb;
 123                struct cop_symcpb_aes_cbc  aes_cbc;
 124                struct cop_symcpb_aes_gca  aes_gca;
 125                struct cop_symcpb_aes_gcm  aes_gcm;
 126                struct cop_symcpb_aes_cca  aes_cca;
 127                struct cop_symcpb_aes_ccm  aes_ccm;
 128                struct cop_symcpb_aes_ctr  aes_ctr;
 129                struct cop_symcpb_aes_xcbc aes_xcbc;
 130                struct cop_symcpb_sha256   sha256;
 131                struct cop_symcpb_sha512   sha512;
 132        };
 133} __packed;
 134
 135#define NX_CSB_VALID_BIT        0x80
 136
 137/* co-processor status block */
 138struct cop_status_block {
 139        u8 valid;
 140        u8 crb_seq_number;
 141        u8 completion_code;
 142        u8 completion_extension;
 143        __be32 processed_byte_count;
 144        __be64 address;
 145} __packed;
 146
 147/* Nest accelerator workbook section 4.4 */
 148struct nx_csbcpb {
 149        unsigned char __rsvd[112];
 150        struct cop_status_block csb;
 151        struct cop_parameter_block cpb;
 152} __packed;
 153
 154/* nx_csbcpb related definitions */
 155#define NX_MODE_AES_ECB                 0
 156#define NX_MODE_AES_CBC                 1
 157#define NX_MODE_AES_GMAC                2
 158#define NX_MODE_AES_GCA                 3
 159#define NX_MODE_AES_GCM                 4
 160#define NX_MODE_AES_CCA                 5
 161#define NX_MODE_AES_CCM                 6
 162#define NX_MODE_AES_CTR                 7
 163#define NX_MODE_AES_XCBC_MAC            20
 164#define NX_MODE_SHA                     0
 165#define NX_MODE_SHA_HMAC                1
 166#define NX_MODE_AES_CBC_HMAC_ETA        8
 167#define NX_MODE_AES_CBC_HMAC_ATE        9
 168#define NX_MODE_AES_CBC_HMAC_EAA        10
 169#define NX_MODE_AES_CTR_HMAC_ETA        12
 170#define NX_MODE_AES_CTR_HMAC_ATE        13
 171#define NX_MODE_AES_CTR_HMAC_EAA        14
 172
 173#define NX_FDM_CI_FULL          0
 174#define NX_FDM_CI_FIRST         1
 175#define NX_FDM_CI_LAST          2
 176#define NX_FDM_CI_MIDDLE        3
 177
 178#define NX_FDM_PR_NONE          0
 179#define NX_FDM_PR_PAD           1
 180
 181#define NX_KS_AES_128           1
 182#define NX_KS_AES_192           2
 183#define NX_KS_AES_256           3
 184
 185#define NX_DS_SHA256            2
 186#define NX_DS_SHA512            3
 187
 188#define NX_FC_AES               0
 189#define NX_FC_SHA               2
 190#define NX_FC_AES_HMAC          6
 191
 192#define NX_MAX_FC               (NX_FC_AES_HMAC + 1)
 193#define NX_MAX_MODE             (NX_MODE_AES_XCBC_MAC + 1)
 194
 195#define HCOP_FC_AES          NX_FC_AES
 196#define HCOP_FC_SHA          NX_FC_SHA
 197#define HCOP_FC_AES_HMAC     NX_FC_AES_HMAC
 198
 199/* indices into the array of algorithm properties */
 200#define NX_PROPS_AES_128                0
 201#define NX_PROPS_AES_192                1
 202#define NX_PROPS_AES_256                2
 203#define NX_PROPS_SHA256                 1
 204#define NX_PROPS_SHA512                 2
 205
 206#endif
 207