61 lines
1.7 KiB
C
61 lines
1.7 KiB
C
#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 <ctype.h>
|
|
#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 |