mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
DiscIO: Implement re-encryption of Wii partition data
This commit is contained in:
47
Source/Core/DiscIO/WiiEncryptionCache.h
Normal file
47
Source/Core/DiscIO/WiiEncryptionCache.h
Normal file
@ -0,0 +1,47 @@
|
||||
// Copyright 2020 Dolphin Emulator Project
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <limits>
|
||||
#include <memory>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "DiscIO/VolumeWii.h"
|
||||
|
||||
namespace DiscIO
|
||||
{
|
||||
class BlobReader;
|
||||
|
||||
class WiiEncryptionCache
|
||||
{
|
||||
public:
|
||||
using Key = std::array<u8, VolumeWii::AES_KEY_SIZE>;
|
||||
|
||||
// The blob pointer is kept around for the lifetime of this object.
|
||||
explicit WiiEncryptionCache(BlobReader* blob);
|
||||
~WiiEncryptionCache();
|
||||
|
||||
// Encrypts exactly one group.
|
||||
// If the returned pointer is nullptr, reading from the blob failed.
|
||||
// If the returned pointer is not nullptr, it is guaranteed to be valid until
|
||||
// the next call of this function or the destruction of this object.
|
||||
const std::array<u8, VolumeWii::GROUP_TOTAL_SIZE>* EncryptGroup(u64 offset,
|
||||
u64 partition_data_offset,
|
||||
u64 partition_data_decrypted_size,
|
||||
const Key& key);
|
||||
|
||||
// Encrypts a variable number of groups, as determined by the offset and size parameters.
|
||||
// Supports reading groups partially.
|
||||
bool EncryptGroups(u64 offset, u64 size, u8* out_ptr, u64 partition_data_offset,
|
||||
u64 partition_data_decrypted_size, const Key& key);
|
||||
|
||||
private:
|
||||
BlobReader* m_blob;
|
||||
std::unique_ptr<std::array<u8, VolumeWii::GROUP_TOTAL_SIZE>> m_cache;
|
||||
u64 m_cached_offset = std::numeric_limits<u64>::max();
|
||||
};
|
||||
|
||||
} // namespace DiscIO
|
Reference in New Issue
Block a user