lhashes  1.0.0
C++ hashes library
lhashes_common.h
Go to the documentation of this file.
1 /*
2  * ======================================================================================
3  * __ ____ __ __ ____ ___
4  * ( ) (_ _)( \/ )( ___)/ __)
5  * )(__ _)(_ ) ( )__) \__ \
6  * (____)(____)(_/\/\_)(____)(___/
7  *
8  * This file is part of the Limes open source library and is licensed under the terms of the GNU Public License.
9  *
10  * Commercial licenses are available; contact the maintainers at ben.the.vining@gmail.com to inquire for details.
11  *
12  * ======================================================================================
13  */
14 
15 // IWYU pragma: private
16 // IWYU pragma: friend lhashes_*
17 
18 #pragma once
19 
20 #include "lhashes/lhashes_Export.h"
21 #include <cstdint>
22 
35 {
36 
38 
43 LHASH_NO_EXPORT void pack32 (const unsigned char* str, std::uint32_t& x) noexcept; // NOLINT
44 
45 LHASH_NO_EXPORT void pack64 (const unsigned char* str, std::uint64_t& x) noexcept; // NOLINT
46 
47 template <typename T>
48 LHASH_NO_EXPORT void unpack32 (T x, unsigned char* str) noexcept; // NOLINT
49 
50 LHASH_NO_EXPORT void unpack64 (std::uint64_t x, unsigned char* str) noexcept; // NOLINT
51 
52 template <typename T>
53 LHASH_NO_EXPORT T ch (T x, T y, T z) noexcept; // NOLINT
54 
55 template <typename T>
56 LHASH_NO_EXPORT T maj (T x, T y, T z) noexcept; // NOLINT
57 
58 LHASH_NO_EXPORT std::uint32_t sha256_F4 (std::uint32_t x) noexcept; // NOLINT
59 
60 LHASH_NO_EXPORT std::uint32_t sha256_F3 (std::uint32_t x) noexcept; // NOLINT
61 
62 LHASH_NO_EXPORT std::uint32_t sha256_F2 (std::uint32_t x) noexcept; // NOLINT
63 
64 LHASH_NO_EXPORT std::uint32_t sha256_F1 (std::uint32_t x) noexcept; // NOLINT
65 
66 LHASH_NO_EXPORT std::uint64_t sha512_F4 (std::uint64_t x) noexcept; // NOLINT
67 
68 LHASH_NO_EXPORT std::uint64_t sha512_F3 (std::uint64_t x) noexcept; // NOLINT
69 
70 LHASH_NO_EXPORT std::uint64_t sha512_F2 (std::uint64_t x) noexcept; // NOLINT
71 
72 LHASH_NO_EXPORT std::uint64_t sha512_F1 (std::uint64_t x) noexcept; // NOLINT
73 
74 LHASH_NO_EXPORT inline constexpr std::uint32_t sha256_k[64] = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, // NOLINT
75  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
76  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
77  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
78  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
79  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
80  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
81  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
82  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
83  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
84  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
85  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
86  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
87  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
88  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
89  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 };
90 
91 LHASH_NO_EXPORT inline constexpr std::uint64_t sha512_k[80] = { 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, // NOLINT
92  0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
93  0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
94  0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
95  0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
96  0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
97  0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
98  0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
99  0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
100  0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
101  0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
102  0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
103  0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
104  0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
105  0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
106  0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
107  0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
108  0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
109  0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
110  0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
111  0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
112  0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
113  0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
114  0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
115  0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
116  0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
117  0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
118  0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
119  0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
120  0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
121  0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
122  0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
123  0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
124  0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
125  0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
126  0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
127  0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
128  0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
129  0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
130  0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL };
131 
135 
136 } // namespace limes::hash::util
This namespace contains implementation details for the hash functions.