Commit 4db4ad26 authored by Martin Willi's avatar Martin Willi Committed by Herbert Xu

crypto: chacha20poly1305 - Add an IPsec variant for RFC7539 AEAD

draft-ietf-ipsecme-chacha20-poly1305 defines the use of ChaCha20/Poly1305 in
ESP. It uses additional four byte key material as a salt, which is then used
with an 8 byte IV to form the ChaCha20 nonce as defined in the RFC7539.
Signed-off-by: default avatarMartin Willi <martin@strongswan.org>
Acked-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent af2b76b5
...@@ -627,6 +627,11 @@ static struct crypto_instance *rfc7539_alloc(struct rtattr **tb) ...@@ -627,6 +627,11 @@ static struct crypto_instance *rfc7539_alloc(struct rtattr **tb)
return chachapoly_alloc(tb, "rfc7539", 12); return chachapoly_alloc(tb, "rfc7539", 12);
} }
static struct crypto_instance *rfc7539esp_alloc(struct rtattr **tb)
{
return chachapoly_alloc(tb, "rfc7539esp", 8);
}
static void chachapoly_free(struct crypto_instance *inst) static void chachapoly_free(struct crypto_instance *inst)
{ {
struct chachapoly_instance_ctx *ctx = crypto_instance_ctx(inst); struct chachapoly_instance_ctx *ctx = crypto_instance_ctx(inst);
...@@ -643,13 +648,31 @@ static struct crypto_template rfc7539_tmpl = { ...@@ -643,13 +648,31 @@ static struct crypto_template rfc7539_tmpl = {
.module = THIS_MODULE, .module = THIS_MODULE,
}; };
static struct crypto_template rfc7539esp_tmpl = {
.name = "rfc7539esp",
.alloc = rfc7539esp_alloc,
.free = chachapoly_free,
.module = THIS_MODULE,
};
static int __init chacha20poly1305_module_init(void) static int __init chacha20poly1305_module_init(void)
{ {
return crypto_register_template(&rfc7539_tmpl); int err;
err = crypto_register_template(&rfc7539_tmpl);
if (err)
return err;
err = crypto_register_template(&rfc7539esp_tmpl);
if (err)
crypto_unregister_template(&rfc7539_tmpl);
return err;
} }
static void __exit chacha20poly1305_module_exit(void) static void __exit chacha20poly1305_module_exit(void)
{ {
crypto_unregister_template(&rfc7539esp_tmpl);
crypto_unregister_template(&rfc7539_tmpl); crypto_unregister_template(&rfc7539_tmpl);
} }
...@@ -661,3 +684,4 @@ MODULE_AUTHOR("Martin Willi <martin@strongswan.org>"); ...@@ -661,3 +684,4 @@ MODULE_AUTHOR("Martin Willi <martin@strongswan.org>");
MODULE_DESCRIPTION("ChaCha20-Poly1305 AEAD"); MODULE_DESCRIPTION("ChaCha20-Poly1305 AEAD");
MODULE_ALIAS_CRYPTO("chacha20poly1305"); MODULE_ALIAS_CRYPTO("chacha20poly1305");
MODULE_ALIAS_CRYPTO("rfc7539"); MODULE_ALIAS_CRYPTO("rfc7539");
MODULE_ALIAS_CRYPTO("rfc7539esp");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment