16 Jul, 2020

1 commit


17 Nov, 2019

2 commits

  • Reimplement the library routines to perform chacha20poly1305 en/decryption
    on scatterlists, without [ab]using the [deprecated] blkcipher interface,
    which is rather heavyweight and does things we don't really need.

    Instead, we use the sg_miter API in a novel and clever way, to iterate
    over the scatterlist in-place (i.e., source == destination, which is the
    only way this library is expected to be used). That way, we don't have to
    iterate over two scatterlists in parallel.

    Another optimization is that, instead of relying on the blkcipher walker
    to present the input in suitable chunks, we recognize that ChaCha is a
    streamcipher, and so we can simply deal with partial blocks by keeping a
    block of cipherstream on the stack and use crypto_xor() to mix it with
    the in/output.

    Finally, we omit the scatterwalk_and_copy() call if the last element of
    the scatterlist covers the MAC as well (which is the common case),
    avoiding the need to walk the scatterlist and kmap() the page twice.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Herbert Xu

    Ard Biesheuvel
     
  • This incorporates the chacha20poly1305 from the Zinc library, retaining
    the library interface, but replacing the implementation with calls into
    the code that already existed in the kernel's crypto API.

    Note that this library API does not implement RFC7539 fully, given that
    it is limited to 64-bit nonces. (The 96-bit nonce version that was part
    of the selftest only has been removed, along with the 96-bit nonce test
    vectors that only tested the selftest but not the actual library itself)

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Herbert Xu

    Ard Biesheuvel