<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
	"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>

<book id="KernelCryptoAPI">
 <bookinfo>
  <title>Linux Kernel Crypto API</title>

  <authorgroup>
   <author>
    <firstname>Stephan</firstname>
    <surname>Mueller</surname>
    <affiliation>
     <address>
      <email>smueller@chronox.de</email>
     </address>
    </affiliation>
   </author>
   <author>
    <firstname>Marek</firstname>
    <surname>Vasut</surname>
    <affiliation>
     <address>
      <email>marek@denx.de</email>
     </address>
    </affiliation>
   </author>
  </authorgroup>

  <copyright>
   <year>2014</year>
   <holder>Stephan Mueller</holder>
  </copyright>


  <legalnotice>
   <para>
     This documentation is free software; you can redistribute
     it and/or modify it under the terms of the GNU General Public
     License as published by the Free Software Foundation; either
     version 2 of the License, or (at your option) any later
     version.
   </para>

   <para>
     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.
   </para>

   <para>
     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., 59 Temple Place, Suite 330, Boston,
     MA 02111-1307 USA
   </para>

   <para>
     For more details see the file COPYING in the source
     distribution of Linux.
   </para>
  </legalnotice>
 </bookinfo>

 <toc></toc>

 <chapter id="Intro">
  <title>Kernel Crypto API Interface Specification</title>

   <sect1><title>Introduction</title>

    <para>
     The kernel crypto API offers a rich set of cryptographic ciphers as
     well as other data transformation mechanisms and methods to invoke
     these. This document contains a description of the API and provides
     example code.
    </para>

    <para>
     To understand and properly use the kernel crypto API a brief
     explanation of its structure is given. Based on the architecture,
     the API can be separated into different components. Following the
     architecture specification, hints to developers of ciphers are
     provided. Pointers to the API function call  documentation are
     given at the end.
    </para>

    <para>
     The kernel crypto API refers to all algorithms as "transformations".
     Therefore, a cipher handle variable usually has the name "tfm".
     Besides cryptographic operations, the kernel crypto API also knows
     compression transformations and handles them the same way as ciphers.
    </para>

    <para>
     The kernel crypto API serves the following entity types:

     <itemizedlist>
      <listitem>
       <para>consumers requesting cryptographic services</para>
      </listitem>
      <listitem>
      <para>data transformation implementations (typically ciphers)
       that can be called by consumers using the kernel crypto
       API</para>
      </listitem>
     </itemizedlist>
    </para>

    <para>
     This specification is intended for consumers of the kernel crypto
     API as well as for developers implementing ciphers. This API
     specification, however, does not discuss all API calls available
     to data transformation implementations (i.e. implementations of
     ciphers and other transformations (such as CRC or even compression
     algorithms) that can register with the kernel crypto API).
    </para>

    <para>
     Note: The terms "transformation" and cipher algorithm are used
     interchangeably.
    </para>
   </sect1>

   <sect1><title>Terminology</title>
    <para>
     The transformation implementation is an actual code or interface
     to hardware which implements a certain transformation with precisely
     defined behavior.
    </para>

    <para>
     The transformation object (TFM) is an instance of a transformation
     implementation. There can be multiple transformation objects
     associated with a single transformation implementation. Each of
     those transformation objects is held by a crypto API consumer or
     another transformation. Transformation object is allocated when a
     crypto API consumer requests a transformation implementation.
     The consumer is then provided with a structure, which contains
     a transformation object (TFM).
    </para>

    <para>
     The structure that contains transformation objects may also be
     referred to as a "cipher handle". Such a cipher handle is always
     subject to the following phases that are reflected in the API calls
     applicable to such a cipher handle:
    </para>

    <orderedlist>
     <listitem>
      <para>Initialization of a cipher handle.</para>
     </listitem>
     <listitem>
      <para>Execution of all intended cipher operations applicable
      for the handle where the cipher handle must be furnished to
      every API call.</para>
     </listitem>
     <listitem>
      <para>Destruction of a cipher handle.</para>
     </listitem>
    </orderedlist>

    <para>
     When using the initialization API calls, a cipher handle is
     created and returned to the consumer. Therefore, please refer
     to all initialization API calls that refer to the data
     structure type a consumer is expected to receive and subsequently
     to use. The initialization API calls have all the same naming
     conventions of crypto_alloc_*.
    </para>

    <para>
     The transformation context is private data associated with
     the transformation object.
    </para>
   </sect1>
  </chapter>

  <chapter id="Architecture"><title>Kernel Crypto API Architecture</title>
   <sect1><title>Cipher algorithm types</title>
    <para>
     The kernel crypto API provides different API calls for the
     following cipher types:

     <itemizedlist>
      <listitem><para>Symmetric ciphers</para></listitem>
      <listitem><para>AEAD ciphers</para></listitem>
      <listitem><para>Message digest, including keyed message digest</para></listitem>
      <listitem><para>Random number generation</para></listitem>
      <listitem><para>User space interface</para></listitem>
     </itemizedlist>
    </para>
   </sect1>

   <sect1><title>Ciphers And Templates</title>
    <para>
     The kernel crypto API provides implementations of single block
     ciphers and message digests. In addition, the kernel crypto API
     provides numerous "templates" that can be used in conjunction
     with the single block ciphers and message digests. Templates
     include all types of block chaining mode, the HMAC mechanism, etc.
    </para>

    <para>
     Single block ciphers and message digests can either be directly
     used by a caller or invoked together with a template to form
     multi-block ciphers or keyed message digests.
    </para>

    <para>
     A single block cipher may even be called with multiple templates.
     However, templates cannot be used without a single cipher.
    </para>

    <para>
     See /proc/crypto and search for "name". For example:

     <itemizedlist>
      <listitem><para>aes</para></listitem>
      <listitem><para>ecb(aes)</para></listitem>
      <listitem><para>cmac(aes)</para></listitem>
      <listitem><para>ccm(aes)</para></listitem>
      <listitem><para>rfc4106(gcm(aes))</para></listitem>
      <listitem><para>sha1</para></listitem>
      <listitem><para>hmac(sha1)</para></listitem>
      <listitem><para>authenc(hmac(sha1),cbc(aes))</para></listitem>
     </itemizedlist>
    </para>

    <para>
     In these examples, "aes" and "sha1" are the ciphers and all
     others are the templates.
    </para>
   </sect1>

   <sect1><title>Synchronous And Asynchronous Operation</title>
    <para>
     The kernel crypto API provides synchronous and asynchronous
     API operations.
    </para>

    <para>
     When using the synchronous API operation, the caller invokes
     a cipher operation which is performed synchronously by the
     kernel crypto API. That means, the caller waits until the
     cipher operation completes. Therefore, the kernel crypto API
     calls work like regular function calls. For synchronous
     operation, the set of API calls is small and conceptually
     similar to any other crypto library.
    </para>

    <para>
     Asynchronous operation is provided by the kernel crypto API
     which implies that the invocation of a cipher operation will
     complete almost instantly. That invocation triggers the
     cipher operation but it does not signal its completion. Before
     invoking a cipher operation, the caller must provide a callback
     function the kernel crypto API can invoke to signal the
     completion of the cipher operation. Furthermore, the caller
     must ensure it can handle such asynchronous events by applying
     appropriate locking around its data. The kernel crypto API
     does not perform any special serialization operation to protect
     the caller's data integrity.
    </para>
   </sect1>

   <sect1><title>Crypto API Cipher References And Priority</title>
    <para>
     A cipher is referenced by the caller with a string. That string
     has the following semantics:

     <programlisting>
	template(single block cipher)
     </programlisting>

     where "template" and "single block cipher" is the aforementioned
     template and single block cipher, respectively. If applicable,
     additional templates may enclose other templates, such as

      <programlisting>
	template1(template2(single block cipher)))
      </programlisting>
    </para>

    <para>
     The kernel crypto API may provide multiple implementations of a
     template or a single block cipher. For example, AES on newer
     Intel hardware has the following implementations: AES-NI,
     assembler implementation, or straight C. Now, when using the
     string "aes" with the kernel crypto API, which cipher
     implementation is used? The answer to that question is the
     priority number assigned to each cipher implementation by the
     kernel crypto API. When a caller uses the string to refer to a
     cipher during initialization of a cipher handle, the kernel
     crypto API looks up all implementations providing an
     implementation with that name and selects the implementation
     with the highest priority.
    </para>

    <para>
     Now, a caller may have the need to refer to a specific cipher
     implementation and thus does not want to rely on the
     priority-based selection. To accommodate this scenario, the
     kernel crypto API allows the cipher implementation to register
     a unique name in addition to common names. When using that
     unique name, a caller is therefore always sure to refer to
     the intended cipher implementation.
    </para>

    <para>
     The list of available ciphers is given in /proc/crypto. However,
     that list does not specify all possible permutations of
     templates and ciphers. Each block listed in /proc/crypto may
     contain the following information -- if one of the components
     listed as follows are not applicable to a cipher, it is not
     displayed:
    </para>

    <itemizedlist>
     <listitem>
      <para>name: the generic name of the cipher that is subject
       to the priority-based selection -- this name can be used by
       the cipher allocation API calls (all names listed above are
       examples for such generic names)</para>
     </listitem>
     <listitem>
      <para>driver: the unique name of the cipher -- this name can
       be used by the cipher allocation API calls</para>
     </listitem>
     <listitem>
      <para>module: the kernel module providing the cipher
       implementation (or "kernel" for statically linked ciphers)</para>
     </listitem>
     <listitem>
      <para>priority: the priority value of the cipher implementation</para>
     </listitem>
     <listitem>
      <para>refcnt: the reference count of the respective cipher
       (i.e. the number of current consumers of this cipher)</para>
     </listitem>
     <listitem>
      <para>selftest: specification whether the self test for the
       cipher passed</para>
     </listitem>
     <listitem>
      <para>type:
       <itemizedlist>
        <listitem>
         <para>skcipher for symmetric key ciphers</para>
        </listitem>
        <listitem>
         <para>cipher for single block ciphers that may be used with
          an additional template</para>
        </listitem>
        <listitem>
         <para>shash for synchronous message digest</para>
        </listitem>
        <listitem>
         <para>ahash for asynchronous message digest</para>
        </listitem>
        <listitem>
         <para>aead for AEAD cipher type</para>
        </listitem>
        <listitem>
         <para>compression for compression type transformations</para>
        </listitem>
        <listitem>
         <para>rng for random number generator</para>
        </listitem>
        <listitem>
         <para>givcipher for cipher with associated IV generator
          (see the geniv entry below for the specification of the
          IV generator type used by the cipher implementation)</para>
        </listitem>
       </itemizedlist>
      </para>
     </listitem>
     <listitem>
      <para>blocksize: blocksize of cipher in bytes</para>
     </listitem>
     <listitem>
      <para>keysize: key size in bytes</para>
     </listitem>
     <listitem>
      <para>ivsize: IV size in bytes</para>
     </listitem>
     <listitem>
      <para>seedsize: required size of seed data for random number
       generator</para>
     </listitem>
     <listitem>
      <para>digestsize: output size of the message digest</para>
     </listitem>
     <listitem>
      <para>geniv: IV generation type:
       <itemizedlist>
        <listitem>
         <para>eseqiv for encrypted sequence number based IV
          generation</para>
        </listitem>
        <listitem>
         <para>seqiv for sequence number based IV generation</para>
        </listitem>
        <listitem>
         <para>chainiv for chain iv generation</para>
        </listitem>
        <listitem>
         <para>&lt;builtin&gt; is a marker that the cipher implements
          IV generation and handling as it is specific to the given
          cipher</para>
        </listitem>
       </itemizedlist>
      </para>
     </listitem>
    </itemizedlist>
   </sect1>

   <sect1><title>Key Sizes</title>
    <para>
     When allocating a cipher handle, the caller only specifies the
     cipher type. Symmetric ciphers, however, typically support
     multiple key sizes (e.g. AES-128 vs. AES-192 vs. AES-256).
     These key sizes are determined with the length of the provided
     key. Thus, the kernel crypto API does not provide a separate
     way to select the particular symmetric cipher key size.
    </para>
   </sect1>

   <sect1><title>Cipher Allocation Type And Masks</title>
    <para>
     The different cipher handle allocation functions allow the
     specification of a type and mask flag. Both parameters have
     the following meaning (and are therefore not covered in the
     subsequent sections).
    </para>

    <para>
     The type flag specifies the type of the cipher algorithm.
     The caller usually provides a 0 when the caller wants the
     default handling. Otherwise, the caller may provide the
     following selections which match the aforementioned cipher
     types:
    </para>

    <itemizedlist>
     <listitem>
      <para>CRYPTO_ALG_TYPE_CIPHER Single block cipher</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_COMPRESS Compression</para>
     </listitem>
     <listitem>
     <para>CRYPTO_ALG_TYPE_AEAD Authenticated Encryption with
      Associated Data (MAC)</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_BLKCIPHER Synchronous multi-block cipher</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_ABLKCIPHER Asynchronous multi-block cipher</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_GIVCIPHER Asynchronous multi-block
       cipher packed together with an IV generator (see geniv field
       in the /proc/crypto listing for the known IV generators)</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_DIGEST Raw message digest</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_HASH Alias for CRYPTO_ALG_TYPE_DIGEST</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_SHASH Synchronous multi-block hash</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_AHASH Asynchronous multi-block hash</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_RNG Random Number Generation</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_AKCIPHER Asymmetric cipher</para>
     </listitem>
     <listitem>
      <para>CRYPTO_ALG_TYPE_PCOMPRESS Enhanced version of
       CRYPTO_ALG_TYPE_COMPRESS allowing for segmented compression /
       decompression instead of performing the operation on one
       segment only. CRYPTO_ALG_TYPE_PCOMPRESS is intended to replace
       CRYPTO_ALG_TYPE_COMPRESS once existing consumers are converted.</para>
     </listitem>
    </itemizedlist>

    <para>
     The mask flag restricts the type of cipher. The only allowed
     flag is CRYPTO_ALG_ASYNC to restrict the cipher lookup function
     to asynchronous ciphers. Usually, a caller provides a 0 for the
     mask flag.
    </para>

    <para>
     When the caller provides a mask and type specification, the
     caller limits the search the kernel crypto API can perform for
     a suitable cipher implementation for the given cipher name.
     That means, even when a caller uses a cipher name that exists
     during its initialization call, the kernel crypto API may not
     select it due to the used type and mask field.
    </para>
   </sect1>

   <sect1><title>Internal Structure of Kernel Crypto API</title>

    <para>
     The kernel crypto API has an internal structure where a cipher
     implementation may use many layers and indirections. This section
     shall help to clarify how the kernel crypto API uses
     various components to implement the complete cipher.
    </para>

    <para>
     The following subsections explain the internal structure based
     on existing cipher implementations. The first section addresses
     the most complex scenario where all other scenarios form a logical
     subset.
    </para>

    <sect2><title>Generic AEAD Cipher Structure</title>

     <para>
      The following ASCII art decomposes the kernel crypto API layers
      when using the AEAD cipher with the automated IV generation. The
      shown example is used by the IPSEC layer.
     </para>

     <para>
      For other use cases of AEAD ciphers, the ASCII art applies as
      well, but the caller may not use the AEAD cipher with a separate
      IV generator. In this case, the caller must generate the IV.
     </para>

     <para>
      The depicted example decomposes the AEAD cipher of GCM(AES) based
      on the generic C implementations (gcm.c, aes-generic.c, ctr.c,
      ghash-generic.c, seqiv.c). The generic implementation serves as an
      example showing the complete logic of the kernel crypto API.
     </para>

     <para>
      It is possible that some streamlined cipher implementations (like
      AES-NI) provide implementations merging aspects which in the view
      of the kernel crypto API cannot be decomposed into layers any more.
      In case of the AES-NI implementation, the CTR mode, the GHASH
      implementation and the AES cipher are all merged into one cipher
      implementation registered with the kernel crypto API. In this case,
      the concept described by the following ASCII art applies too. However,
      the decomposition of GCM into the individual sub-components
      by the kernel crypto API is not done any more.
     </para>

     <para>
      Each block in the following ASCII art is an independent cipher
      instance obtained from the kernel crypto API. Each block
      is accessed by the caller or by other blocks using the API functions
      defined by the kernel crypto API for the cipher implementation type.
     </para>

     <para>
      The blocks below indicate the cipher type as well as the specific
      logic implemented in the cipher.
     </para>

     <para>
      The ASCII art picture also indicates the call structure, i.e. who
      calls which component. The arrows point to the invoked block
      where the caller uses the API applicable to the cipher type
      specified for the block.
     </para>

     <programlisting>
