Main index | Section 9 | Options |
#include <opencrypto/cryptodev.h>
The crypto_session_t type represents an opaque reference to an active session. Session objects are allocated and managed by the cryptographic framework.
New sessions are created by crypto_newsession(). csp describes various parameters associated with the new session such as the algorithms to use and any session-wide keys. crid can be used to request either a specific cryptographic driver or classes of drivers. For the latter case, crid should be set to a mask of the following values:
CRYPTOCAP_F_HARDWARE | |
Request hardware drivers. Hardware drivers do not use the host CPU to perform operations. Typically, a separate co-processor performs the operations asynchronously. | |
CRYPTOCAP_F_SOFTWARE | |
Request software drivers. Software drivers use the host CPU to perform operations. The kernel includes a simple, yet portable implementation of each supported algorithm in the cryptosoft(4) driver. Additional software drivers may also be available on architectures which provide instructions designed to accelerate cryptographic operations. | |
If both hardware and software drivers are requested, hardware drivers are preferred over software drivers. Accelerated software drivers are preferred over the baseline software driver. If multiple hardware drivers are available, the framework will distribute sessions across these drivers in a round-robin fashion.
On success, crypto_newsession() saves a reference to the newly created session in cses.
crypto_freesession() is used to free the resources associated with the session cses.
crypto_auth_hash() returns a structure describing the baseline software implementation of an authentication algorithm requested by csp. If csp does not specify an authentication algorithm, or requests an invalid algorithm, NULL is returned.
crypto_cipher() returns a structure describing the baseline software implementation of an encryption algorithm requested by csp. If csp does not specify an encryption algorithm, or requests an invalid algorithm, NULL is returned.
crypto_get_params() returns a pointer to the session parameters used by cses.
csp_mode | |
Type of operation to perform. This field must be set to one of the following: | |
CSP_MODE_COMPRESS | |
Compress or decompress request payload.
The compression algorithm is specified in csp_cipher_alg. | |
CSP_MODE_CIPHER |
Encrypt or decrypt request payload.
The encryption algorithm is specified in csp_cipher_alg. |
CSP_MODE_DIGEST |
Compute or verify a digest, or hash, of request payload.
The authentication algorithm is specified in csp_auth_alg. |
CSP_MODE_AEAD |
Authenticated encryption with additional data.
Decryption operations require the digest, or tag,
and fail if it does not match.
The AEAD algorithm is specified in csp_cipher_alg. |
CSP_MODE_ETA |
Encrypt-then-Authenticate.
In this mode, encryption operations encrypt the payload and then
compute an authentication digest over the request additional authentication
data followed by the encrypted payload.
Decryption operations fail without decrypting the data if the provided digest
does not match.
The encryption algorithm is specified in csp_cipher_alg and the authentication algorithm is specified in csp_auth_alg. |
csp_flags | |
A mask of optional driver features. Drivers will only attach to a session if they support all of the requested features. | |
CSP_F_SEPARATE_OUTPUT | |
Support requests that use separate input and output buffers. Sessions with this flag set permit requests with either a single buffer that is modified in-place, or requests with separate input and output buffers. Sessions without this flag only permit requests with a single buffer that is modified in-place. | |
CSP_F_SEPARATE_AAD | Support requests that use a separate buffer for AAD rather than providing AAD as a region in the input buffer. Sessions with this flag set permit requests with AAD passed in either in a region of the input buffer or in a single, virtually-contiguous buffer. Sessions without this flag only permit requests with AAD passed in as a region in the input buffer. |
CSP_F_ESN |
Support requests that use a separate buffer for IPsec ESN (Extended Sequence
Numbers).
Sessions with this flag set permit requests with IPsec ESN passed in special buffer. It is required for IPsec ESN support of encrypt and authenticate mode where the high-order 32 bits of the sequence number are appended after the Next Header (RFC 4303). |
csp_ivlen | |
If either the cipher or authentication algorithms require an explicit initialization vector (IV) or nonce, this specifies the length in bytes. All requests for a session use the same IV length. | |
csp_cipher_alg | |
Encryption or compression algorithm. | |
csp_cipher_klen | |
Length of encryption or decryption key in bytes. All requests for a session use the same key length. | |
csp_cipher_key | |
Pointer to encryption or decryption key. If all requests for a session use request-specific keys, this field should be left as NULL. This pointer and associated key must remain valid for the duration of the crypto session. | |
csp_auth_alg | |
Authentication algorithm. | |
csp_auth_klen | |
Length of authentication key in bytes. If the authentication algorithm does not use a key, this field should be left as zero. | |
csp_auth_key | |
Pointer to the authentication key. If all requests for a session use request-specific keys, this field should be left as NULL. This pointer and associated key must remain valid for the duration of the crypto session. | |
csp_auth_mlen | |
The length in bytes of the digest. If zero, the full length of the digest is used. If non-zero, the first csp_auth_mlen bytes of the digest are used. | |
crypto_auth_hash() and crypto_cipher() return NULL if the request is valid or a pointer to a structure on success.
CRYPTO_SESSION (9) | June 22, 2020 |
Main index | Section 9 | Options |
Please direct any comments about this manual page service to Ben Bullock. Privacy policy.