02 May, 2007

4 commits

  • This patch adds the cryptd module which is a template that takes a
    synchronous software crypto algorithm and converts it to an asynchronous
    one by executing it in a kernel thread.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • As it is whenever a new algorithm with the same name is registered
    users of the old algorithm will be removed so that they can take
    advantage of the new algorithm. This presents a problem when the
    new algorithm is not equivalent to the old algorithm. In particular,
    the new algorithm might only function on top of the existing one.

    Hence we should not remove users unless they can make use of the
    new algorithm.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds the mid-level interface for asynchronous block ciphers.
    It also includes a generic queueing mechanism that can be used by other
    asynchronous crypto operations in future.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch passes the type/mask along when constructing instances of
    templates. This is in preparation for templates that may support
    multiple types of instances depending on what is requested. For example,
    the planned software async crypto driver will use this construct.

    For the moment this allows us to check whether the instance constructed
    is of the correct type and avoid returning success if the type does not
    match.

    Signed-off-by: Herbert Xu

    Herbert Xu
     

07 Feb, 2007

2 commits


07 Dec, 2006

2 commits

  • A lot of cypher modes need multiplications in GF(2^128). LRW, ABL, GCM...
    I use functions from this library in my LRW implementation and I will
    also use them in my ABL (Arbitrary Block Length, an unencumbered (correct
    me if I am wrong, wide block cipher mode).

    Elements of GF(2^128) must be presented as u128 *, it encourages automatic
    and proper alignment.

    The library contains support for two different representations of GF(2^128),
    see the comment in gf128mul.h. There different levels of optimization
    (memory/speed tradeoff).

    The code is based on work by Dr Brian Gladman. Notable changes:
    - deletion of two optimization modes
    - change from u32 to u64 for faster handling on 64bit machines
    - support for 'bbe' representation in addition to the, already implemented,
    'lle' representation.
    - move 'inline void' functions from header to 'static void' in the
    source file
    - update to use the linux coding style conventions

    The original can be found at:
    http://fp.gladman.plus.com/AES/modes.vc8.19-06-06.zip

    The copyright (and GPL statement) of the original author is preserved.

    Signed-off-by: Rik Snel
    Signed-off-by: Herbert Xu

    Rik Snel
     
  • 128bit is a common blocksize in linux kernel cryptography, so it helps to
    centralize some common operations.

    The code, while mostly trivial, is based on a header file mode_hdr.h in
    http://fp.gladman.plus.com/AES/modes.vc8.19-06-06.zip

    The original copyright (and GPL statement) of the original author,
    Dr Brian Gladman, is preserved.

    Signed-off-by: Rik Snel
    Signed-off-by: Herbert Xu

    Rik Snel
     

21 Sep, 2006

12 commits

  • The existing digest user interface is inadequate for support asynchronous
    operations. For one it doesn't return a value to indicate success or
    failure, nor does it take a per-operation descriptor which is essential
    for the issuing of requests while other requests are still outstanding.

    This patch is the first in a series of steps to remodel the interface
    for asynchronous operations.

    For the ease of transition the new interface will be known as "hash"
    while the old one will remain as "digest".

    This patch also changes sg_next to allow chaining.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds two block cipher algorithms, CBC and ECB. These
    are implemented as templates on top of existing single-block cipher
    algorithms. They invoke the single-block cipher through the new
    encrypt_one/decrypt_one interface.

    This also optimises the in-place encryption and decryption to remove
    the cost of an IV copy each round.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds the new type of block ciphers. Unlike current cipher
    algorithms which operate on a single block at a time, block ciphers
    operate on an arbitrarily long linear area of data. As it is block-based,
    it will skip any data remaining at the end which cannot form a block.

    The block cipher has one major difference when compared to the existing
    block cipher implementation. The sg walking is now performed by the
    algorithm rather than the cipher mid-layer. This is needed for drivers
    that directly support sg lists. It also improves performance for all
    algorithms as it reduces the total number of indirect calls by one.

    In future the existing cipher algorithm will be converted to only have
    a single-block interface. This will be done after all existing users
    have switched over to the new block cipher type.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch prepares the scatterwalk code for use by the new block cipher
    type.

    Firstly it halves the size of scatter_walk on 32-bit platforms. This
    is important as we allocate at least two of these objects on the stack
    for each block cipher operation.

    It also exports the symbols since the block cipher code can be built as
    a module.

    Finally there is a hack in scatterwalk_unmap that relies on progress
    being made. Unfortunately, for hardware crypto we can't guarantee
    progress to be made since the hardware can fail.

    So this also gets rid of the hack by not advancing the address returned
    by scatterwalk_map.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds two new operations for the simple cipher that encrypts or
    decrypts a single block at a time. This will be the main interface after
    the existing block operations have moved over to the new block ciphers.

    It also adds the crypto_cipher type which is currently only used on the
    new operations but will be extended to setkey as well once existing users
    have been converted to use block ciphers where applicable.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds the crypto_type structure which will be used for all new
    crypto algorithm types, beginning with block ciphers.

    The primary purpose of this abstraction is to allow different crypto_type
    objects for crypto algorithms of the same type, in particular, there will
    be a different crypto_type objects for asynchronous algorithms.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch adds the helpers crypto_get_attr_alg and crypto_alloc_instance
    which can be used by simple one-argument templates like hmac to process
    input parameters and allocate instances.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • Now that the tfm is passed directly to setkey instead of the ctx, we no
    longer need to pass the &tfm->crt_flags pointer.

    This patch also gets rid of a few unnecessary checks on the key length
    for ciphers as the cipher layer guarantees that the key length is within
    the bounds specified by the algorithm.

    Rather than testing dia_setkey every time, this patch does it only once
    during crypto_alloc_tfm. The redundant check from crypto_digest_setkey
    is also removed.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • Spawns lock a specific crypto algorithm in place. They can then be used
    with crypto_spawn_tfm to allocate a tfm for that algorithm. When the base
    algorithm of a spawn is deregistered, all its spawns will be automatically
    removed.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     
  • A crypto_template generates a crypto_alg object when given a set of
    parameters. this patch adds the basic data structure fo templates
    and code to handle their registration/deregistration.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     
  • The crypto API is made up of the part facing users such as IPsec and the
    low-level part which is used by cryptographic entities such as algorithms.
    This patch splits out the latter so that the two APIs are more clearly
    delineated. As a bonus the low-level API can now be modularised if all
    algorithms are built as modules.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This patch splits up the twofish crypto routine into a common part ( key
    setup ) which will be uses by all twofish crypto modules ( generic-c , i586
    assembler and x86_64 assembler ) and generic-c part. It also creates a new
    header file which will be used by all 3 modules.

    This eliminates all code duplication.

    Correctness was verified with the tcrypt module and automated test scripts.

    Signed-off-by: Joachim Fritschi
    Signed-off-by: Herbert Xu

    Joachim Fritschi