<![CDATA[
kernel crypto API                                |   IPSEC Layer
                                                 |
+-----------+                                    |
|           |            (1)
|   aead    | <-----------------------------------  esp_output
|  (seqiv)  | ---+
+-----------+    |
                 | (2)
+-----------+    |
|           | <--+                (2)
|   aead    | <-----------------------------------  esp_input
|   (gcm)   | ------------+
+-----------+             |
      | (3)               | (5)
      v                   v
+-----------+       +-----------+
|           |       |           |
|  skcipher |       |   ahash   |
|   (ctr)   | ---+  |  (ghash)  |
+-----------+    |  +-----------+
                 |
+-----------+    | (4)
|           | <--+
|   cipher  |
|   (aes)   |
+-----------+
]]>
     </programlisting>

     <para>
      The following call sequence is applicable when the IPSEC layer
      triggers an encryption operation with the esp_output function. During
      configuration, the administrator set up the use of rfc4106(gcm(aes)) as
      the cipher for ESP. The following call sequence is now depicted in the
      ASCII art above:
     </para>

     <orderedlist>
      <listitem>
       <para>
        esp_output() invokes crypto_aead_encrypt() to trigger an encryption
        operation of the AEAD cipher with IV generator.
       </para>

       <para>
        In case of GCM, the SEQIV implementation is registered as GIVCIPHER
        in crypto_rfc4106_alloc().
       </para>

       <para>
        The SEQIV performs its operation to generate an IV where the core
        function is seqiv_geniv().
       </para>
      </listitem>

      <listitem>
       <para>
        Now, SEQIV uses the AEAD API function calls to invoke the associated
        AEAD cipher. In our case, during the instantiation of SEQIV, the
        cipher handle for GCM is provided to SEQIV. This means that SEQIV
        invokes AEAD cipher operations with the GCM cipher handle.
       </para>

       <para>
        During instantiation of the GCM handle, the CTR(AES) and GHASH
        ciphers are instantiated. The cipher handles for CTR(AES) and GHASH
        are retained for later use.
       </para>

       <para>
        The GCM implementation is responsible to invoke the CTR mode AES and
        the GHASH cipher in the right manner to implement the GCM
        specification.
       </para>
      </listitem>

      <listitem>
       <para>
        The GCM AEAD cipher type implementation now invokes the SKCIPHER API
        with the instantiated CTR(AES) cipher handle.
       </para>

       <para>
	During instantiation of the CTR(AES) cipher, the CIPHER type
	implementation of AES is instantiated. The cipher handle for AES is
	retained.
       </para>

       <para>
        That means that the SKCIPHER implementation of CTR(AES) only
        implements the CTR block chaining mode. After performing the block
        chaining operation, the CIPHER implementation of AES is invoked.
       </para>
      </listitem>

      <listitem>
       <para>
        The SKCIPHER of CTR(AES) now invokes the CIPHER API with the AES
        cipher handle to encrypt one block.
       </para>
      </listitem>

      <listitem>
       <para>
        The GCM AEAD implementation also invokes the GHASH cipher
        implementation via the AHASH API.
       </para>
      </listitem>
     </orderedlist>

     <para>
      When the IPSEC layer triggers the esp_input() function, the same call
      sequence is followed with the only difference that the operation starts
      with step (2).
     </para>
    </sect2>

    <sect2><title>Generic Block Cipher Structure</title>
     <para>
      Generic block ciphers follow the same concept as depicted with the ASCII
      art picture above.
     </para>

     <para>
      For example, CBC(AES) is implemented with cbc.c, and aes-generic.c. The
      ASCII art picture above applies as well with the difference that only
      step (4) is used and the SKCIPHER block chaining mode is CBC.
     </para>
    </sect2>

    <sect2><title>Generic Keyed Message Digest Structure</title>
     <para>
      Keyed message digest implementations again follow the same concept as
      depicted in the ASCII art picture above.
     </para>

     <para>
      For example, HMAC(SHA256) is implemented with hmac.c and
      sha256_generic.c. The following ASCII art illustrates the
      implementation:
     </para>

     <programlisting>
