Master Core  v0.0.9 - 2abfd2849db8ba7a83957c64eb976b406713c123
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
base58.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2013 The Bitcoin developers
3 // Distributed under the MIT/X11 software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 //
7 // Why base-58 instead of standard base-64 encoding?
8 // - Don't want 0OIl characters that look the same in some fonts and
9 // could be used to create visually identical looking account numbers.
10 // - A string with non-alphanumeric characters is not as easily accepted as an account number.
11 // - E-mail usually won't line-break if there's no punctuation to break at.
12 // - Double-clicking selects the whole number as one word if it's all alphanumeric.
13 //
14 #ifndef BITCOIN_BASE58_H
15 #define BITCOIN_BASE58_H
16 
17 #include "chainparams.h"
18 #include "key.h"
19 #include "script.h"
20 
21 #include <string>
22 #include <vector>
23 
28 std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend);
29 
33 std::string EncodeBase58(const std::vector<unsigned char>& vch);
34 
40 bool DecodeBase58(const char* psz, std::vector<unsigned char>& vchRet);
41 
46 bool DecodeBase58(const std::string& str, std::vector<unsigned char>& vchRet);
47 
51 std::string EncodeBase58Check(const std::vector<unsigned char>& vchIn);
52 
57 inline bool DecodeBase58Check(const char* psz, std::vector<unsigned char>& vchRet);
58 
63 inline bool DecodeBase58Check(const std::string& str, std::vector<unsigned char>& vchRet);
64 
69 {
70 protected:
71  // the version byte(s)
72  std::vector<unsigned char> vchVersion;
73 
74  // the actually encoded data
75  typedef std::vector<unsigned char, zero_after_free_allocator<unsigned char> > vector_uchar;
76  vector_uchar vchData;
77 
78  CBase58Data();
79  void SetData(const std::vector<unsigned char> &vchVersionIn, const void* pdata, size_t nSize);
80  void SetData(const std::vector<unsigned char> &vchVersionIn, const unsigned char *pbegin, const unsigned char *pend);
81 
82 public:
83  bool SetString(const char* psz, unsigned int nVersionBytes = 1);
84  bool SetString(const std::string& str);
85  std::string ToString() const;
86  int CompareTo(const CBase58Data& b58) const;
87 
88  bool operator==(const CBase58Data& b58) const { return CompareTo(b58) == 0; }
89  bool operator<=(const CBase58Data& b58) const { return CompareTo(b58) <= 0; }
90  bool operator>=(const CBase58Data& b58) const { return CompareTo(b58) >= 0; }
91  bool operator< (const CBase58Data& b58) const { return CompareTo(b58) < 0; }
92  bool operator> (const CBase58Data& b58) const { return CompareTo(b58) > 0; }
93 };
94 
101 class CBitcoinAddress : public CBase58Data {
102 public:
103  bool Set(const CKeyID &id);
104  bool Set(const CScriptID &id);
105  bool Set(const CTxDestination &dest);
106  bool IsValid() const;
107 
109  CBitcoinAddress(const CTxDestination &dest) { Set(dest); }
110  CBitcoinAddress(const std::string& strAddress) { SetString(strAddress); }
111  CBitcoinAddress(const char* pszAddress) { SetString(pszAddress); }
112 
113  CTxDestination Get() const;
114  bool GetKeyID(CKeyID &keyID) const;
115  bool IsScript() const;
116 };
117 
122 {
123 public:
124  void SetKey(const CKey& vchSecret);
125  CKey GetKey();
126  bool IsValid() const;
127  bool SetString(const char* pszSecret);
128  bool SetString(const std::string& strSecret);
129 
130  CBitcoinSecret(const CKey& vchSecret) { SetKey(vchSecret); }
132 };
133 
134 template<typename K, int Size, CChainParams::Base58Type Type> class CBitcoinExtKeyBase : public CBase58Data
135 {
136 public:
137  void SetKey(const K &key) {
138  unsigned char vch[Size];
139  key.Encode(vch);
140  SetData(Params().Base58Prefix(Type), vch, vch+Size);
141  }
142 
143  K GetKey() {
144  K ret;
145  ret.Decode(&vchData[0], &vchData[Size]);
146  return ret;
147  }
148 
149  CBitcoinExtKeyBase(const K &key) {
150  SetKey(key);
151  }
152 
154 };
155 
158 
159 #endif // BITCOIN_BASE58_H
bool IsValid() const
Definition: base58.cpp:215
CBitcoinSecret()
Definition: base58.h:131
void SetKey(const CKey &vchSecret)
Definition: base58.cpp:248
bool IsScript() const
Definition: base58.cpp:244
CKey GetKey()
Definition: base58.cpp:255
CBitcoinAddress(const CTxDestination &dest)
Definition: base58.h:109
bool DecodeBase58(const char *psz, std::vector< unsigned char > &vchRet)
Decode a base58-encoded string (psz) into a byte vector (vchRet).
Definition: base58.cpp:21
vector_uchar vchData
Definition: base58.h:76
CBitcoinExtKeyBase< CExtKey, 74, CChainParams::EXT_SECRET_KEY > CBitcoinExtKey
Definition: base58.h:156
bool IsValid() const
Definition: base58.cpp:261
base58-encoded Bitcoin addresses.
Definition: base58.h:101
bool DecodeBase58Check(const char *psz, std::vector< unsigned char > &vchRet)
Decode a base58-encoded string (psz) that includes a checksum into a byte vector (vchRet), return true if decoding is successful.
Definition: base58.cpp:116
void SetData(const std::vector< unsigned char > &vchVersionIn, const void *pdata, size_t nSize)
Definition: base58.cpp:143
void SetKey(const K &key)
Definition: base58.h:137
CTxDestination Get() const
Definition: base58.cpp:222
bool GetKeyID(CKeyID &keyID) const
Definition: base58.cpp:235
bool SetString(const char *pszSecret)
Definition: base58.cpp:267
std::vector< unsigned char, zero_after_free_allocator< unsigned char > > vector_uchar
Definition: base58.h:75
Base class for all base58-encoded data.
Definition: base58.h:68
bool Set(const CKeyID &id)
Definition: base58.cpp:201
A base58-encoded secret key.
Definition: base58.h:121
bool operator==(const CBase58Data &b58) const
Definition: base58.h:88
std::string ToString() const
Definition: base58.cpp:174
bool operator>(const CBase58Data &b58) const
Definition: base58.h:92
bool SetString(const char *psz, unsigned int nVersionBytes=1)
Definition: base58.cpp:154
std::string EncodeBase58Check(const std::vector< unsigned char > &vchIn)
Encode a byte vector into a base58-encoded string, including checksum.
Definition: base58.cpp:108
CBitcoinSecret(const CKey &vchSecret)
Definition: base58.h:130
const CChainParams & Params()
Return the currently selected parameters.
A reference to a CKey: the Hash160 of its serialized public key.
Definition: key.h:26
std::string EncodeBase58(const unsigned char *pbegin, const unsigned char *pend)
Encode a byte sequence as a base58-encoded string.
Definition: base58.cpp:66
CBitcoinExtKeyBase(const K &key)
Definition: base58.h:149
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: key.h:34
bool operator<(const CBase58Data &b58) const
Definition: base58.h:91
boost::variant< CNoDestination, CKeyID, CScriptID > CTxDestination
A txout script template with a specific destination.
Definition: script.h:218
An encapsulated private key.
Definition: key.h:179
CBitcoinAddress(const char *pszAddress)
Definition: base58.h:111
CBitcoinExtKeyBase< CExtPubKey, 74, CChainParams::EXT_PUBLIC_KEY > CBitcoinExtPubKey
Definition: base58.h:157
CBitcoinAddress(const std::string &strAddress)
Definition: base58.h:110
std::vector< unsigned char > vchVersion
Definition: base58.h:72
bool operator<=(const CBase58Data &b58) const
Definition: base58.h:89
int CompareTo(const CBase58Data &b58) const
Definition: base58.cpp:180
bool operator>=(const CBase58Data &b58) const
Definition: base58.h:90