Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
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 /* co-processor status block */
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 /* Nest accelerator workbook section 4.4 */
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 /* nx_csbcpb related definitions */
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 /* indices into the array of algorithm properties */
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