52 lines
1.6 KiB
Diff
52 lines
1.6 KiB
Diff
|
From 64837b2e433e2b99b893683949bad3a99acab38f Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
|
||
|
Date: Wed, 10 Feb 2021 11:22:23 +0100
|
||
|
Subject: [PATCH] Fix chacha counter update for _4core variants.
|
||
|
|
||
|
---
|
||
|
ChangeLog | 4 ++++
|
||
|
chacha-crypt.c | 10 +++++++---
|
||
|
2 files changed, 11 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/chacha-crypt.c b/chacha-crypt.c
|
||
|
index 081ebcf4..1fdfc813 100644
|
||
|
--- a/chacha-crypt.c
|
||
|
+++ b/chacha-crypt.c
|
||
|
@@ -80,13 +80,16 @@ _nettle_chacha_crypt_4core(struct chacha_ctx *ctx,
|
||
|
while (length > 2*CHACHA_BLOCK_SIZE)
|
||
|
{
|
||
|
_nettle_chacha_4core (x, ctx->state, CHACHA_ROUNDS);
|
||
|
- ctx->state[12] += 4;
|
||
|
- ctx->state[13] += (ctx->state[12] < 4);
|
||
|
if (length <= 4*CHACHA_BLOCK_SIZE)
|
||
|
{
|
||
|
+ uint32_t incr = 3 + (length > 3*CHACHA_BLOCK_SIZE);
|
||
|
+ ctx->state[12] += incr;
|
||
|
+ ctx->state[13] += (ctx->state[12] < incr);
|
||
|
memxor3 (dst, src, x, length);
|
||
|
return;
|
||
|
}
|
||
|
+ ctx->state[12] += 4;
|
||
|
+ ctx->state[13] += (ctx->state[12] < 4);
|
||
|
memxor3 (dst, src, x, 4*CHACHA_BLOCK_SIZE);
|
||
|
|
||
|
length -= 4*CHACHA_BLOCK_SIZE;
|
||
|
@@ -200,12 +203,13 @@ _nettle_chacha_crypt32_4core(struct chacha_ctx *ctx,
|
||
|
while (length > 2*CHACHA_BLOCK_SIZE)
|
||
|
{
|
||
|
_nettle_chacha_4core32 (x, ctx->state, CHACHA_ROUNDS);
|
||
|
- ctx->state[12] += 4;
|
||
|
if (length <= 4*CHACHA_BLOCK_SIZE)
|
||
|
{
|
||
|
+ ctx->state[12] += 3 + (length > 3*CHACHA_BLOCK_SIZE);
|
||
|
memxor3 (dst, src, x, length);
|
||
|
return;
|
||
|
}
|
||
|
+ ctx->state[12] += 4;
|
||
|
memxor3 (dst, src, x, 4*CHACHA_BLOCK_SIZE);
|
||
|
|
||
|
length -= 4*CHACHA_BLOCK_SIZE;
|
||
|
--
|
||
|
2.29.2
|
||
|
|