]>
Commit | Line | Data |
---|---|---|
bc4e831c | 1 | /* |
3c7d0945 | 2 | * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. |
bc4e831c PS |
3 | * |
4 | * Licensed under the OpenSSL license (the "License"). You may not use | |
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 | ||
96530eea PS |
15 | void s390x_km(const unsigned char *in, size_t len, unsigned char *out, |
16 | unsigned int fc, void *param); | |
39f5b069 PS |
17 | void s390x_kmac(const unsigned char *in, size_t len, unsigned int fc, |
18 | void *param); | |
dacd2a87 PS |
19 | void s390x_kmo(const unsigned char *in, size_t len, unsigned char *out, |
20 | unsigned int fc, void *param); | |
96530eea PS |
21 | void s390x_kma(const unsigned char *aad, size_t alen, const unsigned char *in, |
22 | size_t len, unsigned char *out, unsigned int fc, void *param); | |
23 | ||
bc4e831c PS |
24 | /* |
25 | * The field elements of OPENSSL_s390xcap_P are the 64-bit words returned by | |
26 | * the STFLE instruction followed by the 64-bit word pairs returned by | |
27 | * instructions' QUERY functions. If STFLE returns fewer data or an instruction | |
28 | * is not supported, the corresponding field elements are zero. | |
29 | */ | |
30 | struct OPENSSL_s390xcap_st { | |
31 | unsigned long long stfle[4]; | |
32 | unsigned long long kimd[2]; | |
33 | unsigned long long klmd[2]; | |
34 | unsigned long long km[2]; | |
35 | unsigned long long kmc[2]; | |
36 | unsigned long long kmac[2]; | |
37 | unsigned long long kmctr[2]; | |
38 | unsigned long long kmo[2]; | |
39 | unsigned long long kmf[2]; | |
40 | unsigned long long prno[2]; | |
41 | unsigned long long kma[2]; | |
42 | }; | |
43 | ||
44 | extern struct OPENSSL_s390xcap_st OPENSSL_s390xcap_P; | |
45 | ||
46 | /* convert facility bit number or function code to bit mask */ | |
47 | # define S390X_CAPBIT(i) (1ULL << (63 - (i) % 64)) | |
48 | ||
49 | # endif | |
50 | ||
51 | /* OPENSSL_s390xcap_P offsets [bytes] */ | |
52 | # define S390X_STFLE 0x00 | |
53 | # define S390X_KIMD 0x20 | |
54 | # define S390X_KLMD 0x30 | |
55 | # define S390X_KM 0x40 | |
56 | # define S390X_KMC 0x50 | |
57 | # define S390X_KMAC 0x60 | |
58 | # define S390X_KMCTR 0x70 | |
59 | # define S390X_KMO 0x80 | |
60 | # define S390X_KMF 0x90 | |
61 | # define S390X_PRNO 0xa0 | |
62 | # define S390X_KMA 0xb0 | |
63 | ||
64 | /* Facility Bit Numbers */ | |
65 | # define S390X_VX 129 | |
66 | # define S390X_VXD 134 | |
67 | # define S390X_VXE 135 | |
68 | ||
69 | /* Function Codes */ | |
70 | ||
71 | /* all instructions */ | |
72 | # define S390X_QUERY 0 | |
73 | ||
74 | /* kimd/klmd */ | |
75 | # define S390X_SHA3_224 32 | |
76 | # define S390X_SHA3_256 33 | |
77 | # define S390X_SHA3_384 34 | |
78 | # define S390X_SHA3_512 35 | |
79 | # define S390X_SHAKE_128 36 | |
80 | # define S390X_SHAKE_256 37 | |
81 | # define S390X_GHASH 65 | |
82 | ||
83 | /* km/kmc/kmac/kmctr/kmo/kmf/kma */ | |
84 | # define S390X_AES_128 18 | |
85 | # define S390X_AES_192 19 | |
86 | # define S390X_AES_256 20 | |
87 | ||
88 | /* prno */ | |
89 | # define S390X_TRNG 114 | |
90 | ||
96530eea PS |
91 | /* Register 0 Flags */ |
92 | # define S390X_DECRYPT 0x80 | |
93 | # define S390X_KMA_LPC 0x100 | |
94 | # define S390X_KMA_LAAD 0x200 | |
95 | # define S390X_KMA_HS 0x400 | |
96 | ||
bc4e831c | 97 | #endif |