30 #include <iota/constants.hpp> 31 #include <iota/crypto/i_pow.hpp> 32 #include <iota/types/trits.hpp> 43 static constexpr uint64_t hBits = 0xFFFFFFFFFFFFFFFF;
44 static constexpr uint64_t lBits = 0x0000000000000000;
46 static constexpr uint64_t low0 = 0xDB6DB6DB6DB6DB6D;
47 static constexpr uint64_t high0 = 0xB6DB6DB6DB6DB6DB;
48 static constexpr uint64_t low1 = 0xF1F8FC7E3F1F8FC7;
49 static constexpr uint64_t high1 = 0x8FC7E3F1F8FC7E3F;
50 static constexpr uint64_t low2 = 0x7FFFE00FFFFC01FF;
51 static constexpr uint64_t high2 = 0xFFC01FFFF803FFFF;
52 static constexpr uint64_t low3 = 0xFFC0000007FFFFFF;
53 static constexpr uint64_t high3 = 0x003FFFFFFFFFFFFF;
55 static constexpr uint64_t nonceOffset = TritHashLength - TritNonceLength;
56 static constexpr uint64_t nonceInitStart = nonceOffset + 4;
57 static constexpr uint64_t nonceIncrementStart = nonceInitStart + TritNonceLength / 3;
59 static constexpr
int stateSize = PowStateSize;
60 static constexpr
int numberOfRounds = PowNumberOfRounds;
70 virtual ~Pow() =
default;
82 Types::Trytes
operator()(
const Types::Trytes& trytes,
int minWeightMagnitude,
83 int threads = 0)
override;
86 static inline void initialize(uint64_t* stateLow, uint64_t* stateHigh,
87 const IOTA::Types::Trits& trits);
88 static inline void transform(uint64_t* stateLow, uint64_t* stateHigh, uint64_t* scratchpadLow,
89 uint64_t* scratchpadHigh);
90 static inline void increment(uint64_t* stateLow, uint64_t* stateHigh,
int fromIndex,
int toIndex);
91 inline Types::Trits loop(uint64_t* stateLow, uint64_t* stateHigh,
int minWeightMagnitude);
Types::Trytes operator()(const Types::Trytes &trytes, int minWeightMagnitude, int threads=0) override