summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/nfc/common/device.cpp18
-rw-r--r--src/core/hle/service/nfc/common/device.h2
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
56NfcDevice::~NfcDevice() { 53NfcDevice::~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
1204u64 NfcDevice::GetCurrentPosixTime() const {
1205 auto& standard_steady_clock{system.GetTimeManager().GetStandardSteadyClockCore()};
1206 return standard_steady_clock.GetCurrentTimePoint(system).time_point;
1207}
1208
1201u64 NfcDevice::RemoveVersionByte(u64 application_id) const { 1209u64 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{};