avr-fw-modules/core/src/rt_authenticate.c

34 lines
658 B
C
Executable File

#include <hwo/runtime.h>
#include <hwo/bits.h>
uint8_t rt_authenticate(int32_t token) {
uint8_t sum;
if (token == 0) {
rt_ram.accesscode.code = 0;
} else {
sum = 0xE2;
sum ^= rol8( (token >> 0) & 0xff, 3 );
sum ^= rol8( (token >> 8) & 0xff, 5 );
sum ^= rol8( (token >> 16) & 0xff, 2 );
sum ^= rol8( (token >> 24) & 0xff, 1 );
if (sum) {
sum ^= rol8( (rt_ram.eeprom.serial.family),6 );
};
if (!sum) {
rt_ram.accesscode.code = token;
rt_ram.eeprom.last_auth = rt_ram.accesscode.servicepartner;
runtime_signal();
return -1;
} else {
rt_ram.accesscode.code = 0;
};
};
runtime_signal();
return 0;
};