<![CDATA[
kernel crypto API            |       Caller
                             |
+-----------+         (1)    |
|           | <------------------  some_function
|   ahash   |
|   (hmac)  | ---+
+-----------+    |
                 | (2)
+-----------+    |
|           | <--+
|   shash   |
|  (sha256) |
+-----------+
]]>
     </programlisting>

     <para>
      The following call sequence is applicable when a caller triggers
      an HMAC operation:
     </para>

     <orderedlist>
      <listitem>
       <para>
        The AHASH API functions are invoked by the caller. The HMAC
        implementation performs its operation as needed.
       </para>

       <para>
        During initialization of the HMAC cipher, the SHASH cipher type of
        SHA256 is instantiated. The cipher handle for the SHA256 instance is
        retained.
       </para>

       <para>
        At one time, the HMAC implementation requires a SHA256 operation
        where the SHA256 cipher handle is used.
       </para>
      </listitem>

      <listitem>
       <para>
        The HMAC instance now invokes the SHASH API with the SHA256
        cipher handle to calculate the message digest.
       </para>
      </listitem>
     </orderedlist>
    </sect2>
   </sect1>
  </chapter>

  <chapter id="Development"><title>Developing Cipher Algorithms</title>
   <sect1><title>Registering And Unregistering Transformation</title>
    <para>
     There are three distinct types of registration functions in
     the Crypto API. One is used to register a generic cryptographic
     transformation, while the other two are specific to HASH
     transformations and COMPRESSion. We will discuss the latter
     two in a separate chapter, here we will only look at the
     generic ones.
    </para>

    <para>
     Before discussing the register functions, the data structure
     to be filled with each, struct crypto_alg, must be considered
     -- see below for a description of this data structure.
    </para>

    <para>
     The generic registration functions can be found in
     include/linux/crypto.h and their definition can be seen below.
     The former function registers a single transformation, while
     the latter works on an array of transformation descriptions.
     The latter is useful when registering transformations in bulk.
    </para>

    <programlisting>
   int crypto_register_alg(struct crypto_alg *alg);
   int crypto_register_algs(struct crypto_alg *algs, int count);
    </programlisting>

    <para>
     The counterparts to those functions are listed below.
    </para>

    <programlisting>
   int crypto_unregister_alg(struct crypto_alg *alg);
   int crypto_unregister_algs(struct crypto_alg *algs, int count);
    </programlisting>

    <para>
     Notice that both registration and unregistration functions
     do return a value, so make sure to handle errors. A return
     code of zero implies success. Any return code &lt; 0 implies
     an error.
    </para>

    <para>
     The bulk registration / unregistration functions require
     that struct crypto_alg is an array of count size. These
     functions simply loop over that array and register /
     unregister each individual algorithm. If an error occurs,
     the loop is terminated at the offending algorithm definition.
     That means, the algorithms prior to the offending algorithm
     are successfully registered. Note, the caller has no way of
     knowing which cipher implementations have successfully
     registered. If this is important to know, the caller should
     loop through the different implementations using the single
     instance *_alg functions for each individual implementation.
    </para>
   </sect1>

   <sect1><title>Single-Block Symmetric Ciphers [CIPHER]</title>
    <para>
     Example of transformations: aes, arc4, ...
    </para>

    <para>
     This section describes the simplest of all transformation
     implementations, that being the CIPHER type used for symmetric
     ciphers. The CIPHER type is used for transformations which
     operate on exactly one block at a time and there are no
     dependencies between blocks at all.
    </para>

    <sect2><title>Registration specifics</title>
     <para>
      The registration of [CIPHER] algorithm is specific in that
      struct crypto_alg field .cra_type is empty. The .cra_u.cipher
      has to be filled in with proper callbacks to implement this
      transformation.
     </para>

     <para>
      See struct cipher_alg below.
     </para>
    </sect2>

    <sect2><title>Cipher Definition With struct cipher_alg</title>
     <para>
      Struct cipher_alg defines a single block cipher.
     </para>

     <para>
      Here are schematics of how these functions are called when
      operated from other part of the kernel. Note that the
      .cia_setkey() call might happen before or after any of these
      schematics happen, but must not happen during any of these
      are in-flight.
     </para>

     <para>
      <programlisting>
         KEY ---.    PLAINTEXT ---.
                v                 v
          .cia_setkey() -&gt; .cia_encrypt()
                                  |
                                  '-----&gt; CIPHERTEXT
      </programlisting>
     </para>

     <para>
      Please note that a pattern where .cia_setkey() is called
      multiple times is also valid:
     </para>

     <para>
      <programlisting>

  KEY1 --.    PLAINTEXT1 --.         KEY2 --.    PLAINTEXT2 --.
         v                 v                v                 v
   .cia_setkey() -&gt; .cia_encrypt() -&gt; .cia_setkey() -&gt; .cia_encrypt()
                           |                                  |
                           '---&gt; CIPHERTEXT1                  '---&gt; CIPHERTEXT2
      </programlisting>
     </para>

    </sect2>
   </sect1>

   <sect1><title>Multi-Block Ciphers</title>
    <para>
     Example of transformations: cbc(aes), ecb(arc4), ...
    </para>

    <para>
     This section describes the multi-block cipher transformation
     implementations. The multi-block ciphers are
     used for transformations which operate on scatterlists of
     data supplied to the transformation functions. They output
     the result into a scatterlist of data as well.
    </para>

    <sect2><title>Registration Specifics</title>

     <para>
      The registration of multi-block cipher algorithms
      is one of the most standard procedures throughout the crypto API.
     </para>

     <para>
      Note, if a cipher implementation requires a proper alignment
      of data, the caller should use the functions of
      crypto_skcipher_alignmask() to identify a memory alignment mask.
      The kernel crypto API is able to process requests that are unaligned.
      This implies, however, additional overhead as the kernel
      crypto API needs to perform the realignment of the data which
      may imply moving of data.
     </para>
    </sect2>

    <sect2><title>Cipher Definition With struct blkcipher_alg and ablkcipher_alg</title>
     <para>
      Struct blkcipher_alg defines a synchronous block cipher whereas
      struct ablkcipher_alg defines an asynchronous block cipher.
     </para>

     <para>
      Please refer to the single block cipher description for schematics
      of the block cipher usage.
     </para>
    </sect2>

    <sect2><title>Specifics Of Asynchronous Multi-Block Cipher</title>
     <para>
      There are a couple of specifics to the asynchronous interface.
     </para>

     <para>
      First of all, some of the drivers will want to use the
      Generic ScatterWalk in case the hardware needs to be fed
      separate chunks of the scatterlist which contains the
      plaintext and will contain the ciphertext. Please refer
      to the ScatterWalk interface offered by the Linux kernel
      scatter / gather list implementation.
     </para>
    </sect2>
   </sect1>

   <sect1><title>Hashing [HASH]</title>

    <para>
     Example of transformations: crc32, md5, sha1, sha256,...
    </para>

    <sect2><title>Registering And Unregistering The Transformation</title>

     <para>
      There are multiple ways to register a HASH transformation,
      depending on whether the transformation is synchronous [SHASH]
      or asynchronous [AHASH] and the amount of HASH transformations
      we are registering. You can find the prototypes defined in
      include/crypto/internal/hash.h:
     </para>

     <programlisting>
   int crypto_register_ahash(struct ahash_alg *alg);

   int crypto_register_shash(struct shash_alg *alg);
   int crypto_register_shashes(struct shash_alg *algs, int count);
     </programlisting>

     <para>
      The respective counterparts for unregistering the HASH
      transformation are as follows:
     </para>

     <programlisting>
   int crypto_unregister_ahash(struct ahash_alg *alg);

   int crypto_unregister_shash(struct shash_alg *alg);
   int crypto_unregister_shashes(struct shash_alg *algs, int count);
     </programlisting>
    </sect2>

    <sect2><title>Cipher Definition With struct shash_alg and ahash_alg</title>
     <para>
      Here are schematics of how these functions are called when
      operated from other part of the kernel. Note that the .setkey()
      call might happen before or after any of these schematics happen,
      but must not happen during any of these are in-flight. Please note
      that calling .init() followed immediately by .finish() is also a
      perfectly valid transformation.
     </para>

     <programlisting>
   I)   DATA -----------.
                        v
         .init() -&gt; .update() -&gt; .final()      ! .update() might not be called
                     ^    |         |            at all in this scenario.
                     '----'         '---&gt; HASH

   II)  DATA -----------.-----------.
                        v           v
         .init() -&gt; .update() -&gt; .finup()      ! .update() may not be called
                     ^    |         |            at all in this scenario.
                     '----'         '---&gt; HASH

   III) DATA -----------.
                        v
                    .digest()                  ! The entire process is handled
                        |                        by the .digest() call.
                        '---------------&gt; HASH
     </programlisting>

     <para>
      Here is a schematic of how the .export()/.import() functions are
      called when used from another part of the kernel.
     </para>

     <programlisting>
   KEY--.                 DATA--.
        v                       v                  ! .update() may not be called
    .setkey() -&gt; .init() -&gt; .update() -&gt; .export()   at all in this scenario.
                             ^     |         |
                             '-----'         '--&gt; PARTIAL_HASH

   ----------- other transformations happen here -----------

   PARTIAL_HASH--.   DATA1--.
                 v          v
             .import -&gt; .update() -&gt; .final()     ! .update() may not be called
                         ^    |         |           at all in this scenario.
                         '----'         '--&gt; HASH1

   PARTIAL_HASH--.   DATA2-.
                 v         v
             .import -&gt; .finup()
                           |
                           '---------------&gt; HASH2
     </programlisting>
    </sect2>

    <sect2><title>Specifics Of Asynchronous HASH Transformation</title>
     <para>
      Some of the drivers will want to use the Generic ScatterWalk
      in case the implementation needs to be fed separate chunks of the
      scatterlist which contains the input data. The buffer containing
      the resulting hash will always be properly aligned to
      .cra_alignmask so there is no need to worry about this.
     </para>
    </sect2>
   </sect1>
  </chapter>

  <chapter id="User"><title>User Space Interface</title>
   <sect1><title>Introduction</title>
    <para>
     The concepts of the kernel crypto API visible to kernel space is fully
     applicable to the user space interface as well. Therefore, the kernel
     crypto API high level discussion for the in-kernel use cases applies
     here as well.
    </para>

    <para>
     The major difference, however, is that user space can only act as a
     consumer and never as a provider of a transformation or cipher algorithm.
    </para>

    <para>
     The following covers the user space interface exported by the kernel
     crypto API. A working example of this description is libkcapi that
     can be obtained from [1]. That library can be used by user space
     applications that require cryptographic services from the kernel.
    </para>

    <para>
     Some details of the in-kernel kernel crypto API aspects do not
     apply to user space, however. This includes the difference between
     synchronous and asynchronous invocations. The user space API call
     is fully synchronous.
    </para>

    <para>
     [1] <ulink url="http://www.chronox.de/libkcapi.html">http://www.chronox.de/libkcapi.html</ulink>
    </para>

   </sect1>

   <sect1><title>User Space API General Remarks</title>
    <para>
     The kernel crypto API is accessible from user space. Currently,
     the following ciphers are accessible:
    </para>

    <itemizedlist>
     <listitem>
      <para>Message digest including keyed message digest (HMAC, CMAC)</para>
     </listitem>

     <listitem>
      <para>Symmetric ciphers</para>
     </listitem>

     <listitem>
      <para>AEAD ciphers</para>
     </listitem>

     <listitem>
      <para>Random Number Generators</para>
     </listitem>
    </itemizedlist>

    <para>
     The interface is provided via socket type using the type AF_ALG.
     In addition, the setsockopt option type is SOL_ALG. In case the
     user space header files do not export these flags yet, use the
     following macros:
    </para>

    <programlisting>
