]>
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 | ||
ae4186b0 DMSP |
10 | #ifndef OSSL_CRYPTO_S390X_ARCH_H |
11 | # define OSSL_CRYPTO_S390X_ARCH_H | |
bc4e831c PS |
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 | |
19bd1fa1 PS |
33 | void s390x_flip_endian32(unsigned char dst[32], const unsigned char src[32]); |
34 | void s390x_flip_endian64(unsigned char dst[64], const unsigned char src[64]); | |
35 | ||
bc4e831c PS |
36 | /* |
37 | * The field elements of OPENSSL_s390xcap_P are the 64-bit words returned by | |
38 | * the STFLE instruction followed by the 64-bit word pairs returned by | |
39 | * instructions' QUERY functions. If STFLE returns fewer data or an instruction | |
40 | * is not supported, the corresponding field elements are zero. | |
41 | */ | |
42 | struct OPENSSL_s390xcap_st { | |
43 | unsigned long long stfle[4]; | |
44 | unsigned long long kimd[2]; | |
45 | unsigned long long klmd[2]; | |
46 | unsigned long long km[2]; | |
47 | unsigned long long kmc[2]; | |
48 | unsigned long long kmac[2]; | |
49 | unsigned long long kmctr[2]; | |
50 | unsigned long long kmo[2]; | |
51 | unsigned long long kmf[2]; | |
52 | unsigned long long prno[2]; | |
53 | unsigned long long kma[2]; | |
e382f507 PS |
54 | unsigned long long pcc[2]; |
55 | unsigned long long kdsa[2]; | |
bc4e831c PS |
56 | }; |
57 | ||
58 | extern struct OPENSSL_s390xcap_st OPENSSL_s390xcap_P; | |
59 | ||
f39ad8dc | 60 | /* Max number of 64-bit words currently returned by STFLE */ |
dd6b2706 | 61 | # define S390X_STFLE_MAX 3 |
f39ad8dc | 62 | |
bc4e831c | 63 | /* convert facility bit number or function code to bit mask */ |
dd6b2706 | 64 | # define S390X_CAPBIT(i) (1ULL << (63 - (i) % 64)) |
bc4e831c PS |
65 | |
66 | # endif | |
67 | ||
68 | /* OPENSSL_s390xcap_P offsets [bytes] */ | |
dd6b2706 P |
69 | # define S390X_STFLE 0x00 |
70 | # define S390X_KIMD 0x20 | |
71 | # define S390X_KLMD 0x30 | |
72 | # define S390X_KM 0x40 | |
73 | # define S390X_KMC 0x50 | |
74 | # define S390X_KMAC 0x60 | |
75 | # define S390X_KMCTR 0x70 | |
76 | # define S390X_KMO 0x80 | |
77 | # define S390X_KMF 0x90 | |
78 | # define S390X_PRNO 0xa0 | |
79 | # define S390X_KMA 0xb0 | |
80 | # define S390X_PCC 0xc0 | |
81 | # define S390X_KDSA 0xd0 | |
bc4e831c PS |
82 | |
83 | /* Facility Bit Numbers */ | |
dd6b2706 P |
84 | # define S390X_MSA 17 /* message-security-assist */ |
85 | # define S390X_STCKF 25 /* store-clock-fast */ | |
86 | # define S390X_MSA5 57 /* message-security-assist-ext. 5 */ | |
87 | # define S390X_MSA3 76 /* message-security-assist-ext. 3 */ | |
88 | # define S390X_MSA4 77 /* message-security-assist-ext. 4 */ | |
89 | # define S390X_VX 129 /* vector */ | |
90 | # define S390X_VXD 134 /* vector packed decimal */ | |
91 | # define S390X_VXE 135 /* vector enhancements 1 */ | |
92 | # define S390X_MSA8 146 /* message-security-assist-ext. 8 */ | |
93 | # define S390X_MSA9 155 /* message-security-assist-ext. 9 */ | |
bc4e831c PS |
94 | |
95 | /* Function Codes */ | |
96 | ||
97 | /* all instructions */ | |
dd6b2706 | 98 | # define S390X_QUERY 0 |
bc4e831c PS |
99 | |
100 | /* kimd/klmd */ | |
dd6b2706 P |
101 | # define S390X_SHA_1 1 |
102 | # define S390X_SHA_256 2 | |
103 | # define S390X_SHA_512 3 | |
104 | # define S390X_SHA3_224 32 | |
105 | # define S390X_SHA3_256 33 | |
106 | # define S390X_SHA3_384 34 | |
107 | # define S390X_SHA3_512 35 | |
108 | # define S390X_SHAKE_128 36 | |
109 | # define S390X_SHAKE_256 37 | |
110 | # define S390X_GHASH 65 | |
bc4e831c PS |
111 | |
112 | /* km/kmc/kmac/kmctr/kmo/kmf/kma */ | |
dd6b2706 P |
113 | # define S390X_AES_128 18 |
114 | # define S390X_AES_192 19 | |
115 | # define S390X_AES_256 20 | |
bc4e831c | 116 | |
f39ad8dc | 117 | /* km */ |
dd6b2706 P |
118 | # define S390X_XTS_AES_128 50 |
119 | # define S390X_XTS_AES_256 52 | |
f39ad8dc | 120 | |
bc4e831c | 121 | /* prno */ |
dd6b2706 P |
122 | # define S390X_SHA_512_DRNG 3 |
123 | # define S390X_TRNG 114 | |
bc4e831c | 124 | |
e382f507 | 125 | /* pcc */ |
dd6b2706 P |
126 | # define S390X_SCALAR_MULTIPLY_P256 64 |
127 | # define S390X_SCALAR_MULTIPLY_P384 65 | |
128 | # define S390X_SCALAR_MULTIPLY_P521 66 | |
19bd1fa1 PS |
129 | # define S390X_SCALAR_MULTIPLY_ED25519 72 |
130 | # define S390X_SCALAR_MULTIPLY_ED448 73 | |
131 | # define S390X_SCALAR_MULTIPLY_X25519 80 | |
132 | # define S390X_SCALAR_MULTIPLY_X448 81 | |
e382f507 PS |
133 | |
134 | /* kdsa */ | |
dd6b2706 P |
135 | # define S390X_ECDSA_VERIFY_P256 1 |
136 | # define S390X_ECDSA_VERIFY_P384 2 | |
137 | # define S390X_ECDSA_VERIFY_P521 3 | |
138 | # define S390X_ECDSA_SIGN_P256 9 | |
139 | # define S390X_ECDSA_SIGN_P384 10 | |
140 | # define S390X_ECDSA_SIGN_P521 11 | |
19bd1fa1 PS |
141 | # define S390X_EDDSA_VERIFY_ED25519 32 |
142 | # define S390X_EDDSA_VERIFY_ED448 36 | |
143 | # define S390X_EDDSA_SIGN_ED25519 40 | |
144 | # define S390X_EDDSA_SIGN_ED448 44 | |
e382f507 | 145 | |
96530eea | 146 | /* Register 0 Flags */ |
dd6b2706 P |
147 | # define S390X_DECRYPT 0x80 |
148 | # define S390X_KMA_LPC 0x100 | |
149 | # define S390X_KMA_LAAD 0x200 | |
150 | # define S390X_KMA_HS 0x400 | |
151 | # define S390X_KDSA_D 0x80 | |
96530eea | 152 | |
bc4e831c | 153 | #endif |