|
|
@@ -2,6 +2,7 @@
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
+#include <array>
|
|
|
#include <mbedtls/cipher.h>
|
|
|
#include "common/assert.h"
|
|
|
#include "common/logging/log.h"
|
|
|
@@ -10,8 +11,10 @@
|
|
|
|
|
|
namespace Core::Crypto {
|
|
|
namespace {
|
|
|
-std::vector<u8> CalculateNintendoTweak(std::size_t sector_id) {
|
|
|
- std::vector<u8> out(0x10);
|
|
|
+using NintendoTweak = std::array<u8, 16>;
|
|
|
+
|
|
|
+NintendoTweak CalculateNintendoTweak(std::size_t sector_id) {
|
|
|
+ NintendoTweak out{};
|
|
|
for (std::size_t i = 0xF; i <= 0xF; --i) {
|
|
|
out[i] = sector_id & 0xFF;
|
|
|
sector_id >>= 8;
|
|
|
@@ -63,13 +66,6 @@ AESCipher<Key, KeySize>::~AESCipher() {
|
|
|
mbedtls_cipher_free(&ctx->decryption_context);
|
|
|
}
|
|
|
|
|
|
-template <typename Key, std::size_t KeySize>
|
|
|
-void AESCipher<Key, KeySize>::SetIV(std::vector<u8> iv) {
|
|
|
- ASSERT_MSG((mbedtls_cipher_set_iv(&ctx->encryption_context, iv.data(), iv.size()) ||
|
|
|
- mbedtls_cipher_set_iv(&ctx->decryption_context, iv.data(), iv.size())) == 0,
|
|
|
- "Failed to set IV on mbedtls ciphers.");
|
|
|
-}
|
|
|
-
|
|
|
template <typename Key, std::size_t KeySize>
|
|
|
void AESCipher<Key, KeySize>::Transcode(const u8* src, std::size_t size, u8* dest, Op op) const {
|
|
|
auto* const context = op == Op::Encrypt ? &ctx->encryption_context : &ctx->decryption_context;
|
|
|
@@ -124,6 +120,13 @@ void AESCipher<Key, KeySize>::XTSTranscode(const u8* src, std::size_t size, u8*
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+template <typename Key, std::size_t KeySize>
|
|
|
+void AESCipher<Key, KeySize>::SetIVImpl(const u8* data, std::size_t size) {
|
|
|
+ ASSERT_MSG((mbedtls_cipher_set_iv(&ctx->encryption_context, data, size) ||
|
|
|
+ mbedtls_cipher_set_iv(&ctx->decryption_context, data, size)) == 0,
|
|
|
+ "Failed to set IV on mbedtls ciphers.");
|
|
|
+}
|
|
|
+
|
|
|
template class AESCipher<Key128>;
|
|
|
template class AESCipher<Key256>;
|
|
|
} // namespace Core::Crypto
|