#ifndef AF_ALG
#define AF_ALG 38
#endif
#ifndef SOL_ALG
#define SOL_ALG 279
#endif
    </programlisting>

    <para>
     A cipher is accessed with the same name as done for the in-kernel
     API calls. This includes the generic vs. unique naming schema for
     ciphers as well as the enforcement of priorities for generic names.
    </para>

    <para>
     To interact with the kernel crypto API, a socket must be
     created by the user space application. User space invokes the cipher
     operation with the send()/write() system call family. The result of the
     cipher operation is obtained with the read()/recv() system call family.
    </para>

    <para>
     The following API calls assume that the socket descriptor
     is already opened by the user space application and discusses only
     the kernel crypto API specific invocations.
    </para>

    <para>
     To initialize the socket interface, the following sequence has to
     be performed by the consumer:
    </para>

    <orderedlist>
     <listitem>
      <para>
       Create a socket of type AF_ALG with the struct sockaddr_alg
       parameter specified below for the different cipher types.
      </para>
     </listitem>

     <listitem>
      <para>
       Invoke bind with the socket descriptor
      </para>
     </listitem>

     <listitem>
      <para>
       Invoke accept with the socket descriptor. The accept system call
       returns a new file descriptor that is to be used to interact with
       the particular cipher instance. When invoking send/write or recv/read
       system calls to send data to the kernel or obtain data from the
       kernel, the file descriptor returned by accept must be used.
      </para>
     </listitem>
    </orderedlist>
   </sect1>

   <sect1><title>In-place Cipher operation</title>
    <para>
     Just like the in-kernel operation of the kernel crypto API, the user
     space interface allows the cipher operation in-place. That means that
     the input buffer used for the send/write system call and the output
     buffer used by the read/recv system call may be one and the same.
     This is of particular interest for symmetric cipher operations where a
     copying of the output data to its final destination can be avoided.
    </para>

    <para>
     If a consumer on the other hand wants to maintain the plaintext and
     the ciphertext in different memory locations, all a consumer needs
     to do is to provide different memory pointers for the encryption and
     decryption operation.
    </para>
   </sect1>

   <sect1><title>Message Digest API</title>
    <para>
     The message digest type to be used for the cipher operation is
     selected when invoking the bind syscall. bind requires the caller
     to provide a filled struct sockaddr data structure. This data
     structure must be filled as follows:
    </para>

    <programlisting>
