Bitcoin Core 28.99.0
P2P Digital Currency
|
#include <crypto/hex_base.h>
#include <span.h>
#include <util/string.h>
#include <array>
#include <bit>
#include <charconv>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <optional>
#include <string>
#include <string_view>
#include <system_error>
#include <type_traits>
#include <vector>
Go to the source code of this file.
Classes | |
struct | util::detail::Hex< N > |
Namespaces | |
namespace | util |
namespace | util::detail |
namespace | util::hex_literals |
""_hex is a compile-time user-defined literal returning a std::array<std::byte> , equivalent to ParseHex(). | |
Enumerations | |
enum | SafeChars { SAFE_CHARS_DEFAULT , SAFE_CHARS_UA_COMMENT , SAFE_CHARS_FILENAME , SAFE_CHARS_URI } |
Utilities for converting data from/to strings. More... | |
enum class | ByteUnit : uint64_t { NOOP = 1ULL , k = 1000ULL , K = 1024ULL , m = 1'000'000ULL , M = 1ULL << 20 , g = 1'000'000'000ULL , G = 1ULL << 30 , t = 1'000'000'000'000ULL , T = 1ULL << 40 } |
Used by ParseByteUnits() Lowercase base 1000 Uppercase base 1024. More... | |
Functions | |
std::string | SanitizeString (std::string_view str, int rule=SAFE_CHARS_DEFAULT) |
Remove unsafe chars. More... | |
template<typename Byte = std::byte> | |
std::optional< std::vector< Byte > > | TryParseHex (std::string_view str) |
Parse the hex string into bytes (uint8_t or std::byte). More... | |
template<typename Byte = uint8_t> | |
std::vector< Byte > | ParseHex (std::string_view hex_str) |
Like TryParseHex, but returns an empty vector on invalid input. More... | |
bool | IsHex (std::string_view str) |
std::optional< std::vector< unsigned char > > | DecodeBase64 (std::string_view str) |
std::string | EncodeBase64 (Span< const unsigned char > input) |
std::string | EncodeBase64 (Span< const std::byte > input) |
std::string | EncodeBase64 (std::string_view str) |
std::optional< std::vector< unsigned char > > | DecodeBase32 (std::string_view str) |
std::string | EncodeBase32 (Span< const unsigned char > input, bool pad=true) |
Base32 encode. More... | |
std::string | EncodeBase32 (std::string_view str, bool pad=true) |
Base32 encode. More... | |
bool | SplitHostPort (std::string_view in, uint16_t &portOut, std::string &hostOut) |
Splits socket address string into host string and port value. More... | |
template<typename T > | |
T | LocaleIndependentAtoi (std::string_view str) |
constexpr bool | IsDigit (char c) |
Tests if the given character is a decimal digit. More... | |
constexpr bool | IsSpace (char c) noexcept |
Tests if the given character is a whitespace character. More... | |
template<typename T > | |
std::optional< T > | ToIntegral (std::string_view str) |
Convert string to integral type T. More... | |
bool | ParseInt32 (std::string_view str, int32_t *out) |
Convert string to signed 32-bit integer with strict parse error feedback. More... | |
bool | ParseInt64 (std::string_view str, int64_t *out) |
Convert string to signed 64-bit integer with strict parse error feedback. More... | |
bool | ParseUInt8 (std::string_view str, uint8_t *out) |
Convert decimal string to unsigned 8-bit integer with strict parse error feedback. More... | |
bool | ParseUInt16 (std::string_view str, uint16_t *out) |
Convert decimal string to unsigned 16-bit integer with strict parse error feedback. More... | |
bool | ParseUInt32 (std::string_view str, uint32_t *out) |
Convert decimal string to unsigned 32-bit integer with strict parse error feedback. More... | |
bool | ParseUInt64 (std::string_view str, uint64_t *out) |
Convert decimal string to unsigned 64-bit integer with strict parse error feedback. More... | |
std::string | FormatParagraph (std::string_view in, size_t width=79, size_t indent=0) |
Format a paragraph of text to a fixed width, adding spaces for indentation to any added line. More... | |
template<typename T > | |
bool | TimingResistantEqual (const T &a, const T &b) |
Timing-attack-resistant comparison. More... | |
bool | ParseFixedPoint (std::string_view, int decimals, int64_t *amount_out) |
Parse number as fixed point according to JSON number syntax. More... | |
template<int frombits, int tobits, bool pad, typename O , typename It , typename I = IntIdentity> | |
bool | ConvertBits (O outfn, It it, It end, I infn={}) |
Convert from one power-of-2 number base to another. More... | |
constexpr char | ToLower (char c) |
Converts the given character to its lowercase equivalent. More... | |
std::string | ToLower (std::string_view str) |
Returns the lowercase equivalent of the given string. More... | |
constexpr char | ToUpper (char c) |
Converts the given character to its uppercase equivalent. More... | |
std::string | ToUpper (std::string_view str) |
Returns the uppercase equivalent of the given string. More... | |
std::string | Capitalize (std::string str) |
Capitalizes the first character of the given string. More... | |
std::optional< uint64_t > | ParseByteUnits (std::string_view str, ByteUnit default_multiplier) |
Parse a string with suffix unit [k|K|m|M|g|G|t|T]. More... | |
consteval uint8_t | util::ConstevalHexDigit (const char c) |
consteval version of HexDigit() without the lookup table. More... | |
template<util::detail::Hex str> | |
constexpr auto | util::hex_literals::operator""_hex () |
template<util::detail::Hex str> | |
constexpr auto | util::hex_literals::operator""_hex_u8 () |
template<util::detail::Hex str> | |
constexpr auto | util::hex_literals::operator""_hex_v () |
template<util::detail::Hex str> | |
auto | util::hex_literals::operator""_hex_v_u8 () |
|
strong |
Used by ParseByteUnits() Lowercase base 1000 Uppercase base 1024.
Enumerator | |
---|---|
NOOP | |
k | |
K | |
m | |
M | |
g | |
G | |
t | |
T |
Definition at line 43 of file strencodings.h.
enum SafeChars |
Utilities for converting data from/to strings.
Used by SanitizeString()
Enumerator | |
---|---|
SAFE_CHARS_DEFAULT | The full set of allowed chars. |
SAFE_CHARS_UA_COMMENT | BIP-0014 subset. |
SAFE_CHARS_FILENAME | Chars allowed in filenames. |
SAFE_CHARS_URI | Chars allowed in URIs (RFC 3986) |
Definition at line 30 of file strencodings.h.
std::string Capitalize | ( | std::string | str | ) |
Capitalizes the first character of the given string.
This function is locale independent. It only converts lowercase characters in the standard 7-bit ASCII range. This is a feature, not a limitation.
[in] | str | the string to capitalize. |
Definition at line 431 of file strencodings.cpp.
bool ConvertBits | ( | O | outfn, |
It | it, | ||
It | end, | ||
I | infn = {} |
||
) |
Convert from one power-of-2 number base to another.
Definition at line 270 of file strencodings.h.
std::optional< std::vector< unsigned char > > DecodeBase32 | ( | std::string_view | str | ) |
std::optional< std::vector< unsigned char > > DecodeBase64 | ( | std::string_view | str | ) |
std::string EncodeBase32 | ( | Span< const unsigned char > | input, |
bool | pad = true |
||
) |
Base32 encode.
If pad
is true, then the output will be padded with '=' so that its length is a multiple of 8.
Definition at line 145 of file strencodings.cpp.
std::string EncodeBase32 | ( | std::string_view | str, |
bool | pad = true |
||
) |
Base32 encode.
If pad
is true, then the output will be padded with '=' so that its length is a multiple of 8.
Definition at line 160 of file strencodings.cpp.
|
inline |
std::string EncodeBase64 | ( | Span< const unsigned char > | input | ) |
Definition at line 99 of file strencodings.cpp.
|
inline |
std::string FormatParagraph | ( | std::string_view | in, |
size_t | width = 79 , |
||
size_t | indent = 0 |
||
) |
Format a paragraph of text to a fixed width, adding spaces for indentation to any added line.
Definition at line 254 of file strencodings.cpp.
|
constexpr |
Tests if the given character is a decimal digit.
[in] | c | character to test |
Definition at line 150 of file strencodings.h.
bool IsHex | ( | std::string_view | str | ) |
Definition at line 41 of file strencodings.cpp.
|
inlineconstexprnoexcept |
Tests if the given character is a whitespace character.
The whitespace characters are: space, form-feed ('\f'), newline ('
'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v').
This function is locale independent. Under the C locale this function gives the same result as std::isspace.
[in] | c | character to test |
Definition at line 166 of file strencodings.h.
T LocaleIndependentAtoi | ( | std::string_view | str | ) |
std::optional< uint64_t > ParseByteUnits | ( | std::string_view | str, |
ByteUnit | default_multiplier | ||
) |
Parse a string with suffix unit [k|K|m|M|g|G|t|T].
Must be a whole integer, fractions not allowed (0.5t), no whitespace or +- Lowercase units are 1000 base. Uppercase units are 1024 base. Examples: 2m,27M,19g,41T
[in] | str | the string to convert into bytes |
[in] | default_multiplier | if no unit is found in str use this unit |
Definition at line 438 of file strencodings.cpp.
bool ParseFixedPoint | ( | std::string_view | val, |
int | decimals, | ||
int64_t * | amount_out | ||
) |
Parse number as fixed point according to JSON number syntax.
Definition at line 323 of file strencodings.cpp.
std::vector< Byte > ParseHex | ( | std::string_view | hex_str | ) |
Like TryParseHex, but returns an empty vector on invalid input.
Definition at line 68 of file strencodings.h.
bool ParseInt32 | ( | std::string_view | str, |
int32_t * | out | ||
) |
Convert string to signed 32-bit integer with strict parse error feedback.
Definition at line 224 of file strencodings.cpp.
bool ParseInt64 | ( | std::string_view | str, |
int64_t * | out | ||
) |
Convert string to signed 64-bit integer with strict parse error feedback.
Definition at line 229 of file strencodings.cpp.
bool ParseUInt16 | ( | std::string_view | str, |
uint16_t * | out | ||
) |
Convert decimal string to unsigned 16-bit integer with strict parse error feedback.
Definition at line 239 of file strencodings.cpp.
bool ParseUInt32 | ( | std::string_view | str, |
uint32_t * | out | ||
) |
Convert decimal string to unsigned 32-bit integer with strict parse error feedback.
Definition at line 244 of file strencodings.cpp.
bool ParseUInt64 | ( | std::string_view | str, |
uint64_t * | out | ||
) |
Convert decimal string to unsigned 64-bit integer with strict parse error feedback.
Definition at line 249 of file strencodings.cpp.
bool ParseUInt8 | ( | std::string_view | str, |
uint8_t * | out | ||
) |
Convert decimal string to unsigned 8-bit integer with strict parse error feedback.
Definition at line 234 of file strencodings.cpp.
std::string SanitizeString | ( | std::string_view | str, |
int | rule = SAFE_CHARS_DEFAULT |
||
) |
Remove unsafe chars.
Safe chars chosen to allow simple messages/URLs/email addresses, but avoid anything even possibly remotely dangerous like & or >
[in] | str | The string to sanitize |
[in] | rule | The set of safe chars to choose (default: least restrictive) |
Definition at line 30 of file strencodings.cpp.
bool SplitHostPort | ( | std::string_view | in, |
uint16_t & | portOut, | ||
std::string & | hostOut | ||
) |
Splits socket address string into host string and port value.
Validates port value.
[in] | in | The socket address string to split. |
[out] | portOut | Port-portion of the input, if found and parsable. |
[out] | hostOut | Host-portion of the input, if found. |
Definition at line 72 of file strencodings.cpp.
bool TimingResistantEqual | ( | const T & | a, |
const T & | b | ||
) |
Timing-attack-resistant comparison.
Takes time proportional to length of first argument.
Definition at line 244 of file strencodings.h.
std::optional< T > ToIntegral | ( | std::string_view | str | ) |
Convert string to integral type T.
Leading whitespace, a leading +, or any trailing character fail the parsing. The required format expressed as regex is -?[0-9]+
. The minus sign is only permitted for signed integer types.
Definition at line 179 of file strencodings.h.
|
constexpr |
Converts the given character to its lowercase equivalent.
This function is locale independent. It only converts uppercase characters in the standard 7-bit ASCII range. This is a feature, not a limitation.
[in] | c | the character to convert to lowercase. |
Definition at line 304 of file strencodings.h.
std::string ToLower | ( | std::string_view | str | ) |
Returns the lowercase equivalent of the given string.
This function is locale independent. It only converts uppercase characters in the standard 7-bit ASCII range. This is a feature, not a limitation.
[in] | str | the string to convert to lowercase. |
Definition at line 415 of file strencodings.cpp.
|
constexpr |
Converts the given character to its uppercase equivalent.
This function is locale independent. It only converts lowercase characters in the standard 7-bit ASCII range. This is a feature, not a limitation.
[in] | c | the character to convert to uppercase. |
Definition at line 330 of file strencodings.h.
std::string ToUpper | ( | std::string_view | str | ) |
Returns the uppercase equivalent of the given string.
This function is locale independent. It only converts lowercase characters in the standard 7-bit ASCII range. This is a feature, not a limitation.
[in] | str | the string to convert to uppercase. |
Definition at line 423 of file strencodings.cpp.
std::optional< std::vector< Byte > > TryParseHex | ( | std::string_view | str | ) |
Parse the hex string into bytes (uint8_t or std::byte).
Ignores whitespace. Returns nullopt on invalid input.
Definition at line 50 of file strencodings.cpp.