userver: userver/crypto/hash.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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#endif
25
26/// @brief Calculates SHA-1, output format depends on encoding param
27/// @param data binary data to calculate hash from
28/// @param encoding result could be returned as binary string or encoded
29/// @throws CryptoException internal library exception
30std::string Sha1(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
31
32/// @brief Calculates SHA-224, output format depends on encoding param
33/// @param data binary data to calculate hash from
34/// @param encoding result could be returned as binary string or encoded
35/// @throws CryptoException internal library exception
36std::string Sha224(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
37
38/// @brief Calculates SHA-256, 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 Sha256(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
43
44/// @brief Calculates SHA-384, output format depends on encoding param
45/// @param data binary data to calculate hash from
46/// @param encoding result could be returned as binary string or encoded
47/// @throws CryptoException internal library exception
48std::string Sha384(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
49
50/// @brief Calculates SHA-512, output format depends on encoding param
51/// @param data binary data to calculate hash from
52/// @param encoding result could be returned as binary string or encoded
53/// @throws CryptoException internal library exception
54std::string Sha512(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
55
56/// @brief Calculates HMAC (using SHA-1 hash), encodes result with `encoding`
57/// algorithm
58/// @param key HMAC key
59/// @param message data to encode
60/// @param encoding result could be returned as binary string or encoded
61/// @throws CryptoException internal library exception
62std::string HmacSha1(std::string_view key, std::string_view message, OutputEncoding encoding = OutputEncoding::kHex);
63
64/// @brief Calculates HMAC (using SHA-256 hash), encodes result with `encoding`
65/// algorithm
66/// @param key HMAC key
67/// @param message data to encode
68/// @param encoding result could be returned as binary string or encoded
69/// @throws CryptoException internal library exception
70std::string HmacSha256(std::string_view key, std::string_view message, OutputEncoding encoding = OutputEncoding::kHex);
71
72/// @brief Calculates HMAC (using SHA-384 hash), encodes result with `encoding`
73/// algorithm
74/// @param key HMAC key
75/// @param message data to encode
76/// @param encoding result could be returned as binary string or encoded
77/// @throws CryptoException internal library exception
78std::string HmacSha384(std::string_view key, std::string_view message, OutputEncoding encoding = OutputEncoding::kHex);
79
80/// @brief Calculates HMAC (using SHA-512 hash), encodes result with `encoding`
81/// algorithm
82/// @param key HMAC key
83/// @param message data to encode
84/// @param encoding result could be returned as binary string or encoded
85/// @throws CryptoException internal library exception
86std::string HmacSha512(std::string_view key, std::string_view message, OutputEncoding encoding = OutputEncoding::kHex);
87
88/// Broken cryptographic hashes, must not be used except for compatibility
89namespace weak {
90
91/// @brief Calculates MD5, output format depends on encoding param
92/// @param data binary data to calculate hash from
93/// @param encoding result could be returned as binary string or encoded
94/// @throws CryptoException internal library exception
95std::string Md5(std::string_view data, OutputEncoding encoding = OutputEncoding::kHex);
96
97} // namespace weak
98} // namespace crypto::hash
99
100USERVER_NAMESPACE_END