From af531ef71e68e98d1eee4fdefb30b3f2e8cd83c4 Mon Sep 17 00:00:00 2001 From: Kévin Le Gouguec Date: Mon, 4 Feb 2019 13:53:03 +0100 Subject: Retouches sur M₃ et M₄ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ça me chiffonne de mettre deux instructions. En même temps, le cast me chiffonne aussi, donc je reviendrai peut-être sur cette décision… "x & 0x1f" a été remplacé par "(x<<3) >> 3" parce que c'est ce qu'un lecteur qui déroulerait l'expression de M₃ trouverait, et aussi parce que les compilateurs sont de toute façon suffisamment malins pour traduire le tout en un AND. --- src/add_developedtweakey/tweakey.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/add_developedtweakey/tweakey.c') diff --git a/src/add_developedtweakey/tweakey.c b/src/add_developedtweakey/tweakey.c index 605098b..0588c1b 100644 --- a/src/add_developedtweakey/tweakey.c +++ b/src/add_developedtweakey/tweakey.c @@ -55,15 +55,12 @@ static uint8_t _M2(uint8_t x) static uint8_t _M3(uint8_t x) { - return x & 0x1f; + return (uint8_t)(x<<3) >> 3; } static uint8_t _M4(uint8_t x) { - /* (x<<2)>>3 would keep bit x6 due to integer promotion. - * Side-step this by writing each shift on its own statement. */ - x <<= 2; - return x>>3; + return (uint8_t)(x<<2) >> 3; } static void _multiply_M(const uint8_t X[LANE_BYTES], uint8_t Y[LANE_BYTES]) -- cgit v1.2.3