X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=blobdiff_plain;f=src%2Fbase58.h;h=bc681a08ca250e745a81e35ffbe891b12c1d25b7;hp=3f2d82f11b8eeded50ec18ca473d66daf5272ee8;hb=e10622d1297e638109bbf58c35ad008f7acbae7c;hpb=21d9f36781604e4ca9fc35dc65265593423b73e9 diff --git a/src/base58.h b/src/base58.h index 3f2d82f..bc681a0 100644 --- a/src/base58.h +++ b/src/base58.h @@ -1,7 +1,7 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2011 The Bitcoin Developers +// Copyright (c) 2009-2012 The Bitcoin Developers // Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or http://www.opensource.org/licenses/mit-license.php. // @@ -15,8 +15,6 @@ #ifndef BITCOIN_BASE58_H #define BITCOIN_BASE58_H -#include - #include #include #include "bignum.h" @@ -171,7 +169,7 @@ inline bool DecodeBase58Check(const std::string& str, std::vector -// Base class for all base58-encoded data +/** Base class for all base58-encoded data */ class CBase58Data { protected: @@ -254,11 +252,12 @@ public: bool operator> (const CBase58Data& b58) const { return CompareTo(b58) > 0; } }; -// base58-encoded bitcoin addresses -// Public-key-hash-addresses have version 0 (or 192 testnet) -// The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key -// Script-hash-addresses (OP_EVAL) have version 5 (or 196 testnet) -// The data vector contains RIPEMD160(SHA256(cscript)), where cscript is the serialized redemption script +/** base58-encoded bitcoin addresses. + * Public-key-hash-addresses have version 0 (or 111 testnet). + * The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key. + * Script-hash-addresses have version 5 (or 196 testnet). + * The data vector contains RIPEMD160(SHA256(cscript)), where cscript is the serialized redemption script. + */ class CBitcoinAddress : public CBase58Data { public: @@ -266,8 +265,7 @@ public: { PUBKEY_ADDRESS = 0, SCRIPT_ADDRESS = 5, - PUBKEY_ADDRESS_TEST = 192, - PUBKEY_ADDRESS_TEST_LEGACY = 111, // Deprecated: old testnet address + PUBKEY_ADDRESS_TEST = 111, SCRIPT_ADDRESS_TEST = 196, }; @@ -290,7 +288,7 @@ public: bool IsValid() const { - int nExpectedSize = 20; + unsigned int nExpectedSize = 20; bool fExpectTestNet = false; switch(nVersion) { @@ -299,11 +297,10 @@ public: fExpectTestNet = false; break; case SCRIPT_ADDRESS: - nExpectedSize = 20; // OP_EVAL, hash of CScript + nExpectedSize = 20; // Hash of CScript fExpectTestNet = false; break; - case PUBKEY_ADDRESS_TEST_LEGACY: case PUBKEY_ADDRESS_TEST: nExpectedSize = 20; fExpectTestNet = true; @@ -360,25 +357,29 @@ public: } }; +/** A base58-encoded secret key */ class CBitcoinSecret : public CBase58Data { public: - void SetSecret(const CSecret& vchSecret) - { + void SetSecret(const CSecret& vchSecret, bool fCompressed) + { + assert(vchSecret.size() == 32); SetData(fTestNet ? 239 : 128, &vchSecret[0], vchSecret.size()); + if (fCompressed) + vchData.push_back(1); } - CSecret GetSecret() + CSecret GetSecret(bool &fCompressedOut) { CSecret vchSecret; - vchSecret.resize(vchData.size()); - memcpy(&vchSecret[0], &vchData[0], vchData.size()); + vchSecret.resize(32); + memcpy(&vchSecret[0], &vchData[0], 32); + fCompressedOut = vchData.size() == 33; return vchSecret; } bool IsValid() const { - int nExpectedSize = 32; bool fExpectTestNet = false; switch(nVersion) { @@ -392,12 +393,22 @@ public: default: return false; } - return fExpectTestNet == fTestNet && vchData.size() == nExpectedSize; + return fExpectTestNet == fTestNet && (vchData.size() == 32 || (vchData.size() == 33 && vchData[32] == 1)); + } + + bool SetString(const char* pszSecret) + { + return CBase58Data::SetString(pszSecret) && IsValid(); + } + + bool SetString(const std::string& strSecret) + { + return SetString(strSecret.c_str()); } - CBitcoinSecret(const CSecret& vchSecret) + CBitcoinSecret(const CSecret& vchSecret, bool fCompressed) { - SetSecret(vchSecret); + SetSecret(vchSecret, fCompressed); } CBitcoinSecret()