#pragma once #include "relay/interface/CryptoSource.h" #include "ESP32NoiseSource.h" class ESP32CryptoSource: CryptoSource { public: ESP32CryptoSource(const char* rngInitTag); bool isAvailable() override { return true; } /** * @brief Create a new random private key * * @param key The output buffer where the key will be stored * @return true The key was created * @return false The key could not be created */ bool createPrivateKey(PrivateKey* key) override; /** * @brief Create a the public key corresponding to a private key * * @param privateKey The private key to use * @param publicKey The output buffer where the public key will be stored * @return true The key was created * @return false The key could not be created */ bool createPublicKey(const PrivateKey* privateKey, PublicKey* publicKey) override; /** * @brief Sign a message * * @param message The message payload to include in the message * @param length The length of the payload * @param signature The output buffer where the signature is written * @return true The signature was created * @return false The signature creation failed */ bool sign(const uint8_t *message, uint16_t length, Signature* signature, const PrivateKey* privateKey, const PublicKey* publicKey) override; /** * @brief Verify a message * * @param signature The message signature * @param publicKey The public key with which the message was signed * @param message The pointer to the message data * @param length The length of the message * @return true The signature is valid * @return false The signature is invalid */ bool verify(const Signature* signature, const PublicKey* publicKey, const void *message, uint16_t length) override; private: ESP32NoiseSource noise{}; };