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