]>
Commit | Line | Data |
---|---|---|
bc4e831c | 1 | /* |
3c7d0945 | 2 | * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. |
bc4e831c | 3 | * |
0e9725bc | 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use |
bc4e831c PS |
5 | * this file except in compliance with the License. You can obtain a copy |
6 | * in the file LICENSE in the source distribution or at | |
7 | * https://www.openssl.org/source/license.html | |
8 | */ | |
9 | ||
10 | #ifndef S390X_ARCH_H | |
11 | # define S390X_ARCH_H | |
12 | ||
13 | # ifndef __ASSEMBLER__ | |
14 | ||
f38edcab PS |
15 | void s390x_kimd(const unsigned char *in, size_t len, unsigned int fc, |
16 | void *param); | |
17 | void s390x_klmd(const unsigned char *in, size_t inlen, unsigned char *out, | |
18 | size_t outlen, unsigned int fc, void *param); | |
96530eea PS |
19 | void s390x_km(const unsigned char *in, size_t len, unsigned char *out, |
20 | unsigned int fc, void *param); | |
39f5b069 PS |
21 | void s390x_kmac(const unsigned char *in, size_t len, unsigned int fc, |
22 | void *param); | |
dacd2a87 PS |
23 | void s390x_kmo(const unsigned char *in, size_t len, unsigned char *out, |
24 | unsigned int fc, void *param); | |
74d38a86 PS |
25 | void s390x_kmf(const unsigned char *in, size_t len, unsigned char *out, |
26 | unsigned int fc, void *param); | |
96530eea PS |
27 | void s390x_kma(const unsigned char *aad, size_t alen, const unsigned char *in, |
28 | size_t len, unsigned char *out, unsigned int fc, void *param); | |
e382f507 PS |
29 | int s390x_pcc(unsigned int fc, void *param); |
30 | int s390x_kdsa(unsigned int fc, void *param, const unsigned char *in, | |
31 | size_t len); | |
96530eea | 32 | |
bc4e831c PS |
33 | /* |
34 | * The field elements of OPENSSL_s390xcap_P are the 64-bit words returned by | |
35 | * the STFLE instruction followed by the 64-bit word pairs returned by | |
36 | * instructions' QUERY functions. If STFLE returns fewer data or an instruction | |
37 | * is not supported, the corresponding field elements are zero. | |
38 | */ | |
39 | struct OPENSSL_s390xcap_st { | |
40 | unsigned long long stfle[4]; | |
41 | unsigned long long kimd[2]; | |
42 | unsigned long long klmd[2]; | |
43 | unsigned long long km[2]; | |
44 | unsigned long long kmc[2]; | |
45 | unsigned long long kmac[2]; | |
46 | unsigned long long kmctr[2]; | |
47 | unsigned long long kmo[2]; | |
48 | unsigned long long kmf[2]; | |
49 | unsigned long long prno[2]; | |
50 | unsigned long long kma[2]; | |
e382f507 PS |
51 | unsigned long long pcc[2]; |
52 | unsigned long long kdsa[2]; | |
bc4e831c PS |
53 | }; |
54 | ||
55 | extern struct OPENSSL_s390xcap_st OPENSSL_s390xcap_P; | |
56 | ||
f39ad8dc | 57 | /* Max number of 64-bit words currently returned by STFLE */ |
dd6b2706 | 58 | # define S390X_STFLE_MAX 3 |
f39ad8dc | 59 | |
bc4e831c | 60 | /* convert facility bit number or function code to bit mask */ |
dd6b2706 | 61 | # define S390X_CAPBIT(i) (1ULL << (63 - (i) % 64)) |
bc4e831c PS |
62 | |
63 | # endif | |
64 | ||
65 | /* OPENSSL_s390xcap_P offsets [bytes] */ | |
dd6b2706 P |
66 | # define S390X_STFLE 0x00 |
67 | # define S390X_KIMD 0x20 | |
68 | # define S390X_KLMD 0x30 | |
69 | # define S390X_KM 0x40 | |
70 | # define S390X_KMC 0x50 | |
71 | # define S390X_KMAC 0x60 | |
72 | # define S390X_KMCTR 0x70 | |
73 | # define S390X_KMO 0x80 | |
74 | # define S390X_KMF 0x90 | |
75 | # define S390X_PRNO 0xa0 | |
76 | # define S390X_KMA 0xb0 | |
77 | # define S390X_PCC 0xc0 | |
78 | # define S390X_KDSA 0xd0 | |
bc4e831c PS |
79 | |
80 | /* Facility Bit Numbers */ | |
dd6b2706 P |
81 | # define S390X_MSA 17 /* message-security-assist */ |
82 | # define S390X_STCKF 25 /* store-clock-fast */ | |
83 | # define S390X_MSA5 57 /* message-security-assist-ext. 5 */ | |
84 | # define S390X_MSA3 76 /* message-security-assist-ext. 3 */ | |
85 | # define S390X_MSA4 77 /* message-security-assist-ext. 4 */ | |
86 | # define S390X_VX 129 /* vector */ | |
87 | # define S390X_VXD 134 /* vector packed decimal */ | |
88 | # define S390X_VXE 135 /* vector enhancements 1 */ | |
89 | # define S390X_MSA8 146 /* message-security-assist-ext. 8 */ | |
90 | # define S390X_MSA9 155 /* message-security-assist-ext. 9 */ | |
bc4e831c PS |
91 | |
92 | /* Function Codes */ | |
93 | ||
94 | /* all instructions */ | |
dd6b2706 | 95 | # define S390X_QUERY 0 |
bc4e831c PS |
96 | |
97 | /* kimd/klmd */ | |
dd6b2706 P |
98 | # define S390X_SHA_1 1 |
99 | # define S390X_SHA_256 2 | |
100 | # define S390X_SHA_512 3 | |
101 | # define S390X_SHA3_224 32 | |
102 | # define S390X_SHA3_256 33 | |
103 | # define S390X_SHA3_384 34 | |
104 | # define S390X_SHA3_512 35 | |
105 | # define S390X_SHAKE_128 36 | |
106 | # define S390X_SHAKE_256 37 | |
107 | # define S390X_GHASH 65 | |
bc4e831c PS |
108 | |
109 | /* km/kmc/kmac/kmctr/kmo/kmf/kma */ | |
dd6b2706 P |
110 | # define S390X_AES_128 18 |
111 | # define S390X_AES_192 19 | |
112 | # define S390X_AES_256 20 | |
bc4e831c | 113 | |
f39ad8dc | 114 | /* km */ |
dd6b2706 P |
115 | # define S390X_XTS_AES_128 50 |
116 | # define S390X_XTS_AES_256 52 | |
f39ad8dc | 117 | |
bc4e831c | 118 | /* prno */ |
dd6b2706 P |
119 | # define S390X_SHA_512_DRNG 3 |
120 | # define S390X_TRNG 114 | |
bc4e831c | 121 | |
e382f507 | 122 | /* pcc */ |
dd6b2706 P |
123 | # define S390X_SCALAR_MULTIPLY_P256 64 |
124 | # define S390X_SCALAR_MULTIPLY_P384 65 | |
125 | # define S390X_SCALAR_MULTIPLY_P521 66 | |
e382f507 PS |
126 | |
127 | /* kdsa */ | |
dd6b2706 P |
128 | # define S390X_ECDSA_VERIFY_P256 1 |
129 | # define S390X_ECDSA_VERIFY_P384 2 | |
130 | # define S390X_ECDSA_VERIFY_P521 3 | |
131 | # define S390X_ECDSA_SIGN_P256 9 | |
132 | # define S390X_ECDSA_SIGN_P384 10 | |
133 | # define S390X_ECDSA_SIGN_P521 11 | |
e382f507 | 134 | |
96530eea | 135 | /* Register 0 Flags */ |
dd6b2706 P |
136 | # define S390X_DECRYPT 0x80 |
137 | # define S390X_KMA_LPC 0x100 | |
138 | # define S390X_KMA_LAAD 0x200 | |
139 | # define S390X_KMA_HS 0x400 | |
140 | # define S390X_KDSA_D 0x80 | |
96530eea | 141 | |
bc4e831c | 142 | #endif |