struct sockaddr_alg sa = {
	.salg_family = AF_ALG,
	.salg_type = "hash", /* this selects the hash logic in the kernel */
	.salg_name = "sha1" /* this is the cipher name */
};
    </programlisting>

    <para>
     The salg_type value "hash" applies to message digests and keyed
     message digests. Though, a keyed message digest is referenced by
     the appropriate salg_name. Please see below for the setsockopt
     interface that explains how the key can be set for a keyed message
     digest.
    </para>

    <para>
     Using the send() system call, the application provides the data that
     should be processed with the message digest. The send system call
     allows the following flags to be specified:
    </para>

    <itemizedlist>
     <listitem>
      <para>
       MSG_MORE: If this flag is set, the send system call acts like a
       message digest update function where the final hash is not
       yet calculated. If the flag is not set, the send system call
       calculates the final message digest immediately.
      </para>
     </listitem>
    </itemizedlist>

    <para>
     With the recv() system call, the application can read the message
     digest from the kernel crypto API. If the buffer is too small for the
     message digest, the flag MSG_TRUNC is set by the kernel.
    </para>

    <para>
     In order to set a message digest key, the calling application must use
     the setsockopt() option of ALG_SET_KEY. If the key is not set the HMAC
     operation is performed without the initial HMAC state change caused by
     the key.
    </para>
   </sect1>

   <sect1><title>Symmetric Cipher API</title>
    <para>
     The operation is very similar to the message digest discussion.
     During initialization, the struct sockaddr data structure must be
     filled as follows:
    </para>

    <programlisting>
struct sockaddr_alg sa = {
	.salg_family = AF_ALG,
	.salg_type = "skcipher", /* this selects the symmetric cipher */
	.salg_name = "cbc(aes)" /* this is the cipher name */
};
    </programlisting>

    <para>
     Before data can be sent to the kernel using the write/send system
     call family, the consumer must set the key. The key setting is
     described with the setsockopt invocation below.
    </para>

    <para>
     Using the sendmsg() system call, the application provides the data that should be processed for encryption or decryption. In addition, the IV is
     specified with the data structure provided by the sendmsg() system call.
    </para>

    <para>
     The sendmsg system call parameter of struct msghdr is embedded into the
     struct cmsghdr data structure. See recv(2) and cmsg(3) for more
     information on how the cmsghdr data structure is used together with the
     send/recv system call family. That cmsghdr data structure holds the
     following information specified with a separate header instances:
    </para>

    <itemizedlist>
     <listitem>
      <para>
       specification of the cipher operation type with one of these flags:
      </para>
      <itemizedlist>
       <listitem>
        <para>ALG_OP_ENCRYPT - encryption of data</para>
       </listitem>
       <listitem>
        <para>ALG_OP_DECRYPT - decryption of data</para>
       </listitem>
      </itemizedlist>
     </listitem>

     <listitem>
      <para>
       specification of the IV information marked with the flag ALG_SET_IV
      </para>
     </listitem>
    </itemizedlist>

    <para>
     The send system call family allows the following flag to be specified:
    </para>

    <itemizedlist>
     <listitem>
      <para>
       MSG_MORE: If this flag is set, the send system call acts like a
       cipher update function where more input data is expected
       with a subsequent invocation of the send system call.
      </para>
     </listitem>
    </itemizedlist>

    <para>
     Note: The kernel reports -EINVAL for any unexpected data. The caller
     must make sure that all data matches the constraints given in
     /proc/crypto for the selected cipher.
    </para>

    <para>
     With the recv() system call, the application can read the result of
     the cipher operation from the kernel crypto API. The output buffer
     must be at least as large as to hold all blocks of the encrypted or
     decrypted data. If the output data size is smaller, only as many
     blocks are returned that fit into that output buffer size.
    </para>
   </sect1>

   <sect1><title>AEAD Cipher API</title>
    <para>
     The operation is very similar to the symmetric cipher discussion.
     During initialization, the struct sockaddr data structure must be
     filled as follows:
    </para>

    <programlisting>
