#ifndef LLARP_SERVICE_ASYNC_KEY_EXCHANGE_HPP #define LLARP_SERVICE_ASYNC_KEY_EXCHANGE_HPP #include #include #include namespace llarp { class Logic; namespace service { struct AsyncKeyExchange : public std::enable_shared_from_this< AsyncKeyExchange > { std::shared_ptr< Logic > logic; SharedSecret sharedKey; ServiceInfo m_remote; const Identity& m_LocalIdentity; ProtocolMessage msg; Introduction intro; const PQPubKey introPubKey; Introduction remoteIntro; std::function< void(std::shared_ptr< ProtocolFrame >) > hook; IDataHandler* handler; ConvoTag tag; AsyncKeyExchange(std::shared_ptr< Logic > l, ServiceInfo r, const Identity& localident, const PQPubKey& introsetPubKey, const Introduction& remote, IDataHandler* h, const ConvoTag& t, ProtocolType proto); static void Result(std::shared_ptr< AsyncKeyExchange > user, std::shared_ptr< ProtocolFrame > frame); /// given protocol message make protocol frame static void Encrypt(std::shared_ptr< AsyncKeyExchange > user, std::shared_ptr< ProtocolFrame > frame); }; } // namespace service } // namespace llarp #endif