diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/nfc/common/device.cpp | 18 | ||||
| -rw-r--r-- | src/core/hle/service/nfc/common/device.h | 2 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/core/hle/service/nfc/common/device.cpp b/src/core/hle/service/nfc/common/device.cpp index 9b0685bdb..322bde2ed 100644 --- a/src/core/hle/service/nfc/common/device.cpp +++ b/src/core/hle/service/nfc/common/device.cpp | |||
| @@ -48,9 +48,6 @@ NfcDevice::NfcDevice(Core::HID::NpadIdType npad_id_, Core::System& system_, | |||
| 48 | }; | 48 | }; |
| 49 | is_controller_set = true; | 49 | is_controller_set = true; |
| 50 | callback_key = npad_device->SetCallback(engine_callback); | 50 | callback_key = npad_device->SetCallback(engine_callback); |
| 51 | |||
| 52 | auto& standard_steady_clock{system.GetTimeManager().GetStandardSteadyClockCore()}; | ||
| 53 | current_posix_time = standard_steady_clock.GetCurrentTimePoint(system).time_point; | ||
| 54 | } | 51 | } |
| 55 | 52 | ||
| 56 | NfcDevice::~NfcDevice() { | 53 | NfcDevice::~NfcDevice() { |
| @@ -232,6 +229,7 @@ Result NfcDevice::GetTagInfo(NFP::TagInfo& tag_info, bool is_mifare) const { | |||
| 232 | // Generate random UUID to bypass amiibo load limits | 229 | // Generate random UUID to bypass amiibo load limits |
| 233 | if (Settings::values.random_amiibo_id) { | 230 | if (Settings::values.random_amiibo_id) { |
| 234 | Common::TinyMT rng{}; | 231 | Common::TinyMT rng{}; |
| 232 | rng.Initialize(static_cast<u32>(GetCurrentPosixTime())); | ||
| 235 | rng.GenerateRandomBytes(uuid.data(), sizeof(UniqueSerialNumber)); | 233 | rng.GenerateRandomBytes(uuid.data(), sizeof(UniqueSerialNumber)); |
| 236 | uuid[3] = 0x88 ^ uuid[0] ^ uuid[1] ^ uuid[2]; | 234 | uuid[3] = 0x88 ^ uuid[0] ^ uuid[1] ^ uuid[2]; |
| 237 | } | 235 | } |
| @@ -415,7 +413,7 @@ Result NfcDevice::Flush() { | |||
| 415 | 413 | ||
| 416 | auto& settings = tag_data.settings; | 414 | auto& settings = tag_data.settings; |
| 417 | 415 | ||
| 418 | const auto& current_date = GetAmiiboDate(current_posix_time); | 416 | const auto& current_date = GetAmiiboDate(GetCurrentPosixTime()); |
| 419 | if (settings.write_date.raw_date != current_date.raw_date) { | 417 | if (settings.write_date.raw_date != current_date.raw_date) { |
| 420 | settings.write_date = current_date; | 418 | settings.write_date = current_date; |
| 421 | UpdateSettingsCrc(); | 419 | UpdateSettingsCrc(); |
| @@ -534,6 +532,7 @@ Result NfcDevice::GetModelInfo(NFP::ModelInfo& model_info) const { | |||
| 534 | } | 532 | } |
| 535 | 533 | ||
| 536 | const auto& model_info_data = encrypted_tag_data.user_memory.model_info; | 534 | const auto& model_info_data = encrypted_tag_data.user_memory.model_info; |
| 535 | |||
| 537 | model_info = { | 536 | model_info = { |
| 538 | .character_id = model_info_data.character_id, | 537 | .character_id = model_info_data.character_id, |
| 539 | .character_variant = model_info_data.character_variant, | 538 | .character_variant = model_info_data.character_variant, |
| @@ -678,6 +677,7 @@ Result NfcDevice::DeleteRegisterInfo() { | |||
| 678 | } | 677 | } |
| 679 | 678 | ||
| 680 | Common::TinyMT rng{}; | 679 | Common::TinyMT rng{}; |
| 680 | rng.Initialize(static_cast<u32>(GetCurrentPosixTime())); | ||
| 681 | rng.GenerateRandomBytes(&tag_data.owner_mii, sizeof(tag_data.owner_mii)); | 681 | rng.GenerateRandomBytes(&tag_data.owner_mii, sizeof(tag_data.owner_mii)); |
| 682 | rng.GenerateRandomBytes(&tag_data.settings.amiibo_name, sizeof(tag_data.settings.amiibo_name)); | 682 | rng.GenerateRandomBytes(&tag_data.settings.amiibo_name, sizeof(tag_data.settings.amiibo_name)); |
| 683 | rng.GenerateRandomBytes(&tag_data.unknown, sizeof(u8)); | 683 | rng.GenerateRandomBytes(&tag_data.unknown, sizeof(u8)); |
| @@ -710,7 +710,7 @@ Result NfcDevice::SetRegisterInfoPrivate(const NFP::RegisterInfoPrivate& registe | |||
| 710 | auto& settings = tag_data.settings; | 710 | auto& settings = tag_data.settings; |
| 711 | 711 | ||
| 712 | if (tag_data.settings.settings.amiibo_initialized == 0) { | 712 | if (tag_data.settings.settings.amiibo_initialized == 0) { |
| 713 | settings.init_date = GetAmiiboDate(current_posix_time); | 713 | settings.init_date = GetAmiiboDate(GetCurrentPosixTime()); |
| 714 | settings.write_date.raw_date = 0; | 714 | settings.write_date.raw_date = 0; |
| 715 | } | 715 | } |
| 716 | 716 | ||
| @@ -877,6 +877,7 @@ Result NfcDevice::SetApplicationArea(std::span<const u8> data) { | |||
| 877 | } | 877 | } |
| 878 | 878 | ||
| 879 | Common::TinyMT rng{}; | 879 | Common::TinyMT rng{}; |
| 880 | rng.Initialize(static_cast<u32>(GetCurrentPosixTime())); | ||
| 880 | std::memcpy(tag_data.application_area.data(), data.data(), data.size()); | 881 | std::memcpy(tag_data.application_area.data(), data.data(), data.size()); |
| 881 | // Fill remaining data with random numbers | 882 | // Fill remaining data with random numbers |
| 882 | rng.GenerateRandomBytes(tag_data.application_area.data() + data.size(), | 883 | rng.GenerateRandomBytes(tag_data.application_area.data() + data.size(), |
| @@ -933,6 +934,7 @@ Result NfcDevice::RecreateApplicationArea(u32 access_id, std::span<const u8> dat | |||
| 933 | } | 934 | } |
| 934 | 935 | ||
| 935 | Common::TinyMT rng{}; | 936 | Common::TinyMT rng{}; |
| 937 | rng.Initialize(static_cast<u32>(GetCurrentPosixTime())); | ||
| 936 | std::memcpy(tag_data.application_area.data(), data.data(), data.size()); | 938 | std::memcpy(tag_data.application_area.data(), data.data(), data.size()); |
| 937 | // Fill remaining data with random numbers | 939 | // Fill remaining data with random numbers |
| 938 | rng.GenerateRandomBytes(tag_data.application_area.data() + data.size(), | 940 | rng.GenerateRandomBytes(tag_data.application_area.data() + data.size(), |
| @@ -982,6 +984,7 @@ Result NfcDevice::DeleteApplicationArea() { | |||
| 982 | } | 984 | } |
| 983 | 985 | ||
| 984 | Common::TinyMT rng{}; | 986 | Common::TinyMT rng{}; |
| 987 | rng.Initialize(static_cast<u32>(GetCurrentPosixTime())); | ||
| 985 | rng.GenerateRandomBytes(tag_data.application_area.data(), sizeof(NFP::ApplicationArea)); | 988 | rng.GenerateRandomBytes(tag_data.application_area.data(), sizeof(NFP::ApplicationArea)); |
| 986 | rng.GenerateRandomBytes(&tag_data.application_id, sizeof(u64)); | 989 | rng.GenerateRandomBytes(&tag_data.application_id, sizeof(u64)); |
| 987 | rng.GenerateRandomBytes(&tag_data.application_area_id, sizeof(u32)); | 990 | rng.GenerateRandomBytes(&tag_data.application_area_id, sizeof(u32)); |
| @@ -1198,6 +1201,11 @@ NFP::AmiiboDate NfcDevice::GetAmiiboDate(s64 posix_time) const { | |||
| 1198 | return amiibo_date; | 1201 | return amiibo_date; |
| 1199 | } | 1202 | } |
| 1200 | 1203 | ||
| 1204 | u64 NfcDevice::GetCurrentPosixTime() const { | ||
| 1205 | auto& standard_steady_clock{system.GetTimeManager().GetStandardSteadyClockCore()}; | ||
| 1206 | return standard_steady_clock.GetCurrentTimePoint(system).time_point; | ||
| 1207 | } | ||
| 1208 | |||
| 1201 | u64 NfcDevice::RemoveVersionByte(u64 application_id) const { | 1209 | u64 NfcDevice::RemoveVersionByte(u64 application_id) const { |
| 1202 | return application_id & ~(0xfULL << NFP::application_id_version_offset); | 1210 | return application_id & ~(0xfULL << NFP::application_id_version_offset); |
| 1203 | } | 1211 | } |
diff --git a/src/core/hle/service/nfc/common/device.h b/src/core/hle/service/nfc/common/device.h index 654eda98e..98e1945c1 100644 --- a/src/core/hle/service/nfc/common/device.h +++ b/src/core/hle/service/nfc/common/device.h | |||
| @@ -105,6 +105,7 @@ private: | |||
| 105 | NFP::AmiiboName GetAmiiboName(const NFP::AmiiboSettings& settings) const; | 105 | NFP::AmiiboName GetAmiiboName(const NFP::AmiiboSettings& settings) const; |
| 106 | void SetAmiiboName(NFP::AmiiboSettings& settings, const NFP::AmiiboName& amiibo_name); | 106 | void SetAmiiboName(NFP::AmiiboSettings& settings, const NFP::AmiiboName& amiibo_name); |
| 107 | NFP::AmiiboDate GetAmiiboDate(s64 posix_time) const; | 107 | NFP::AmiiboDate GetAmiiboDate(s64 posix_time) const; |
| 108 | u64 GetCurrentPosixTime() const; | ||
| 108 | u64 RemoveVersionByte(u64 application_id) const; | 109 | u64 RemoveVersionByte(u64 application_id) const; |
| 109 | void UpdateSettingsCrc(); | 110 | void UpdateSettingsCrc(); |
| 110 | void UpdateRegisterInfoCrc(); | 111 | void UpdateRegisterInfoCrc(); |
| @@ -127,7 +128,6 @@ private: | |||
| 127 | bool is_data_moddified{}; | 128 | bool is_data_moddified{}; |
| 128 | bool is_app_area_open{}; | 129 | bool is_app_area_open{}; |
| 129 | bool is_plain_amiibo{}; | 130 | bool is_plain_amiibo{}; |
| 130 | s64 current_posix_time{}; | ||
| 131 | NFP::MountTarget mount_target{NFP::MountTarget::None}; | 131 | NFP::MountTarget mount_target{NFP::MountTarget::None}; |
| 132 | 132 | ||
| 133 | NFP::NTAG215File tag_data{}; | 133 | NFP::NTAG215File tag_data{}; |