mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	addressed review comments
This commit is contained in:
		
							parent
							
								
									eaaa76b922
								
							
						
					
					
						commit
						ab76b0b684
					
				
					 2 changed files with 27 additions and 13 deletions
				
			
		|  | @ -233,7 +233,7 @@ void LoadNativeFirmKeysOld3DS() { | ||||||
|     firm->Read(0, firm_buffer.size(), firm_buffer.data()); |     firm->Read(0, firm_buffer.size(), firm_buffer.data()); | ||||||
|     firm->Close(); |     firm->Close(); | ||||||
| 
 | 
 | ||||||
|     constexpr std::size_t SLOT_0x25_KEY_X_SECRET_OFFSET = 934444; |     constexpr std::size_t SLOT_0x25_KEY_X_SECRET_OFFSET = 933480; | ||||||
|     constexpr std::size_t SLOT_0x25_KEY_X_SECRET_SIZE = 64; |     constexpr std::size_t SLOT_0x25_KEY_X_SECRET_SIZE = 64; | ||||||
|     std::vector<u8> secret_data(SLOT_0x25_KEY_X_SECRET_SIZE); |     std::vector<u8> secret_data(SLOT_0x25_KEY_X_SECRET_SIZE); | ||||||
|     std::memcpy(secret_data.data(), firm_buffer.data() + SLOT_0x25_KEY_X_SECRET_OFFSET, |     std::memcpy(secret_data.data(), firm_buffer.data() + SLOT_0x25_KEY_X_SECRET_OFFSET, | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <sstream> | #include <sstream> | ||||||
|  | #include <cryptopp/hex.h> | ||||||
| #include <cryptopp/integer.h> | #include <cryptopp/integer.h> | ||||||
| #include <cryptopp/nbtheory.h> | #include <cryptopp/nbtheory.h> | ||||||
| #include <cryptopp/sha.h> | #include <cryptopp/sha.h> | ||||||
|  | @ -37,6 +38,11 @@ std::vector<u8> RsaSlot::GetSignature(const std::vector<u8>& message) { | ||||||
|                                         CryptoPP::Integer(modulus.data(), modulus.size())); |                                         CryptoPP::Integer(modulus.data(), modulus.size())); | ||||||
|     std::stringstream ss; |     std::stringstream ss; | ||||||
|     ss << std::hex << sig; |     ss << std::hex << sig; | ||||||
|  |     CryptoPP::HexDecoder decoder; | ||||||
|  |     decoder.Put(reinterpret_cast<unsigned char*>(ss.str().data()), ss.str().size()); | ||||||
|  |     decoder.MessageEnd(); | ||||||
|  |     std::vector<u8> result(decoder.MaxRetrievable()); | ||||||
|  |     decoder.Get(result.data(), result.size()); | ||||||
|     return HexToBytes(ss.str()); |     return HexToBytes(ss.str()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -80,19 +86,27 @@ RsaSlot GetSlot(std::size_t slot_id) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::vector<u8> CreateASN1Message(const std::vector<u8>& data) { | std::vector<u8> CreateASN1Message(const std::vector<u8>& data) { | ||||||
|     static constexpr auto asn1_header = |     static constexpr std::array<u8, 224> asn1_header = { | ||||||
|         "0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" |         {0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|         "FFFFFFFFFFFFFFFFFFFFFFFF003031300D060960864801650304020105000420"; |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|     std::vector<u8> message = HexToBytes(asn1_header); |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|  |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|  |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|  |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|  |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|  |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||||||
|  |          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x30, 0x31, 0x30, 0x0D, 0x06, | ||||||
|  |          0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20}}; | ||||||
|  | 
 | ||||||
|  |     std::vector<u8> message(asn1_header.begin(), asn1_header.end()); | ||||||
|     CryptoPP::SHA256 sha; |     CryptoPP::SHA256 sha; | ||||||
|     std::array<u8, CryptoPP::SHA256::DIGESTSIZE> hash; |     message.resize(message.size() + CryptoPP::SHA256::DIGESTSIZE); | ||||||
|     sha.CalculateDigest(hash.data(), data.data(), data.size()); |     sha.CalculateDigest(message.data() + asn1_header.size(), data.data(), data.size()); | ||||||
|     std::copy(hash.begin(), hash.end(), std::back_inserter(message)); |  | ||||||
|     return message; |     return message; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue