Anoncoin  0.9.4
P2P Digital Currency
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 // Copyright (c) 2013-2014 The Anoncoin Core developers
4 // Distributed under the MIT/X11 software license, see the accompanying
5 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
6 
7 //
8 // Why base-58 instead of standard base-64 encoding?
9 // - Don't want 0OIl characters that look the same in some fonts and
10 // could be used to create visually identical looking account numbers.
11 // - A string with non-alphanumeric characters is not as easily accepted as an account number.
12 // - E-mail usually won't line-break if there's no punctuation to break at.
13 // - Double-clicking selects the whole number as one word if it's all alphanumeric.
14 //
15 #ifndef ANONCOIN_BASE58_H
16 #define ANONCOIN_BASE58_H
17 
18 #include "chainparams.h"
19 #include "key.h"
20 #include "script.h"
21 
22 #include <string>
23 #include <vector>
24 
29 std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend);
30 
34 std::string EncodeBase58(const std::vector<unsigned char>& vch);
35 
41 bool DecodeBase58(const char* psz, std::vector<unsigned char>& vchRet);
42 
47 bool DecodeBase58(const std::string& str, std::vector<unsigned char>& vchRet);
48 
52 std::string EncodeBase58Check(const std::vector<unsigned char>& vchIn);
53 
58 inline bool DecodeBase58Check(const char* psz, std::vector<unsigned char>& vchRet);
59 
64 inline bool DecodeBase58Check(const std::string& str, std::vector<unsigned char>& vchRet);
65 
70 {
71 protected:
72  // the version byte(s)
73  std::vector<unsigned char> vchVersion;
74 
75  // the actually encoded data
76  typedef std::vector<unsigned char, zero_after_free_allocator<unsigned char> > vector_uchar;
77  vector_uchar vchData;
78 
79  CBase58Data();
80  void SetData(const std::vector<unsigned char> &vchVersionIn, const void* pdata, size_t nSize);
81  void SetData(const std::vector<unsigned char> &vchVersionIn, const unsigned char *pbegin, const unsigned char *pend);
82 
83 public:
84  bool SetString(const char* psz, unsigned int nVersionBytes = 1);
85  bool SetString(const std::string& str);
86  std::string ToString() const;
87  int CompareTo(const CBase58Data& b58) const;
88 
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  bool operator> (const CBase58Data& b58) const { return CompareTo(b58) > 0; }
94 };
95 
103 public:
104  bool Set(const CKeyID &id);
105  bool Set(const CScriptID &id);
106  bool Set(const CTxDestination &dest);
107  bool IsValid() const;
108 
110  CAnoncoinAddress(const CTxDestination &dest) { Set(dest); }
111  CAnoncoinAddress(const std::string& strAddress) { SetString(strAddress); }
112  CAnoncoinAddress(const char* pszAddress) { SetString(pszAddress); }
113 
114  CTxDestination Get() const;
115  bool GetKeyID(CKeyID &keyID) const;
116  bool IsScript() const;
117 };
118 
123 {
124 public:
125  void SetKey(const CKey& vchSecret);
126  CKey GetKey();
127  bool IsValid() const;
128  bool SetString(const char* pszSecret);
129  bool SetString(const std::string& strSecret);
130 
131  CAnoncoinSecret(const CKey& vchSecret) { SetKey(vchSecret); }
133 };
134 
135 template<typename K, int Size, CChainParams::Base58Type Type> class CAnoncoinExtKeyBase : public CBase58Data
136 {
137 public:
138  void SetKey(const K &key) {
139  unsigned char vch[Size];
140  key.Encode(vch);
141  SetData(Params().Base58Prefix(Type), vch, vch+Size);
142  }
143 
144  K GetKey() {
145  K ret;
146  ret.Decode(&vchData[0], &vchData[Size]);
147  return ret;
148  }
149 
150  CAnoncoinExtKeyBase(const K &key) {
151  SetKey(key);
152  }
153 
155 };
156 
159 
160 #endif // ANONCOIN_BASE58_H
bool IsScript() const
Definition: base58.cpp:245
CAnoncoinExtKeyBase< CExtKey, 74, CChainParams::EXT_SECRET_KEY > CAnoncoinExtKey
Definition: base58.h:157
CAnoncoinExtKeyBase(const K &key)
Definition: base58.h:150
bool Set(const CKeyID &id)
Definition: base58.cpp:202
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
bool IsValid() const
Definition: base58.cpp:262
CTxDestination Get() const
Definition: base58.cpp:223
bool GetKeyID(CKeyID &keyID) const
Definition: base58.cpp:236
vector_uchar vchData
Definition: base58.h:77
void SetKey(const K &key)
Definition: base58.h:138
CAnoncoinAddress(const char *pszAddress)
Definition: base58.h:112
CAnoncoinAddress(const std::string &strAddress)
Definition: base58.h:111
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:117
void SetData(const std::vector< unsigned char > &vchVersionIn, const void *pdata, size_t nSize)
Definition: base58.cpp:144
bool IsValid() const
Definition: base58.cpp:216
void SetKey(const CKey &vchSecret)
Definition: base58.cpp:249
CAnoncoinExtKeyBase< CExtPubKey, 74, CChainParams::EXT_PUBLIC_KEY > CAnoncoinExtPubKey
Definition: base58.h:158
std::vector< unsigned char, zero_after_free_allocator< unsigned char > > vector_uchar
Definition: base58.h:76
Base class for all base58-encoded data.
Definition: base58.h:69
CAnoncoinSecret(const CKey &vchSecret)
Definition: base58.h:131
A base58-encoded secret key.
Definition: base58.h:122
bool operator==(const CBase58Data &b58) const
Definition: base58.h:89
base58-encoded Anoncoin addresses.
Definition: base58.h:102
bool SetString(const char *pszSecret)
Definition: base58.cpp:268
std::string ToString() const
Definition: base58.cpp:175
bool operator>(const CBase58Data &b58) const
Definition: base58.h:93
bool SetString(const char *psz, unsigned int nVersionBytes=1)
Definition: base58.cpp:155
boost::variant< CNoDestination, CKeyID, CScriptID > CTxDestination
A txout script template with a specific destination.
Definition: keystore.h:17
std::string EncodeBase58Check(const std::vector< unsigned char > &vchIn)
Encode a byte vector into a base58-encoded string, including checksum.
Definition: base58.cpp:109
CAnoncoinAddress(const CTxDestination &dest)
Definition: base58.h:110
const CChainParams & Params()
Return the currently selected parameters.
A reference to a CKey: the Hash160 of its serialized public key.
Definition: key.h:27
std::string EncodeBase58(const unsigned char *pbegin, const unsigned char *pend)
Encode a byte sequence as a base58-encoded string.
Definition: base58.cpp:67
A reference to a CScript: the Hash160 of its serialization (see script.h)
Definition: key.h:35
bool operator<(const CBase58Data &b58) const
Definition: base58.h:92
An encapsulated private key.
Definition: key.h:180
CKey GetKey()
Definition: base58.cpp:256
std::vector< unsigned char > vchVersion
Definition: base58.h:73
bool operator<=(const CBase58Data &b58) const
Definition: base58.h:90
int CompareTo(const CBase58Data &b58) const
Definition: base58.cpp:181
bool operator>=(const CBase58Data &b58) const
Definition: base58.h:91