Dash Core  0.12.2.1
P2P Digital Currency
base58.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2015 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
14 #ifndef BITCOIN_BASE58_H
15 #define BITCOIN_BASE58_H
16 
17 #include "chainparams.h"
18 #include "key.h"
19 #include "pubkey.h"
20 #include "script/script.h"
21 #include "script/standard.h"
23 
24 #include <string>
25 #include <vector>
26 
31 std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend);
32 
36 std::string EncodeBase58(const std::vector<unsigned char>& vch);
37 
43 bool DecodeBase58(const char* psz, std::vector<unsigned char>& vchRet);
44 
49 bool DecodeBase58(const std::string& str, std::vector<unsigned char>& vchRet);
50 
54 std::string EncodeBase58Check(const std::vector<unsigned char>& vchIn);
55 
60 inline bool DecodeBase58Check(const char* psz, std::vector<unsigned char>& vchRet);
61 
66 inline bool DecodeBase58Check(const std::string& str, std::vector<unsigned char>& vchRet);
67 
72 {
73 protected:
75  std::vector<unsigned char> vchVersion;
76 
78  typedef std::vector<unsigned char, zero_after_free_allocator<unsigned char> > vector_uchar;
80 
81  CBase58Data();
82  void SetData(const std::vector<unsigned char> &vchVersionIn, const void* pdata, size_t nSize);
83  void SetData(const std::vector<unsigned char> &vchVersionIn, const unsigned char *pbegin, const unsigned char *pend);
84 
85 public:
86  bool SetString(const char* psz, unsigned int nVersionBytes = 1);
87  bool SetString(const std::string& str);
88  std::string ToString() const;
89  int CompareTo(const CBase58Data& b58) const;
90 
91  bool operator==(const CBase58Data& b58) const { return CompareTo(b58) == 0; }
92  bool operator<=(const CBase58Data& b58) const { return CompareTo(b58) <= 0; }
93  bool operator>=(const CBase58Data& b58) const { return CompareTo(b58) >= 0; }
94  bool operator< (const CBase58Data& b58) const { return CompareTo(b58) < 0; }
95  bool operator> (const CBase58Data& b58) const { return CompareTo(b58) > 0; }
96 };
97 
104 class CBitcoinAddress : public CBase58Data {
105 public:
106  bool Set(const CKeyID &id);
107  bool Set(const CScriptID &id);
108  bool Set(const CTxDestination &dest);
109  bool IsValid() const;
110  bool IsValid(const CChainParams &params) const;
111 
113  CBitcoinAddress(const CTxDestination &dest) { Set(dest); }
114  CBitcoinAddress(const std::string& strAddress) { SetString(strAddress); }
115  CBitcoinAddress(const char* pszAddress) { SetString(pszAddress); }
116 
117  CTxDestination Get() const;
118  bool GetKeyID(CKeyID &keyID) const;
119  bool GetIndexKey(uint160& hashBytes, int& type) const;
120  bool IsScript() const;
121 };
122 
127 {
128 public:
129  void SetKey(const CKey& vchSecret);
130  CKey GetKey();
131  bool IsValid() const;
132  bool SetString(const char* pszSecret);
133  bool SetString(const std::string& strSecret);
134 
135  CBitcoinSecret(const CKey& vchSecret) { SetKey(vchSecret); }
137 };
138 
139 template<typename K, int Size, CChainParams::Base58Type Type> class CBitcoinExtKeyBase : public CBase58Data
140 {
141 public:
142  void SetKey(const K &key) {
143  unsigned char vch[Size];
144  key.Encode(vch);
145  SetData(Params().Base58Prefix(Type), vch, vch+Size);
146  }
147 
148  K GetKey() {
149  K ret;
150  if (vchData.size() == Size) {
151  //if base58 encouded data not holds a ext key, return a !IsValid() key
152  ret.Decode(&vchData[0]);
153  }
154  return ret;
155  }
156 
158  SetKey(key);
159  }
160 
161  CBitcoinExtKeyBase(const std::string& strBase58c) {
162  SetString(strBase58c.c_str(), Params().Base58Prefix(Type).size());
163  }
164 
166 };
167 
170 
171 #endif // BITCOIN_BASE58_H
bool SetString(const char *pszSecret)
Definition: base58.cpp:329
CBitcoinExtKeyBase(const K &key)
Definition: base58.h:157
boost::variant< CNoDestination, CKeyID, CScriptID > CTxDestination
Definition: standard.h:69
bool IsValid() const
Definition: base58.cpp:247
bool operator<(const CBase58Data &b58) const
Definition: base58.h:94
bool DecodeBase58(const char *psz, std::vector< unsigned char > &vchRet)
Definition: base58.cpp:21
CBitcoinAddress(const std::string &strAddress)
Definition: base58.h:114
Definition: pubkey.h:27
vector_uchar vchData
Definition: base58.h:79
CBitcoinExtKeyBase< CExtKey, 74, CChainParams::EXT_SECRET_KEY > CBitcoinExtKey
Definition: base58.h:168
CBitcoinSecret()
Definition: base58.h:136
bool DecodeBase58Check(const char *psz, std::vector< unsigned char > &vchRet)
Definition: base58.cpp:130
bool IsValid() const
Definition: base58.cpp:322
bool operator>=(const CBase58Data &b58) const
Definition: base58.h:93
std::string ToString() const
Definition: base58.cpp:193
std::vector< unsigned char > vchVersion
the version byte(s)
Definition: base58.h:75
CBitcoinExtKeyBase(const std::string &strBase58c)
Definition: base58.h:161
int CompareTo(const CBase58Data &b58) const
Definition: base58.cpp:200
bool Set(const CKeyID &id)
Definition: base58.cpp:230
CBitcoinAddress(const CTxDestination &dest)
Definition: base58.h:113
bool SetString(const char *psz, unsigned int nVersionBytes=1)
Definition: base58.cpp:171
std::vector< unsigned char, zero_after_free_allocator< unsigned char > > vector_uchar
the actually encoded data
Definition: base58.h:78
std::string EncodeBase58Check(const std::vector< unsigned char > &vchIn)
Definition: base58.cpp:121
CKey GetKey()
Definition: base58.cpp:314
bool operator>(const CBase58Data &b58) const
Definition: base58.h:95
CTxDestination Get() const
Definition: base58.cpp:260
const CChainParams & Params()
void SetKey(const CKey &vchSecret)
Definition: base58.cpp:306
CBitcoinSecret(const CKey &vchSecret)
Definition: base58.h:135
bool GetKeyID(CKeyID &keyID) const
Definition: base58.cpp:291
bool GetIndexKey(uint160 &hashBytes, int &type) const
Definition: base58.cpp:274
std::string EncodeBase58(const unsigned char *pbegin, const unsigned char *pend)
Definition: base58.cpp:71
CBitcoinAddress(const char *pszAddress)
Definition: base58.h:115
void SetData(const std::vector< unsigned char > &vchVersionIn, const void *pdata, size_t nSize)
Definition: base58.cpp:158
CBitcoinExtKeyBase< CExtPubKey, 74, CChainParams::EXT_PUBLIC_KEY > CBitcoinExtPubKey
Definition: base58.h:169
Definition: key.h:35
bool operator==(const CBase58Data &b58) const
Definition: base58.h:91
bool IsScript() const
Definition: base58.cpp:301
const std::vector< unsigned char > & Base58Prefix(Base58Type type) const
Definition: chainparams.h:77
bool operator<=(const CBase58Data &b58) const
Definition: base58.h:92
void SetKey(const K &key)
Definition: base58.h:142