lokinet/include/llarp/service.hpp

104 lines
2.0 KiB
C++
Raw Normal View History

2018-06-23 00:00:44 +00:00
#ifndef LLARP_SERVICE_HPP
#define LLARP_SERVICE_HPP
#include <llarp/aligned.hpp>
#include <llarp/bencode.hpp>
#include <llarp/crypto.hpp>
#include <llarp/path_types.hpp>
#include <set>
2018-06-23 00:00:44 +00:00
namespace llarp
{
namespace service
{
/// hidden service address
typedef llarp::AlignedBuffer< 32 > Address;
typedef llarp::AlignedBuffer< 16 > VanityNonce;
struct ServiceInfo : public llarp::IBEncodeMessage
2018-06-23 00:00:44 +00:00
{
llarp::PubKey enckey;
llarp::PubKey signkey;
uint64_t version = 0;
VanityNonce vanity;
~ServiceInfo();
2018-06-23 00:00:44 +00:00
/// calculate our address
void
CalculateAddress(Address& addr) const;
2018-06-23 00:00:44 +00:00
bool
BEncode(llarp_buffer_t* buf) const;
bool
DecodeKey(llarp_buffer_t key, llarp_buffer_t* buf);
};
// private keys
struct Identity : public llarp::IBEncodeMessage
{
llarp::SecretKey enckey;
llarp::SecretKey signkey;
uint64_t version = 0;
VanityNonce vanity;
// public service info
ServiceInfo pub;
2018-06-23 00:00:44 +00:00
// regenerate secret keys
void
RegenerateKeys(llarp_crypto* c);
// load from file
bool
LoadFromFile(const std::string& fpath);
bool
BEncode(llarp_buffer_t* buf) const;
bool
DecodeKey(llarp_buffer_t key, llarp_buffer_t* buf);
};
struct Introduction : public llarp::IBEncodeMessage
{
llarp::PubKey router;
llarp::PathID_t pathID;
uint64_t version = 0;
uint64_t expiresAt;
~Introduction()
{
}
bool
BEncode(llarp_buffer_t* buf) const;
bool
DecodeKey(llarp_buffer_t key, llarp_buffer_t* buf);
};
struct IntroSet : public llarp::IBEncodeMessage
{
ServiceInfo A;
std::set< Introduction > I;
llarp::Signature Z;
~IntroSet();
bool
BDecode(llarp_buffer_t* buf);
bool
BEncode(llarp_buffer_t* buf) const;
bool
DecodeKey(llarp_buffer_t key, llarp_buffer_t* buf);
2018-06-23 00:00:44 +00:00
};
}; // namespace service
} // namespace llarp
#endif