77 lines
1.8 KiB
C
77 lines
1.8 KiB
C
// Author: redlineo, romanov.pd@gmail.com
|
|
|
|
#include QMK_KEYBOARD_H
|
|
#include "quantum.h"
|
|
|
|
#ifndef RED_CRYPTO_H
|
|
# define RED_CRYPTO_H
|
|
|
|
// includes of red_crypto
|
|
# include "kc_to_ascii.h"
|
|
# include "utils.h"
|
|
# include "red_menu.h"
|
|
|
|
// #ifdef USE_RED_KUZNECHIK_128
|
|
// #include "kuznechik_128bit.h"
|
|
// #endif
|
|
|
|
# ifdef USE_RED_KUZNECHIK_8
|
|
# include "kuznechik_8bit.h"
|
|
# ifdef USE_SHA256_KEY
|
|
# include "sha256.h"
|
|
# endif
|
|
# endif
|
|
|
|
# ifdef USE_RED_AES_256
|
|
# include "aes.h"
|
|
# endif
|
|
|
|
# define MAX_KEY_LEN 128
|
|
# define BLOCK_SIZE 16
|
|
|
|
|
|
// example for encrypted 64 byte password
|
|
// const uint8_t red_enc_pass[STORAGE_SIZE][STORAGE_PASS_LEN] = {
|
|
// {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
|
|
// };
|
|
|
|
enum red_crypto_keys {
|
|
RED_CRY_M = SAFE_RANGE + 0x80, // added safe range offset
|
|
RED_MENU,
|
|
RED_RNG,
|
|
RED_TEST,
|
|
RED_LOCK, // TODO: add autolock feature
|
|
RED_PASS1,
|
|
RED_PASS2,
|
|
RED_PASS3,
|
|
RED_PASS4,
|
|
RED_PASS5,
|
|
RED_PASS6,
|
|
RED_PASS7,
|
|
RED_PASS8,
|
|
RED_PASS9,
|
|
RED_PASS10
|
|
};
|
|
|
|
uint8_t storage_size = 4;
|
|
uint8_t storage_pass_len = 64;
|
|
|
|
typedef union {
|
|
uint8_t raw[1+1+4+(uint32_t)storage_size*(uint32_t)storage_pass_len];
|
|
struct {
|
|
uint8_t storage_size;
|
|
uint8_t storage_pass_len;
|
|
uint32_t memory_usage;
|
|
uint8_t passwords[(uint32_t)storage_size*(uint32_t)storage_pass_len];
|
|
};
|
|
} red_crypto_storage;
|
|
|
|
red_crypto_storage enc_pass;
|
|
|
|
uint8_t crypto_process_record_user(uint16_t keycode, keyrecord_t *record);
|
|
|
|
#endif
|