#ifndef __HANKO__ #define __HANKO__ // We use SECP256K1 http://www.secg.org/collateral/sec2_final.pdf #include "key.h" enum HankoFormat { TEXT, // Hanko in text form RAW, // Hanko in raw binary form CONTACT, // Hanko contact block }; class Hanko { public: static const int smPubKeySize= 65; static const int smPrivKeySize = 279; static const int smSigSize = 57; private: std::string mHanko; std::vector mContactBlock; CKey mPubKey; public: Hanko(); Hanko(const std::string& TextHanko); Hanko(const std::vector& Data, HankoFormat format); Hanko(const CKey &pubKey); Hanko(const Hanko &); std::string GetHankoString(HankoFormat format) const; std::vector GetHankoBinary(HankoFormat format) const; const std::vector& GetContactBlock(void) const { return mContactBlock; } const CKey& GetPublicKey(void) const { return mPubKey; } int UpdateContact(std::vector& Contact); bool CheckHashSign(const uint256& hash, const std::vector& Signature); bool CheckPrefixSign(const std::vector& data, uint64 type, const std::vector &signature); }; class LocalHanko : public Hanko { private: CKey mPrivKey; public: LocalHanko(std::vector &PrivKey); LocalHanko(const CKey &Privkey); LocalHanko(const LocalHanko &); ~LocalHanko(); bool HashSign(const uint256& hash, std::vector& Signature); bool PrefixSign(std::vector data, uint64 type, std::vector &Signature); }; #endif