mirror of https://github.com/dnomd343/md5sum.git
Dnomd343
8 months ago
6 changed files with 81 additions and 42 deletions
@ -0,0 +1,48 @@ |
|||
#pragma once |
|||
|
|||
#include "sine.inc" |
|||
|
|||
namespace md5::value { |
|||
|
|||
/// Hexadecimal character mapping table. |
|||
constexpr char HexTable[] = { |
|||
'0','1','2','3','4','5','6','7', |
|||
'8','9','a','b','c','d','e','f', |
|||
}; |
|||
|
|||
/// MD5 fixed constants in little endian. |
|||
constexpr uint32_t kA = 0x67452301; |
|||
constexpr uint32_t kB = 0xefcdab89; |
|||
constexpr uint32_t kC = 0x98badcfe; |
|||
constexpr uint32_t kD = 0x10325476; |
|||
|
|||
// In order to be compatible with C++17, the `consteval` keyword cannot be used |
|||
// here. The MD5 T-table constants will be macro-expanded and calculated. |
|||
|
|||
constexpr uint32_t TCal(const int i) { |
|||
const auto val = math::sin(i + 1); |
|||
return static_cast<uint32_t>(math::abs(val) * 0x100000000); |
|||
} |
|||
|
|||
#define MD5_TT \ |
|||
MD5_T(00) MD5_T(01) MD5_T(02) MD5_T(03) MD5_T(04) MD5_T(05) MD5_T(06) MD5_T(07) \ |
|||
MD5_T(08) MD5_T(09) MD5_T(0a) MD5_T(0b) MD5_T(0c) MD5_T(0d) MD5_T(0e) MD5_T(0f) \ |
|||
MD5_T(10) MD5_T(11) MD5_T(12) MD5_T(13) MD5_T(14) MD5_T(15) MD5_T(16) MD5_T(17) \ |
|||
MD5_T(18) MD5_T(19) MD5_T(1a) MD5_T(1b) MD5_T(1c) MD5_T(1d) MD5_T(1e) MD5_T(1f) \ |
|||
MD5_T(20) MD5_T(21) MD5_T(22) MD5_T(23) MD5_T(24) MD5_T(25) MD5_T(26) MD5_T(27) \ |
|||
MD5_T(28) MD5_T(29) MD5_T(2a) MD5_T(2b) MD5_T(2c) MD5_T(2d) MD5_T(2e) MD5_T(2f) \ |
|||
MD5_T(30) MD5_T(31) MD5_T(32) MD5_T(33) MD5_T(34) MD5_T(35) MD5_T(36) MD5_T(37) \ |
|||
MD5_T(38) MD5_T(39) MD5_T(3a) MD5_T(3b) MD5_T(3c) MD5_T(3d) MD5_T(3e) MD5_T(3f) |
|||
|
|||
#define MD5_T(x) constexpr auto kT_##x = TCal(0x##x); |
|||
MD5_TT |
|||
#undef MD5_T |
|||
|
|||
#define MD5_T(x) kT_##x, |
|||
/// MD5 T-table constant array. |
|||
constexpr std::array kT = {MD5_TT}; |
|||
#undef MD5_T |
|||
|
|||
#undef MD5_TT |
|||
|
|||
} // namespace md5::value |
Loading…
Reference in new issue