PRCYCoin  2.0.0.7rc1
P2P Digital Currency
base58.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 
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"
22 
23 #include <string>
24 #include <vector>
25 
30 std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend);
31 
35 std::string EncodeBase58(const std::vector<unsigned char>& vch);
36 
42 bool DecodeBase58(const char* psz, std::vector<unsigned char>& vchRet);
43 
48 std::string DecodeBase58(const char* psz);
49 
54 bool DecodeBase58(const std::string& str, std::vector<unsigned char>& vchRet);
55 
59 std::string EncodeBase58Check(const std::vector<unsigned char>& vchIn);
60 
65 inline bool DecodeBase58Check(const char* psz, std::vector<unsigned char>& vchRet);
66 
71 inline bool DecodeBase58Check(const std::string& str, std::vector<unsigned char>& vchRet);
72 
77 {
78 protected:
80  std::vector<unsigned char> vchVersion;
81 
83  typedef std::vector<unsigned char, zero_after_free_allocator<unsigned char> > vector_uchar;
85 
86  CBase58Data();
87  void SetData(const std::vector<unsigned char>& vchVersionIn, const void* pdata, size_t nSize);
88  void SetData(const std::vector<unsigned char>& vchVersionIn, const unsigned char* pbegin, const unsigned char* pend);
89 
90 public:
91  bool SetString(const char* psz, unsigned int nVersionBytes = 1);
92  bool SetString(const std::string& str);
93  std::string ToString() const;
94  int CompareTo(const CBase58Data& b58) const;
95 
96  bool operator==(const CBase58Data& b58) const { return CompareTo(b58) == 0; }
97  bool operator<=(const CBase58Data& b58) const { return CompareTo(b58) <= 0; }
98  bool operator>=(const CBase58Data& b58) const { return CompareTo(b58) >= 0; }
99  bool operator<(const CBase58Data& b58) const { return CompareTo(b58) < 0; }
100  bool operator>(const CBase58Data& b58) const { return CompareTo(b58) > 0; }
101 };
102 
110 {
111 public:
112  bool Set(const CKeyID& id);
113  bool Set(const CScriptID& id);
114  bool Set(const CTxDestination& dest);
115  bool IsValid() const;
116  bool IsValid(const CChainParams& params) const;
117 
119  CBitcoinAddress(const CTxDestination& dest) { Set(dest); }
120  CBitcoinAddress(const std::string& strAddress) { SetString(strAddress); }
121  CBitcoinAddress(const char* pszAddress) { SetString(pszAddress); }
122 
123  CTxDestination Get() const;
124  bool GetKeyID(CKeyID& keyID) const;
125  bool IsScript() const;
126 };
127 
132 {
133 public:
134  void SetKey(const CKey& vchSecret);
135  CKey GetKey();
136  bool IsValid() const;
137  bool SetString(const char* pszSecret);
138  bool SetString(const std::string& strSecret);
139 
140  CBitcoinSecret(const CKey& vchSecret) { SetKey(vchSecret); }
142 };
143 
144 template <typename K, int Size, CChainParams::Base58Type Type>
146 {
147 public:
148  void SetKey(const K& key)
149  {
150  unsigned char vch[Size];
151  key.Encode(vch);
152  SetData(Params().Base58Prefix(Type), vch, vch + Size);
153  }
154 
155  K GetKey()
156  {
157  K ret;
158  ret.Decode(&vchData[0], &vchData[Size]);
159  return ret;
160  }
161 
163  {
164  SetKey(key);
165  }
166 
168 };
169 
172 
173 #endif // BITCOIN_BASE58_H
CBase58Data::operator>
bool operator>(const CBase58Data &b58) const
Definition: base58.h:100
CBitcoinSecret::GetKey
CKey GetKey()
Definition: base58.cpp:304
CBitcoinAddress::GetKeyID
bool GetKeyID(CKeyID &keyID) const
Definition: base58.cpp:281
CBase58Data::vchData
vector_uchar vchData
Definition: base58.h:84
CBitcoinExtKeyBase::SetKey
void SetKey(const K &key)
Definition: base58.h:148
CBitcoinAddress
base58-encoded PRCY addresses.
Definition: base58.h:109
CChainParams
CChainParams defines various tweakable parameters of a given instance of the PRCY system.
Definition: chainparams.h:41
CBase58Data::SetData
void SetData(const std::vector< unsigned char > &vchVersionIn, const void *pdata, size_t nSize)
Definition: base58.cpp:165
CKeyID
A reference to a CKey: the Hash160 of its serialized public key.
Definition: pubkey.h:29
CBitcoinAddress::Set
bool Set(const CKeyID &id)
Definition: base58.cpp:237
CBase58Data::CompareTo
int CompareTo(const CBase58Data &b58) const
Definition: base58.cpp:207
pubkey.h
chainparams.h
CBase58Data::ToString
std::string ToString() const
Definition: base58.cpp:200
CBitcoinAddress::IsScript
bool IsScript() const
Definition: base58.cpp:291
CBitcoinSecret
A base58-encoded secret key.
Definition: base58.h:131
CBase58Data::operator==
bool operator==(const CBase58Data &b58) const
Definition: base58.h:96
CBase58Data::SetString
bool SetString(const char *psz, unsigned int nVersionBytes=1)
Definition: base58.cpp:178
CBase58Data::operator<=
bool operator<=(const CBase58Data &b58) const
Definition: base58.h:97
CBitcoinExtKeyBase::CBitcoinExtKeyBase
CBitcoinExtKeyBase()
Definition: base58.h:167
CBitcoinExtKeyBase::GetKey
K GetKey()
Definition: base58.h:155
DecodeBase58
bool DecodeBase58(const char *psz, std::vector< unsigned char > &vchRet)
Decode a base58-encoded string (psz) into a byte vector (vchRet).
Definition: base58.cpp:22
CBase58Data::vector_uchar
std::vector< unsigned char, zero_after_free_allocator< unsigned char > > vector_uchar
the actually encoded data
Definition: base58.h:83
EncodeBase58
std::string EncodeBase58(const unsigned char *pbegin, const unsigned char *pend)
Why base-58 instead of standard base-64 encoding?
Definition: base58.cpp:83
CBitcoinAddress::CBitcoinAddress
CBitcoinAddress(const char *pszAddress)
Definition: base58.h:121
CBitcoinExtKey
CBitcoinExtKeyBase< CExtKey, 74, CChainParams::EXT_SECRET_KEY > CBitcoinExtKey
Definition: base58.h:170
standard.h
CBase58Data::CBase58Data
CBase58Data()
Definition: base58.cpp:159
CBitcoinSecret::SetString
bool SetString(const char *pszSecret)
Definition: base58.cpp:319
CBitcoinAddress::CBitcoinAddress
CBitcoinAddress(const std::string &strAddress)
Definition: base58.h:120
CBase58Data::operator>=
bool operator>=(const CBase58Data &b58) const
Definition: base58.h:98
CTxDestination
boost::variant< CNoDestination, CKeyID, CScriptID > CTxDestination
A txout script template with a specific destination.
Definition: standard.h:81
CBitcoinExtPubKey
CBitcoinExtKeyBase< CExtPubKey, 74, CChainParams::EXT_PUBLIC_KEY > CBitcoinExtPubKey
Definition: base58.h:171
DecodeBase58Check
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),...
Definition: base58.cpp:137
CBitcoinExtKeyBase::CBitcoinExtKeyBase
CBitcoinExtKeyBase(const K &key)
Definition: base58.h:162
key.h
CBase58Data::operator<
bool operator<(const CBase58Data &b58) const
Definition: base58.h:99
CKey
An encapsulated private key.
Definition: key.h:39
CBitcoinAddress::CBitcoinAddress
CBitcoinAddress(const CTxDestination &dest)
Definition: base58.h:119
key
CKey key
Definition: bip38tooldialog.cpp:173
CBitcoinSecret::CBitcoinSecret
CBitcoinSecret(const CKey &vchSecret)
Definition: base58.h:140
Params
const CChainParams & Params()
Return the currently selected parameters.
Definition: chainparams.cpp:463
CBase58Data::vchVersion
std::vector< unsigned char > vchVersion
the version byte(s)
Definition: base58.h:80
CBitcoinExtKeyBase
Definition: base58.h:145
script.h
CBitcoinSecret::IsValid
bool IsValid() const
Definition: base58.cpp:312
CBase58Data
Base class for all base58-encoded data.
Definition: base58.h:76
CBitcoinSecret::CBitcoinSecret
CBitcoinSecret()
Definition: base58.h:141
CBitcoinAddress::IsValid
bool IsValid() const
Definition: base58.cpp:254
CScriptID
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: standard.h:20
CBitcoinSecret::SetKey
void SetKey(const CKey &vchSecret)
Definition: base58.cpp:296
CBitcoinAddress::Get
CTxDestination Get() const
Definition: base58.cpp:267
EncodeBase58Check
std::string EncodeBase58Check(const std::vector< unsigned char > &vchIn)
Encode a byte vector into a base58-encoded string, including checksum.
Definition: base58.cpp:128
CBitcoinAddress::CBitcoinAddress
CBitcoinAddress()
Definition: base58.h:118