mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 20:49:49 +04:00
slix poller: add check privacy password state
This commit is contained in:
@@ -73,17 +73,62 @@ static NfcCommand slix_poller_handler_read_signature(SlixPoller* instance) {
|
|||||||
if(slix_type_has_features(instance->type, SLIX_TYPE_FEATURE_SIGNATURE)) {
|
if(slix_type_has_features(instance->type, SLIX_TYPE_FEATURE_SIGNATURE)) {
|
||||||
instance->error = slix_poller_read_signature(instance, &instance->data->signature);
|
instance->error = slix_poller_read_signature(instance, &instance->data->signature);
|
||||||
if(instance->error == SlixErrorNone) {
|
if(instance->error == SlixErrorNone) {
|
||||||
instance->poller_state = SlixPollerStateReady;
|
instance->poller_state = SlixPollerStateCheckPrivacyPassword;
|
||||||
} else {
|
} else {
|
||||||
instance->poller_state = SlixPollerStateError;
|
instance->poller_state = SlixPollerStateError;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
instance->poller_state = SlixPollerStateReady;
|
instance->poller_state = SlixPollerStateCheckPrivacyPassword;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NfcCommandContinue;
|
return NfcCommandContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NfcCommand slix_poller_handler_check_privacy_password(SlixPoller* instance) {
|
||||||
|
NfcCommand command = NfcCommandContinue;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if(!slix_type_has_features(instance->type, SLIX_TYPE_FEATURE_PRIVACY)) {
|
||||||
|
instance->poller_state = SlixPollerStateReady;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(instance->privacy_password_checked) {
|
||||||
|
instance->poller_state = SlixPollerStateReady;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
instance->slix_event.type = SlixPollerEventTypePrivacyUnlockRequest;
|
||||||
|
command = instance->callback(instance->general_event, instance->context);
|
||||||
|
|
||||||
|
if(!instance->slix_event_data.privacy_password.password_set) {
|
||||||
|
instance->poller_state = SlixPollerStateReady;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SlixPassword pwd = instance->slix_event_data.privacy_password.password;
|
||||||
|
FURI_LOG_I(TAG, "Trying to check privacy password: %08lX", pwd);
|
||||||
|
|
||||||
|
instance->error = slix_poller_get_random_number(instance, &instance->random_number);
|
||||||
|
if(instance->error != SlixErrorNone) {
|
||||||
|
instance->poller_state = SlixPollerStateReady;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
instance->error = slix_poller_set_password(instance, SlixPasswordTypePrivacy, pwd);
|
||||||
|
if(instance->error != SlixErrorNone) {
|
||||||
|
command = NfcCommandReset;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
FURI_LOG_I(TAG, "Found privacy password");
|
||||||
|
instance->data->passwords[SlixPasswordTypePrivacy] = pwd;
|
||||||
|
instance->privacy_password_checked = true;
|
||||||
|
instance->poller_state = SlixPollerStateReady;
|
||||||
|
} while(false);
|
||||||
|
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
static NfcCommand slix_poller_handler_privacy_unlock(SlixPoller* instance) {
|
static NfcCommand slix_poller_handler_privacy_unlock(SlixPoller* instance) {
|
||||||
NfcCommand command = NfcCommandContinue;
|
NfcCommand command = NfcCommandContinue;
|
||||||
instance->poller_state = SlixPollerStateError;
|
instance->poller_state = SlixPollerStateError;
|
||||||
@@ -108,6 +153,7 @@ static NfcCommand slix_poller_handler_privacy_unlock(SlixPoller* instance) {
|
|||||||
|
|
||||||
FURI_LOG_I(TAG, "Privacy mode disabled");
|
FURI_LOG_I(TAG, "Privacy mode disabled");
|
||||||
instance->data->passwords[SlixPasswordTypePrivacy] = pwd;
|
instance->data->passwords[SlixPasswordTypePrivacy] = pwd;
|
||||||
|
instance->privacy_password_checked = true;
|
||||||
instance->poller_state = SlixPollerStateIdle;
|
instance->poller_state = SlixPollerStateIdle;
|
||||||
slix_unlocked = true;
|
slix_unlocked = true;
|
||||||
} while(false);
|
} while(false);
|
||||||
@@ -140,6 +186,7 @@ static const SlixPollerStateHandler slix_poller_state_handler[SlixPollerStateNum
|
|||||||
[SlixPollerStateError] = slix_poller_handler_error,
|
[SlixPollerStateError] = slix_poller_handler_error,
|
||||||
[SlixPollerStateGetNxpSysInfo] = slix_poller_handler_get_nfc_system_info,
|
[SlixPollerStateGetNxpSysInfo] = slix_poller_handler_get_nfc_system_info,
|
||||||
[SlixPollerStateReadSignature] = slix_poller_handler_read_signature,
|
[SlixPollerStateReadSignature] = slix_poller_handler_read_signature,
|
||||||
|
[SlixPollerStateCheckPrivacyPassword] = slix_poller_handler_check_privacy_password,
|
||||||
[SlixPollerStatePrivacyUnlock] = slix_poller_handler_privacy_unlock,
|
[SlixPollerStatePrivacyUnlock] = slix_poller_handler_privacy_unlock,
|
||||||
[SlixPollerStateReady] = slix_poller_handler_ready,
|
[SlixPollerStateReady] = slix_poller_handler_ready,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ typedef enum {
|
|||||||
SlixPollerStateIdle,
|
SlixPollerStateIdle,
|
||||||
SlixPollerStateGetNxpSysInfo,
|
SlixPollerStateGetNxpSysInfo,
|
||||||
SlixPollerStateReadSignature,
|
SlixPollerStateReadSignature,
|
||||||
|
SlixPollerStateCheckPrivacyPassword,
|
||||||
SlixPollerStatePrivacyUnlock,
|
SlixPollerStatePrivacyUnlock,
|
||||||
SlixPollerStateReady,
|
SlixPollerStateReady,
|
||||||
SlixPollerStateError,
|
SlixPollerStateError,
|
||||||
@@ -27,6 +28,7 @@ struct SlixPoller {
|
|||||||
SlixPollerState poller_state;
|
SlixPollerState poller_state;
|
||||||
SlixError error;
|
SlixError error;
|
||||||
SlixRandomNumber random_number;
|
SlixRandomNumber random_number;
|
||||||
|
bool privacy_password_checked;
|
||||||
|
|
||||||
BitBuffer* tx_buffer;
|
BitBuffer* tx_buffer;
|
||||||
BitBuffer* rx_buffer;
|
BitBuffer* rx_buffer;
|
||||||
|
|||||||
Reference in New Issue
Block a user