256bit key generation function

This commit is contained in:
Nunu 2024-01-25 18:41:11 +01:00
parent 5b02ce3e90
commit 21bea186e6
2 changed files with 18 additions and 14 deletions

View File

@ -22,9 +22,11 @@
// salt used for hashing encryption key from eeprom used for sending packets
// we never actually use the key stored in eeprom directly
// actually salt should be [16] + key [16] and then we hash it and get encryption key [32]
static const uint8_t encryptionSalt[32] = {
0xEF, 0x58, 0x0A, 0xC6, 0x12, 0x4A, 0xFA, 0x4F, 0xAE, 0x6F, 0x9D, 0x3C, 0xBB, 0x80, 0xAC, 0x4A,
0xF3, 0x5E, 0x11, 0x69, 0xC7, 0x97, 0xFB, 0xC6, 0x27, 0x4F, 0xB7, 0x1A, 0xA7, 0xE5, 0x77, 0x9C
static const uint8_t encryptionSalt[4][8] = {
{0xEF, 0x58, 0x0A, 0xC6, 0x12, 0x4A, 0xFA, 0x4F},
{0xAE, 0x6F, 0x9D, 0x3C, 0xBB, 0x80, 0xAC, 0x4A},
{0xF3, 0x5E, 0x11, 0x69, 0xC7, 0x97, 0xFB, 0xC6},
{0x27, 0x4F, 0xB7, 0x1A, 0xA7, 0xE5, 0x77, 0x9C}
};
// salt used to display encryption key hash in menu
@ -82,9 +84,9 @@ void CRYPTO_Random(void *output, int len)
// input can be upto 255 bytes
void CRYPTO_HashSalted(const void *input, void *output, const void *salt, int input_len, int salt_len)
{
// FNV offset basis
union eight_bytes hash;
// FNV offset basis
hash.u64 = 0xcbf29ce484222325;
// FNV prime
const uint64_t fnvPrime = 0x100000001b3;
@ -111,18 +113,20 @@ void CRYPTO_HashSalted(const void *input, void *output, const void *salt, int in
// it is not used for an actual encryption
void CRYPTO_DisplayHash(void *input, void *output, int input_len)
{
(void)encryptionSalt;
// char stringHash[10];
CRYPTO_HashSalted(input, output, displaySalt, input_len, sizeof(displaySalt));
// convert uint8_t to ASCII chars
for(int i=0; i<8; i++){
((uint8_t *)output)[i]=(((uint8_t *)output)[i] % 91) + 32;
}
}
// so to generate the 256bit key we need 4 hash operations
// void CRYPTO_EncryptionKeyHash(void *input, void *output, int input_len)
// {
// }
// generate 32 bytes (256 bits) key by combining 4 x 8 byte hash of the same
// 10 byte (80 bits) encryption key (each hash with different salt)
void CRYPTO_Generate256BitKey(void *input, void *output, int input_len)
{
for(int i=0; i<4; i++){
CRYPTO_HashSalted(input, output+(i*8), encryptionSalt[i], input_len, sizeof(encryptionSalt[i]));
}
}

View File

@ -16,7 +16,7 @@
#include <stdint.h>
static const uint8_t encryptionSalt[32];
static const uint8_t encryptionSalt[4][8];
static const uint8_t displaySalt[32];
union eight_bytes {
@ -29,5 +29,5 @@ void CRYPTO_Crypt(void *input, int input_len, void *output, void *nonce, const v
void CRYPTO_Random(void *output, int len);
uint8_t CRYPTO_RandomByte();
void CRYPTO_DisplayHash(void *input, void *output, int input_len);
// void CRYPTO_EncryptionKeyHash(void *input, void *output, int input_len);
void CRYPTO_Generate256BitKey(void *input, void *output, int input_len);
void CRYPTO_HashSalted(const void *input, void *output, const void *salt, int input_len, int salt_len);