diff options
| author | 2018-08-16 17:00:35 -0400 | |
|---|---|---|
| committer | 2018-08-23 11:52:44 -0400 | |
| commit | 10e5356e9ac5756d8a48498cd1270862d3013476 (patch) | |
| tree | b09c587d60e6b209c08b2ec2c4a7cdc65fab1005 | |
| parent | ctr_encryption_layer: Fix bug when transcoding small data (diff) | |
| download | yuzu-10e5356e9ac5756d8a48498cd1270862d3013476.tar.gz yuzu-10e5356e9ac5756d8a48498cd1270862d3013476.tar.xz yuzu-10e5356e9ac5756d8a48498cd1270862d3013476.zip | |
aes_util: Make XTSTranscode stricter about sizes
XTS with Nintendo Tweak will fail mysteriously if the sector size is not 0x4000. Upgrade the critical log to an assert to prevent undefined behavior.
| -rw-r--r-- | src/core/crypto/aes_util.cpp | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/core/crypto/aes_util.cpp b/src/core/crypto/aes_util.cpp index a9876c83e..72e4bed67 100644 --- a/src/core/crypto/aes_util.cpp +++ b/src/core/crypto/aes_util.cpp | |||
| @@ -99,10 +99,7 @@ void AESCipher<Key, KeySize>::Transcode(const u8* src, size_t size, u8* dest, Op | |||
| 99 | template <typename Key, size_t KeySize> | 99 | template <typename Key, size_t KeySize> |
| 100 | void AESCipher<Key, KeySize>::XTSTranscode(const u8* src, size_t size, u8* dest, size_t sector_id, | 100 | void AESCipher<Key, KeySize>::XTSTranscode(const u8* src, size_t size, u8* dest, size_t sector_id, |
| 101 | size_t sector_size, Op op) { | 101 | size_t sector_size, Op op) { |
| 102 | if (size % sector_size > 0) { | 102 | ASSERT_MSG(size % sector_size == 0, "XTS decryption size must be a multiple of sector size."); |
| 103 | LOG_CRITICAL(Crypto, "Data size must be a multiple of sector size."); | ||
| 104 | return; | ||
| 105 | } | ||
| 106 | 103 | ||
| 107 | for (size_t i = 0; i < size; i += sector_size) { | 104 | for (size_t i = 0; i < size; i += sector_size) { |
| 108 | SetIV(CalculateNintendoTweak(sector_id++)); | 105 | SetIV(CalculateNintendoTweak(sector_id++)); |
| @@ -112,4 +109,4 @@ void AESCipher<Key, KeySize>::XTSTranscode(const u8* src, size_t size, u8* dest, | |||
| 112 | 109 | ||
| 113 | template class AESCipher<Key128>; | 110 | template class AESCipher<Key128>; |
| 114 | template class AESCipher<Key256>; | 111 | template class AESCipher<Key256>; |
| 115 | } // namespace Core::Crypto \ No newline at end of file | 112 | } // namespace Core::Crypto |