11#include <botan/types.h>
12#include <botan/internal/bit_ops.h>
13#include <botan/internal/rotate.h>
17inline uint32_t
P0(uint32_t X) {
21inline void R1(uint32_t A,
33 const uint32_t SS1 =
rotl<7>(A12 + E + TJ);
34 const uint32_t TT1 = (A ^ B ^ C) + D + (SS1 ^ A12) + (Wi ^ Wj);
35 const uint32_t TT2 = (E ^ F ^ G) + H + SS1 + Wi;
43inline void R2(uint32_t A,
55 const uint32_t SS1 =
rotl<7>(A12 + E + TJ);
56 const uint32_t TT1 =
majority(A, B, C) + D + (SS1 ^ A12) + (Wi ^ Wj);
57 const uint32_t TT2 =
choose(E, F, G) + H + SS1 + Wi;
65inline uint32_t
P1(uint32_t X) {
69inline uint32_t
SM3_E(uint32_t W0, uint32_t W7, uint32_t W13, uint32_t W3, uint32_t W10) {
BOTAN_FORCE_INLINE constexpr T majority(T a, T b, T c)
uint32_t SM3_E(uint32_t W0, uint32_t W7, uint32_t W13, uint32_t W3, uint32_t W10)
void R2(uint32_t A, uint32_t &B, uint32_t C, uint32_t &D, uint32_t E, uint32_t &F, uint32_t G, uint32_t &H, uint32_t TJ, uint32_t Wi, uint32_t Wj)
BOTAN_FORCE_INLINE constexpr T rotl(T input)
void R1(uint32_t A, uint32_t &B, uint32_t C, uint32_t &D, uint32_t E, uint32_t &F, uint32_t G, uint32_t &H, uint32_t TJ, uint32_t Wi, uint32_t Wj)
BOTAN_FORCE_INLINE constexpr T choose(T mask, T a, T b)