1#ifndef LIBFILEZILLA_ENCODE_HEADER
2#define LIBFILEZILLA_ENCODE_HEADER
25template<
typename Char>
28 if (c >=
'a' && c <=
'f') {
31 if (c >=
'A' && c <=
'F') {
34 else if (c >=
'0' && c <=
'9') {
41template<
typename OutString,
typename String>
42OutString hex_decode_impl(String
const& in)
45 if (!(in.size() % 2)) {
46 ret.reserve(in.size() / 2);
47 for (
size_t i = 0; i < in.size(); i += 2) {
50 if (high == -1 || low == -1) {
53 ret.push_back(
static_cast<typename OutString::value_type
>((high << 4) + low));
60template<
typename OutString = std::vector<u
int8_t>>
61OutString hex_decode(std::string_view
const& in)
63 return hex_decode_impl<OutString>(in);
66template<
typename OutString = std::vector<u
int8_t>>
67OutString hex_decode(std::wstring_view
const& in)
69 return hex_decode_impl<OutString>(in);
78template<
typename Char =
char,
bool Lowercase = true>
82 return static_cast<Char
>((Lowercase ?
'a' :
'A') + d - 10);
85 return static_cast<Char
>(
'0' + d);
89template<
typename String,
typename InString,
bool Lowercase = true>
90String hex_encode(InString
const& data)
92 static_assert(
sizeof(
typename InString::value_type) == 1,
"Input must be a container of 8 bit values");
94 ret.reserve(data.size() * 2);
95 for (
auto const& c : data) {
116std::string FZ_PUBLIC_SYMBOL
base64_encode(std::vector<uint8_t>
const& in,
base64_type type = base64_type::standard,
bool pad =
true);
132std::vector<uint8_t> FZ_PUBLIC_SYMBOL
base64_decode(std::string_view
const& in);
133std::vector<uint8_t> FZ_PUBLIC_SYMBOL
base64_decode(std::wstring_view
const& in);
135std::string FZ_PUBLIC_SYMBOL base64_decode_s(std::string_view
const& in);
136std::string FZ_PUBLIC_SYMBOL base64_decode_s(std::wstring_view
const& in);
137std::string FZ_PUBLIC_SYMBOL base64_decode_s(
fz::buffer const& in);
154std::string FZ_PUBLIC_SYMBOL
base32_encode(std::vector<uint8_t>
const& in,
base32_type type = base32_type::standard,
bool pad =
true);
163std::vector<uint8_t> FZ_PUBLIC_SYMBOL
base32_decode(std::wstring_view
const& in,
base32_type type = base32_type::standard);
165std::string FZ_PUBLIC_SYMBOL base32_decode_s(std::string_view
const& in,
base32_type type = base32_type::standard);
166std::string FZ_PUBLIC_SYMBOL base32_decode_s(std::wstring_view
const& in,
base32_type type = base32_type::standard);
167std::string FZ_PUBLIC_SYMBOL base32_decode_s(
fz::buffer const& in,
base32_type type = base32_type::standard);
177std::string FZ_PUBLIC_SYMBOL
percent_encode(std::string_view
const& s,
bool keep_slashes =
false);
178std::string FZ_PUBLIC_SYMBOL
percent_encode(std::wstring_view
const& s,
bool keep_slashes =
false);
185std::wstring FZ_PUBLIC_SYMBOL
percent_encode_w(std::wstring_view
const& s,
bool keep_slashes =
false);
192std::vector<uint8_t> FZ_PUBLIC_SYMBOL
percent_decode(std::string_view
const& s,
bool allow_embedded_null =
false,
bool plus_is_space =
false);
193std::vector<uint8_t> FZ_PUBLIC_SYMBOL
percent_decode(std::wstring_view
const& s,
bool allow_embedded_null =
false,
bool plus_is_space =
false);
194std::string FZ_PUBLIC_SYMBOL percent_decode_s(std::string_view
const& s,
bool allow_embedded_null =
false,
bool plus_is_space =
false);
195std::string FZ_PUBLIC_SYMBOL percent_decode_s(std::wstring_view
const& s,
bool allow_embedded_null =
false,
bool plus_is_space =
false);
The buffer class is a simple buffer where data can be appended at the end and consumed at the front....
Definition buffer.hpp:28
Small class to return filesystem errors.
Definition fsresult.hpp:26
Sets some global macros and further includes string.hpp.
The namespace used by libfilezilla.
Definition apply.hpp:17
std::vector< uint8_t > base32_decode(std::string_view const &in, base32_type type=base32_type::standard)
Decodes base32, ignores whitespace. Returns empty string on invalid input.
void base64_encode_append(std::string &result, std::string_view const &in, base64_type type=base64_type::standard, bool pad=true)
base64-encodes input and appends it to result.
std::vector< uint8_t > base64_decode(std::string_view const &in)
Decodes base64, ignores whitespace. Returns empty string on invalid input.
std::wstring percent_encode_w(std::wstring_view const &s, bool keep_slashes=false)
Percent-encodes wide-character. Non-ASCII characters are converted to UTF-8 before they are encoded.
std::string base64_encode(std::string_view const &in, base64_type type=base64_type::standard, bool pad=true)
Encodes raw input string to base64.
std::string base32_encode(std::string_view const &in, base32_type type=base32_type::standard, bool pad=true)
Encodes raw input string to base32.
Char int_to_hex_char(int d)
Converts an integer to the corresponding lowercase hex digit.
Definition encode.hpp:79
base32_type
Alphabet variations for base32.
Definition encode.hpp:146
std::string percent_encode(std::string_view const &s, bool keep_slashes=false)
Percent-encodes string.
base64_type
Alphabet variations for base64.
Definition encode.hpp:109
std::vector< uint8_t > percent_decode(std::string_view const &s, bool allow_embedded_null=false, bool plus_is_space=false)
Percent-decodes string.
int hex_char_to_int(Char c)
Converts a hex digit to decimal int.
Definition encode.hpp:26