#pragma once #include #include #include #include #include #include namespace fc { namespace ecc { namespace detail { class public_key_impl; class private_key_impl; } typedef fc::array signature; typedef fc::array compact_signature; class public_key { public: public_key(); ~public_key(); bool verify( const fc::sha256& digest, const signature& sig ); std::vector serialize()const; public_key( const std::vector& v ); public_key( const compact_signature& c, const fc::sha256& digest ); private: friend class private_key; fc::fwd my; }; class private_key { public: private_key(); private_key( std::vector k ); ~private_key(); static private_key generate(); static private_key regenerate( const fc::sha256& secret ); fc::sha256 get_secret()const; // get the private key secret /** * Given a public key, calculatse a 512 bit shared secret between that * key and this private key. */ fc::sha512 get_shared_secret( const public_key& pub ); signature sign( const fc::sha256& digest ); compact_signature sign_compact( const fc::sha256& digest ); bool verify( const fc::sha256& digest, const signature& sig ); public_key get_public_key()const; private: fc::fwd my; }; } } // fc::ecc