diff options
Diffstat (limited to 'src/key.h')
-rw-r--r-- | src/key.h | 60 |
1 files changed, 58 insertions, 2 deletions
@@ -9,7 +9,9 @@ #include <vector> #include "allocators.h" +#include "serialize.h" #include "uint256.h" +#include "util.h" #include <openssl/ec.h> // for EC_KEY definition @@ -42,6 +44,60 @@ public: explicit key_error(const std::string& str) : std::runtime_error(str) {} }; +/** A reference to a CKey: the Hash160 of its serialized public key */ +class CKeyID : public uint160 +{ +public: + CKeyID() : uint160(0) { } + CKeyID(const uint160 &in) : uint160(in) { } +}; + +/** A reference to a CScript: the Hash160 of its serialization (see script.h) */ +class CScriptID : public uint160 +{ +public: + CScriptID() : uint160(0) { } + CScriptID(const uint160 &in) : uint160(in) { } +}; + +/** An encapsulated public key. */ +class CPubKey { +private: + std::vector<unsigned char> vchPubKey; + friend class CKey; + +public: + CPubKey() { } + CPubKey(const std::vector<unsigned char> &vchPubKeyIn) : vchPubKey(vchPubKeyIn) { } + friend bool operator==(const CPubKey &a, const CPubKey &b) { return a.vchPubKey == b.vchPubKey; } + friend bool operator!=(const CPubKey &a, const CPubKey &b) { return a.vchPubKey != b.vchPubKey; } + friend bool operator<(const CPubKey &a, const CPubKey &b) { return a.vchPubKey < b.vchPubKey; } + + IMPLEMENT_SERIALIZE( + READWRITE(vchPubKey); + ) + + CKeyID GetID() const { + return CKeyID(Hash160(vchPubKey)); + } + + uint256 GetHash() const { + return Hash(vchPubKey.begin(), vchPubKey.end()); + } + + bool IsValid() const { + return vchPubKey.size() == 33 || vchPubKey.size() == 65; + } + + bool IsCompressed() const { + return vchPubKey.size() == 33; + } + + std::vector<unsigned char> Raw() const { + return vchPubKey; + } +}; + // secure_allocator is defined in serialize.h // CPrivKey is a serialized private key, with all parameters included (279 bytes) @@ -78,8 +134,8 @@ public: bool SetSecret(const CSecret& vchSecret, bool fCompressed = false); CSecret GetSecret(bool &fCompressed) const; CPrivKey GetPrivKey() const; - bool SetPubKey(const std::vector<unsigned char>& vchPubKey); - std::vector<unsigned char> GetPubKey() const; + bool SetPubKey(const CPubKey& vchPubKey); + CPubKey GetPubKey() const; bool Sign(uint256 hash, std::vector<unsigned char>& vchSig); |