SPSP
Simple publish-subscribe protocol. Connects low power IoT clients to MQTT.
All Classes Files Functions Variables Typedefs Enumerations
espnow_ser_des.hpp
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include "spsp/espnow_types.hpp"
13 #include "spsp/espnow_packet.hpp"
14 #include "spsp/random.hpp"
15 
16 namespace SPSP::LocalLayers::ESPNOW
17 {
23  class SerDes
24  {
25  const Config& m_conf;
26  Random m_rand;
27 
28  public:
34  SerDes(const Config& conf) noexcept;
35 
44  void serialize(const LocalMessageT& msg, std::string& data) const noexcept;
45 
55  bool deserialize(const LocalAddrT& src, std::string& data,
56  LocalMessageT& msg) const noexcept;
57 
66  static size_t getPacketLength(const LocalMessageT& msg) noexcept;
67 
68  protected:
79  static uint8_t checksumRaw(uint8_t* data, size_t dataLen,
80  uint8_t existingChecksum = 0) noexcept;
81 
93  void encryptRaw(uint8_t* data, size_t dataLen, const uint8_t* nonce) const noexcept;
94 
102  bool validatePacketHeader(const Packet* p) const noexcept;
103 
112  bool decryptAndValidatePacketPayload(uint8_t* data, size_t dataLen) const noexcept;
113  };
114 } // namespace SPSP::LocalLayers::ESPNOW
espnow_packet.hpp
ESP-NOW packet structures.
SPSP::LocalLayers::ESPNOW::Packet
Definition: espnow_packet.hpp:46
SPSP::LocalLayers::ESPNOW::SerDes::decryptAndValidatePacketPayload
bool decryptAndValidatePacketPayload(uint8_t *data, size_t dataLen) const noexcept
Decrypts and validates packet's payload.
SPSP::LocalLayers::ESPNOW::SerDes::getPacketLength
static size_t getPacketLength(const LocalMessageT &msg) noexcept
Calculates total packet length.
SPSP::LocalLayers::ESPNOW::SerDes::encryptRaw
void encryptRaw(uint8_t *data, size_t dataLen, const uint8_t *nonce) const noexcept
Encryption provider for raw data (bytes)
SPSP::Random
ESP random generator.
Definition: espidf/spsp/random.hpp:25
SPSP::LocalLayers::ESPNOW::SerDes
Serializer and deserializer of ESP-NOW packets.
Definition: espnow_ser_des.hpp:23
SPSP::LocalLayers::ESPNOW::SerDes::serialize
void serialize(const LocalMessageT &msg, std::string &data) const noexcept
Serializes local message to raw data.
SPSP::LocalLayers::ESPNOW::Config
ESP-NOW configuration.
Definition: espnow_types.hpp:26
SPSP::LocalLayers::ESPNOW::SerDes::deserialize
bool deserialize(const LocalAddrT &src, std::string &data, LocalMessageT &msg) const noexcept
Deserializes raw data to local message.
espnow_types.hpp
Types for ESPNOW classes.
SPSP::LocalLayers::ESPNOW::SerDes::validatePacketHeader
bool validatePacketHeader(const Packet *p) const noexcept
Validates packet's header.
SPSP::LocalAddrMAC
Local layer address container for MAC address.
Definition: local_addr_mac.hpp:24
SPSP::LocalLayers::ESPNOW::SerDes::checksumRaw
static uint8_t checksumRaw(uint8_t *data, size_t dataLen, uint8_t existingChecksum=0) noexcept
Checksums the given raw data (bytes)
SPSP::LocalMessage
Local message representation.
Definition: local_message.hpp:70
SPSP::LocalLayers::ESPNOW::SerDes::SerDes
SerDes(const Config &conf) noexcept
Construct a new serializer/deserializer.