diff --git a/wolfcrypt/src/port/arm/armv8-chacha.c b/wolfcrypt/src/port/arm/armv8-chacha.c index 05cb30b00..11473d47e 100644 --- a/wolfcrypt/src/port/arm/armv8-chacha.c +++ b/wolfcrypt/src/port/arm/armv8-chacha.c @@ -2839,10 +2839,10 @@ static void wc_Chacha_encrypt_bytes(ChaCha* ctx, const byte* m, byte* c, } if (bytes > 0) { wc_Chacha_encrypt_64(ctx->X, m, c, bytes, (byte*)ctx->over); - if (bytes > 64) + if (bytes > CHACHA_CHUNK_BYTES) ctx->X[CHACHA_IV_BYTES] = PLUSONE(ctx->X[CHACHA_IV_BYTES]); - else - ctx->left = CHACHA_CHUNK_BYTES - bytes; + ctx->left = CHACHA_CHUNK_BYTES - (bytes & (CHACHA_CHUNK_BYTES - 1)); + ctx->left &= CHACHA_CHUNK_BYTES - 1; ctx->X[CHACHA_IV_BYTES] = PLUSONE(ctx->X[CHACHA_IV_BYTES]); } } diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 2c8e5c5c3..22c610792 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -4857,7 +4857,7 @@ static int chacha_test(void) } /* Streaming test */ - for (i = 1; i <= (int)CHACHA_CHUNK_BYTES; i++) { + for (i = 1; i <= (int)CHACHA_CHUNK_BYTES + 1; i++) { int j, rem; ret = wc_Chacha_SetKey(&enc, keys[0], keySz);