#pragma once #include #include "identity.h" namespace erebos { struct ChannelRequestData { Ref store(const Storage & st) const; static ChannelRequestData load(const Ref &); const vector>> peers; const Stored key; }; typedef Signed ChannelRequest; struct ChannelAcceptData { Ref store(const Storage & st) const; static ChannelAcceptData load(const Ref &); Stored channel() const; const Stored request; const Stored key; }; typedef Signed ChannelAccept; class Channel { public: Channel(const vector>> & peers, vector && key): peers(peers), key(std::move(key)) {} Ref store(const Storage & st) const; static Channel load(const Ref &); static Stored generateRequest(const Storage &, const Identity & self, const Identity & peer); static optional> acceptRequest(const Identity & self, const Identity & peer, const Stored & request); vector encrypt(const vector &) const; optional> decrypt(const vector &) const; private: const vector>> peers; const vector key; }; }