struct sockaddr_alg sa = {
	.salg_family = AF_ALG,
	.salg_type = "aead", /* this selects the symmetric cipher */
	.salg_name = "gcm(aes)" /* this is the cipher name */
};
    </programlisting>

    <para>
     Before data can be sent to the kernel using the write/send system
     call family, the consumer must set the key. The key setting is
     described with the setsockopt invocation below.
    </para>

    <para>
     In addition, before data can be sent to the kernel using the
     write/send system call family, the consumer must set the authentication
     tag size. To set the authentication tag size, the caller must use the
     setsockopt invocation described below.
    </para>

    <para>
     Using the sendmsg() system call, the application provides the data that should be processed for encryption or decryption. In addition, the IV is
     specified with the data structure provided by the sendmsg() system call.
    </para>

    <para>
     The sendmsg system call parameter of struct msghdr is embedded into the
     struct cmsghdr data structure. See recv(2) and cmsg(3) for more
     information on how the cmsghdr data structure is used together with the
     send/recv system call family. That cmsghdr data structure holds the
     following information specified with a separate header instances:
    </para>

    <itemizedlist>
     <listitem>
      <para>
       specification of the cipher operation type with one of these flags:
      </para>
      <itemizedlist>
       <listitem>
        <para>ALG_OP_ENCRYPT - encryption of data</para>
       </listitem>
       <listitem>
        <para>ALG_OP_DECRYPT - decryption of data</para>
       </listitem>
      </itemizedlist>
     </listitem>

     <listitem>
      <para>
       specification of the IV information marked with the flag ALG_SET_IV
      </para>
     </listitem>

     <listitem>
      <para>
       specification of the associated authentication data (AAD) with the
       flag ALG_SET_AEAD_ASSOCLEN. The AAD is sent to the kernel together
       with the plaintext / ciphertext. See below for the memory structure.
      </para>
     </listitem>
    </itemizedlist>

    <para>
     The send system call family allows the following flag to be specified:
    </para>

    <itemizedlist>
     <listitem>
      <para>
       MSG_MORE: If this flag is set, the send system call acts like a
       cipher update function where more input data is expected
       with a subsequent invocation of the send system call.
      </para>
     </listitem>
    </itemizedlist>

    <para>
     Note: The kernel reports -EINVAL for any unexpected data. The caller
     must make sure that all data matches the constraints given in
     /proc/crypto for the selected cipher.
    </para>

    <para>
     With the recv() system call, the application can read the result of
     the cipher operation from the kernel crypto API. The output buffer
     must be at least as large as defined with the memory structure below.
     If the output data size is smaller, the cipher operation is not performed.
    </para>

    <para>
     The authenticated decryption operation may indicate an integrity error.
     Such breach in integrity is marked with the -EBADMSG error code.
    </para>

    <sect2><title>AEAD Memory Structure</title>
     <para>
      The AEAD cipher operates with the following information that
      is communicated between user and kernel space as one data stream:
     </para>

     <itemizedlist>
      <listitem>
       <para>plaintext or ciphertext</para>
      </listitem>

      <listitem>
       <para>associated authentication data (AAD)</para>
      </listitem>

      <listitem>
       <para>authentication tag</para>
      </listitem>
     </itemizedlist>

     <para>
      The sizes of the AAD and the authentication tag are provided with
      the sendmsg and setsockopt calls (see there). As the kernel knows
      the size of the entire data stream, the kernel is now able to
      calculate the right offsets of the data components in the data
      stream.
     </para>

     <para>
      The user space caller must arrange the aforementioned information
      in the following order:
     </para>

     <itemizedlist>
      <listitem>
       <para>
        AEAD encryption input: AAD || plaintext
       </para>
      </listitem>

      <listitem>
       <para>
        AEAD decryption input: AAD || ciphertext || authentication tag
       </para>
      </listitem>
     </itemizedlist>

     <para>
      The output buffer the user space caller provides must be at least as
      large to hold the following data:
     </para>

     <itemizedlist>
      <listitem>
       <para>
        AEAD encryption output: ciphertext || authentication tag
       </para>
      </listitem>

      <listitem>
       <para>
        AEAD decryption output: plaintext
       </para>
      </listitem>
     </itemizedlist>
    </sect2>
   </sect1>

   <sect1><title>Random Number Generator API</title>
    <para>
     Again, the operation is very similar to the other APIs.
     During initialization, the struct sockaddr data structure must be
     filled as follows:
    </para>

    <programlisting>
struct sockaddr_alg sa = {
	.salg_family = AF_ALG,
	.salg_type = "rng", /* this selects the symmetric cipher */
	.salg_name = "drbg_nopr_sha256" /* this is the cipher name */
};
    </programlisting>

    <para>
     Depending on the RNG type, the RNG must be seeded. The seed is provided
     using the setsockopt interface to set the key. For example, the
     ansi_cprng requires a seed. The DRBGs do not require a seed, but
     may be seeded.
    </para>

    <para>
     Using the read()/recvmsg() system calls, random numbers can be obtained.
     The kernel generates at most 128 bytes in one call. If user space
     requires more data, multiple calls to read()/recvmsg() must be made.
    </para>

    <para>
     WARNING: The user space caller may invoke the initially mentioned
     accept system call multiple times. In this case, the returned file
     descriptors have the same state.
    </para>

   </sect1>

   <sect1><title>Zero-Copy Interface</title>
    <para>
     In addition to the send/write/read/recv system call family, the AF_ALG
     interface can be accessed with the zero-copy interface of splice/vmsplice.
     As the name indicates, the kernel tries to avoid a copy operation into
     kernel space.
    </para>

    <para>
     The zero-copy operation requires data to be aligned at the page boundary.
     Non-aligned data can be used as well, but may require more operations of
     the kernel which would defeat the speed gains obtained from the zero-copy
     interface.
    </para>

    <para>
     The system-interent limit for the size of one zero-copy operation is
     16 pages. If more data is to be sent to AF_ALG, user space must slice
     the input into segments with a maximum size of 16 pages.
    </para>

    <para>
     Zero-copy can be used with the following code example (a complete working
     example is provided with libkcapi):
    </para>

    <programlisting>
int pipes[2];

pipe(pipes);
/* input data in iov */
vmsplice(pipes[1], iov, iovlen, SPLICE_F_GIFT);
/* opfd is the file descriptor returned from accept() system call */
splice(pipes[0], NULL, opfd, NULL, ret, 0);
read(opfd, out, outlen);
    </programlisting>

   </sect1>

   <sect1><title>Setsockopt Interface</title>
    <para>
     In addition to the read/recv and send/write system call handling
     to send and retrieve data subject to the cipher operation, a consumer
     also needs to set the additional information for the cipher operation.
     This additional information is set using the setsockopt system call
     that must be invoked with the file descriptor of the open cipher
     (i.e. the file descriptor returned by the accept system call).
    </para>

    <para>
     Each setsockopt invocation must use the level SOL_ALG.
    </para>

    <para>
     The setsockopt interface allows setting the following data using
     the mentioned optname:
    </para>

    <itemizedlist>
     <listitem>
      <para>
       ALG_SET_KEY -- Setting the key. Key setting is applicable to:
      </para>
      <itemizedlist>
       <listitem>
        <para>the skcipher cipher type (symmetric ciphers)</para>
       </listitem>
       <listitem>
        <para>the hash cipher type (keyed message digests)</para>
       </listitem>
       <listitem>
        <para>the AEAD cipher type</para>
       </listitem>
       <listitem>
        <para>the RNG cipher type to provide the seed</para>
       </listitem>
      </itemizedlist>
     </listitem>

     <listitem>
      <para>
       ALG_SET_AEAD_AUTHSIZE -- Setting the authentication tag size
       for AEAD ciphers. For a encryption operation, the authentication
       tag of the given size will be generated. For a decryption operation,
       the provided ciphertext is assumed to contain an authentication tag
       of the given size (see section about AEAD memory layout below).
      </para>
     </listitem>
    </itemizedlist>

   </sect1>

   <sect1><title>User space API example</title>
    <para>
     Please see [1] for libkcapi which provides an easy-to-use wrapper
     around the aforementioned Netlink kernel interface. [1] also contains
     a test application that invokes all libkcapi API calls.
    </para>

    <para>
     [1] <ulink url="http://www.chronox.de/libkcapi.html">http://www.chronox.de/libkcapi.html</ulink>
    </para>

   </sect1>

  </chapter>

  <chapter id="API"><title>Programming Interface</title>
   <para>
    Please note that the kernel crypto API contains the AEAD givcrypt
    API (crypto_aead_giv* and aead_givcrypt_* function calls in
    include/crypto/aead.h). This API is obsolete and will be removed
    in the future. To obtain the functionality of an AEAD cipher with
    internal IV generation, use the IV generator as a regular cipher.
    For example, rfc4106(gcm(aes)) is the AEAD cipher with external
    IV generation and seqniv(rfc4106(gcm(aes))) implies that the kernel
    crypto API generates the IV. Different IV generators are available.
   </para>
   <sect1><title>Block Cipher Context Data Structures</title>
!Pinclude/linux/crypto.h Block Cipher Context Data Structures
!Finclude/crypto/aead.h aead_request
   </sect1>
   <sect1><title>Block Cipher Algorithm Definitions</title>
!Pinclude/linux/crypto.h Block Cipher Algorithm Definitions
!Finclude/linux/crypto.h crypto_alg
!Finclude/linux/crypto.h ablkcipher_alg
!Finclude/crypto/aead.h aead_alg
!Finclude/linux/crypto.h blkcipher_alg
!Finclude/linux/crypto.h cipher_alg
!Finclude/crypto/rng.h rng_alg
   </sect1>
   <sect1><title>Symmetric Key Cipher API</title>
