xref: /freebsd/crypto/openssl/doc/man3/OPENSSL_s390xcap.pod (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1*b077aed3SPierre Pronchery=pod
2*b077aed3SPierre Pronchery
3*b077aed3SPierre Pronchery=head1 NAME
4*b077aed3SPierre Pronchery
5*b077aed3SPierre ProncheryOPENSSL_s390xcap - the IBM z processor capabilities vector
6*b077aed3SPierre Pronchery
7*b077aed3SPierre Pronchery=head1 SYNOPSIS
8*b077aed3SPierre Pronchery
9*b077aed3SPierre Pronchery env OPENSSL_s390xcap=... <application>
10*b077aed3SPierre Pronchery
11*b077aed3SPierre Pronchery=head1 DESCRIPTION
12*b077aed3SPierre Pronchery
13*b077aed3SPierre Proncherylibcrypto supports z/Architecture instruction set extensions. These
14*b077aed3SPierre Proncheryextensions are denoted by individual bits in the capabilities vector.
15*b077aed3SPierre ProncheryWhen libcrypto is initialized, the bits returned by the STFLE instruction
16*b077aed3SPierre Proncheryand by the QUERY functions are stored in the vector.
17*b077aed3SPierre Pronchery
18*b077aed3SPierre ProncheryTo change the set of instructions available to an application, you can
19*b077aed3SPierre Proncheryset the B<OPENSSL_s390xcap> environment variable before you start the
20*b077aed3SPierre Proncheryapplication. After initialization, the capability vector is ANDed bitwise
21*b077aed3SPierre Proncherywith a mask which is derived from the environment variable.
22*b077aed3SPierre Pronchery
23*b077aed3SPierre ProncheryThe environment variable is a semicolon-separated list of tokens which is
24*b077aed3SPierre Proncheryprocessed from left to right (whitespace is ignored):
25*b077aed3SPierre Pronchery
26*b077aed3SPierre Pronchery OPENSSL_s390xcap="<tok1>;<tok2>;..."
27*b077aed3SPierre Pronchery
28*b077aed3SPierre ProncheryThere are three types of tokens:
29*b077aed3SPierre Pronchery
30*b077aed3SPierre Pronchery=over 4
31*b077aed3SPierre Pronchery
32*b077aed3SPierre Pronchery=item <string>
33*b077aed3SPierre Pronchery
34*b077aed3SPierre ProncheryThe name of a processor generation. A bit in the environment variable's
35*b077aed3SPierre Proncherymask is set to one if and only if the specified processor generation
36*b077aed3SPierre Proncheryimplements the corresponding instruction set extension. Possible values
37*b077aed3SPierre Proncheryare B<z900>, B<z990>, B<z9>, B<z10>, B<z196>, B<zEC12>, B<z13>, B<z14>
38*b077aed3SPierre Proncheryand B<z15>.
39*b077aed3SPierre Pronchery
40*b077aed3SPierre Pronchery=item <string>:<mask>:<mask>
41*b077aed3SPierre Pronchery
42*b077aed3SPierre ProncheryThe name of an instruction followed by two 64-bit masks. The part of the
43*b077aed3SPierre Proncheryenvironment variable's mask corresponding to the specified instruction is
44*b077aed3SPierre Proncheryset to the specified 128-bit mask. Possible values are B<kimd>, B<klmd>,
45*b077aed3SPierre ProncheryB<km>, B<kmc>, B<kmac>, B<kmctr>, B<kmo>, B<kmf>, B<prno>, B<kma>, B<pcc>
46*b077aed3SPierre Proncheryand B<kdsa>.
47*b077aed3SPierre Pronchery
48*b077aed3SPierre Pronchery=item stfle:<mask>:<mask>:<mask>
49*b077aed3SPierre Pronchery
50*b077aed3SPierre ProncheryStore-facility-list-extended (stfle) followed by three 64-bit masks. The
51*b077aed3SPierre Proncherypart of the environment variable's mask corresponding to the stfle
52*b077aed3SPierre Proncheryinstruction is set to the specified 192-bit mask.
53*b077aed3SPierre Pronchery
54*b077aed3SPierre Pronchery=back
55*b077aed3SPierre Pronchery
56*b077aed3SPierre ProncheryThe 64-bit masks are specified in hexadecimal notation. The 0x prefix is
57*b077aed3SPierre Proncheryoptional. Prefix a mask with a tilde, C<~>, to denote a bitwise NOT operation.
58*b077aed3SPierre Pronchery
59*b077aed3SPierre ProncheryThe following is a list of significant bits for each instruction. Colon
60*b077aed3SPierre Proncheryrows separate the individual 64-bit masks. The bit numbers in the first
61*b077aed3SPierre Proncherycolumn are consistent with [1], that is, 0 denotes the leftmost bit and
62*b077aed3SPierre Proncherythe numbering is continuous across 64-bit mask boundaries.
63*b077aed3SPierre Pronchery
64*b077aed3SPierre Pronchery      Bit     Mask     Facility/Function
65*b077aed3SPierre Pronchery
66*b077aed3SPierre Pronchery stfle:
67*b077aed3SPierre Pronchery      # 17    1<<46    message-security assist
68*b077aed3SPierre Pronchery      # 25    1<<38    store-clock-fast facility
69*b077aed3SPierre Pronchery      :
70*b077aed3SPierre Pronchery      # 76    1<<51    message-security assist extension 3
71*b077aed3SPierre Pronchery      # 77    1<<50    message-security assist extension 4
72*b077aed3SPierre Pronchery      :
73*b077aed3SPierre Pronchery      #129    1<<62    vector facility
74*b077aed3SPierre Pronchery      #134    1<<57    vector packed decimal facility
75*b077aed3SPierre Pronchery      #135    1<<56    vector enhancements facility 1
76*b077aed3SPierre Pronchery      #146    1<<45    message-security assist extension 8
77*b077aed3SPierre Pronchery      #155    1<<36    message-security assist extension 9
78*b077aed3SPierre Pronchery
79*b077aed3SPierre Pronchery kimd :
80*b077aed3SPierre Pronchery      #  1    1<<62    KIMD-SHA-1
81*b077aed3SPierre Pronchery      #  2    1<<61    KIMD-SHA-256
82*b077aed3SPierre Pronchery      #  3    1<<60    KIMD-SHA-512
83*b077aed3SPierre Pronchery      # 32    1<<31    KIMD-SHA3-224
84*b077aed3SPierre Pronchery      # 33    1<<30    KIMD-SHA3-256
85*b077aed3SPierre Pronchery      # 34    1<<29    KIMD-SHA3-384
86*b077aed3SPierre Pronchery      # 35    1<<28    KIMD-SHA3-512
87*b077aed3SPierre Pronchery      # 36    1<<27    KIMD-SHAKE-128
88*b077aed3SPierre Pronchery      # 37    1<<26    KIMD-SHAKE-256
89*b077aed3SPierre Pronchery      :
90*b077aed3SPierre Pronchery      # 65    1<<62    KIMD-GHASH
91*b077aed3SPierre Pronchery
92*b077aed3SPierre Pronchery klmd :
93*b077aed3SPierre Pronchery      # 32    1<<31    KLMD-SHA3-224
94*b077aed3SPierre Pronchery      # 33    1<<30    KLMD-SHA3-256
95*b077aed3SPierre Pronchery      # 34    1<<29    KLMD-SHA3-384
96*b077aed3SPierre Pronchery      # 35    1<<28    KLMD-SHA3-512
97*b077aed3SPierre Pronchery      # 36    1<<27    KLMD-SHAKE-128
98*b077aed3SPierre Pronchery      # 37    1<<26    KLMD-SHAKE-256
99*b077aed3SPierre Pronchery      :
100*b077aed3SPierre Pronchery
101*b077aed3SPierre Pronchery km   :
102*b077aed3SPierre Pronchery      # 18    1<<45    KM-AES-128
103*b077aed3SPierre Pronchery      # 19    1<<44    KM-AES-192
104*b077aed3SPierre Pronchery      # 20    1<<43    KM-AES-256
105*b077aed3SPierre Pronchery      # 50    1<<13    KM-XTS-AES-128
106*b077aed3SPierre Pronchery      # 52    1<<11    KM-XTS-AES-256
107*b077aed3SPierre Pronchery      :
108*b077aed3SPierre Pronchery
109*b077aed3SPierre Pronchery kmc  :
110*b077aed3SPierre Pronchery      # 18    1<<45    KMC-AES-128
111*b077aed3SPierre Pronchery      # 19    1<<44    KMC-AES-192
112*b077aed3SPierre Pronchery      # 20    1<<43    KMC-AES-256
113*b077aed3SPierre Pronchery      :
114*b077aed3SPierre Pronchery
115*b077aed3SPierre Pronchery kmac :
116*b077aed3SPierre Pronchery      # 18    1<<45    KMAC-AES-128
117*b077aed3SPierre Pronchery      # 19    1<<44    KMAC-AES-192
118*b077aed3SPierre Pronchery      # 20    1<<43    KMAC-AES-256
119*b077aed3SPierre Pronchery      :
120*b077aed3SPierre Pronchery
121*b077aed3SPierre Pronchery kmctr:
122*b077aed3SPierre Pronchery      :
123*b077aed3SPierre Pronchery
124*b077aed3SPierre Pronchery kmo  :
125*b077aed3SPierre Pronchery      # 18    1<<45    KMO-AES-128
126*b077aed3SPierre Pronchery      # 19    1<<44    KMO-AES-192
127*b077aed3SPierre Pronchery      # 20    1<<43    KMO-AES-256
128*b077aed3SPierre Pronchery      :
129*b077aed3SPierre Pronchery
130*b077aed3SPierre Pronchery kmf  :
131*b077aed3SPierre Pronchery      # 18    1<<45    KMF-AES-128
132*b077aed3SPierre Pronchery      # 19    1<<44    KMF-AES-192
133*b077aed3SPierre Pronchery      # 20    1<<43    KMF-AES-256
134*b077aed3SPierre Pronchery      :
135*b077aed3SPierre Pronchery
136*b077aed3SPierre Pronchery prno :
137*b077aed3SPierre Pronchery      :
138*b077aed3SPierre Pronchery
139*b077aed3SPierre Pronchery kma  :
140*b077aed3SPierre Pronchery      # 18    1<<45    KMA-GCM-AES-128
141*b077aed3SPierre Pronchery      # 19    1<<44    KMA-GCM-AES-192
142*b077aed3SPierre Pronchery      # 20    1<<43    KMA-GCM-AES-256
143*b077aed3SPierre Pronchery      :
144*b077aed3SPierre Pronchery
145*b077aed3SPierre Pronchery pcc  :
146*b077aed3SPierre Pronchery      :
147*b077aed3SPierre Pronchery      # 64    1<<63    PCC-Scalar-Multiply-P256
148*b077aed3SPierre Pronchery      # 65    1<<62    PCC-Scalar-Multiply-P384
149*b077aed3SPierre Pronchery      # 66    1<<61    PCC-Scalar-Multiply-P521
150*b077aed3SPierre Pronchery      # 72    1<<55    PCC-Scalar-Multiply-Ed25519
151*b077aed3SPierre Pronchery      # 73    1<<54    PCC-Scalar-Multiply-Ed448
152*b077aed3SPierre Pronchery      # 80    1<<47    PCC-Scalar-Multiply-X25519
153*b077aed3SPierre Pronchery      # 81    1<<46    PCC-Scalar-Multiply-X448
154*b077aed3SPierre Pronchery
155*b077aed3SPierre Pronchery kdsa :
156*b077aed3SPierre Pronchery      #  1    1<<62    KDSA-ECDSA-Verify-P256
157*b077aed3SPierre Pronchery      #  2    1<<61    KDSA-ECDSA-Verify-P384
158*b077aed3SPierre Pronchery      #  3    1<<60    KDSA-ECDSA-Verify-P521
159*b077aed3SPierre Pronchery      #  9    1<<54    KDSA-ECDSA-Sign-P256
160*b077aed3SPierre Pronchery      # 10    1<<53    KDSA-ECDSA-Sign-P384
161*b077aed3SPierre Pronchery      # 11    1<<52    KDSA-ECDSA-Sign-P521
162*b077aed3SPierre Pronchery      # 32    1<<31    KDSA-EdDSA-Verify-Ed25519
163*b077aed3SPierre Pronchery      # 36    1<<27    KDSA-EdDSA-Verify-Ed448
164*b077aed3SPierre Pronchery      # 40    1<<23    KDSA-EdDSA-Sign-Ed25519
165*b077aed3SPierre Pronchery      # 44    1<<19    KDSA-EdDSA-Sign-Ed448
166*b077aed3SPierre Pronchery      :
167*b077aed3SPierre Pronchery
168*b077aed3SPierre Pronchery=head1 RETURN VALUES
169*b077aed3SPierre Pronchery
170*b077aed3SPierre ProncheryNot available.
171*b077aed3SPierre Pronchery
172*b077aed3SPierre Pronchery=head1 EXAMPLES
173*b077aed3SPierre Pronchery
174*b077aed3SPierre ProncheryDisables all instruction set extensions which the z196 processor does not implement:
175*b077aed3SPierre Pronchery
176*b077aed3SPierre Pronchery OPENSSL_s390xcap="z196"
177*b077aed3SPierre Pronchery
178*b077aed3SPierre ProncheryDisables the vector facility:
179*b077aed3SPierre Pronchery
180*b077aed3SPierre Pronchery OPENSSL_s390xcap="stfle:~0:~0:~0x4000000000000000"
181*b077aed3SPierre Pronchery
182*b077aed3SPierre ProncheryDisables the KM-XTS-AES and the KIMD-SHAKE function codes:
183*b077aed3SPierre Pronchery
184*b077aed3SPierre Pronchery OPENSSL_s390xcap="km:~0x2800:~0;kimd:~0xc000000:~0"
185*b077aed3SPierre Pronchery
186*b077aed3SPierre Pronchery=head1 SEE ALSO
187*b077aed3SPierre Pronchery
188*b077aed3SPierre Pronchery[1] z/Architecture Principles of Operation, SA22-7832-12
189*b077aed3SPierre Pronchery
190*b077aed3SPierre Pronchery=head1 COPYRIGHT
191*b077aed3SPierre Pronchery
192*b077aed3SPierre ProncheryCopyright 2018-2020 The OpenSSL Project Authors. All Rights Reserved.
193*b077aed3SPierre Pronchery
194*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
195*b077aed3SPierre Proncherythis file except in compliance with the License.  You can obtain a copy
196*b077aed3SPierre Proncheryin the file LICENSE in the source distribution or at
197*b077aed3SPierre ProncheryL<https://www.openssl.org/source/license.html>.
198*b077aed3SPierre Pronchery
199*b077aed3SPierre Pronchery=cut
200