aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-08-15 17:32:40 +0200
committerThomas Voss <mail@thomasvoss.com> 2024-08-15 17:32:40 +0200
commit512be590e9e18f37d2e285d267ffbc16fdd8a694 (patch)
treed7037b5aae794e807823fe0522a3cb2491a867f1
parentc0e5d9280dd156631bd398463dbb6a65aff37d19 (diff)
Refactor
-rw-r--r--c/sha1/sha1-x86.c137
1 files changed, 26 insertions, 111 deletions
diff --git a/c/sha1/sha1-x86.c b/c/sha1/sha1-x86.c
index b7cf000..2fcf7d8 100644
--- a/c/sha1/sha1-x86.c
+++ b/c/sha1/sha1-x86.c
@@ -71,6 +71,16 @@ sha1end(sha1_t *s, uint8_t dgst[SHA1DGSTSZ])
((uint32_t *)dgst)[i] = htobe32(s->dgst[i]);
}
+#define R(mi, mj, mk, ml, ei, ej, f) \
+ do { \
+ ei = _mm_sha1nexte_epu32(ei, mi); \
+ ej = abcd; \
+ mj = _mm_sha1msg2_epu32(mj, mi); \
+ abcd = _mm_sha1rnds4_epu32(abcd, ei, f); \
+ ml = _mm_sha1msg1_epu32(ml, mi); \
+ mk = _mm_xor_si128(mk, mi); \
+ } while (0)
+
static void
sha1hashblk(sha1_t *s, const uint8_t *blk)
{
@@ -115,118 +125,21 @@ sha1hashblk(sha1_t *s, const uint8_t *blk)
msg1 = _mm_sha1msg1_epu32(msg1, msg2);
msg0 = _mm_xor_si128(msg0, msg2);
- /* Rounds 12–15 */
msg3 = _mm_shuffle_epi8(_mm_loadu_si128(blkx + 3), bswapbmsk);
- e1 = _mm_sha1nexte_epu32(e1, msg3);
- e0 = abcd;
- msg0 = _mm_sha1msg2_epu32(msg0, msg3);
- abcd = _mm_sha1rnds4_epu32(abcd, e1, 0);
- msg2 = _mm_sha1msg1_epu32(msg2, msg3);
- msg1 = _mm_xor_si128(msg1, msg3);
-
- /* Rounds 16–19 */
- e0 = _mm_sha1nexte_epu32(e0, msg0);
- e1 = abcd;
- msg1 = _mm_sha1msg2_epu32(msg1, msg0);
- abcd = _mm_sha1rnds4_epu32(abcd, e0, 0);
- msg3 = _mm_sha1msg1_epu32(msg3, msg0);
- msg2 = _mm_xor_si128(msg2, msg0);
-
- /* Rounds 20–23 */
- e1 = _mm_sha1nexte_epu32(e1, msg1);
- e0 = abcd;
- msg2 = _mm_sha1msg2_epu32(msg2, msg1);
- abcd = _mm_sha1rnds4_epu32(abcd, e1, 1);
- msg0 = _mm_sha1msg1_epu32(msg0, msg1);
- msg3 = _mm_xor_si128(msg3, msg1);
-
- /* Rounds 24–27 */
- e0 = _mm_sha1nexte_epu32(e0, msg2);
- e1 = abcd;
- msg3 = _mm_sha1msg2_epu32(msg3, msg2);
- abcd = _mm_sha1rnds4_epu32(abcd, e0, 1);
- msg1 = _mm_sha1msg1_epu32(msg1, msg2);
- msg0 = _mm_xor_si128(msg0, msg2);
-
- /* Rounds 28–31 */
- e1 = _mm_sha1nexte_epu32(e1, msg3);
- e0 = abcd;
- msg0 = _mm_sha1msg2_epu32(msg0, msg3);
- abcd = _mm_sha1rnds4_epu32(abcd, e1, 1);
- msg2 = _mm_sha1msg1_epu32(msg2, msg3);
- msg1 = _mm_xor_si128(msg1, msg3);
-
- /* Rounds 32–35 */
- e0 = _mm_sha1nexte_epu32(e0, msg0);
- e1 = abcd;
- msg1 = _mm_sha1msg2_epu32(msg1, msg0);
- abcd = _mm_sha1rnds4_epu32(abcd, e0, 1);
- msg3 = _mm_sha1msg1_epu32(msg3, msg0);
- msg2 = _mm_xor_si128(msg2, msg0);
-
- /* Rounds 36–39 */
- e1 = _mm_sha1nexte_epu32(e1, msg1);
- e0 = abcd;
- msg2 = _mm_sha1msg2_epu32(msg2, msg1);
- abcd = _mm_sha1rnds4_epu32(abcd, e1, 1);
- msg0 = _mm_sha1msg1_epu32(msg0, msg1);
- msg3 = _mm_xor_si128(msg3, msg1);
-
- /* Rounds 40–43 */
- e0 = _mm_sha1nexte_epu32(e0, msg2);
- e1 = abcd;
- msg3 = _mm_sha1msg2_epu32(msg3, msg2);
- abcd = _mm_sha1rnds4_epu32(abcd, e0, 2);
- msg1 = _mm_sha1msg1_epu32(msg1, msg2);
- msg0 = _mm_xor_si128(msg0, msg2);
-
- /* Rounds 44–47 */
- e1 = _mm_sha1nexte_epu32(e1, msg3);
- e0 = abcd;
- msg0 = _mm_sha1msg2_epu32(msg0, msg3);
- abcd = _mm_sha1rnds4_epu32(abcd, e1, 2);
- msg2 = _mm_sha1msg1_epu32(msg2, msg3);
- msg1 = _mm_xor_si128(msg1, msg3);
-
- /* Rounds 48–51 */
- e0 = _mm_sha1nexte_epu32(e0, msg0);
- e1 = abcd;
- msg1 = _mm_sha1msg2_epu32(msg1, msg0);
- abcd = _mm_sha1rnds4_epu32(abcd, e0, 2);
- msg3 = _mm_sha1msg1_epu32(msg3, msg0);
- msg2 = _mm_xor_si128(msg2, msg0);
-
- /* Rounds 52–55 */
- e1 = _mm_sha1nexte_epu32(e1, msg1);
- e0 = abcd;
- msg2 = _mm_sha1msg2_epu32(msg2, msg1);
- abcd = _mm_sha1rnds4_epu32(abcd, e1, 2);
- msg0 = _mm_sha1msg1_epu32(msg0, msg1);
- msg3 = _mm_xor_si128(msg3, msg1);
-
- /* Rounds 56–59 */
- e0 = _mm_sha1nexte_epu32(e0, msg2);
- e1 = abcd;
- msg3 = _mm_sha1msg2_epu32(msg3, msg2);
- abcd = _mm_sha1rnds4_epu32(abcd, e0, 2);
- msg1 = _mm_sha1msg1_epu32(msg1, msg2);
- msg0 = _mm_xor_si128(msg0, msg2);
-
- /* Rounds 60–63 */
- e1 = _mm_sha1nexte_epu32(e1, msg3);
- e0 = abcd;
- msg0 = _mm_sha1msg2_epu32(msg0, msg3);
- abcd = _mm_sha1rnds4_epu32(abcd, e1, 3);
- msg2 = _mm_sha1msg1_epu32(msg2, msg3);
- msg1 = _mm_xor_si128(msg1, msg3);
-
- /* Rounds 64–67 */
- e0 = _mm_sha1nexte_epu32(e0, msg0);
- e1 = abcd;
- msg1 = _mm_sha1msg2_epu32(msg1, msg0);
- abcd = _mm_sha1rnds4_epu32(abcd, e0, 3);
- msg3 = _mm_sha1msg1_epu32(msg3, msg0);
- msg2 = _mm_xor_si128(msg2, msg0);
+ R(msg3, msg0, msg1, msg2, e1, e0, 0); /* Rounds 12–15 */
+ R(msg0, msg1, msg2, msg3, e0, e1, 0); /* Rounds 16–19 */
+ R(msg1, msg2, msg3, msg0, e1, e0, 1); /* Rounds 20–23 */
+ R(msg2, msg3, msg0, msg1, e0, e1, 1); /* Rounds 24–27 */
+ R(msg3, msg0, msg1, msg2, e1, e0, 1); /* Rounds 28–31 */
+ R(msg0, msg1, msg2, msg3, e0, e1, 1); /* Rounds 32–35 */
+ R(msg1, msg2, msg3, msg0, e1, e0, 1); /* Rounds 36–39 */
+ R(msg2, msg3, msg0, msg1, e0, e1, 2); /* Rounds 40–43 */
+ R(msg3, msg0, msg1, msg2, e1, e0, 2); /* Rounds 44–47 */
+ R(msg0, msg1, msg2, msg3, e0, e1, 2); /* Rounds 48–51 */
+ R(msg1, msg2, msg3, msg0, e1, e0, 2); /* Rounds 52–55 */
+ R(msg2, msg3, msg0, msg1, e0, e1, 2); /* Rounds 56–59 */
+ R(msg3, msg0, msg1, msg2, e1, e0, 3); /* Rounds 60–63 */
+ R(msg0, msg1, msg2, msg3, e0, e1, 3); /* Rounds 64–67 */
/* Rounds 68–71 */
e1 = _mm_sha1nexte_epu32(e1, msg1);
@@ -253,3 +166,5 @@ sha1hashblk(sha1_t *s, const uint8_t *blk)
s->dgst[4] = _mm_extract_epi32(e0, 3);
#undef bswapdmsk
}
+
+#undef R