// Copyright 2017 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include "common/common_types.h" namespace HW { namespace AES { enum KeySlotID : size_t { // Used to decrypt the SSL client cert/private-key stored in ClCertA. SSLKey = 0x0D, // AES keyslots used to decrypt NCCH NCCHSecure1 = 0x2C, NCCHSecure2 = 0x25, NCCHSecure3 = 0x18, NCCHSecure4 = 0x1B, // AES Keyslot used to generate the UDS data frame CCMP key. UDSDataKey = 0x2D, // AES keyslot used for APT:Wrap/Unwrap functions APTWrap = 0x31, MaxKeySlotID = 0x40, }; constexpr size_t AES_BLOCK_SIZE = 16; using AESKey = std::array; void InitKeys(); void SetGeneratorConstant(const AESKey& key); void SetKeyX(size_t slot_id, const AESKey& key); void SetKeyY(size_t slot_id, const AESKey& key); void SetNormalKey(size_t slot_id, const AESKey& key); bool IsNormalKeyAvailable(size_t slot_id); AESKey GetNormalKey(size_t slot_id); } // namespace AES } // namespace HW