1
1
Fork 0
mirror of https://github.com/oxen-io/lokinet synced 2023-12-14 06:53:00 +01:00
lokinet/include/llarp/encrypted.hpp

75 lines
1.2 KiB
C++
Raw Normal View History

2018-06-11 15:25:10 +02:00
#ifndef LLARP_ENCCRYPTED_HPP
#define LLARP_ENCCRYPTED_HPP
#include <llarp/bencode.h>
2018-06-11 15:25:10 +02:00
#include <llarp/buffer.h>
2018-06-12 18:45:12 +02:00
#include <sodium.h>
2018-06-19 19:11:24 +02:00
#include <vector>
2018-06-11 15:25:10 +02:00
namespace llarp
{
/// encrypted buffer base type
struct Encrypted
{
Encrypted() = default;
Encrypted(const byte_t* buf, size_t sz);
Encrypted(size_t sz);
bool
BEncode(llarp_buffer_t* buf) const
{
2018-06-19 19:11:24 +02:00
return bencode_write_bytestring(buf, _data.data(), _data.size());
}
2018-06-12 18:45:12 +02:00
void
Randomize()
{
2018-06-19 19:11:24 +02:00
if(_data.size())
randombytes(_data.data(), _data.size());
2018-06-12 18:45:12 +02:00
}
bool
BDecode(llarp_buffer_t* buf)
{
llarp_buffer_t strbuf;
if(!bencode_read_string(buf, &strbuf))
return false;
if(strbuf.sz == 0)
return false;
2018-06-19 19:11:24 +02:00
_data.resize(strbuf.sz);
memcpy(_data.data(), strbuf.base, _data.size());
return true;
}
2018-06-11 15:25:10 +02:00
llarp_buffer_t*
Buffer()
{
return &m_Buffer;
}
2018-06-19 19:11:24 +02:00
size_t
size()
{
return _data.size();
}
size_t
size() const
{
return _data.size();
}
byte_t*
data()
{
return _data.data();
}
std::vector< byte_t > _data;
2018-06-11 15:25:10 +02:00
private:
llarp_buffer_t m_Buffer;
};
2018-06-19 19:11:24 +02:00
} // namespace llarp
2018-06-11 15:25:10 +02:00
#endif