mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
Format
This commit is contained in:
@@ -87,10 +87,13 @@ static bool mykey_parse(const NfcDevice* device, FuriString* parsed_data) {
|
||||
//Calc data
|
||||
uint32_t _uid = get_uid(data->uid);
|
||||
uint32_t _count_down_counter_new = new_get_count_down_counter(__bswap32(data->blocks[6]));
|
||||
uint32_t _vendor_id = get_vendor(get_block(data->blocks[MYKEY_BLOCK_VENDOR_ID_1]), get_block(data->blocks[MYKEY_BLOCK_VENDOR_ID_2]));
|
||||
uint32_t _vendor_id = get_vendor(
|
||||
get_block(data->blocks[MYKEY_BLOCK_VENDOR_ID_1]),
|
||||
get_block(data->blocks[MYKEY_BLOCK_VENDOR_ID_2]));
|
||||
uint32_t _master_key = get_master_key(_uid, _vendor_id);
|
||||
uint32_t _encryption_key = get_encryption_key(_master_key, _count_down_counter_new);
|
||||
uint16_t credit = get_xored_block(data->blocks[MYKEY_BLOCK_CURRENT_CREDIT], _encryption_key);
|
||||
uint16_t credit =
|
||||
get_xored_block(data->blocks[MYKEY_BLOCK_CURRENT_CREDIT], _encryption_key);
|
||||
uint16_t _previous_credit = get_block(data->blocks[MYKEY_BLOCK_PREVIOUS_CREDIT]);
|
||||
bool _is_bound = get_is_bound(_vendor_id);
|
||||
|
||||
@@ -98,8 +101,13 @@ static bool mykey_parse(const NfcDevice* device, FuriString* parsed_data) {
|
||||
furi_string_cat_printf(parsed_data, "\e#MyKey Card\n");
|
||||
furi_string_cat_printf(parsed_data, "UID: %08lX\n", _uid);
|
||||
furi_string_cat_printf(parsed_data, "Vendor ID: %08lX\n", _vendor_id);
|
||||
furi_string_cat_printf(parsed_data, "Current Credit: %d.%02d E \n", credit / 100, credit % 100);
|
||||
furi_string_cat_printf(parsed_data, "Previus Credit: %d.%02d E \n", _previous_credit / 100, _previous_credit % 100);
|
||||
furi_string_cat_printf(
|
||||
parsed_data, "Current Credit: %d.%02d E \n", credit / 100, credit % 100);
|
||||
furi_string_cat_printf(
|
||||
parsed_data,
|
||||
"Previus Credit: %d.%02d E \n",
|
||||
_previous_credit / 100,
|
||||
_previous_credit % 100);
|
||||
furi_string_cat_printf(parsed_data, "Is Bound: %s\n", _is_bound ? "yes" : "no");
|
||||
|
||||
parsed = true;
|
||||
|
||||
@@ -39,25 +39,21 @@ static MfClassicKeyPair saflok_1k_keys[] = {
|
||||
{.a = 0x000000000000, .b = 0xffffffffffff}, // 015
|
||||
};
|
||||
|
||||
void generate_saflok_key(const uint8_t *uid, uint8_t *key) {
|
||||
void generate_saflok_key(const uint8_t* uid, uint8_t* key) {
|
||||
static const uint8_t magic_table[MAGIC_TABLE_SIZE] = {
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xF0, 0x57, 0xB3, 0x9E, 0xE3, 0xD8,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x96, 0x9D, 0x95, 0x4A, 0xC1, 0x57,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x8F, 0x43, 0x58, 0x0D, 0x2C, 0x9D,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xFF, 0xCC, 0xE0, 0x05, 0x0C, 0x43,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x34, 0x1B, 0x15, 0xA6, 0x90, 0xCC,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x89, 0x58, 0x56, 0x12, 0xE7, 0x1B,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xBB, 0x74, 0xB0, 0x95, 0x36, 0x58,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xFB, 0x97, 0xF8, 0x4B, 0x5B, 0x74,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xC9, 0xD1, 0x88, 0x35, 0x9F, 0x92,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x8F, 0x92, 0xE9, 0x7F, 0x58, 0x97,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x16, 0x6C, 0xA2, 0xB0, 0x9F, 0xD1,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x27, 0xDD, 0x93, 0x10, 0x1C, 0x6C,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xDA, 0x3E, 0x3F, 0xD6, 0x49, 0xDD,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x58, 0xDD, 0xED, 0x07, 0x8E, 0x3E,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x5C, 0xD0, 0x05, 0xCF, 0xD9, 0x07,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x11, 0x8D, 0xD0, 0x01, 0x87, 0xD0
|
||||
};
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xF0, 0x57, 0xB3, 0x9E, 0xE3, 0xD8, 0x00, 0x00, 0xAA,
|
||||
0x00, 0x00, 0x00, 0x96, 0x9D, 0x95, 0x4A, 0xC1, 0x57, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00,
|
||||
0x8F, 0x43, 0x58, 0x0D, 0x2C, 0x9D, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xFF, 0xCC, 0xE0,
|
||||
0x05, 0x0C, 0x43, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x34, 0x1B, 0x15, 0xA6, 0x90, 0xCC,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x89, 0x58, 0x56, 0x12, 0xE7, 0x1B, 0x00, 0x00, 0xAA,
|
||||
0x00, 0x00, 0x00, 0xBB, 0x74, 0xB0, 0x95, 0x36, 0x58, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00,
|
||||
0xFB, 0x97, 0xF8, 0x4B, 0x5B, 0x74, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xC9, 0xD1, 0x88,
|
||||
0x35, 0x9F, 0x92, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x8F, 0x92, 0xE9, 0x7F, 0x58, 0x97,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x16, 0x6C, 0xA2, 0xB0, 0x9F, 0xD1, 0x00, 0x00, 0xAA,
|
||||
0x00, 0x00, 0x00, 0x27, 0xDD, 0x93, 0x10, 0x1C, 0x6C, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00,
|
||||
0xDA, 0x3E, 0x3F, 0xD6, 0x49, 0xDD, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x58, 0xDD, 0xED,
|
||||
0x07, 0x8E, 0x3E, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x5C, 0xD0, 0x05, 0xCF, 0xD9, 0x07,
|
||||
0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x11, 0x8D, 0xD0, 0x01, 0x87, 0xD0};
|
||||
|
||||
uint8_t magic_byte = (uid[3] >> 4) + (uid[2] >> 4) + (uid[0] & 0x0F);
|
||||
uint8_t magickal_index = (magic_byte & 0x0F) * 12 + 11;
|
||||
@@ -65,7 +61,7 @@ void generate_saflok_key(const uint8_t *uid, uint8_t *key) {
|
||||
uint8_t temp_key[KEY_LENGTH] = {magic_byte, uid[0], uid[1], uid[2], uid[3], magic_byte};
|
||||
uint8_t carry_sum = 0;
|
||||
|
||||
for (int i = KEY_LENGTH - 1; i >= 0; i--, magickal_index--) {
|
||||
for(int i = KEY_LENGTH - 1; i >= 0; i--, magickal_index--) {
|
||||
uint16_t keysum = temp_key[i] + magic_table[magickal_index];
|
||||
temp_key[i] = (keysum & 0xFF) + carry_sum;
|
||||
carry_sum = keysum >> 8;
|
||||
@@ -117,7 +113,8 @@ static bool saflok_read(Nfc* nfc, NfcDevice* device) {
|
||||
|
||||
size_t uid_len;
|
||||
const uint8_t* uid = mf_classic_get_uid(data, &uid_len);
|
||||
FURI_LOG_D(TAG, "Saflok: UID identified: %02X%02X%02X%02X", uid[0], uid[1], uid[2], uid[3]);
|
||||
FURI_LOG_D(
|
||||
TAG, "Saflok: UID identified: %02X%02X%02X%02X", uid[0], uid[1], uid[2], uid[3]);
|
||||
if(uid_len != UID_LENGTH) break;
|
||||
|
||||
uint8_t key[KEY_LENGTH];
|
||||
|
||||
Reference in New Issue
Block a user