03 Jan, 2021

1 commit

  • The cipher routines in the crypto API are mostly intended for templates
    implementing skcipher modes generically in software, and shouldn't be
    used outside of the crypto subsystem. So move the prototypes and all
    related definitions to a new header file under include/crypto/internal.
    Also, let's use the new module namespace feature to move the symbol
    exports into a new namespace CRYPTO_INTERNAL.

    Signed-off-by: Ard Biesheuvel
    Acked-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Ard Biesheuvel
     

27 Dec, 2019

1 commit

  • This patch introduces the skcipher_ialg_simple helper which fetches
    the crypto_alg structure from a simple skcipher instance's spawn.

    This allows us to remove the third argument from the function
    skcipher_alloc_instance_simple.

    In doing so the reference count to the algorithm is now maintained
    by the Crypto API and the caller no longer needs to drop the alg
    refcount.

    Signed-off-by: Herbert Xu

    Herbert Xu
     

18 Apr, 2019

1 commit

  • Use subsys_initcall for registration of all templates and generic
    algorithm implementations, rather than module_init. Then change
    cryptomgr to use arch_initcall, to place it before the subsys_initcalls.

    This is needed so that when both a generic and optimized implementation
    of an algorithm are built into the kernel (not loadable modules), the
    generic implementation is registered before the optimized one.
    Otherwise, the self-tests for the optimized implementation are unable to
    allocate the generic implementation for the new comparison fuzz tests.

    Note that on arm, a side effect of this change is that self-tests for
    generic implementations may run before the unaligned access handler has
    been installed. So, unaligned accesses will crash the kernel. This is
    arguably a good thing as it makes it easier to detect that type of bug.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

11 Jan, 2019

2 commits

  • The OFB template just wraps a single block cipher algorithm, so simplify
    it by converting it to use skcipher_alloc_instance_simple().

    Cc: Gilad Ben-Yossef
    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     
  • Fix multiple bugs in the OFB implementation:

    1. It stored the per-request state 'cnt' in the tfm context, which can be
    used by multiple threads concurrently (e.g. via AF_ALG).
    2. It didn't support messages not a multiple of the block cipher size,
    despite being a stream cipher.
    3. It didn't set cra_blocksize to 1 to indicate it is a stream cipher.

    To fix these, set the 'chunksize' property to the cipher block size to
    guarantee that when walking through the scatterlist, a partial block can
    only occur at the end. Then change the implementation to XOR a block at
    a time at first, then XOR the partial block at the end if needed. This
    is the same way CTR and CFB are implemented. As a bonus, this also
    improves performance in most cases over the current approach.

    Fixes: e497c51896b3 ("crypto: ofb - add output feedback mode")
    Cc: # v4.20+
    Cc: Gilad Ben-Yossef
    Signed-off-by: Eric Biggers
    Reviewed-by: Gilad Ben-Yossef
    Signed-off-by: Herbert Xu

    Eric Biggers
     

28 Sep, 2018

1 commit

  • Add a generic version of output feedback mode. We already have support of
    several hardware based transformations of this mode and the needed test
    vectors but we somehow missed adding a generic software one. Fix this now.

    Signed-off-by: Gilad Ben-Yossef
    Signed-off-by: Herbert Xu

    Gilad Ben-Yossef