!Pinclude/crypto/skcipher.h Symmetric Key Cipher API
!Finclude/crypto/skcipher.h crypto_alloc_skcipher
!Finclude/crypto/skcipher.h crypto_free_skcipher
!Finclude/crypto/skcipher.h crypto_has_skcipher
!Finclude/crypto/skcipher.h crypto_skcipher_ivsize
!Finclude/crypto/skcipher.h crypto_skcipher_blocksize
!Finclude/crypto/skcipher.h crypto_skcipher_setkey
!Finclude/crypto/skcipher.h crypto_skcipher_reqtfm
!Finclude/crypto/skcipher.h crypto_skcipher_encrypt
!Finclude/crypto/skcipher.h crypto_skcipher_decrypt
   </sect1>
   <sect1><title>Symmetric Key Cipher Request Handle</title>
!Pinclude/crypto/skcipher.h Symmetric Key Cipher Request Handle
!Finclude/crypto/skcipher.h crypto_skcipher_reqsize
!Finclude/crypto/skcipher.h skcipher_request_set_tfm
!Finclude/crypto/skcipher.h skcipher_request_alloc
!Finclude/crypto/skcipher.h skcipher_request_free
!Finclude/crypto/skcipher.h skcipher_request_set_callback
!Finclude/crypto/skcipher.h skcipher_request_set_crypt
   </sect1>
   <sect1><title>Asynchronous Block Cipher API - Deprecated</title>
!Pinclude/linux/crypto.h Asynchronous Block Cipher API
!Finclude/linux/crypto.h crypto_alloc_ablkcipher
!Finclude/linux/crypto.h crypto_free_ablkcipher
!Finclude/linux/crypto.h crypto_has_ablkcipher
!Finclude/linux/crypto.h crypto_ablkcipher_ivsize
!Finclude/linux/crypto.h crypto_ablkcipher_blocksize
!Finclude/linux/crypto.h crypto_ablkcipher_setkey
!Finclude/linux/crypto.h crypto_ablkcipher_reqtfm
!Finclude/linux/crypto.h crypto_ablkcipher_encrypt
!Finclude/linux/crypto.h crypto_ablkcipher_decrypt
   </sect1>
   <sect1><title>Asynchronous Cipher Request Handle - Deprecated</title>
!Pinclude/linux/crypto.h Asynchronous Cipher Request Handle
!Finclude/linux/crypto.h crypto_ablkcipher_reqsize
!Finclude/linux/crypto.h ablkcipher_request_set_tfm
!Finclude/linux/crypto.h ablkcipher_request_alloc
!Finclude/linux/crypto.h ablkcipher_request_free
!Finclude/linux/crypto.h ablkcipher_request_set_callback
!Finclude/linux/crypto.h ablkcipher_request_set_crypt
   </sect1>
   <sect1><title>Authenticated Encryption With Associated Data (AEAD) Cipher API</title>
!Pinclude/crypto/aead.h Authenticated Encryption With Associated Data (AEAD) Cipher API
!Finclude/crypto/aead.h crypto_alloc_aead
!Finclude/crypto/aead.h crypto_free_aead
!Finclude/crypto/aead.h crypto_aead_ivsize
!Finclude/crypto/aead.h crypto_aead_authsize
!Finclude/crypto/aead.h crypto_aead_blocksize
!Finclude/crypto/aead.h crypto_aead_setkey
!Finclude/crypto/aead.h crypto_aead_setauthsize
!Finclude/crypto/aead.h crypto_aead_encrypt
!Finclude/crypto/aead.h crypto_aead_decrypt
   </sect1>
   <sect1><title>Asynchronous AEAD Request Handle</title>
!Pinclude/crypto/aead.h Asynchronous AEAD Request Handle
!Finclude/crypto/aead.h crypto_aead_reqsize
!Finclude/crypto/aead.h aead_request_set_tfm
!Finclude/crypto/aead.h aead_request_alloc
!Finclude/crypto/aead.h aead_request_free
!Finclude/crypto/aead.h aead_request_set_callback
!Finclude/crypto/aead.h aead_request_set_crypt
!Finclude/crypto/aead.h aead_request_set_ad
   </sect1>
   <sect1><title>Synchronous Block Cipher API - Deprecated</title>
!Pinclude/linux/crypto.h Synchronous Block Cipher API
!Finclude/linux/crypto.h crypto_alloc_blkcipher
!Finclude/linux/crypto.h crypto_free_blkcipher
!Finclude/linux/crypto.h crypto_has_blkcipher
!Finclude/linux/crypto.h crypto_blkcipher_name
!Finclude/linux/crypto.h crypto_blkcipher_ivsize
!Finclude/linux/crypto.h crypto_blkcipher_blocksize
!Finclude/linux/crypto.h crypto_blkcipher_setkey
!Finclude/linux/crypto.h crypto_blkcipher_encrypt
!Finclude/linux/crypto.h crypto_blkcipher_encrypt_iv
!Finclude/linux/crypto.h crypto_blkcipher_decrypt
!Finclude/linux/crypto.h crypto_blkcipher_decrypt_iv
!Finclude/linux/crypto.h crypto_blkcipher_set_iv
!Finclude/linux/crypto.h crypto_blkcipher_get_iv
   </sect1>
   <sect1><title>Single Block Cipher API</title>
!Pinclude/linux/crypto.h Single Block Cipher API
!Finclude/linux/crypto.h crypto_alloc_cipher
!Finclude/linux/crypto.h crypto_free_cipher
!Finclude/linux/crypto.h crypto_has_cipher
!Finclude/linux/crypto.h crypto_cipher_blocksize
!Finclude/linux/crypto.h crypto_cipher_setkey
!Finclude/linux/crypto.h crypto_cipher_encrypt_one
!Finclude/linux/crypto.h crypto_cipher_decrypt_one
   </sect1>
   <sect1><title>Message Digest Algorithm Definitions</title>
!Pinclude/crypto/hash.h Message Digest Algorithm Definitions
!Finclude/crypto/hash.h hash_alg_common
!Finclude/crypto/hash.h ahash_alg
!Finclude/crypto/hash.h shash_alg
   </sect1>
   <sect1><title>Asynchronous Message Digest API</title>
!Pinclude/crypto/hash.h Asynchronous Message Digest API
!Finclude/crypto/hash.h crypto_alloc_ahash
!Finclude/crypto/hash.h crypto_free_ahash
!Finclude/crypto/hash.h crypto_ahash_init
!Finclude/crypto/hash.h crypto_ahash_digestsize
!Finclude/crypto/hash.h crypto_ahash_reqtfm
!Finclude/crypto/hash.h crypto_ahash_reqsize
!Finclude/crypto/hash.h crypto_ahash_setkey
!Finclude/crypto/hash.h crypto_ahash_finup
!Finclude/crypto/hash.h crypto_ahash_final
!Finclude/crypto/hash.h crypto_ahash_digest
!Finclude/crypto/hash.h crypto_ahash_export
!Finclude/crypto/hash.h crypto_ahash_import
   </sect1>
   <sect1><title>Asynchronous Hash Request Handle</title>
!Pinclude/crypto/hash.h Asynchronous Hash Request Handle
!Finclude/crypto/hash.h ahash_request_set_tfm
!Finclude/crypto/hash.h ahash_request_alloc
!Finclude/crypto/hash.h ahash_request_free
!Finclude/crypto/hash.h ahash_request_set_callback
!Finclude/crypto/hash.h ahash_request_set_crypt
   </sect1>
   <sect1><title>Synchronous Message Digest API</title>
!Pinclude/crypto/hash.h Synchronous Message Digest API
!Finclude/crypto/hash.h crypto_alloc_shash
!Finclude/crypto/hash.h crypto_free_shash
!Finclude/crypto/hash.h crypto_shash_blocksize
!Finclude/crypto/hash.h crypto_shash_digestsize
!Finclude/crypto/hash.h crypto_shash_descsize
!Finclude/crypto/hash.h crypto_shash_setkey
!Finclude/crypto/hash.h crypto_shash_digest
!Finclude/crypto/hash.h crypto_shash_export
!Finclude/crypto/hash.h crypto_shash_import
!Finclude/crypto/hash.h crypto_shash_init
!Finclude/crypto/hash.h crypto_shash_update
!Finclude/crypto/hash.h crypto_shash_final
!Finclude/crypto/hash.h crypto_shash_finup
   </sect1>
   <sect1><title>Crypto API Random Number API</title>
