xref: /freebsd/share/man/man9/crypto_session.9 (revision 9b774dc0c586235e3f742dd487fd79e9fa90eedb)
1c0341432SJohn Baldwin.\" Copyright (c) 2020, Chelsio Inc
2c0341432SJohn Baldwin.\"
3c0341432SJohn Baldwin.\" Redistribution and use in source and binary forms, with or without
4c0341432SJohn Baldwin.\" modification, are permitted provided that the following conditions are met:
5c0341432SJohn Baldwin.\"
6c0341432SJohn Baldwin.\" 1. Redistributions of source code must retain the above copyright notice,
7c0341432SJohn Baldwin.\"    this list of conditions and the following disclaimer.
8c0341432SJohn Baldwin.\"
9c0341432SJohn Baldwin.\" 2. Redistributions in binary form must reproduce the above copyright
10c0341432SJohn Baldwin.\"    notice, this list of conditions and the following disclaimer in the
11c0341432SJohn Baldwin.\"    documentation and/or other materials provided with the distribution.
12c0341432SJohn Baldwin.\"
13c0341432SJohn Baldwin.\" 3. Neither the name of the Chelsio Inc nor the names of its
14c0341432SJohn Baldwin.\"    contributors may be used to endorse or promote products derived from
15c0341432SJohn Baldwin.\"    this software without specific prior written permission.
16c0341432SJohn Baldwin.\"
17c0341432SJohn Baldwin.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18c0341432SJohn Baldwin.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19c0341432SJohn Baldwin.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20c0341432SJohn Baldwin.\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21c0341432SJohn Baldwin.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22c0341432SJohn Baldwin.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23c0341432SJohn Baldwin.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24c0341432SJohn Baldwin.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25c0341432SJohn Baldwin.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26c0341432SJohn Baldwin.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27c0341432SJohn Baldwin.\" POSSIBILITY OF SUCH DAMAGE.
28c0341432SJohn Baldwin.\"
29c0341432SJohn Baldwin.\" * Other names and brands may be claimed as the property of others.
30c0341432SJohn Baldwin.\"
31c0341432SJohn Baldwin.\" $FreeBSD$
32c0341432SJohn Baldwin.\"
33*9b774dc0SJohn Baldwin.Dd June 22, 2020
34c0341432SJohn Baldwin.Dt CRYPTO_SESSION 9
35c0341432SJohn Baldwin.Os
36c0341432SJohn Baldwin.Sh NAME
37c0341432SJohn Baldwin.Nm crypto_session
38c0341432SJohn Baldwin.Nd state used for symmetric cryptographic services
39c0341432SJohn Baldwin.Sh SYNOPSIS
40c0341432SJohn Baldwin.In opencrypto/cryptodev.h
41c0341432SJohn Baldwin.Ft struct auth_hash *
42c0341432SJohn Baldwin.Fn crypto_auth_hash "const struct crypto_session_params *csp"
43c0341432SJohn Baldwin.Ft struct enc_xform *
44c0341432SJohn Baldwin.Fn crypto_cipher "const struct crypto_session_params *csp"
45c0341432SJohn Baldwin.Ft const struct crypto_session_params *
46c0341432SJohn Baldwin.Fn crypto_get_params "crypto_session_t cses"
47c0341432SJohn Baldwin.Ft int
48c0341432SJohn Baldwin.Fo crypto_newsession
49c0341432SJohn Baldwin.Fa "crypto_session_t *cses"
50c0341432SJohn Baldwin.Fa "const struct crypto_session_params *csp"
51c0341432SJohn Baldwin.Fa "int crid"
52c0341432SJohn Baldwin.Fc
53c0341432SJohn Baldwin.Ft int
54c0341432SJohn Baldwin.Fn crypto_freesession "crypto_session_t cses"
55c0341432SJohn Baldwin.Sh DESCRIPTION
56c0341432SJohn BaldwinSymmetric cryptographic operations in the kernel are associated with
57c0341432SJohn Baldwincryptographic sessions.
58c0341432SJohn BaldwinSessions hold state shared across multiple requests.
59c0341432SJohn BaldwinActive sessions are associated with a single cryptographic driver.
60c0341432SJohn Baldwin.Pp
61c0341432SJohn BaldwinThe
62c0341432SJohn Baldwin.Vt crypto_session_t
63c0341432SJohn Baldwintype represents an opaque reference to an active session.
64c0341432SJohn BaldwinSession objects are allocated and managed by the cryptographic
65c0341432SJohn Baldwinframework.
66c0341432SJohn Baldwin.Pp
67c0341432SJohn BaldwinNew sessions are created by
68c0341432SJohn Baldwin.Fn crypto_newsession .
69c0341432SJohn Baldwin.Fa csp
70c0341432SJohn Baldwindescribes various parameters associated with the new session such as
71c0341432SJohn Baldwinthe algorithms to use and any session-wide keys.
72c0341432SJohn Baldwin.Fa crid
73c0341432SJohn Baldwincan be used to request either a specific cryptographic driver or
74c0341432SJohn Baldwinclasses of drivers.
75c0341432SJohn BaldwinFor the latter case,
76c0341432SJohn Baldwin.Fa crid
77c0341432SJohn Baldwinshould be set to a mask of the following values:
78c0341432SJohn Baldwin.Bl -tag -width "CRYPTOCAP_F_HARDWARE"
79c0341432SJohn Baldwin.It Dv CRYPTOCAP_F_HARDWARE
80c0341432SJohn BaldwinRequest hardware drivers.
81c0341432SJohn BaldwinHardware drivers do not use the host CPU to perform operations.
82c0341432SJohn BaldwinTypically, a separate co-processor performs the operations asynchronously.
83c0341432SJohn Baldwin.It Dv CRYPTOCAP_F_SOFTWARE
84c0341432SJohn BaldwinRequest software drivers.
85c0341432SJohn BaldwinSoftware drivers use the host CPU to perform operations.
86c0341432SJohn BaldwinThe kernel includes a simple, yet portable implementation of each supported
87c0341432SJohn Baldwinalgorithm in the
88c0341432SJohn Baldwin.Xr cryptosoft 4
89c0341432SJohn Baldwindriver.
90c0341432SJohn BaldwinAdditional software drivers may also be available on architectures which
91c0341432SJohn Baldwinprovide instructions designed to accelerate cryptographic operations.
92c0341432SJohn Baldwin.El
93c0341432SJohn Baldwin.Pp
94c0341432SJohn BaldwinIf both hardware and software drivers are requested,
95c0341432SJohn Baldwinhardware drivers are preferred over software drivers.
96c0341432SJohn BaldwinAccelerated software drivers are preferred over the baseline software driver.
97c0341432SJohn BaldwinIf multiple hardware drivers are available,
98c0341432SJohn Baldwinthe framework will distribute sessions across these drivers in a round-robin
99c0341432SJohn Baldwinfashion.
100c0341432SJohn Baldwin.Pp
101c0341432SJohn BaldwinOn success,
102c0341432SJohn Baldwin.Fn crypto_newsession
103c0341432SJohn Baldwinsaves a reference to the newly created session in
104c0341432SJohn Baldwin.Fa cses .
105c0341432SJohn Baldwin.Pp
106c0341432SJohn Baldwin.Fn crypto_freesession
107c0341432SJohn Baldwinis used to free the resources associated with the session
108c0341432SJohn Baldwin.Fa cses .
109c0341432SJohn Baldwin.Pp
110c0341432SJohn Baldwin.Fn crypto_auth_hash
111c0341432SJohn Baldwinreturns a structure describing the baseline software implementation of an
112c0341432SJohn Baldwinauthentication algorithm requested by
113c0341432SJohn Baldwin.Fa csp .
114c0341432SJohn BaldwinIf
115c0341432SJohn Baldwin.Fa csp
116c0341432SJohn Baldwindoes not specify an authentication algorithm,
117c0341432SJohn Baldwinor requests an invalid algorithm,
118c0341432SJohn Baldwin.Dv NULL
119c0341432SJohn Baldwinis returned.
120c0341432SJohn Baldwin.Pp
121c0341432SJohn Baldwin.Fn crypto_cipher
122c0341432SJohn Baldwinreturns a structure describing the baseline software implementation of an
123c0341432SJohn Baldwinencryption algorithm requested by
124c0341432SJohn Baldwin.Fa csp .
125c0341432SJohn BaldwinIf
126c0341432SJohn Baldwin.Fa csp
127c0341432SJohn Baldwindoes not specify an encryption algorithm,
128c0341432SJohn Baldwinor requests an invalid algorithm,
129c0341432SJohn Baldwin.Dv NULL
130c0341432SJohn Baldwinis returned.
131c0341432SJohn Baldwin.Pp
132c0341432SJohn Baldwin.Fn crypto_get_params
133c0341432SJohn Baldwinreturns a pointer to the session parameters used by
134c0341432SJohn Baldwin.Fa cses .
135c0341432SJohn Baldwin.Ss Session Parameters
136c0341432SJohn BaldwinSession parameters are used to describe the cryptographic operations
137c0341432SJohn Baldwinperformed by cryptographic requests.
138c0341432SJohn BaldwinParameters are stored in an instance of
139c0341432SJohn Baldwin.Vt struct crypto_session_params .
140c0341432SJohn BaldwinWhen initializing parameters to pass to
141c0341432SJohn Baldwin.Fn crypto_newsession ,
142c0341432SJohn Baldwinthe entire structure should first be zeroed.
143c0341432SJohn BaldwinNeeded fields should then be set leaving unused fields as zero.
144c0341432SJohn BaldwinThis structure contains the following fields:
145c0341432SJohn Baldwin.Bl -tag -width csp_cipher_klen
146c0341432SJohn Baldwin.It Fa csp_mode
147c0341432SJohn BaldwinType of operation to perform.
148c0341432SJohn BaldwinThis field must be set to one of the following:
149c0341432SJohn Baldwin.Bl -tag -width CSP_MODE_COMPRESS
150c0341432SJohn Baldwin.It Dv CSP_MODE_COMPRESS
151c0341432SJohn BaldwinCompress or decompress request payload.
152c0341432SJohn Baldwin.Pp
153c0341432SJohn BaldwinThe compression algorithm is specified in
154c0341432SJohn Baldwin.Fa csp_cipher_alg .
155c0341432SJohn Baldwin.It Dv CSP_MODE_CIPHER
156c0341432SJohn BaldwinEncrypt or decrypt request payload.
157c0341432SJohn Baldwin.Pp
158c0341432SJohn BaldwinThe encryption algorithm is specified in
159c0341432SJohn Baldwin.Fa csp_cipher_alg .
160c0341432SJohn Baldwin.It Dv CSP_MODE_DIGEST
161c0341432SJohn BaldwinCompute or verify a digest, or hash, of request payload.
162c0341432SJohn Baldwin.Pp
163c0341432SJohn BaldwinThe authentication algorithm is specified in
164c0341432SJohn Baldwin.Fa csp_auth_alg .
165c0341432SJohn Baldwin.It Dv CSP_MODE_AEAD
166c0341432SJohn BaldwinAuthenticated encryption with additional data.
167c0341432SJohn BaldwinDecryption operations require the digest, or tag,
168c0341432SJohn Baldwinand fail if it does not match.
169c0341432SJohn Baldwin.Pp
170c0341432SJohn BaldwinThe AEAD algorithm is specified in
171c0341432SJohn Baldwin.Fa csp_cipher_alg .
172c0341432SJohn Baldwin.It Dv CSP_MODE_ETA
173c0341432SJohn BaldwinEncrypt-then-Authenticate.
174c0341432SJohn BaldwinIn this mode, encryption operations encrypt the payload and then
175c0341432SJohn Baldwincompute an authentication digest over the request additional authentication
176c0341432SJohn Baldwindata followed by the encrypted payload.
177c0341432SJohn BaldwinDecryption operations fail without decrypting the data if the provided digest
178c0341432SJohn Baldwindoes not match.
179c0341432SJohn Baldwin.Pp
180c0341432SJohn BaldwinThe encryption algorithm is specified in
181c0341432SJohn Baldwin.Fa csp_cipher_alg
182c0341432SJohn Baldwinand the authentication algorithm is specified in
183c0341432SJohn Baldwin.Fa csp_auth_alg .
184c0341432SJohn Baldwin.El
185c0341432SJohn Baldwin.It Fa csp_flags
1869c0e3d3aSJohn BaldwinA mask of optional driver features.
1879c0e3d3aSJohn BaldwinDrivers will only attach to a session if they support all of the
1889c0e3d3aSJohn Baldwinrequested features.
1899c0e3d3aSJohn Baldwin.Bl -tag -width CSP_F_SEPARATE_OUTPUT
1909c0e3d3aSJohn Baldwin.It Dv CSP_F_SEPARATE_OUTPUT
1919c0e3d3aSJohn BaldwinSupport requests that use separate input and output buffers.
1929c0e3d3aSJohn BaldwinSessions with this flag set permit requests with either a single buffer
1939c0e3d3aSJohn Baldwinthat is modified in-place, or requests with separate input and output
1949c0e3d3aSJohn Baldwinbuffers.
1959c0e3d3aSJohn BaldwinSessions without this flag only permit requests with a single buffer that
1969c0e3d3aSJohn Baldwinis modified in-place.
197*9b774dc0SJohn Baldwin.It Dv CSP_F_SEPARATE_AAD
198*9b774dc0SJohn BaldwinSupport requests that use a separate buffer for AAD rather than providing
199*9b774dc0SJohn BaldwinAAD as a region in the input buffer.
200*9b774dc0SJohn BaldwinSessions with this flag set permit requests with AAD passed in either in
201*9b774dc0SJohn Baldwina region of the input buffer or in a single, virtually-contiguous buffer.
202*9b774dc0SJohn BaldwinSessions without this flag only permit requests with AAD passed in as
203*9b774dc0SJohn Baldwina region in the input buffer.
2049c0e3d3aSJohn Baldwin.El
205c0341432SJohn Baldwin.It Fa csp_ivlen
206c0341432SJohn BaldwinIf either the cipher or authentication algorithms require an explicit
207c0341432SJohn Baldwininitialization vector (IV) or nonce,
208c0341432SJohn Baldwinthis specifies the length in bytes.
209c0341432SJohn BaldwinAll requests for a session use the same IV length.
210c0341432SJohn Baldwin.It Fa csp_cipher_alg
211c0341432SJohn BaldwinEncryption or compression algorithm.
212c0341432SJohn Baldwin.It Fa csp_cipher_klen
213c0341432SJohn BaldwinLength of encryption or decryption key in bytes.
214c0341432SJohn BaldwinAll requests for a session use the same key length.
215c0341432SJohn Baldwin.It Fa csp_cipher_key
216c0341432SJohn BaldwinPointer to encryption or decryption key.
217c0341432SJohn BaldwinIf all requests for a session use request-specific keys,
218c0341432SJohn Baldwinthis field should be left as
219c0341432SJohn Baldwin.Dv NULL .
220c0341432SJohn BaldwinThis pointer and associated key must remain valid for the duration of the
221c0341432SJohn Baldwincrypto session.
222c0341432SJohn Baldwin.It Fa csp_auth_alg
223c0341432SJohn BaldwinAuthentication algorithm.
224c0341432SJohn Baldwin.It Fa csp_auth_klen
225c0341432SJohn BaldwinLength of authentication key in bytes.
226c0341432SJohn BaldwinIf the authentication algorithm does not use a key,
227c0341432SJohn Baldwinthis field should be left as zero.
228c0341432SJohn Baldwin.It Fa csp_auth_key
229c0341432SJohn BaldwinPointer to the authentication key.
230c0341432SJohn BaldwinIf all requests for a session use request-specific keys,
231c0341432SJohn Baldwinthis field should be left as
232c0341432SJohn Baldwin.Dv NULL .
233c0341432SJohn BaldwinThis pointer and associated key must remain valid for the duration of the
234c0341432SJohn Baldwincrypto session.
235c0341432SJohn Baldwin.It Fa csp_auth_mlen
236c0341432SJohn BaldwinThe length in bytes of the digest.
237c0341432SJohn BaldwinIf zero, the full length of the digest is used.
238c0341432SJohn BaldwinIf non-zero, the first
239c0341432SJohn Baldwin.Fa csp_auth_mlen
240c0341432SJohn Baldwinbytes of the digest are used.
241c0341432SJohn Baldwin.El
242c0341432SJohn Baldwin.Sh RETURN VALUES
243c0341432SJohn Baldwin.Fn crypto_newsession
244c0341432SJohn Baldwinreturns a non-zero value if an error occurs or zero on success.
245c0341432SJohn Baldwin.Pp
246c0341432SJohn Baldwin.Fn crypto_auth_hash
247c0341432SJohn Baldwinand
248c0341432SJohn Baldwin.Fn crypto_cipher
249c0341432SJohn Baldwinreturn
250c0341432SJohn Baldwin.Dv NULL
251c0341432SJohn Baldwinif the request is valid or a pointer to a structure on success.
252c0341432SJohn Baldwin.Sh SEE ALSO
253c0341432SJohn Baldwin.Xr crypto 7 ,
254c0341432SJohn Baldwin.Xr crypto 9 ,
255c0341432SJohn Baldwin.Xr crypto_request 9
256c0341432SJohn Baldwin.Sh BUGS
257c0341432SJohn BaldwinThe current implementation of
258c0341432SJohn Baldwin.Nm crypto_freesession
259c0341432SJohn Baldwindoes not provide a way for the caller to know that there are no other
260c0341432SJohn Baldwinreferences to the keys stored in the session's associated parameters.
261c0341432SJohn BaldwinThis function should probably sleep until any in-flight cryptographic
262c0341432SJohn Baldwinoperations associated with the session are completed.
263