cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

nx_csbcpb.h (4223B)


      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