xref: /OK3568_Linux_fs/kernel/drivers/s390/crypto/zcrypt_cex2a.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *  Copyright IBM Corp. 2001, 2006
4*4882a593Smuzhiyun  *  Author(s): Robert Burroughs
5*4882a593Smuzhiyun  *	       Eric Rossman (edrossma@us.ibm.com)
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
8*4882a593Smuzhiyun  *  Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifndef _ZCRYPT_CEX2A_H_
12*4882a593Smuzhiyun #define _ZCRYPT_CEX2A_H_
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /**
15*4882a593Smuzhiyun  * The type 50 message family is associated with CEXxA cards.
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * The four members of the family are described below.
18*4882a593Smuzhiyun  *
19*4882a593Smuzhiyun  * Note that all unsigned char arrays are right-justified and left-padded
20*4882a593Smuzhiyun  * with zeroes.
21*4882a593Smuzhiyun  *
22*4882a593Smuzhiyun  * Note that all reserved fields must be zeroes.
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun struct type50_hdr {
25*4882a593Smuzhiyun 	unsigned char	reserved1;
26*4882a593Smuzhiyun 	unsigned char	msg_type_code;	/* 0x50 */
27*4882a593Smuzhiyun 	unsigned short	msg_len;
28*4882a593Smuzhiyun 	unsigned char	reserved2;
29*4882a593Smuzhiyun 	unsigned char	ignored;
30*4882a593Smuzhiyun 	unsigned short	reserved3;
31*4882a593Smuzhiyun } __packed;
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #define TYPE50_TYPE_CODE	0x50
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define TYPE50_MEB1_FMT		0x0001
36*4882a593Smuzhiyun #define TYPE50_MEB2_FMT		0x0002
37*4882a593Smuzhiyun #define TYPE50_MEB3_FMT		0x0003
38*4882a593Smuzhiyun #define TYPE50_CRB1_FMT		0x0011
39*4882a593Smuzhiyun #define TYPE50_CRB2_FMT		0x0012
40*4882a593Smuzhiyun #define TYPE50_CRB3_FMT		0x0013
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun /* Mod-Exp, with a small modulus */
43*4882a593Smuzhiyun struct type50_meb1_msg {
44*4882a593Smuzhiyun 	struct type50_hdr header;
45*4882a593Smuzhiyun 	unsigned short	keyblock_type;	/* 0x0001 */
46*4882a593Smuzhiyun 	unsigned char	reserved[6];
47*4882a593Smuzhiyun 	unsigned char	exponent[128];
48*4882a593Smuzhiyun 	unsigned char	modulus[128];
49*4882a593Smuzhiyun 	unsigned char	message[128];
50*4882a593Smuzhiyun } __packed;
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun /* Mod-Exp, with a large modulus */
53*4882a593Smuzhiyun struct type50_meb2_msg {
54*4882a593Smuzhiyun 	struct type50_hdr header;
55*4882a593Smuzhiyun 	unsigned short	keyblock_type;	/* 0x0002 */
56*4882a593Smuzhiyun 	unsigned char	reserved[6];
57*4882a593Smuzhiyun 	unsigned char	exponent[256];
58*4882a593Smuzhiyun 	unsigned char	modulus[256];
59*4882a593Smuzhiyun 	unsigned char	message[256];
60*4882a593Smuzhiyun } __packed;
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun /* Mod-Exp, with a larger modulus */
63*4882a593Smuzhiyun struct type50_meb3_msg {
64*4882a593Smuzhiyun 	struct type50_hdr header;
65*4882a593Smuzhiyun 	unsigned short	keyblock_type;	/* 0x0003 */
66*4882a593Smuzhiyun 	unsigned char	reserved[6];
67*4882a593Smuzhiyun 	unsigned char	exponent[512];
68*4882a593Smuzhiyun 	unsigned char	modulus[512];
69*4882a593Smuzhiyun 	unsigned char	message[512];
70*4882a593Smuzhiyun } __packed;
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun /* CRT, with a small modulus */
73*4882a593Smuzhiyun struct type50_crb1_msg {
74*4882a593Smuzhiyun 	struct type50_hdr header;
75*4882a593Smuzhiyun 	unsigned short	keyblock_type;	/* 0x0011 */
76*4882a593Smuzhiyun 	unsigned char	reserved[6];
77*4882a593Smuzhiyun 	unsigned char	p[64];
78*4882a593Smuzhiyun 	unsigned char	q[64];
79*4882a593Smuzhiyun 	unsigned char	dp[64];
80*4882a593Smuzhiyun 	unsigned char	dq[64];
81*4882a593Smuzhiyun 	unsigned char	u[64];
82*4882a593Smuzhiyun 	unsigned char	message[128];
83*4882a593Smuzhiyun } __packed;
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /* CRT, with a large modulus */
86*4882a593Smuzhiyun struct type50_crb2_msg {
87*4882a593Smuzhiyun 	struct type50_hdr header;
88*4882a593Smuzhiyun 	unsigned short	keyblock_type;	/* 0x0012 */
89*4882a593Smuzhiyun 	unsigned char	reserved[6];
90*4882a593Smuzhiyun 	unsigned char	p[128];
91*4882a593Smuzhiyun 	unsigned char	q[128];
92*4882a593Smuzhiyun 	unsigned char	dp[128];
93*4882a593Smuzhiyun 	unsigned char	dq[128];
94*4882a593Smuzhiyun 	unsigned char	u[128];
95*4882a593Smuzhiyun 	unsigned char	message[256];
96*4882a593Smuzhiyun } __packed;
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun /* CRT, with a larger modulus */
99*4882a593Smuzhiyun struct type50_crb3_msg {
100*4882a593Smuzhiyun 	struct type50_hdr header;
101*4882a593Smuzhiyun 	unsigned short	keyblock_type;	/* 0x0013 */
102*4882a593Smuzhiyun 	unsigned char	reserved[6];
103*4882a593Smuzhiyun 	unsigned char	p[256];
104*4882a593Smuzhiyun 	unsigned char	q[256];
105*4882a593Smuzhiyun 	unsigned char	dp[256];
106*4882a593Smuzhiyun 	unsigned char	dq[256];
107*4882a593Smuzhiyun 	unsigned char	u[256];
108*4882a593Smuzhiyun 	unsigned char	message[512];
109*4882a593Smuzhiyun } __packed;
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun /**
112*4882a593Smuzhiyun  * The type 80 response family is associated with a CEXxA cards.
113*4882a593Smuzhiyun  *
114*4882a593Smuzhiyun  * Note that all unsigned char arrays are right-justified and left-padded
115*4882a593Smuzhiyun  * with zeroes.
116*4882a593Smuzhiyun  *
117*4882a593Smuzhiyun  * Note that all reserved fields must be zeroes.
118*4882a593Smuzhiyun  */
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun #define TYPE80_RSP_CODE 0x80
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun struct type80_hdr {
123*4882a593Smuzhiyun 	unsigned char	reserved1;
124*4882a593Smuzhiyun 	unsigned char	type;		/* 0x80 */
125*4882a593Smuzhiyun 	unsigned short	len;
126*4882a593Smuzhiyun 	unsigned char	code;		/* 0x00 */
127*4882a593Smuzhiyun 	unsigned char	reserved2[3];
128*4882a593Smuzhiyun 	unsigned char	reserved3[8];
129*4882a593Smuzhiyun } __packed;
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun int zcrypt_cex2a_init(void);
132*4882a593Smuzhiyun void zcrypt_cex2a_exit(void);
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun #endif /* _ZCRYPT_CEX2A_H_ */
135