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:
		
							parent
							
								
									86773a7f08
								
							
						
					
					
						commit
						1bde5a3c6a
					
				
					 1 changed files with 33 additions and 1 deletions
				
			
		|  | @ -150,7 +150,7 @@ public: | ||||||
|             {10200, nullptr, "CancelSyncDeliveryCacheRequest"}, |             {10200, nullptr, "CancelSyncDeliveryCacheRequest"}, | ||||||
|             {20100, nullptr, "RequestSyncDeliveryCacheWithApplicationId"}, |             {20100, nullptr, "RequestSyncDeliveryCacheWithApplicationId"}, | ||||||
|             {20101, nullptr, "RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName"}, |             {20101, nullptr, "RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName"}, | ||||||
|             {30100, nullptr, "SetPassphrase"}, |             {30100, &IBcatService::SetPassphrase, "SetPassphrase"}, | ||||||
|             {30200, nullptr, "RegisterBackgroundDeliveryTask"}, |             {30200, nullptr, "RegisterBackgroundDeliveryTask"}, | ||||||
|             {30201, nullptr, "UnregisterBackgroundDeliveryTask"}, |             {30201, nullptr, "UnregisterBackgroundDeliveryTask"}, | ||||||
|             {30202, nullptr, "BlockDeliveryTask"}, |             {30202, nullptr, "BlockDeliveryTask"}, | ||||||
|  | @ -220,6 +220,38 @@ private: | ||||||
|         rb.PushIpcInterface(CreateProgressService(SyncType::Directory)); |         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; |     Backend& backend; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Zach Hilman
						Zach Hilman