#ifndef MESHCORE_HEADER #define MESHCORE_HEADER #include "packetstructs.h" #include "string.h" #include "sx1262.h" #include "lib/cifra/aes.h" #include "lib/cifra/sha2.h" #include "lib/cifra/hmac.h" #include "lib/base64.h" #include "util/log.h" #include #include "stdio.h" // requires at least a 256 byte data FrameStruct decodeFrame (unsigned char *data, unsigned char dataLen); #define KEY_SIZE 16 // 128-bit AES #define HMAC_SIZE 2 // SHA256 output size int aes_encrypt_ecb (const uint8_t *key, const uint8_t *input, size_t ilen, uint8_t *output); // AES-ECB decrypt (same as Arduino's aes.decryptBlock) int aes_decrypt_ecb (const uint8_t *key, const uint8_t *input, size_t ilen, uint8_t *output); // HMAC-SHA256 int hmac_sha256 (const uint8_t *key, size_t keylen, const uint8_t *input, size_t ilen, uint8_t *output); // Verify MAC + Decrypt int mac_then_decrypt (const uint8_t *aes_key, const uint8_t *input, size_t ilen, uint8_t *plaintext); void hexdump (const char *label, const uint8_t *data, size_t len); #define AESKeyCount 8 // EncryptedPayloadStruct decodeEncryptedPayload(FrameStruct frame); GroupTextMessage decodeGroupMessage (FrameStruct frame); void printGroupMessage (GroupTextMessage msg); AdvertisementPayload decodeAdvertisement (FrameStruct frame); void printAdvertisement (AdvertisementPayload advert); void printFrameHeader (FrameStruct frame); #define AESKeyCount 8 extern const uint8_t aesKeys[AESKeyCount][17]; void sendFrame (FrameStruct frame); void sendGroupMessage (GroupTextMessage msg); void makeSendGroupMessage (char *txt, uint8_t keyIndex); void sendAdvert(); #endif