!Pinclude/crypto/rng.h Random number generator API
!Finclude/crypto/rng.h crypto_alloc_rng
!Finclude/crypto/rng.h crypto_rng_alg
!Finclude/crypto/rng.h crypto_free_rng
!Finclude/crypto/rng.h crypto_rng_generate
!Finclude/crypto/rng.h crypto_rng_get_bytes
!Finclude/crypto/rng.h crypto_rng_reset
!Finclude/crypto/rng.h crypto_rng_seedsize
!Cinclude/crypto/rng.h
   </sect1>
   <sect1><title>Asymmetric Cipher API</title>
!Pinclude/crypto/akcipher.h Generic Public Key API
!Finclude/crypto/akcipher.h akcipher_alg
!Finclude/crypto/akcipher.h akcipher_request
!Finclude/crypto/akcipher.h crypto_alloc_akcipher
!Finclude/crypto/akcipher.h crypto_free_akcipher
!Finclude/crypto/akcipher.h crypto_akcipher_set_pub_key
!Finclude/crypto/akcipher.h crypto_akcipher_set_priv_key
   </sect1>
   <sect1><title>Asymmetric Cipher Request Handle</title>
!Finclude/crypto/akcipher.h akcipher_request_alloc
!Finclude/crypto/akcipher.h akcipher_request_free
!Finclude/crypto/akcipher.h akcipher_request_set_callback
!Finclude/crypto/akcipher.h akcipher_request_set_crypt
!Finclude/crypto/akcipher.h crypto_akcipher_maxsize
!Finclude/crypto/akcipher.h crypto_akcipher_encrypt
!Finclude/crypto/akcipher.h crypto_akcipher_decrypt
!Finclude/crypto/akcipher.h crypto_akcipher_sign
!Finclude/crypto/akcipher.h crypto_akcipher_verify
   </sect1>
  </chapter>

  <chapter id="Code"><title>Code Examples</title>
   <sect1><title>Code Example For Symmetric Key Cipher Operation</title>
    <programlisting>

struct tcrypt_result {
	struct completion completion;
	int err;
};

/* tie all data structures together */
struct skcipher_def {
	struct scatterlist sg;
	struct crypto_skcipher *tfm;
	struct skcipher_request *req;
	struct tcrypt_result result;
};

/* Callback function */
static void test_skcipher_cb(struct crypto_async_request *req, int error)
{
	struct tcrypt_result *result = req-&gt;data;

	if (error == -EINPROGRESS)
		return;
	result-&gt;err = error;
	complete(&amp;result-&gt;completion);
	pr_info("Encryption finished successfully\n");
}

/* Perform cipher operation */
static unsigned int test_skcipher_encdec(struct skcipher_def *sk,
					 int enc)
{
	int rc = 0;

	if (enc)
		rc = crypto_skcipher_encrypt(sk-&gt;req);
	else
		rc = crypto_skcipher_decrypt(sk-&gt;req);

	switch (rc) {
	case 0:
		break;
	case -EINPROGRESS:
	case -EBUSY:
		rc = wait_for_completion_interruptible(
			&amp;sk-&gt;result.completion);
		if (!rc &amp;&amp; !sk-&gt;result.err) {
			reinit_completion(&amp;sk-&gt;result.completion);
			break;
		}
	default:
		pr_info("skcipher encrypt returned with %d result %d\n",
			rc, sk-&gt;result.err);
		break;
	}
	init_completion(&amp;sk-&gt;result.completion);

	return rc;
}

/* Initialize and trigger cipher operation */
static int test_skcipher(void)
{
	struct skcipher_def sk;
	struct crypto_skcipher *skcipher = NULL;
	struct skcipher_request *req = NULL;
	char *scratchpad = NULL;
	char *ivdata = NULL;
	unsigned char key[32];
	int ret = -EFAULT;

	skcipher = crypto_alloc_skcipher("cbc-aes-aesni", 0, 0);
	if (IS_ERR(skcipher)) {
		pr_info("could not allocate skcipher handle\n");
		return PTR_ERR(skcipher);
	}

	req = skcipher_request_alloc(skcipher, GFP_KERNEL);
	if (!req) {
		pr_info("could not allocate skcipher request\n");
		ret = -ENOMEM;
		goto out;
	}

	skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
				      test_skcipher_cb,
				      &amp;sk.result);

	/* AES 256 with random key */
	get_random_bytes(&amp;key, 32);
	if (crypto_skcipher_setkey(skcipher, key, 32)) {
		pr_info("key could not be set\n");
		ret = -EAGAIN;
		goto out;
	}

	/* IV will be random */
	ivdata = kmalloc(16, GFP_KERNEL);
	if (!ivdata) {
		pr_info("could not allocate ivdata\n");
		goto out;
	}
	get_random_bytes(ivdata, 16);

	/* Input data will be random */
	scratchpad = kmalloc(16, GFP_KERNEL);
	if (!scratchpad) {
		pr_info("could not allocate scratchpad\n");
		goto out;
	}
	get_random_bytes(scratchpad, 16);

	sk.tfm = skcipher;
	sk.req = req;

	/* We encrypt one block */
	sg_init_one(&amp;sk.sg, scratchpad, 16);
	skcipher_request_set_crypt(req, &amp;sk.sg, &amp;sk.sg, 16, ivdata);
	init_completion(&amp;sk.result.completion);

	/* encrypt data */
	ret = test_skcipher_encdec(&amp;sk, 1);
	if (ret)
		goto out;

	pr_info("Encryption triggered successfully\n");

out:
	if (skcipher)
		crypto_free_skcipher(skcipher);
	if (req)
		skcipher_request_free(req);
	if (ivdata)
		kfree(ivdata);
	if (scratchpad)
		kfree(scratchpad);
	return ret;
}
    </programlisting>
   </sect1>

   <sect1><title>Code Example For Use of Operational State Memory With SHASH</title>
    <programlisting>

struct sdesc {
	struct shash_desc shash;
	char ctx[];
};

static struct sdescinit_sdesc(struct crypto_shash *alg)
{
	struct sdescsdesc;
	int size;

	size = sizeof(struct shash_desc) + crypto_shash_descsize(alg);
	sdesc = kmalloc(size, GFP_KERNEL);
	if (!sdesc)
		return ERR_PTR(-ENOMEM);
	sdesc-&gt;shash.tfm = alg;
	sdesc-&gt;shash.flags = 0x0;
	return sdesc;
}

static int calc_hash(struct crypto_shashalg,
		     const unsigned chardata, unsigned int datalen,
		     unsigned chardigest) {
	struct sdescsdesc;
	int ret;

	sdesc = init_sdesc(alg);
	if (IS_ERR(sdesc)) {
		pr_info("trusted_key: can't alloc %s\n", hash_alg);
		return PTR_ERR(sdesc);
	}

	ret = crypto_shash_digest(&amp;sdesc-&gt;shash, data, datalen, digest);
	kfree(sdesc);
	return ret;
}
    </programlisting>
   </sect1>

   <sect1><title>Code Example For Random Number Generator Usage</title>
    <programlisting>

static int get_random_numbers(u8 *buf, unsigned int len)
{
	struct crypto_rngrng = NULL;
	chardrbg = "drbg_nopr_sha256"; /* Hash DRBG with SHA-256, no PR */
	int ret;

	if (!buf || !len) {
		pr_debug("No output buffer provided\n");
		return -EINVAL;
	}

	rng = crypto_alloc_rng(drbg, 0, 0);
	if (IS_ERR(rng)) {
		pr_debug("could not allocate RNG handle for %s\n", drbg);
		return -PTR_ERR(rng);
	}

	ret = crypto_rng_get_bytes(rng, buf, len);
	if (ret &lt; 0)
		pr_debug("generation of random numbers failed\n");
	else if (ret == 0)
		pr_debug("RNG returned no data");
	else
		pr_debug("RNG returned %d bytes of data\n", ret);

out:
	crypto_free_rng(rng);
	return ret;
}
    </programlisting>
   </sect1>
  </chapter>
 </book>
