SHAKE: a custom domain byte may have its MSB set, so xor the padding

This commit is contained in:
Frank Denis
2025-12-30 00:25:39 +01:00
parent 8c84e36514
commit 32f787a79b
4 changed files with 4 additions and 4 deletions
@@ -65,7 +65,7 @@ shake128_finalize(shake128_state_internal *state)
/* Apply padding: domain byte at current position, 0x80 at last byte */
if (state->offset == SHAKE128_RATE - 1) {
/* Special case: padding fits in one byte */
pad = state->domain | 0x80;
pad = (unsigned char) (state->domain ^ 0x80);
crypto_core_keccak1600_xor_bytes(state->state, &pad, state->offset, 1);
} else {
/* Normal case: domain and 0x80 at different positions */
@@ -65,7 +65,7 @@ shake256_finalize(shake256_state_internal *state)
/* Apply padding: domain byte at current position, 0x80 at last byte */
if (state->offset == SHAKE256_RATE - 1) {
/* Special case: padding fits in one byte */
pad = state->domain | 0x80;
pad = (unsigned char) (state->domain ^ 0x80);
crypto_core_keccak1600_xor_bytes(state->state, &pad, state->offset, 1);
} else {
/* Normal case: domain and 0x80 at different positions */
@@ -65,7 +65,7 @@ turboshake128_finalize(turboshake128_state_internal *state)
/* Apply padding: domain byte at current position, 0x80 at last byte */
if (state->offset == TURBOSHAKE128_RATE - 1) {
/* Special case: padding fits in one byte */
pad = state->domain | 0x80;
pad = (unsigned char) (state->domain ^ 0x80);
crypto_core_keccak1600_xor_bytes(state->state, &pad, state->offset, 1);
} else {
/* Normal case: domain and 0x80 at different positions */
@@ -65,7 +65,7 @@ turboshake256_finalize(turboshake256_state_internal *state)
/* Apply padding: domain byte at current position, 0x80 at last byte */
if (state->offset == TURBOSHAKE256_RATE - 1) {
/* Special case: padding fits in one byte */
pad = state->domain | 0x80;
pad = (unsigned char) (state->domain ^ 0x80);
crypto_core_keccak1600_xor_bytes(state->state, &pad, state->offset, 1);
} else {
/* Normal case: domain and 0x80 at different positions */