59 std::span<const uint8_t> input_span,
61 const uint8_t* input = input_span.data();
68 const auto ABCD_SAVE = ABCD;
69 const auto E0_SAVE = E0;
77 ABCD =
SIMD_4x32(_mm_sha1rnds4_epu32(ABCD.
raw(), _mm_add_epi32(E0.
raw(), W0.raw()), 0));
80 ABCD =
SIMD_4x32(_mm_sha1rnds4_epu32(ABCD.
raw(), _mm_sha1nexte_epu32(E1.raw(), W1.raw()), 0));
82 sha1_x86_rnds8<0>(ABCD, E0, W2, W3);
84 W0 = sha1_x86_msg1(W0, W1);
85 W1 = sha1_x86_msg1(W1, W2);
88 sha1_x86_next_msg(W3, W0, W1, W2);
89 sha1_x86_next_msg(W0, W1, W2, W3);
90 sha1_x86_rnds8<0, 1>(ABCD, E0, W0, W1);
92 sha1_x86_next_msg(W1, W2, W3, W0);
93 sha1_x86_next_msg(W2, W3, W0, W1);
94 sha1_x86_rnds8<1>(ABCD, E0, W2, W3);
96 sha1_x86_next_msg(W3, W0, W1, W2);
97 sha1_x86_next_msg(W0, W1, W2, W3);
98 sha1_x86_rnds8<1>(ABCD, E0, W0, W1);
100 sha1_x86_next_msg(W1, W2, W3, W0);
101 sha1_x86_next_msg(W2, W3, W0, W1);
102 sha1_x86_rnds8<2>(ABCD, E0, W2, W3);
104 sha1_x86_next_msg(W3, W0, W1, W2);
105 sha1_x86_next_msg(W0, W1, W2, W3);
106 sha1_x86_rnds8<2>(ABCD, E0, W0, W1);
108 sha1_x86_next_msg(W1, W2, W3, W0);
109 sha1_x86_next_msg(W2, W3, W0, W1);
110 sha1_x86_rnds8<2, 3>(ABCD, E0, W2, W3);
112 sha1_x86_next_msg(W3, W0, W1, W2);
113 sha1_x86_next_msg(W0, W1, W2, W3);
114 sha1_x86_rnds8<3>(ABCD, E0, W0, W1);
116 sha1_x86_next_msg(W1, W2, W3, W0);
117 sha1_x86_next_msg(W2, W3, W0, W1);
118 sha1_x86_rnds8<3>(ABCD, E0, W2, W3);
121 E0 = sha1_x86_nexte(E0, E0_SAVE);
127 rev_words(ABCD).store_le(&digest[0]);
128 digest[4] = _mm_extract_epi32(E0.
raw(), 3);