nfp: Allow files without password data
This commit is contained in:
		| @@ -479,25 +479,35 @@ void Module::Interface::CreateUserInterface(Kernel::HLERequestContext& ctx) { | |||||||
| } | } | ||||||
|  |  | ||||||
| bool Module::Interface::LoadAmiibo(const std::vector<u8>& buffer) { | bool Module::Interface::LoadAmiibo(const std::vector<u8>& buffer) { | ||||||
|     if (buffer.size() < sizeof(NTAG215File)) { |  | ||||||
|         LOG_ERROR(Service_NFP, "Wrong file size"); |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (device_state != DeviceState::SearchingForTag) { |     if (device_state != DeviceState::SearchingForTag) { | ||||||
|         LOG_ERROR(Service_NFP, "Game is not looking for amiibos, current state {}", device_state); |         LOG_ERROR(Service_NFP, "Game is not looking for amiibos, current state {}", device_state); | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     constexpr auto tag_size = sizeof(NTAG215File); | ||||||
|  |     constexpr auto tag_size_without_password = sizeof(NTAG215File) - sizeof(NTAG215Password); | ||||||
|  |  | ||||||
|  |     std::vector<u8> amiibo_buffer = buffer; | ||||||
|  |  | ||||||
|  |     if (amiibo_buffer.size() < tag_size_without_password) { | ||||||
|  |         LOG_ERROR(Service_NFP, "Wrong file size {}", buffer.size()); | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Ensure it has the correct size | ||||||
|  |     if (amiibo_buffer.size() != tag_size) { | ||||||
|  |         amiibo_buffer.resize(tag_size, 0); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     LOG_INFO(Service_NFP, "Amiibo detected"); |     LOG_INFO(Service_NFP, "Amiibo detected"); | ||||||
|     std::memcpy(&tag_data, buffer.data(), sizeof(tag_data)); |     std::memcpy(&tag_data, buffer.data(), tag_size); | ||||||
|  |  | ||||||
|     if (!IsAmiiboValid()) { |     if (!IsAmiiboValid()) { | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // This value can't be dumped from a tag. Generate it |     // This value can't be dumped from a tag. Generate it | ||||||
|     tag_data.PWD = GetTagPassword(tag_data.uuid); |     tag_data.password.PWD = GetTagPassword(tag_data.uuid); | ||||||
|  |  | ||||||
|     device_state = DeviceState::TagFound; |     device_state = DeviceState::TagFound; | ||||||
|     activate_event->GetWritableEvent().Signal(); |     activate_event->GetWritableEvent().Signal(); | ||||||
|   | |||||||
| @@ -153,6 +153,13 @@ public: | |||||||
|         }; |         }; | ||||||
|         static_assert(sizeof(EncryptedAmiiboFile) == 0x1F8, "AmiiboFile is an invalid size"); |         static_assert(sizeof(EncryptedAmiiboFile) == 0x1F8, "AmiiboFile is an invalid size"); | ||||||
|  |  | ||||||
|  |         struct NTAG215Password { | ||||||
|  |             u32 PWD;  // Password to allow write access | ||||||
|  |             u16 PACK; // Password acknowledge reply | ||||||
|  |             u16 RFUI; // Reserved for future use | ||||||
|  |         }; | ||||||
|  |         static_assert(sizeof(NTAG215Password) == 0x8, "NTAG215Password is an invalid size"); | ||||||
|  |  | ||||||
|         struct NTAG215File { |         struct NTAG215File { | ||||||
|             TagUuid uuid;                    // Unique serial number |             TagUuid uuid;                    // Unique serial number | ||||||
|             u16 lock_bytes;                  // Set defined pages as read only |             u16 lock_bytes;                  // Set defined pages as read only | ||||||
| @@ -161,9 +168,7 @@ public: | |||||||
|             u32 dynamic_lock;                // Dynamic lock |             u32 dynamic_lock;                // Dynamic lock | ||||||
|             u32 CFG0;                        // Defines memory protected by password |             u32 CFG0;                        // Defines memory protected by password | ||||||
|             u32 CFG1;                        // Defines number of verification attempts |             u32 CFG1;                        // Defines number of verification attempts | ||||||
|             u32 PWD;                         // Password to allow write access |             NTAG215Password password;        // Password data | ||||||
|             u16 PACK;                        // Password acknowledge reply |  | ||||||
|             u16 RFUI;                        // Reserved for future use |  | ||||||
|         }; |         }; | ||||||
|         static_assert(sizeof(NTAG215File) == 0x21C, "NTAG215File is an invalid size"); |         static_assert(sizeof(NTAG215File) == 0x21C, "NTAG215File is an invalid size"); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 german77
					german77