Use TRNG for random numbers instead of analog input pin.
This commit is contained in:
parent
373e8d8e90
commit
fbf7ac127f
3 changed files with 28 additions and 22 deletions
|
|
@ -21,6 +21,7 @@
|
|||
#include "Eth_IPv4.h"
|
||||
#include "HMI_telnet.h"
|
||||
#include "TDMA.h"
|
||||
#include "trng_api.h"
|
||||
|
||||
static unsigned char raw_config_data[260];
|
||||
static unsigned int config_index;
|
||||
|
|
@ -103,17 +104,21 @@ void virt_EEPROM_errase_all(void) {
|
|||
|
||||
// higher level functions
|
||||
|
||||
void NFPR_config_read(AnalogIn* analog_pin) {
|
||||
void NFPR_config_read(void) {
|
||||
int i;
|
||||
unsigned char default_config[260] = NFPR_default_config;
|
||||
uint8_t random[2];
|
||||
|
||||
config_index = virt_EEPROM_read(raw_config_data);
|
||||
if (config_index == 0) { //no previous config found
|
||||
for (i=0; i<256; i++) {
|
||||
raw_config_data[i] = default_config[i];
|
||||
}
|
||||
|
||||
//MAC random 2 LSB values
|
||||
raw_config_data[58] = NFPR_random_generator(analog_pin);
|
||||
raw_config_data[59] = NFPR_random_generator(analog_pin);
|
||||
NFPR_random_generator(random, sizeof(random));
|
||||
raw_config_data[58] = random[0];
|
||||
raw_config_data[59] = random[1];
|
||||
raw_config_data[5] = raw_config_data[58];//callsign 1st char
|
||||
raw_config_data[6] = raw_config_data[59];//callsign 2nd char
|
||||
config_index = virt_EEPROM_write (raw_config_data, config_index);//save the MAC
|
||||
|
|
@ -127,19 +132,24 @@ void NFPR_config_read(AnalogIn* analog_pin) {
|
|||
}
|
||||
}
|
||||
|
||||
unsigned char NFPR_random_generator(AnalogIn* analog_pin) {
|
||||
unsigned short interm_random;
|
||||
unsigned char random_8;
|
||||
int i;
|
||||
random_8 = 0;
|
||||
for (i=0; i<8; i++) {
|
||||
interm_random = analog_pin->read_u16();
|
||||
interm_random = (interm_random & 0x10)>>4;
|
||||
interm_random = (interm_random << i);
|
||||
random_8 = random_8 + interm_random;
|
||||
wait_ms(4);
|
||||
/**
|
||||
* Generate and save random `size` bytes into the `rnd` array.
|
||||
* This code uses the STM32 TRNG HW.
|
||||
* Returns `true` if the resulting data are random.
|
||||
*/
|
||||
bool NFPR_random_generator(uint8_t *rnd, size_t size) {
|
||||
trng_t trng_obj;
|
||||
size_t random_length = 0;
|
||||
|
||||
trng_init(&trng_obj);
|
||||
trng_get_bytes(&trng_obj, rnd, size, &random_length);
|
||||
trng_free(&trng_obj);
|
||||
|
||||
if(random_length == size) {
|
||||
return true;
|
||||
}
|
||||
return random_8;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned int NFPR_config_save(void) {
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
|
||||
unsigned int virt_EEPROM_read(unsigned char* data);
|
||||
|
||||
unsigned char NFPR_random_generator(AnalogIn* analog_pin);
|
||||
bool NFPR_random_generator(uint8_t *rnd, size_t size);
|
||||
|
||||
unsigned int virt_EEPROM_write(unsigned char* in_data, unsigned int previous_index);
|
||||
|
||||
|
|
@ -77,7 +77,7 @@ void apply_config_from_raw_string(unsigned char* data_r);
|
|||
|
||||
void write_config_to_raw_string (unsigned char* data_r);
|
||||
|
||||
void NFPR_config_read(AnalogIn* analog_pin);
|
||||
void NFPR_config_read(void);
|
||||
|
||||
unsigned int NFPR_config_save(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -41,10 +41,6 @@ DigitalOut PTT_PA_pin(PA_0);//GPIO_10
|
|||
|
||||
DigitalOut SI4463_SDN(PA_10);
|
||||
|
||||
// TODO: Get random seed from somewhere else.
|
||||
// TODO: Random PIN is not present on the new PCB.
|
||||
AnalogIn Random_pin(PA_0);
|
||||
|
||||
DigitalOut LED_RX_loc(PB_7);
|
||||
DigitalOut LED_connected(PA_4);
|
||||
|
||||
|
|
@ -162,7 +158,7 @@ int main()
|
|||
}
|
||||
|
||||
wait_ms(100);
|
||||
NFPR_config_read(&Random_pin);
|
||||
NFPR_config_read();
|
||||
|
||||
//SI4463_print_version(G_SI4463);//!!!!
|
||||
SI4463_get_state(G_SI4463);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue