From df5b75694f5abde94ccf05fa6c7a557b1ba9079b Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Fri, 27 Jul 2018 23:55:23 -0400 Subject: Remove files that are not used --- src/core/crypto/ctr_encryption_layer.cpp | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/core/crypto/ctr_encryption_layer.cpp (limited to 'src/core/crypto/ctr_encryption_layer.cpp') diff --git a/src/core/crypto/ctr_encryption_layer.cpp b/src/core/crypto/ctr_encryption_layer.cpp new file mode 100644 index 000000000..8799496e2 --- /dev/null +++ b/src/core/crypto/ctr_encryption_layer.cpp @@ -0,0 +1,56 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/assert.h" +#include "core/crypto/ctr_encryption_layer.h" + +namespace Crypto { +CTREncryptionLayer::CTREncryptionLayer(FileSys::VirtualFile base_, Key128 key_, size_t base_offset) + : EncryptionLayer(std::move(base_)), base_offset(base_offset), cipher(key_, Mode::CTR), + iv(16, 0) {} + +size_t CTREncryptionLayer::Read(u8* data, size_t length, size_t offset) const { + if (length == 0) + return 0; + + const auto sector_offset = offset & 0xF; + if (sector_offset == 0) { + UpdateIV(base_offset + offset); + std::vector raw = base->ReadBytes(length, offset); + if (raw.size() != length) + return Read(data, raw.size(), offset); + cipher.Transcode(raw.data(), length, data, Op::DECRYPT); + return length; + } + + // offset does not fall on block boundary (0x10) + std::vector block = base->ReadBytes(0x10, offset - sector_offset); + UpdateIV(base_offset + offset - sector_offset); + cipher.Transcode(block.data(), block.size(), block.data(), Op::DECRYPT); + size_t read = 0x10 - sector_offset; + + if (length + sector_offset < 0x10) { + memcpy_s(data, length, block.data() + sector_offset, std::min(length, read)); + return read; + } + + memcpy_s(data, length, block.data() + sector_offset, read); + return read + Read(data + read, length - read, offset + read); +} + +void CTREncryptionLayer::SetIV(std::vector iv_) { + const auto length = std::min(iv_.size(), iv.size()); + for (size_t i = 0; i < length; ++i) + iv[i] = iv_[i]; +} + +void CTREncryptionLayer::UpdateIV(size_t offset) const { + offset >>= 4; + for (size_t i = 0; i < 8; ++i) { + iv[16 - i - 1] = offset & 0xFF; + offset >>= 8; + } + cipher.SetIV(iv); +} +} // namespace Crypto -- cgit v1.2.3 From 83c3ae8be87463486239246a93f9dadf5d2b27bd Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Sat, 28 Jul 2018 14:42:16 -0400 Subject: Add missing string.h include --- src/core/crypto/ctr_encryption_layer.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/core/crypto/ctr_encryption_layer.cpp') diff --git a/src/core/crypto/ctr_encryption_layer.cpp b/src/core/crypto/ctr_encryption_layer.cpp index 8799496e2..6a0d396ed 100644 --- a/src/core/crypto/ctr_encryption_layer.cpp +++ b/src/core/crypto/ctr_encryption_layer.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include #include "common/assert.h" #include "core/crypto/ctr_encryption_layer.h" -- cgit v1.2.3 From 239a3113e4c6a53a2c7b12e67a0f21afae24b0aa Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Sat, 28 Jul 2018 21:39:42 -0400 Subject: Make XCI comply to review and style guidelines --- src/core/crypto/ctr_encryption_layer.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/core/crypto/ctr_encryption_layer.cpp') diff --git a/src/core/crypto/ctr_encryption_layer.cpp b/src/core/crypto/ctr_encryption_layer.cpp index 6a0d396ed..5dbc257e5 100644 --- a/src/core/crypto/ctr_encryption_layer.cpp +++ b/src/core/crypto/ctr_encryption_layer.cpp @@ -6,7 +6,8 @@ #include "common/assert.h" #include "core/crypto/ctr_encryption_layer.h" -namespace Crypto { +namespace Core::Crypto { + CTREncryptionLayer::CTREncryptionLayer(FileSys::VirtualFile base_, Key128 key_, size_t base_offset) : EncryptionLayer(std::move(base_)), base_offset(base_offset), cipher(key_, Mode::CTR), iv(16, 0) {} @@ -21,29 +22,28 @@ size_t CTREncryptionLayer::Read(u8* data, size_t length, size_t offset) const { std::vector raw = base->ReadBytes(length, offset); if (raw.size() != length) return Read(data, raw.size(), offset); - cipher.Transcode(raw.data(), length, data, Op::DECRYPT); + cipher.Transcode(raw.data(), length, data, Op::Decrypt); return length; } // offset does not fall on block boundary (0x10) std::vector block = base->ReadBytes(0x10, offset - sector_offset); UpdateIV(base_offset + offset - sector_offset); - cipher.Transcode(block.data(), block.size(), block.data(), Op::DECRYPT); + cipher.Transcode(block.data(), block.size(), block.data(), Op::Decrypt); size_t read = 0x10 - sector_offset; if (length + sector_offset < 0x10) { - memcpy_s(data, length, block.data() + sector_offset, std::min(length, read)); + memcpy(data, block.data() + sector_offset, std::min(length, read)); return read; } - memcpy_s(data, length, block.data() + sector_offset, read); + memcpy(data, block.data() + sector_offset, read); return read + Read(data + read, length - read, offset + read); } -void CTREncryptionLayer::SetIV(std::vector iv_) { - const auto length = std::min(iv_.size(), iv.size()); - for (size_t i = 0; i < length; ++i) - iv[i] = iv_[i]; +void CTREncryptionLayer::SetIV(const std::vector& iv_) { + const auto length = std::min(iv_.size(), iv.size()); + iv.assign(iv_.cbegin(), iv_.cbegin() + length); } void CTREncryptionLayer::UpdateIV(size_t offset) const { @@ -54,4 +54,4 @@ void CTREncryptionLayer::UpdateIV(size_t offset) const { } cipher.SetIV(iv); } -} // namespace Crypto +} // namespace Core::Crypto -- cgit v1.2.3 From 03149d3e4a7f8038d9c88cbeb19dee25a39e0042 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Sun, 29 Jul 2018 19:00:09 -0400 Subject: Add missing includes and use const where applicable --- src/core/crypto/ctr_encryption_layer.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/core/crypto/ctr_encryption_layer.cpp') diff --git a/src/core/crypto/ctr_encryption_layer.cpp b/src/core/crypto/ctr_encryption_layer.cpp index 5dbc257e5..106db02b3 100644 --- a/src/core/crypto/ctr_encryption_layer.cpp +++ b/src/core/crypto/ctr_encryption_layer.cpp @@ -2,7 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include +#include #include "common/assert.h" #include "core/crypto/ctr_encryption_layer.h" @@ -33,11 +33,10 @@ size_t CTREncryptionLayer::Read(u8* data, size_t length, size_t offset) const { size_t read = 0x10 - sector_offset; if (length + sector_offset < 0x10) { - memcpy(data, block.data() + sector_offset, std::min(length, read)); + std::memcpy(data, block.data() + sector_offset, std::min(length, read)); return read; } - - memcpy(data, block.data() + sector_offset, read); + std::memcpy(data, block.data() + sector_offset, read); return read + Read(data + read, length - read, offset + read); } -- cgit v1.2.3