userver: userver/crypto/hash.hpp Source File
Loading...
Searching...
No Matches
hash.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/crypto/hash.hpp
4/// @brief @copybrief crypto::hash
5/// @ingroup userver_universal
6
7#include <string_view>
8
9USERVER_NAMESPACE_BEGIN
10
11/// Cryptographic hashing
12namespace crypto::hash {
13
14enum class OutputEncoding { kBinary, kBase16, kHex = kBase16, kBase64 };
15
16enum class Pad { kWith, kWithout };
17
18#ifndef USERVER_NO_CRYPTOPP_BLAKE2
19/// @brief Calculates Blake2-128, output format depends on encoding param
20/// @param data binary data to calculate hash from
21/// @param encoding result could be returned as binary string or encoded
22/// @throws CryptoException internal library exception
23std::string Blake2b128(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
24
25/// @overload
26std::string Blake2b128(std::initializer_list<std::string_view> data, OutputEncoding encoding = OutputEncoding::kHex);
27#endif
28
29/// @brief Calculates SHA-1, output format depends on encoding param
30/// @param data binary data to calculate hash from
31/// @param encoding result could be returned as binary string or encoded
32/// @throws CryptoException internal library exception
33std::string Sha1(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
34
35/// @overload
36std::string Sha1(std::initializer_list<std::string_view> data, OutputEncoding encoding = OutputEncoding::kHex);
37
38/// @brief Calculates SHA-224, output format depends on encoding param
39/// @param data binary data to calculate hash from
40/// @param encoding result could be returned as binary string or encoded
41/// @throws CryptoException internal library exception
42std::string Sha224(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
43
44/// @overload
45std::string Sha224(std::initializer_list<std::string_view> data, OutputEncoding encoding = OutputEncoding::kHex);
46
47/// @brief Calculates SHA-256, output format depends on encoding param
48/// @param data binary data to calculate hash from
49/// @param encoding result could be returned as binary string or encoded
50/// @throws CryptoException internal library exception
51std::string Sha256(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
52
53/// @overload
54std::string Sha256(std::initializer_list<std::string_view> data, OutputEncoding encoding = OutputEncoding::kHex);
55
56/// @brief Calculates SHA-384, output format depends on encoding param
57/// @param data binary data to calculate hash from
58/// @param encoding result could be returned as binary string or encoded
59/// @throws CryptoException internal library exception
60std::string Sha384(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
61
62/// @overload
63std::string Sha384(std::initializer_list<std::string_view> data, OutputEncoding encoding = OutputEncoding::kHex);
64
65/// @brief Calculates SHA-512, output format depends on encoding param
66/// @param data binary data to calculate hash from
67/// @param encoding result could be returned as binary string or encoded
68/// @throws CryptoException internal library exception
69std::string Sha512(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
70
71/// @overload
72std::string Sha512(std::initializer_list<std::string_view> data, OutputEncoding encoding = OutputEncoding::kHex);
73
74/// @brief Calculates HMAC (using SHA-1 hash), encodes result with `encoding`
75/// algorithm
76/// @param key HMAC key
77/// @param message data to encode
78/// @param encoding result could be returned as binary string or encoded
79/// @throws CryptoException internal library exception
80std::string HmacSha1(std::string_view key, std::string_view message, OutputEncoding encoding = OutputEncoding::kHex);
81
82/// @overload
83std::string HmacSha1(
84 std::string_view key,
85 std::initializer_list<std::string_view> message,
86 OutputEncoding encoding = OutputEncoding::kHex
87);
88
89/// @brief Calculates HMAC (using SHA-256 hash), encodes result with `encoding`
90/// algorithm
91/// @param key HMAC key
92/// @param message data to encode
93/// @param encoding result could be returned as binary string or encoded
94/// @throws CryptoException internal library exception
95std::string HmacSha256(std::string_view key, std::string_view message, OutputEncoding encoding = OutputEncoding::kHex);
96
97/// @overload
98std::string HmacSha256(
99 std::string_view key,
100 std::initializer_list<std::string_view> message,
101 OutputEncoding encoding = OutputEncoding::kHex
102);
103
104/// @brief Calculates HMAC (using SHA-384 hash), encodes result with `encoding`
105/// algorithm
106/// @param key HMAC key
107/// @param message data to encode
108/// @param encoding result could be returned as binary string or encoded
109/// @throws CryptoException internal library exception
110std::string HmacSha384(std::string_view key, std::string_view message, OutputEncoding encoding = OutputEncoding::kHex);
111
112/// @overload
113std::string HmacSha384(
114 std::string_view key,
115 std::initializer_list<std::string_view> message,
116 OutputEncoding encoding = OutputEncoding::kHex
117);
118
119/// @brief Calculates HMAC (using SHA-512 hash), encodes result with `encoding`
120/// algorithm
121/// @param key HMAC key
122/// @param message data to encode
123/// @param encoding result could be returned as binary string or encoded
124/// @throws CryptoException internal library exception
125std::string HmacSha512(std::string_view key, std::string_view message, OutputEncoding encoding = OutputEncoding::kHex);
126
127/// @overload
128std::string HmacSha512(
129 std::string_view key,
130 std::initializer_list<std::string_view> message,
131 OutputEncoding encoding = OutputEncoding::kHex
132);
133
134/// Broken cryptographic hashes, must not be used except for compatibility
135namespace weak {
136
137/// @brief Calculates MD5, output format depends on encoding param
138/// @param data binary data to calculate hash from
139/// @param encoding result could be returned as binary string or encoded
140/// @throws CryptoException internal library exception
141std::string Md5(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
142
143/// @overload
144std::string Md5(std::initializer_list<std::string_view> data, OutputEncoding encoding = OutputEncoding::kHex);
145
146} // namespace weak
147} // namespace crypto::hash
148
149USERVER_NAMESPACE_END