Merge pull request #9220 from jordan-woyak/ext-crypto

WiimoteEmu: Implement extension encryption edge case.
This commit is contained in:
Léo Lam
2020-11-20 02:28:17 +01:00
committed by GitHub
2 changed files with 358 additions and 241 deletions
File diff suppressed because it is too large Load Diff
+10 -1
View File
@@ -12,6 +12,8 @@
namespace WiimoteEmu
{
using SBox = std::array<u8, 256>;
class EncryptionKey
{
public:
@@ -21,7 +23,8 @@ public:
using RandData = std::array<u8, 10>;
using KeyData = std::array<u8, 6>;
void GenerateTables(const RandData& rand, const KeyData& key, const u32 idx, const u8 offset);
void GenerateTables(const RandData& rand, const KeyData& key, const SBox& sbox_a,
const SBox& sbox_b);
std::array<u8, 8> ft = {};
std::array<u8, 8> sb = {};
@@ -41,6 +44,8 @@ protected:
u32 idx) const = 0;
virtual EncryptionKey GenerateTables(const EncryptionKey::RandData& rand,
const EncryptionKey::KeyData& key, u32 idx) const = 0;
virtual EncryptionKey GenerateFallbackTables(const EncryptionKey::RandData& rand,
const EncryptionKey::KeyData& key) const = 0;
};
class KeyGen1stParty final : public KeyGen
@@ -50,6 +55,8 @@ private:
u32 idx) const final override;
EncryptionKey GenerateTables(const EncryptionKey::RandData& rand,
const EncryptionKey::KeyData& key, u32 idx) const final override;
EncryptionKey GenerateFallbackTables(const EncryptionKey::RandData& rand,
const EncryptionKey::KeyData& key) const final override;
};
class KeyGen3rdParty final : public KeyGen
@@ -59,6 +66,8 @@ private:
u32 idx) const final override;
EncryptionKey GenerateTables(const EncryptionKey::RandData& rand,
const EncryptionKey::KeyData& key, u32 idx) const final override;
EncryptionKey GenerateFallbackTables(const EncryptionKey::RandData& rand,
const EncryptionKey::KeyData& key) const final override;
};
} // namespace WiimoteEmu