summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto.4554
1 files changed, 554 insertions, 0 deletions
diff --git a/crypto.4 b/crypto.4
new file mode 100644
index 0000000..e907e2f
--- /dev/null
+++ b/crypto.4
@@ -0,0 +1,554 @@
+.\" A man page for /dev/crypto(4). -*- nroff -*-
+.\"
+.\" Copyright (C) 2010 Red Hat, Inc. All rights reserved.
+.\"
+.\" This copyrighted material is made available to anyone wishing to use,
+.\" modify, copy, or redistribute it subject to the terms and conditions of the
+.\" GNU General Public License v.2 or (at your option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful, but WITHOUT
+.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+.\" more details.
+.\"
+.\" You should have received a copy of the GNU General Public License along
+.\" with this program; if not, write to the Free Software Foundation, Inc.,
+.\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+.\"
+.\" Author: Miloslav Trmač <mitr@redhat.com>
+.TH CRYPTO 4 2010-08-02 Linux "Linux Programmer's Manual"
+
+.SH NAME
+/dev/crypto \- kernel cryptographic module interface
+
+.SH SYNOPSIS
+
+.B #include <ncr.h>
+.br
+.B int fd = open("/dev/crypto", O_RDWR);
+.br
+.B int res = ioctl(fd, \fINCRIO...\fP, &\fIdata\fP);
+
+.SH DESCRIPTION
+The
+.I /dev/crypto
+device file provides an
+.BR ioctl (2)
+interface to the kernel-space crypto implementation.
+
+Each
+.BR open (2)
+of the
+.I /dev/crypto
+file establishes a separate namespace within which crypto operations work.
+The namespace can be shared across threads and processes
+by sharing the open file description.
+Last close of the open file description automatically destroys all objects
+allocated within the namespace.
+
+All
+.BR ioctl (2)s
+have the same form:
+The user sets up a data structure with input data,
+and passes a pointer to the data structure as the third parameter to
+.BR ioctl (2).
+On success, output data is available in the same structure.
+
+The following operations are defined:
+
+.TP
+.B NCRIO_KEY_INIT
+Allocate a kernel-space key object.
+The parameter is not used on input
+(key attributes are set later, when the key material is initialized).
+On success, an integer descriptor for the key object
+(valid within the current
+.I /dev/crypto
+namespace)
+is stored in the provided area.
+
+There is a per-process and per-user (not per-namespace) limit
+on the number key objects that can be allocated.
+
+.TP
+.B NCRIO_KEY_DEINIT
+Deallocate a kernel-space key object.
+The parameter specifies the integer descriptor of the key object.
+After all other operations using this key object (if any) terminate,
+the key material will be cleared and the object will be freed.
+Note that this may happen both before this operation returns,
+and after it returns, depending on other references to this key object.
+
+.TP
+.B NCRIO_KEY_GENERATE
+Clear existing key material in the specified key object,
+and generate new key material.
+
+The parameter points to \fBstruct ncr_key_generate_st\fP, which specifies:
+
+.RS
+.IP \fBdesc\fP
+The key descriptor
+.IP \fBparams.algorithm\fP
+The crypto algorithm with which the key will be used
+.IP \fBparams.keyflags\fP
+Key flags, a combination of
+.B NCR_KEY_FLAG_EXPORTABLE
+(the key material can be exported in plaintext to user space)
+and
+.B NCR_KEY_FLAG_WRAPPABLE
+(the key material can be wrapped and the result made available to user space).
+.IP \fBparams.params\fP
+Algorithm-specific key parameters:
+For symmetric keys, key length in bits.
+For RSA keys, the public exponent and modulus length in bits.
+For DSA keys,
+.I p
+and
+.I q
+length in bits.
+For DH keys, the prime and group generator.
+.RE
+
+.IP
+Currently only symmetric keys can be generated using this operation.
+
+In addition to generating the key material,
+the "persistent" key ID is reset to a random value.
+
+.TP
+.B NCRIO_KEY_GENERATE_PAIR
+Similar to \fBNCRIO_KEY_GENERATE\fP,
+except that a pair of public/private keys is generated.
+
+The parameter points to \fBstruct ncr_key_generate_st\fP as specified above,
+with the additional member
+.B desc2
+used to specify the key descriptor for the public key.
+
+The
+.B NCR_KEY_FLAG_EXPORTABLE
+and
+.B NCR_KEY_FLAG_WRAPPABLE
+flags are automatically set on the public key.
+
+.TP
+.B NCRIO_KEY_DERIVE
+Derive a new key using one key and additional data.
+
+The parameter points to \fBstruct ncr_key_derivation_params_st\fP,
+which specifies:
+
+.RS
+.IP \fBderive\fP
+The derivation algorithm.
+Currently only
+.B NCR_DERIVE_DH
+is supported.
+.IP \fBnewkey\fP
+The descriptor of the resulting key
+.IP \fBkeyflags\fP
+Flags to use for the resulting key
+.IP \fBkey\fP
+The source key descriptor
+.IP \fBparams\fP
+Key type-specific parameters.
+For \fBNCR_DERIVE_DH\fP,
+.B params.params.dh.pub
+and
+.B params.params.dh.pub_size
+specify the peer's public key.
+.RE
+
+.TP
+.B NCRIO_KEY_EXPORT
+
+Export key material in the specified key object to user space.
+Only keys with the
+.B NCR_KEY_FLAG_EXPORTABLE
+flag can be exported using this operation.
+
+The parameter points to \fBstruct ncr_key_data_st\fP, which specifies:
+
+.RS
+.IP \fBkey\fP
+The key descriptor
+.IP \fBidata\fP
+Destination buffer
+.IP \fBidata_size\fP
+Buffer size
+.RE
+
+.IP
+Symmetric keys are written directly into the destination buffer.
+Public and private keys are formatted using ASN.1,
+except for DH public keys, which are written a raw binary number.
+
+On success, the
+.B idata_size
+member is set to the size of the exported key.
+
+.TP
+.B NCRIO_KEY_IMPORT
+Clear existing key material in the specified key object,
+and import key material from user space.
+
+The parameter points to \fBstruct ncr_key_data_st\fP, which specifies:
+
+.RS
+.IP \fBkey\fP
+The key descriptor
+.IP \fBidata\fP
+Source data
+.IP \fBidata_size\fP
+Source data size
+.IP \fBkey_id\fP
+New "persistent" key ID.
+.IP \fBkey_id_size\fP
+Size of data in \fBkey_id\fP.
+.IP \fBtype\fP
+Key type, one of \fBNCR_KEY_TYPE_SECRET\fP, \fBNCR_KEY_TYPE_PUBLIC\fP and
+\fBNCR_KEY_TYPE_PRIVATE\fP.
+.IP \fBalgorithm\fP
+The crypto algorithm with which the key will be used
+.IP \fBflags\fP
+Key flags
+.RE
+
+.IP
+The data format is the same as in the
+.B NCRIO_KEY_EXPORT
+operation.
+
+.TP
+.B NCRIO_KEY_GET_INFO
+Get metadata of an existing key.
+
+The parameter points to \fBstruct ncr_key_info_st\fP,
+which specifies \fBkey\fP, the key descriptor.
+On success, the following members are set:
+
+.RS
+.IP \fBflags\fP
+Key flags
+.IP \fBtype\fP
+Key type
+.IP \fBalgorithm\fP
+Key algorithm
+.RE
+
+.TP
+.B NCRIO_KEY_WRAP
+Wrap one key using another, and write the result to user space.
+Only keys with the
+.B NCR_KEY_FLAG_WRAPPABLE
+flag can be wrapped using this operation.
+
+The parameter points to \fBstruct ncr_key_wrap_st\fP, which specifies:
+
+.RS
+.IP \fBalgorithm\fP
+The wrapping algorithm to use, one of
+.B NCR_WALG_AES_RFC3394
+and \fBNCR_WALG_AES_RFC5649\fP.
+.IP \fBkeytowrap\fP
+The descriptor of the key to wrap
+.IP \fBkey\fP
+The descriptor of the key used for wrapping
+.IP \fBparams\fP
+Key type-specific parameters.
+For the currently supported wrapping algorithms,
+.B params.params.cipher.iv
+and
+.B params.params.cipher.iv_size
+specify the IV.
+.IP \fBio\fP
+Destination buffer
+.IP \fBio_size\fP
+Size of the destination buffer
+.RE
+
+.IP
+Currently only secret keys can be wrapped,
+using one of the above-mentioned AES-based algorithms.
+
+On success, the
+.B io_size
+member is set to the size of the wrapped key.
+
+.TP
+.B NCRIO_KEY_UNWRAP
+Unwrap user-space data into a kernel-space key using another key.
+
+The parameter points to \fBstruct ncr_key_wrap_st\fP, which specifies:
+
+.RS
+.IP \fBalgorithm\fP
+The wrapping algorithm to use.
+.IP \fBkeytowrap\fP
+The descriptor of the target key object
+.IP \fBkey\fP
+The descriptor of the key used for wrapping
+.IP \fBparams\fP
+Key type-specific parameters.
+For the currently supported wrapping algorithms,
+.B params.params.cipher.iv
+and
+.B params.params.cipher.iv_size
+specify the IV.
+.IP \fBio\fP
+Pointer to the wrapped key
+.IP \fBio_size\fP
+Size of the wrapped key
+.RE
+
+.IP
+The unwrapped key will have the
+.B NCR_KEY_FLAG_WRAPPABLE
+flag set, and the
+.B NCR_KEY_FLAG_EXPORTABLE
+flag clear.
+
+.TP
+.B NCRIO_KEY_STORAGE_WRAP
+Wrap a key object and associated metadata using the system-wide storage master
+key,
+and write the result to user space.
+
+Only keys with the
+.B NCR_KEY_FLAG_WRAPPABLE
+flag can be wrapped using this operation.
+
+The parameter points to \fBstruct ncr_key_storage_wrap_st\fP, which specifies:
+
+.RS
+.IP \fBkeytowrap\fP
+The descriptor of the key to wrap
+.IP \fBio\fP
+Destination buffer
+.IP \fBio_size\fP
+Size of the destination buffer
+.RE
+
+.IP
+On success, the
+.B io_size
+member is set to the size of the wrapped key.
+
+Both symmetric and asymmetric keys can be wrapped using this operation.
+The wrapped data includes the following information in addition to the raw key
+material:
+
+.RS
+.IP \(bu
+Key type
+.IP \(bu
+Key flags
+.IP \(bu
+Key algorithm
+.IP \(bu
+"Persistent" key ID.
+.RE
+
+.TP
+.B NCRIO_KEY_STORAGE_UNWRAP
+Unwrap key and associated metadata created using \fBNCRIO_KEY_STORAGE_WRAP\fP,
+and restore the information into a specified key object.
+
+The parameter points to \fBstruct ncr_key_storage_wrap_st\fP, which specifies:
+
+.RS
+.IP \fBkeytowrap\fP
+The target key descriptor
+.IP \fBio\fP
+Wrapped data
+.IP \fBio_size\fP
+Size of the wrapped data
+.RE
+
+.IP
+See
+.B NCRIO_KEY_STORAGE_WRAP
+above for the list of attributes that will be restored.
+
+.TP
+.B NCRIO_SESSION_INIT
+Allocate a session for performing crypto operations.
+
+The parameter points to \fBstruct ncr_session_st\fP, which specifies:
+
+.RS
+.IP \fBalgorithm\fP
+The crypto algorithm to use.
+.IP \fBkey\fP
+The key to use for the operation, if required.
+.IP \fBparams\fP
+Parameters for the operation.
+For symmetric ciphers, the IV.
+For RSA operations, the format, used hash algorithms and PSS salt length.
+for DSA, the signature hash algorithm.
+.IP \fBop\fP
+The operation to perform, one of \fBNCR_OP_ENCRYPT\fP, \fBNCR_OP_DECRYPT\fP,
+\fBNCR_OP_SIGN\fP and \fBNCR_OP_VERIFY\FP. Use
+.B NCR_OP_SIGN
+for computing an unkeyed hash as well as keyed hashes and signatures.
+.RE
+
+.IP
+On success, an integer descriptor for the created session
+(valid within the current
+.I /dev/crypto
+namespace)
+is stored into the
+.B ses
+member.
+
+.TP
+.B NCRIO_SESSION_UPDATE
+Update an existing crypto session with new data
+(for operations, such as hashing, for which data can be supplied in pieces),
+or perform a single operation using the session context (for operations, such
+as public key encryption, that work on separate units of data).
+
+The parameter points to \fBstruct ncr_session_op_st\fP, which specifies:
+
+.RS
+.IP \fBses\fP
+The integer descriptor of the session.
+.IP \fBtype\fP
+Type of the data references used for this operation, either
+.B NCR_KEY_DATA
+or
+.B NCR_DIRECT_DATA.
+.IP "\fBdata.udata.input\fP, \fBdata.udata.input_size\fP"
+If \fBtype == NCR_DIRECT_DATA\fP, input data for the operation.
+.IP \fBdata.kdata.input\fP
+If \fBtype == NCR_KEY_DATA\fP, integer key descriptor serving as input for
+the operation.
+This can be currently used only to compute or verify a signature or hash
+of a symmetric key:
+the keying material is directly used as input data for the underlying hash.
+.IP "\fBdata.udata.output\fP, \fBdata,udata.output_size\fP"
+If \fBtype == NCR_DIRECT_DATA\fP, output buffer for the operation.
+.IP "\fBdata.kdata.output\fP, \fBdata,kdata.output_size\fP"
+If \fBtype == NCR_KEY_DATA\fP, output buffer for the operation.
+.RE
+
+.IP
+For the
+.B NCR_OP_ENCRYPT
+and
+.B NCR_OP_DECRYPT
+operations using symmetric ciphers,
+the operation is performed on the input data,
+resulting in an output data block of the same size;
+for operations using public-key cryptography,
+a single operation is performed on the input data,
+resulting in output data.
+In both cases,
+the relevant
+.B output_data
+member is set to the size of valid output data on success.
+
+For the
+.B NCR_OP_SIGN
+and
+.B NCR_OP_VERIFY
+operations,
+the input data is supplied to the underlying hash function;
+no output data is produced.
+
+.TP
+.B NCRIO_SESSION_FINAL
+Finalize an existing crypto session and deallocate it.
+
+The parameter points to \fBstruct ncr_session_op_st\fP, as described in the
+.B NCRIO_SESSION_UPDATE
+section above.
+If the parameter specifies valid input data,
+it is processed as if using \fBNCRIO_SESSION_UPDATE\fP;
+thus, the last update operation can be performed together with the finalization
+in one step.
+
+There is no specific finalization operation performed for
+.B NCR_OP_ENCRYPT
+and \fBNCR_OP_DECRYPT\fP.
+
+For the
+.B NCR_OP_SIGN
+operation,
+the signature is created and written as output data.
+
+For the
+.B NCR_OP_VERIFY
+operation,
+a signature specified as input using the
+.I output data
+fields is verified;
+the result of this operation
+(\fBNCR_SUCCESS\fP or \fBNCR_VERIFICATION_FAILED\fP)
+will be stored into the
+.B err
+member.
+(Note that the
+.BR ioctl (2)
+operation will indicate success even if the signature verification fails,
+as long all inputs were specified correctly.)
+
+The session will be deallocated even if the
+.B NCRIO_SESSION_FINAL
+operation reports an error,
+as long as valid session descriptor was specified.
+
+.TP
+.B NCRIO_SESSION_ONCE
+Perform an one-shot crypto operation,
+allocating a temporary session,
+supplying a single instance of data,
+and finalizing the session in one operation.
+
+The parameter points to \fBstruct ncr_session_once_op_st\fP,
+which includes arguments for one
+.B NCRIO_SESSION_INIT
+and one
+.B NCRIO_SESSION_FINAL
+operation.
+The
+.B ses
+member for the
+.B NCRIO_SESSION_FINAL
+sub-operation is ignored,
+the sub-operation automatically uses the temporary session.
+
+.TP
+.B NCRIO_MASTER_KEY_SET
+Set the system-wide storage master key.
+Only a process with EUID 0 and the
+.B CAP_SYS_ADMIN
+capability is allowed to perform this operation.
+Once a master key is set,
+it can be changed only by rebooting the system
+and setting a different key.
+
+The parameter points to \fBstruct ncr_master_key_st\fP, which specifies:
+.RS
+.IP \fBkey\fP
+Pointer to the key material in user space.
+.IP \fBkey_size\fP
+Size of the key material in bytes.
+.RE
+
+Currently only an AES key with size 16, 24, or 32 bytes is acceptable.
+
+.SH CONFIGURATION
+The
+.B NCRIO_KEY_STORAGE_WRAP
+and
+.B NCRIO_KEY_STORAGE_UNWRAP
+.BR ioctl ()s
+work only after a storage master key is configured by the system
+administrator.
+See \fBNCRIO_MASTER_KEY_SET\fP above.
+
+.SH FILES
+.I /dev/crypto