@@ -152,67 +152,6 @@ bool DecodeBase58Check(const std::string& str, std::vector<unsigned char>& vchRe
152
152
return DecodeBase58Check (str.c_str (), vchRet);
153
153
}
154
154
155
- CBase58Data::CBase58Data ()
156
- {
157
- vchVersion.clear ();
158
- vchData.clear ();
159
- }
160
-
161
- void CBase58Data::SetData (const std::vector<unsigned char >& vchVersionIn, const void * pdata, size_t nSize)
162
- {
163
- vchVersion = vchVersionIn;
164
- vchData.resize (nSize);
165
- if (!vchData.empty ())
166
- memcpy (vchData.data (), pdata, nSize);
167
- }
168
-
169
- void CBase58Data::SetData (const std::vector<unsigned char >& vchVersionIn, const unsigned char * pbegin, const unsigned char * pend)
170
- {
171
- SetData (vchVersionIn, (void *)pbegin, pend - pbegin);
172
- }
173
-
174
- bool CBase58Data::SetString (const char * psz, unsigned int nVersionBytes)
175
- {
176
- std::vector<unsigned char > vchTemp;
177
- bool rc58 = DecodeBase58Check (psz, vchTemp);
178
- if ((!rc58) || (vchTemp.size () < nVersionBytes)) {
179
- vchData.clear ();
180
- vchVersion.clear ();
181
- return false ;
182
- }
183
- vchVersion.assign (vchTemp.begin (), vchTemp.begin () + nVersionBytes);
184
- vchData.resize (vchTemp.size () - nVersionBytes);
185
- if (!vchData.empty ())
186
- memcpy (vchData.data (), vchTemp.data () + nVersionBytes, vchData.size ());
187
- memory_cleanse (vchTemp.data (), vchTemp.size ());
188
- return true ;
189
- }
190
-
191
- bool CBase58Data::SetString (const std::string& str)
192
- {
193
- return SetString (str.c_str ());
194
- }
195
-
196
- std::string CBase58Data::ToString () const
197
- {
198
- std::vector<unsigned char > vch = vchVersion;
199
- vch.insert (vch.end (), vchData.begin (), vchData.end ());
200
- return EncodeBase58Check (vch);
201
- }
202
-
203
- int CBase58Data::CompareTo (const CBase58Data& b58) const
204
- {
205
- if (vchVersion < b58.vchVersion )
206
- return -1 ;
207
- if (vchVersion > b58.vchVersion )
208
- return 1 ;
209
- if (vchData < b58.vchData )
210
- return -1 ;
211
- if (vchData > b58.vchData )
212
- return 1 ;
213
- return 0 ;
214
- }
215
-
216
155
namespace
217
156
{
218
157
class DestinationEncoder : public boost ::static_visitor<std::string>
@@ -352,6 +291,53 @@ std::string EncodeSecret(const CKey& key)
352
291
return ret;
353
292
}
354
293
294
+ CExtPubKey DecodeExtPubKey (const std::string& str)
295
+ {
296
+ CExtPubKey key;
297
+ std::vector<unsigned char > data;
298
+ if (DecodeBase58Check (str, data)) {
299
+ const std::vector<unsigned char >& prefix = Params ().Base58Prefix (CChainParams::EXT_PUBLIC_KEY);
300
+ if (data.size () == BIP32_EXTKEY_SIZE + prefix.size () && std::equal (prefix.begin (), prefix.end (), data.begin ())) {
301
+ key.Decode (data.data () + prefix.size ());
302
+ }
303
+ }
304
+ return key;
305
+ }
306
+
307
+ std::string EncodeExtPubKey (const CExtPubKey& key)
308
+ {
309
+ std::vector<unsigned char > data = Params ().Base58Prefix (CChainParams::EXT_PUBLIC_KEY);
310
+ size_t size = data.size ();
311
+ data.resize (size + BIP32_EXTKEY_SIZE);
312
+ key.Encode (data.data () + size);
313
+ std::string ret = EncodeBase58Check (data);
314
+ return ret;
315
+ }
316
+
317
+ CExtKey DecodeExtKey (const std::string& str)
318
+ {
319
+ CExtKey key;
320
+ std::vector<unsigned char > data;
321
+ if (DecodeBase58Check (str, data)) {
322
+ const std::vector<unsigned char >& prefix = Params ().Base58Prefix (CChainParams::EXT_SECRET_KEY);
323
+ if (data.size () == BIP32_EXTKEY_SIZE + prefix.size () && std::equal (prefix.begin (), prefix.end (), data.begin ())) {
324
+ key.Decode (data.data () + prefix.size ());
325
+ }
326
+ }
327
+ return key;
328
+ }
329
+
330
+ std::string EncodeExtKey (const CExtKey& key)
331
+ {
332
+ std::vector<unsigned char > data = Params ().Base58Prefix (CChainParams::EXT_SECRET_KEY);
333
+ size_t size = data.size ();
334
+ data.resize (size + BIP32_EXTKEY_SIZE);
335
+ key.Encode (data.data () + size);
336
+ std::string ret = EncodeBase58Check (data);
337
+ memory_cleanse (data.data (), data.size ());
338
+ return ret;
339
+ }
340
+
355
341
std::string EncodeDestination (const CTxDestination& dest)
356
342
{
357
343
return boost::apply_visitor (DestinationEncoder (Params ()), dest);
0 commit comments