summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Zach Hilman2018-08-16 17:00:35 -0400
committerGravatar Zach Hilman2018-08-23 11:52:44 -0400
commit10e5356e9ac5756d8a48498cd1270862d3013476 (patch)
treeb09c587d60e6b209c08b2ec2c4a7cdc65fab1005
parentctr_encryption_layer: Fix bug when transcoding small data (diff)
downloadyuzu-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.cpp7
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
99template <typename Key, size_t KeySize> 99template <typename Key, size_t KeySize>
100void AESCipher<Key, KeySize>::XTSTranscode(const u8* src, size_t size, u8* dest, size_t sector_id, 100void 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
113template class AESCipher<Key128>; 110template class AESCipher<Key128>;
114template class AESCipher<Key256>; 111template class AESCipher<Key256>;
115} // namespace Core::Crypto \ No newline at end of file 112} // namespace Core::Crypto