summaryrefslogtreecommitdiff
path: root/src/ref/multiplications.h
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@airbus.com>2019-07-04 17:13:57 +0200
committerKévin Le Gouguec <kevin.legouguec@airbus.com>2019-07-04 17:13:57 +0200
commit3d1334d6a9eb091b457f068033071f97d8758941 (patch)
treece7a28187e7c407f6fa56bf4ff4ed29245f8b484 /src/ref/multiplications.h
parent6589f3ef20f8f93168be49135764764cd0c02a23 (diff)
parentc670bbe78ea9bc18c9772ba5804f610937560d5f (diff)
downloadlilliput-ae-implem-3d1334d6a9eb091b457f068033071f97d8758941.tar.xz
Merge branch 'fix-tweakey-m4'
Diffstat (limited to 'src/ref/multiplications.h')
-rw-r--r--src/ref/multiplications.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/ref/multiplications.h b/src/ref/multiplications.h
index 4de1848..c0645b9 100644
--- a/src/ref/multiplications.h
+++ b/src/ref/multiplications.h
@@ -71,6 +71,26 @@ static void _multiply_M3(const uint8_t x[LANE_BYTES], uint8_t y[LANE_BYTES])
y[0] = x[5];
}
+static void _multiply_M4(const uint8_t x[LANE_BYTES], uint8_t y[LANE_BYTES])
+{
+ uint8_t a_5 = x[5]<<3 ^ x[4];
+ uint8_t a_4 = x[4]>>3 ^ x[3];
+ uint8_t b_5 = a_5<<3 ^ a_4;
+ uint8_t b_4 = a_4>>3 ^ x[2];
+
+ uint8_t c_4 = b_4>>3 ^ x[6]<<2 ^ x[1];
+ uint8_t c_5 = b_5<<3 ^ b_4;
+
+ y[7] = b_5;
+ y[6] = c_5;
+ y[5] = c_5<<3 ^ c_4;
+ y[4] = c_4>>3 ^ x[5]<<2 ^ x[0];
+ y[3] = a_5<<2 ^ x[7];
+ y[2] = b_5<<2 ^ x[6];
+ y[1] = x[5];
+ y[0] = a_5;
+}
+
static void _multiply_MR(const uint8_t x[LANE_BYTES], uint8_t y[LANE_BYTES])
{
y[0] = x[1];