X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fkey.h;h=2d8e61850f1d77e041e36c8b2e26bc1980f0dd0f;hb=cecf7a56ed5a5efd939b21c760c69da616306005;hp=c1890904cc4c284bc03f51dd11d386fa156a55ae;hpb=91e95a40e7a818d671eac2549830dd7dfe5fa21b;p=novacoin.git diff --git a/src/key.h b/src/key.h index c189090..2d8e618 100644 --- a/src/key.h +++ b/src/key.h @@ -13,6 +13,7 @@ #include "uint256.h" #include "hash.h" #include "bignum.h" +#include "ies.h" #include // for EC_KEY definition @@ -97,6 +98,9 @@ public: std::vector Raw() const { return vchPubKey; } + + // Encrypt data + void EncryptData(const std::vector& data, std::vector& encrypted); }; @@ -122,6 +126,7 @@ public: CKey(); CKey(const CKey& b); + CKey(const CSecret& b, bool fCompressed=true); CKey& operator=(const CKey& b); @@ -130,10 +135,11 @@ public: bool IsNull() const; bool IsCompressed() const; - void MakeNewKey(bool fCompressed); + void MakeNewKey(bool fCompressed=true); bool SetPrivKey(const CPrivKey& vchPrivKey); - bool SetSecret(const CSecret& vchSecret, bool fCompressed = false); + bool SetSecret(const CSecret& vchSecret, bool fCompressed = true); CSecret GetSecret(bool &fCompressed) const; + CSecret GetSecret() const; CPrivKey GetPrivKey() const; bool SetPubKey(const CPubKey& vchPubKey); CPubKey GetPubKey() const; @@ -164,6 +170,12 @@ public: // Reserialize to DER static bool ReserealizeSignature(std::vector& vchSig); + + // Encrypt data + void EncryptData(const std::vector& data, std::vector& encrypted); + + // Decrypt data + void DecryptData(const std::vector& encrypted, std::vector& data); }; class CPoint @@ -181,6 +193,9 @@ public: // Initialize from octets stream bool setBytes(const std::vector &vchBytes); + // Initialize from pubkey + bool setPubKey(const CPubKey &vchPubKey); + // Serialize to octets stream bool getBytes(std::vector &vchBytes); @@ -190,13 +205,12 @@ public: // Calculate G*m + q bool ECMULGEN(const CBigNum &bnMultiplier, const CPoint &qPoint); - bool IsInfinity() { return EC_POINT_is_at_infinity(group, point); } + bool IsInfinity() { return EC_POINT_is_at_infinity(group, point) != 0; } }; class CMalleablePubKey { private: - unsigned char nVersion; CPubKey pubKeyL; CPubKey pubKeyH; friend class CMalleableKey; @@ -204,14 +218,17 @@ private: static const unsigned char CURRENT_VERSION = 1; public: - CMalleablePubKey() { nVersion = CMalleablePubKey::CURRENT_VERSION; } + CMalleablePubKey() { } + CMalleablePubKey(const CMalleablePubKey& mpk) + { + pubKeyL = mpk.pubKeyL; + pubKeyH = mpk.pubKeyH; + } + CMalleablePubKey(const std::vector &vchPubKeyPair) { setvch(vchPubKeyPair); } CMalleablePubKey(const std::string& strMalleablePubKey) { SetString(strMalleablePubKey); } - CMalleablePubKey(const CPubKey &pubKeyInL, const CPubKey &pubKeyInH) : pubKeyL(pubKeyInL), pubKeyH(pubKeyInH) { nVersion = CMalleablePubKey::CURRENT_VERSION; } - CMalleablePubKey(const std::vector &pubKeyInL, const std::vector &pubKeyInH) : pubKeyL(pubKeyInL), pubKeyH(pubKeyInH) { nVersion = CMalleablePubKey::CURRENT_VERSION; } + CMalleablePubKey(const CPubKey &pubKeyInL, const CPubKey &pubKeyInH) : pubKeyL(pubKeyInL), pubKeyH(pubKeyInH) { } IMPLEMENT_SERIALIZE( - READWRITE(this->nVersion); - nVersion = this->nVersion; READWRITE(pubKeyL); READWRITE(pubKeyH); ) @@ -222,10 +239,21 @@ public: bool operator==(const CMalleablePubKey &b); bool operator!=(const CMalleablePubKey &b) { return !(*this == b); } + CMalleablePubKey& operator=(const CMalleablePubKey& mpk) { + pubKeyL = mpk.pubKeyL; + pubKeyH = mpk.pubKeyH; + return *this; + } - std::string ToString(); + std::string ToString() const; bool SetString(const std::string& strMalleablePubKey); - uint256 GetID() const; + + CKeyID GetID() const { + return pubKeyL.GetID(); + } + + bool setvch(const std::vector &vchPubKeyPair); + std::vector Raw() const; CPubKey& GetL() { return pubKeyL; } CPubKey& GetH() { return pubKeyH; } @@ -235,65 +263,86 @@ public: class CMalleableKey { private: - unsigned char nVersion; CSecret vchSecretL; CSecret vchSecretH; friend class CMalleableKeyView; - static const unsigned char CURRENT_VERSION = 1; - public: CMalleableKey(); CMalleableKey(const CMalleableKey &b); CMalleableKey(const CSecret &L, const CSecret &H); - CMalleableKey& operator=(const CMalleableKey &b); ~CMalleableKey(); IMPLEMENT_SERIALIZE( - READWRITE(this->nVersion); - nVersion = this->nVersion; READWRITE(vchSecretL); READWRITE(vchSecretH); ) - std::string ToString(); + std::string ToString() const; bool SetString(const std::string& strMalleablePubKey); + std::vector Raw() const; + CMalleableKey& operator=(const CMalleableKey& mk) { + vchSecretL = mk.vchSecretL; + vchSecretH = mk.vchSecretH; + return *this; + } void Reset(); void MakeNewKeys(); bool IsNull() const; + bool IsValid() const { return !IsNull() && GetMalleablePubKey().IsValid(); } bool SetSecrets(const CSecret &pvchSecretL, const CSecret &pvchSecretH); - void GetSecrets(CSecret &pvchSecretL, CSecret &pvchSecretH) const; - CMalleablePubKey GetMalleablePubKey() const; + CSecret GetSecretL() const { return vchSecretL; } + CSecret GetSecretH() const { return vchSecretH; } - bool CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant); - bool CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant, CKey &privKeyVariant); + CKeyID GetID() const { + return GetMalleablePubKey().GetID(); + } + CMalleablePubKey GetMalleablePubKey() const; + bool CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant) const; + bool CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant, CKey &privKeyVariant) const; }; class CMalleableKeyView { private: CSecret vchSecretL; - std::vector vchPubKeyH; - - // disabled constructor - CMalleableKeyView() { }; - - static const unsigned char CURRENT_VERSION = 1; + CPubKey vchPubKeyH; public: + CMalleableKeyView() { }; CMalleableKeyView(const CMalleableKey &b); - CMalleableKeyView(const CSecret &L, const CPubKey &pvchPubKeyH); + CMalleableKeyView(const std::string &strMalleableKey); CMalleableKeyView(const CMalleableKeyView &b); CMalleableKeyView& operator=(const CMalleableKey &b); ~CMalleableKeyView(); + IMPLEMENT_SERIALIZE( + READWRITE(vchSecretL); + READWRITE(vchPubKeyH); + ) + + bool IsValid() const; + std::string ToString() const; + bool SetString(const std::string& strMalleablePubKey); + std::vector Raw() const; + CMalleableKeyView& operator=(const CMalleableKeyView& mkv) { + vchSecretL = mkv.vchSecretL; + vchPubKeyH = mkv.vchPubKeyH; + return *this; + } + + CKeyID GetID() const { + return GetMalleablePubKey().GetID(); + } CMalleablePubKey GetMalleablePubKey() const; + CMalleableKey GetMalleableKey(const CSecret &vchSecretH) const { return CMalleableKey(vchSecretL, vchSecretH); } + bool CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant) const; - bool CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant); + bool operator <(const CMalleableKeyView& kv) const { return vchPubKeyH.GetID() < kv.vchPubKeyH.GetID(); } }; #endif