linux/include/crypto
Eric Biggers de61d7ae5d crypto: chacha20-generic - add XChaCha20 support
Add support for the XChaCha20 stream cipher.  XChaCha20 is the
application of the XSalsa20 construction
(https://cr.yp.to/snuffle/xsalsa-20081128.pdf) to ChaCha20 rather than
to Salsa20.  XChaCha20 extends ChaCha20's nonce length from 64 bits (or
96 bits, depending on convention) to 192 bits, while provably retaining
ChaCha20's security.  XChaCha20 uses the ChaCha20 permutation to map the
key and first 128 nonce bits to a 256-bit subkey.  Then, it does the
ChaCha20 stream cipher with the subkey and remaining 64 bits of nonce.

We need XChaCha support in order to add support for the Adiantum
encryption mode.  Note that to meet our performance requirements, we
actually plan to primarily use the variant XChaCha12.  But we believe
it's wise to first add XChaCha20 as a baseline with a higher security
margin, in case there are any situations where it can be used.
Supporting both variants is straightforward.

Since XChaCha20's subkey differs for each request, XChaCha20 can't be a
template that wraps ChaCha20; that would require re-keying the
underlying ChaCha20 for every request, which wouldn't be thread-safe.
Instead, we make XChaCha20 its own top-level algorithm which calls the
ChaCha20 streaming implementation internally.

Similar to the existing ChaCha20 implementation, we define the IV to be
the nonce and stream position concatenated together.  This allows users
to seek to any position in the stream.

I considered splitting the code into separate chacha20-common, chacha20,
and xchacha20 modules, so that chacha20 and xchacha20 could be
enabled/disabled independently.  However, since nearly all the code is
shared anyway, I ultimately decided there would have been little benefit
to the added complexity of separate modules.

Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Martin Willi <martin@strongswan.org>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2018-11-20 14:26:55 +08:00
..
internal crypto: user - Implement a generic crypto statistics 2018-09-28 12:46:25 +08:00
acompress.h crypto: user - Implement a generic crypto statistics 2018-09-28 12:46:25 +08:00
aead.h crypto: user - Implement a generic crypto statistics 2018-09-28 12:46:25 +08:00
aes.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
akcipher.h crypto: user - Implement a generic crypto statistics 2018-09-28 12:46:25 +08:00
algapi.h crypto: api - Introduce notifier for new crypto algorithms 2018-09-04 11:37:04 +08:00
asym_tpm_subtype.h KEYS: asym_tpm: extract key size & public key [ver #2] 2018-10-26 09:30:46 +01:00
authenc.h
b128ops.h
blowfish.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cast5.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cast6.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cast_common.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cbc.h crypto: cbc - Remove VLA usage 2018-09-04 11:35:03 +08:00
chacha20.h crypto: chacha20-generic - add XChaCha20 support 2018-11-20 14:26:55 +08:00
cryptd.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
crypto_wq.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctr.h
des.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
dh.h crypto: dh - add public key verification test 2018-07-09 00:26:22 +08:00
drbg.h crypto: drbg - in-place cipher operation for CTR 2018-08-03 18:05:48 +08:00
ecdh.h crypto: ecdh - return unsigned value for crypto_ecdh_key_len() 2017-10-12 22:55:00 +08:00
engine.h crypto: engine - Permit to enqueue all async requests 2018-02-15 23:26:50 +08:00
gcm.h crypto: gcm - add GCM IV size constant 2017-09-22 17:43:08 +08:00
gf128mul.h crypto: gf128mul - The x8_ble multiplication functions 2017-11-03 21:50:43 +08:00
ghash.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
hash_info.h crypto: streebog - register Streebog in hash info for IMA 2018-11-16 14:09:40 +08:00
hash.h crypto: user - Implement a generic crypto statistics 2018-09-28 12:46:25 +08:00
hmac.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
if_alg.h Revert changes to convert to ->poll_mask() and aio IOCB_CMD_POLL 2018-06-28 10:40:47 -07:00
kpp.h crypto: user - Implement a generic crypto statistics 2018-09-28 12:46:25 +08:00
md5.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
morus640_glue.h crypto/morus(640,1280) - make crypto_...-algs static 2018-10-05 10:22:48 +08:00
morus1280_glue.h crypto/morus(640,1280) - make crypto_...-algs static 2018-10-05 10:22:48 +08:00
morus_common.h crypto: morus - Add generic MORUS AEAD implementations 2018-05-19 00:15:00 +08:00
null.h crypto: null - Remove VLA usage of skcipher 2018-09-28 12:46:08 +08:00
padlock.h
pcrypt.h
pkcs7.h PKCS#7: Make trust determination dependent on contents of trust keyring 2016-04-06 16:14:24 +01:00
poly1305.h crypto: poly1305 - remove ->setkey() method 2018-01-12 23:03:14 +11:00
public_key.h KEYS: Allow the public_key struct to hold a private key [ver #2] 2018-10-26 09:30:46 +01:00
rng.h crypto: user - Implement a generic crypto statistics 2018-09-28 12:46:25 +08:00
scatterwalk.h crypto: scatterwalk - remove scatterwalk_samebuf() 2018-08-03 18:06:04 +08:00
serpent.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sha1_base.h
sha3.h crypto: sha3-generic - export init/update/final routines 2018-01-26 01:10:34 +11:00
sha256_base.h crypto: sha256 - implement base layer for SHA-256 2015-04-10 21:39:39 +08:00
sha512_base.h crypto: sha512 - implement base layer for SHA-512 2015-04-10 21:39:39 +08:00
sha.h crypto: sha512_generic - add a sha384 0-length pre-computed hash 2018-06-22 23:03:05 +08:00
skcipher.h crypto: user - Implement a generic crypto statistics 2018-09-28 12:46:25 +08:00
sm3_base.h crypto: sm3 - add OSCCA SM3 secure hash 2017-09-22 17:43:07 +08:00
sm3.h crypto: sm3 - add OSCCA SM3 secure hash 2017-09-22 17:43:07 +08:00
sm4.h crypto: sm4 - export encrypt/decrypt routines to other drivers 2018-05-05 14:52:51 +08:00
streebog.h crypto: streebog - add Streebog hash function 2018-11-16 14:09:40 +08:00
twofish.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xts.h crypto: xts - remove xts_crypt() 2018-03-03 00:03:33 +08:00