2020-05-09 16:15:01 -07:00
|
|
|
#include "configuration.h"
|
2021-06-27 10:56:28 -07:00
|
|
|
#include "CryptoEngine.h"
|
2020-05-09 16:15:01 -07:00
|
|
|
|
2021-02-23 10:10:35 +08:00
|
|
|
void CryptoEngine::setKey(const CryptoKey &k)
|
2020-05-09 16:15:01 -07:00
|
|
|
{
|
2022-06-04 10:37:24 +02:00
|
|
|
DEBUG_MSG("Using AES%d key!\n", k.length * 8);
|
2021-03-06 14:21:20 +08:00
|
|
|
/* for(uint8_t i = 0; i < k.length; i++)
|
|
|
|
|
DEBUG_MSG("%02x ", k.bytes[i]);
|
|
|
|
|
DEBUG_MSG("\n"); */
|
|
|
|
|
|
2021-02-23 10:10:35 +08:00
|
|
|
key = k;
|
2020-05-09 16:15:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Encrypt a packet
|
|
|
|
|
*
|
|
|
|
|
* @param bytes is updated in place
|
|
|
|
|
*/
|
2022-03-20 11:40:13 +11:00
|
|
|
void CryptoEngine::encrypt(uint32_t fromNode, uint64_t packetId, size_t numBytes, uint8_t *bytes)
|
2020-05-09 17:51:20 -07:00
|
|
|
{
|
|
|
|
|
DEBUG_MSG("WARNING: noop encryption!\n");
|
|
|
|
|
}
|
2020-05-09 16:15:01 -07:00
|
|
|
|
2022-03-20 11:40:13 +11:00
|
|
|
void CryptoEngine::decrypt(uint32_t fromNode, uint64_t packetId, size_t numBytes, uint8_t *bytes)
|
2020-05-09 17:51:20 -07:00
|
|
|
{
|
|
|
|
|
DEBUG_MSG("WARNING: noop decryption!\n");
|
2020-05-09 19:08:04 -07:00
|
|
|
}
|
|
|
|
|
|
2022-06-04 10:37:24 +02:00
|
|
|
// Usage:
|
|
|
|
|
// hexDump(desc, addr, len, perLine);
|
|
|
|
|
// desc: if non-NULL, printed as a description before hex dump.
|
|
|
|
|
// addr: the address to start dumping from.
|
|
|
|
|
// len: the number of bytes to dump.
|
|
|
|
|
// perLine: number of bytes on each output line.
|
|
|
|
|
|
|
|
|
|
void CryptoEngine::hexDump (const char * desc, const void * addr, const int len, int perLine)
|
|
|
|
|
{
|
|
|
|
|
// Silently ignore silly per-line values.
|
|
|
|
|
|
|
|
|
|
if (perLine < 4 || perLine > 64) perLine = 16;
|
|
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
unsigned char buff[perLine+1];
|
|
|
|
|
const unsigned char * pc = (const unsigned char *)addr;
|
|
|
|
|
|
|
|
|
|
// Output description if given.
|
|
|
|
|
|
|
|
|
|
if (desc != NULL) DEBUG_MSG ("%s:\n", desc);
|
|
|
|
|
|
|
|
|
|
// Length checks.
|
|
|
|
|
|
|
|
|
|
if (len == 0) {
|
|
|
|
|
DEBUG_MSG(" ZERO LENGTH\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (len < 0) {
|
|
|
|
|
DEBUG_MSG(" NEGATIVE LENGTH: %d\n", len);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Process every byte in the data.
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
|
// Multiple of perLine means new or first line (with line offset).
|
|
|
|
|
|
|
|
|
|
if ((i % perLine) == 0) {
|
|
|
|
|
// Only print previous-line ASCII buffer for lines beyond first.
|
|
|
|
|
|
|
|
|
|
if (i != 0) DEBUG_MSG (" %s\n", buff);
|
|
|
|
|
|
|
|
|
|
// Output the offset of current line.
|
|
|
|
|
|
|
|
|
|
DEBUG_MSG (" %04x ", i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Now the hex code for the specific character.
|
|
|
|
|
|
|
|
|
|
DEBUG_MSG (" %02x", pc[i]);
|
|
|
|
|
|
|
|
|
|
// And buffer a printable ASCII character for later.
|
|
|
|
|
|
|
|
|
|
if ((pc[i] < 0x20) || (pc[i] > 0x7e)) // isprint() may be better.
|
|
|
|
|
buff[i % perLine] = '.';
|
|
|
|
|
else
|
|
|
|
|
buff[i % perLine] = pc[i];
|
|
|
|
|
buff[(i % perLine) + 1] = '\0';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Pad out last line if not exactly perLine characters.
|
|
|
|
|
|
|
|
|
|
while ((i % perLine) != 0) {
|
|
|
|
|
DEBUG_MSG (" ");
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// And print the final ASCII buffer.
|
|
|
|
|
|
|
|
|
|
DEBUG_MSG (" %s\n", buff);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-09 19:08:04 -07:00
|
|
|
/**
|
|
|
|
|
* Init our 128 bit nonce for a new packet
|
|
|
|
|
*/
|
2022-03-20 11:40:13 +11:00
|
|
|
void CryptoEngine::initNonce(uint32_t fromNode, uint64_t packetId)
|
2020-05-09 19:08:04 -07:00
|
|
|
{
|
|
|
|
|
memset(nonce, 0, sizeof(nonce));
|
2021-08-02 10:50:28 -07:00
|
|
|
|
|
|
|
|
// use memcpy to avoid breaking strict-aliasing
|
2022-03-20 11:40:13 +11:00
|
|
|
memcpy(nonce, &packetId, sizeof(uint64_t));
|
2021-08-02 10:50:28 -07:00
|
|
|
memcpy(nonce + sizeof(uint64_t), &fromNode, sizeof(uint32_t));
|
2022-03-20 11:40:13 +11:00
|
|
|
//*((uint64_t *)&nonce[0]) = packetId;
|
2021-08-02 10:50:28 -07:00
|
|
|
//*((uint32_t *)&nonce[8]) = fromNode;
|
2020-05-09 17:51:20 -07:00
|
|
|
}
|