0001
0002
0003 #ifndef __NX_CSBCPB_H__
0004 #define __NX_CSBCPB_H__
0005
0006 struct cop_symcpb_aes_ecb {
0007 u8 key[32];
0008 u8 __rsvd[80];
0009 } __packed;
0010
0011 struct cop_symcpb_aes_cbc {
0012 u8 iv[16];
0013 u8 key[32];
0014 u8 cv[16];
0015 u32 spbc;
0016 u8 __rsvd[44];
0017 } __packed;
0018
0019 struct cop_symcpb_aes_gca {
0020 u8 in_pat[16];
0021 u8 key[32];
0022 u8 out_pat[16];
0023 u32 spbc;
0024 u8 __rsvd[44];
0025 } __packed;
0026
0027 struct cop_symcpb_aes_gcm {
0028 u8 in_pat_or_aad[16];
0029 u8 iv_or_cnt[16];
0030 u64 bit_length_aad;
0031 u64 bit_length_data;
0032 u8 in_s0[16];
0033 u8 key[32];
0034 u8 __rsvd1[16];
0035 u8 out_pat_or_mac[16];
0036 u8 out_s0[16];
0037 u8 out_cnt[16];
0038 u32 spbc;
0039 u8 __rsvd2[12];
0040 } __packed;
0041
0042 struct cop_symcpb_aes_ctr {
0043 u8 iv[16];
0044 u8 key[32];
0045 u8 cv[16];
0046 u32 spbc;
0047 u8 __rsvd2[44];
0048 } __packed;
0049
0050 struct cop_symcpb_aes_cca {
0051 u8 b0[16];
0052 u8 b1[16];
0053 u8 key[16];
0054 u8 out_pat_or_b0[16];
0055 u32 spbc;
0056 u8 __rsvd[44];
0057 } __packed;
0058
0059 struct cop_symcpb_aes_ccm {
0060 u8 in_pat_or_b0[16];
0061 u8 iv_or_ctr[16];
0062 u8 in_s0[16];
0063 u8 key[16];
0064 u8 __rsvd1[48];
0065 u8 out_pat_or_mac[16];
0066 u8 out_s0[16];
0067 u8 out_ctr[16];
0068 u32 spbc;
0069 u8 __rsvd2[12];
0070 } __packed;
0071
0072 struct cop_symcpb_aes_xcbc {
0073 u8 cv[16];
0074 u8 key[16];
0075 u8 __rsvd1[16];
0076 u8 out_cv_mac[16];
0077 u32 spbc;
0078 u8 __rsvd2[44];
0079 } __packed;
0080
0081 struct cop_symcpb_sha256 {
0082 u64 message_bit_length;
0083 u64 __rsvd1;
0084 u8 input_partial_digest[32];
0085 u8 message_digest[32];
0086 u32 spbc;
0087 u8 __rsvd2[44];
0088 } __packed;
0089
0090 struct cop_symcpb_sha512 {
0091 u64 message_bit_length_hi;
0092 u64 message_bit_length_lo;
0093 u8 input_partial_digest[64];
0094 u8 __rsvd1[32];
0095 u8 message_digest[64];
0096 u32 spbc;
0097 u8 __rsvd2[76];
0098 } __packed;
0099
0100 #define NX_FDM_INTERMEDIATE 0x01
0101 #define NX_FDM_CONTINUATION 0x02
0102 #define NX_FDM_ENDE_ENCRYPT 0x80
0103
0104 #define NX_CPB_FDM(c) ((c)->cpb.hdr.fdm)
0105 #define NX_CPB_KS_DS(c) ((c)->cpb.hdr.ks_ds)
0106
0107 #define NX_CPB_KEY_SIZE(c) (NX_CPB_KS_DS(c) >> 4)
0108 #define NX_CPB_SET_KEY_SIZE(c, x) NX_CPB_KS_DS(c) |= ((x) << 4)
0109 #define NX_CPB_SET_DIGEST_SIZE(c, x) NX_CPB_KS_DS(c) |= (x)
0110
0111 struct cop_symcpb_header {
0112 u8 mode;
0113 u8 fdm;
0114 u8 ks_ds;
0115 u8 pad_byte;
0116 u8 __rsvd[12];
0117 } __packed;
0118
0119 struct cop_parameter_block {
0120 struct cop_symcpb_header hdr;
0121 union {
0122 struct cop_symcpb_aes_ecb aes_ecb;
0123 struct cop_symcpb_aes_cbc aes_cbc;
0124 struct cop_symcpb_aes_gca aes_gca;
0125 struct cop_symcpb_aes_gcm aes_gcm;
0126 struct cop_symcpb_aes_cca aes_cca;
0127 struct cop_symcpb_aes_ccm aes_ccm;
0128 struct cop_symcpb_aes_ctr aes_ctr;
0129 struct cop_symcpb_aes_xcbc aes_xcbc;
0130 struct cop_symcpb_sha256 sha256;
0131 struct cop_symcpb_sha512 sha512;
0132 };
0133 } __packed;
0134
0135 #define NX_CSB_VALID_BIT 0x80
0136
0137
0138 struct cop_status_block {
0139 u8 valid;
0140 u8 crb_seq_number;
0141 u8 completion_code;
0142 u8 completion_extension;
0143 __be32 processed_byte_count;
0144 __be64 address;
0145 } __packed;
0146
0147
0148 struct nx_csbcpb {
0149 unsigned char __rsvd[112];
0150 struct cop_status_block csb;
0151 struct cop_parameter_block cpb;
0152 } __packed;
0153
0154
0155 #define NX_MODE_AES_ECB 0
0156 #define NX_MODE_AES_CBC 1
0157 #define NX_MODE_AES_GMAC 2
0158 #define NX_MODE_AES_GCA 3
0159 #define NX_MODE_AES_GCM 4
0160 #define NX_MODE_AES_CCA 5
0161 #define NX_MODE_AES_CCM 6
0162 #define NX_MODE_AES_CTR 7
0163 #define NX_MODE_AES_XCBC_MAC 20
0164 #define NX_MODE_SHA 0
0165 #define NX_MODE_SHA_HMAC 1
0166 #define NX_MODE_AES_CBC_HMAC_ETA 8
0167 #define NX_MODE_AES_CBC_HMAC_ATE 9
0168 #define NX_MODE_AES_CBC_HMAC_EAA 10
0169 #define NX_MODE_AES_CTR_HMAC_ETA 12
0170 #define NX_MODE_AES_CTR_HMAC_ATE 13
0171 #define NX_MODE_AES_CTR_HMAC_EAA 14
0172
0173 #define NX_FDM_CI_FULL 0
0174 #define NX_FDM_CI_FIRST 1
0175 #define NX_FDM_CI_LAST 2
0176 #define NX_FDM_CI_MIDDLE 3
0177
0178 #define NX_FDM_PR_NONE 0
0179 #define NX_FDM_PR_PAD 1
0180
0181 #define NX_KS_AES_128 1
0182 #define NX_KS_AES_192 2
0183 #define NX_KS_AES_256 3
0184
0185 #define NX_DS_SHA256 2
0186 #define NX_DS_SHA512 3
0187
0188 #define NX_FC_AES 0
0189 #define NX_FC_SHA 2
0190 #define NX_FC_AES_HMAC 6
0191
0192 #define NX_MAX_FC (NX_FC_AES_HMAC + 1)
0193 #define NX_MAX_MODE (NX_MODE_AES_XCBC_MAC + 1)
0194
0195 #define HCOP_FC_AES NX_FC_AES
0196 #define HCOP_FC_SHA NX_FC_SHA
0197 #define HCOP_FC_AES_HMAC NX_FC_AES_HMAC
0198
0199
0200 #define NX_PROPS_AES_128 0
0201 #define NX_PROPS_AES_192 1
0202 #define NX_PROPS_AES_256 2
0203 #define NX_PROPS_SHA256 1
0204 #define NX_PROPS_SHA512 2
0205
0206 #endif