PRCYCoin  2.0.0.7rc1
P2P Digital Currency
utilstrencodings.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2014 The Bitcoin developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
9 #ifndef BITCOIN_UTILSTRENCODINGS_H
10 #define BITCOIN_UTILSTRENCODINGS_H
11 
12 #include "allocators.h"
13 #include <stdint.h>
14 #include <string>
15 #include <vector>
16 
17 #define BEGIN(a) ((char*)&(a))
18 #define END(a) ((char*)&((&(a))[1]))
19 #define UBEGIN(a) ((unsigned char*)&(a))
20 #define UEND(a) ((unsigned char*)&((&(a))[1]))
21 #define ARRAYLEN(array) (sizeof(array) / sizeof((array)[0]))
22 
24 #define PAIRTYPE(t1, t2) std::pair<t1, t2>
25 
28 {
32 };
33 
41 std::string SanitizeString(const std::string& str, int rule = SAFE_CHARS_DEFAULT);
42 std::vector<unsigned char> ParseHex(const char* psz);
43 std::vector<unsigned char> ParseHex(const std::string& str);
44 signed char HexDigit(char c);
45 bool IsHex(const std::string& str);
46 std::vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid = NULL);
47 std::string DecodeBase64(const std::string& str);
48 std::string EncodeBase64(const unsigned char* pch, size_t len);
49 std::string EncodeBase64(const std::string& str);
52 std::vector<unsigned char> DecodeBase32(const char* p, bool* pfInvalid = NULL);
53 std::string DecodeBase32(const std::string& str);
54 std::string EncodeBase32(const unsigned char* pch, size_t len);
55 std::string EncodeBase32(const std::string& str);
56 
57 std::string i64tostr(int64_t n);
58 std::string itostr(int n);
59 int64_t atoi64(const char* psz);
60 int64_t atoi64(const std::string& str);
61 int atoi(const std::string& str);
62 
68 bool ParseInt32(const std::string& str, int32_t *out);
69 
75 bool ParseInt64(const std::string& str, int64_t *out);
76 
82 bool ParseDouble(const std::string& str, double *out);
83 
84 template <typename T>
85 std::string HexStr(const T itbegin, const T itend, bool fSpaces = false)
86 {
87  std::string rv;
88  static const char hexmap[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
89  '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
90  rv.reserve((itend - itbegin) * 3);
91  for (T it = itbegin; it < itend; ++it) {
92  unsigned char val = (unsigned char)(*it);
93  if (fSpaces && it != itbegin)
94  rv.push_back(' ');
95  rv.push_back(hexmap[val >> 4]);
96  rv.push_back(hexmap[val & 15]);
97  }
98 
99  return rv;
100 }
101 
102 template <typename T>
103 inline std::string HexStr(const T& vch, bool fSpaces = false)
104 {
105  return HexStr(vch.begin(), vch.end(), fSpaces);
106 }
107 
109 inline std::string ReverseEndianString(std::string in)
110 {
111  std::string out = "";
112  unsigned int s = in.size();
113  for (unsigned int i = 0; i < s; i += 2) {
114  out += in.substr(s - i - 2, 2);
115  }
116 
117  return out;
118 }
119 
124 std::string FormatParagraph(const std::string in, size_t width = 79, size_t indent = 0);
125 
131 template <typename T>
132 bool TimingResistantEqual(const T& a, const T& b)
133 {
134  if (b.size() == 0) return a.size() == 0;
135  size_t accumulator = a.size() ^ b.size();
136  for (size_t i = 0; i < a.size(); i++)
137  accumulator |= a[i] ^ b[i % b.size()];
138  return accumulator == 0;
139 }
140 
141 #endif // BITCOIN_UTILSTRENCODINGS_H
ReverseEndianString
std::string ReverseEndianString(std::string in)
Reverse the endianess of a string.
Definition: utilstrencodings.h:109
DecodeBase64
std::vector< unsigned char > DecodeBase64(const char *p, bool *pfInvalid=NULL)
Definition: utilstrencodings.cpp:150
DecodeBase32
std::vector< unsigned char > DecodeBase32(const char *p, bool *pfInvalid=NULL)
Definition: utilstrencodings.cpp:352
ParseDouble
bool ParseDouble(const std::string &str, double *out)
Convert string to double with strict parse error feedback.
Definition: utilstrencodings.cpp:513
b
void const uint64_t * b
Definition: field_5x52_asm_impl.h:10
IsHex
bool IsHex(const std::string &str)
Definition: utilstrencodings.cpp:68
ParseInt64
bool ParseInt64(const std::string &str, int64_t *out)
Convert string to signed 64-bit integer with strict parse error feedback.
Definition: utilstrencodings.cpp:498
atoi
int atoi(const std::string &str)
Definition: utilstrencodings.cpp:587
EncodeBase32
std::string EncodeBase32(const unsigned char *pch, size_t len)
Definition: utilstrencodings.cpp:291
TimingResistantEqual
bool TimingResistantEqual(const T &a, const T &b)
Timing-attack-resistant comparison.
Definition: utilstrencodings.h:132
SAFE_CHARS_DEFAULT
@ SAFE_CHARS_DEFAULT
The full set of allowed chars.
Definition: utilstrencodings.h:29
EncodeBase64Secure
SecureString EncodeBase64Secure(const SecureString &input)
Definition: utilstrencodings.cpp:265
SecureString
std::basic_string< char, std::char_traits< char >, secure_allocator< char > > SecureString
Definition: allocators.h:262
SafeChars
SafeChars
Used by SanitizeString()
Definition: utilstrencodings.h:27
HexStr
std::string HexStr(const T itbegin, const T itend, bool fSpaces=false)
Definition: utilstrencodings.h:85
allocators.h
SanitizeString
std::string SanitizeString(const std::string &str, int rule=SAFE_CHARS_DEFAULT)
Remove unsafe chars.
Definition: utilstrencodings.cpp:32
ParseInt32
bool ParseInt32(const std::string &str, int32_t *out)
Convert string to signed 32-bit integer with strict parse error feedback.
Definition: utilstrencodings.cpp:482
DecodeBase64Secure
SecureString DecodeBase64Secure(const SecureString &input)
Definition: utilstrencodings.cpp:236
ParseHex
std::vector< unsigned char > ParseHex(const char *psz)
Definition: utilstrencodings.cpp:77
SAFE_CHARS_FILENAME
@ SAFE_CHARS_FILENAME
Chars allowed in filenames.
Definition: utilstrencodings.h:31
FormatParagraph
std::string FormatParagraph(const std::string 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: utilstrencodings.cpp:527
HexDigit
signed char HexDigit(char c)
Definition: utilstrencodings.cpp:63
SAFE_CHARS_UA_COMMENT
@ SAFE_CHARS_UA_COMMENT
BIP-0014 subset.
Definition: utilstrencodings.h:30
atoi64
int64_t atoi64(const char *psz)
Definition: utilstrencodings.cpp:569
i64tostr
std::string i64tostr(int64_t n)
Definition: utilstrencodings.cpp:559
EncodeBase64
std::string EncodeBase64(const unsigned char *pch, size_t len)
Definition: utilstrencodings.cpp:102
itostr
std::string itostr(int n)
Definition: utilstrencodings.cpp:564