bcat: Implement cmd 30100 SetPassphrase
Takes a title ID and passphrase (0x40 byte string) and passes it to the backend.
This commit is contained in:
		| @@ -150,7 +150,7 @@ public: | ||||
|             {10200, nullptr, "CancelSyncDeliveryCacheRequest"}, | ||||
|             {20100, nullptr, "RequestSyncDeliveryCacheWithApplicationId"}, | ||||
|             {20101, nullptr, "RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName"}, | ||||
|             {30100, nullptr, "SetPassphrase"}, | ||||
|             {30100, &IBcatService::SetPassphrase, "SetPassphrase"}, | ||||
|             {30200, nullptr, "RegisterBackgroundDeliveryTask"}, | ||||
|             {30201, nullptr, "UnregisterBackgroundDeliveryTask"}, | ||||
|             {30202, nullptr, "BlockDeliveryTask"}, | ||||
| @@ -220,6 +220,38 @@ private: | ||||
|         rb.PushIpcInterface(CreateProgressService(SyncType::Directory)); | ||||
|     } | ||||
|  | ||||
|     void SetPassphrase(Kernel::HLERequestContext& ctx) { | ||||
|         IPC::RequestParser rp{ctx}; | ||||
|         const auto title_id = rp.PopRaw<u64>(); | ||||
|  | ||||
|         const auto passphrase_raw = ctx.ReadBuffer(); | ||||
|  | ||||
|         LOG_DEBUG(Service_BCAT, "called, title_id={:016X}, passphrase={}", title_id, | ||||
|                   Common::HexVectorToString(passphrase_raw)); | ||||
|  | ||||
|         if (title_id == 0) { | ||||
|             LOG_ERROR(Service_BCAT, "Invalid title ID!"); | ||||
|             IPC::ResponseBuilder rb{ctx, 2}; | ||||
|             rb.Push(ERROR_INVALID_ARGUMENT); | ||||
|         } | ||||
|  | ||||
|         if (passphrase_raw.size() > 0x40) { | ||||
|             LOG_ERROR(Service_BCAT, "Passphrase too large!"); | ||||
|             IPC::ResponseBuilder rb{ctx, 2}; | ||||
|             rb.Push(ERROR_INVALID_ARGUMENT); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         Passphrase passphrase{}; | ||||
|         std::memcpy(passphrase.data(), passphrase_raw.data(), | ||||
|                     std::min(passphrase.size(), passphrase_raw.size())); | ||||
|  | ||||
|         backend.SetPassphrase(title_id, passphrase); | ||||
|  | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(RESULT_SUCCESS); | ||||
|     } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     Backend& backend; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zach Hilman
					Zach Hilman