@@ -152,67 +152,6 @@ bool DecodeBase58Check(const std::string& str, std::vector<unsigned char>& vchRe
152152 return DecodeBase58Check (str.c_str (), vchRet);
153153}
154154
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-
216155namespace
217156{
218157class DestinationEncoder : public boost ::static_visitor<std::string>
@@ -352,6 +291,53 @@ std::string EncodeSecret(const CKey& key)
352291 return ret;
353292}
354293
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+
355341std::string EncodeDestination (const CTxDestination& dest)
356342{
357343 return boost::apply_visitor (DestinationEncoder (Params ()), dest);
0 commit comments