dolphin/Source/Core/Core/ec_wii.h
comex 6e774f1b64 Add missing includes where headers depend on other headers having been included first.
This is good hygiene, and also happens to be required to build Dolphin
using Clang modules.

(Under this setup, each header file becomes a module, and each #include
is automatically translated to a module import.  Recursive includes
still leak through (by default), but modules are compiled independently,
and can't depend on defines or types having previously been set up.  The
main reason to retrofit it onto Dolphin is compilation performance - no
more textual includes whatsoever, rather than putting a few blessed
common headers into a PCH.  Unfortunately, I found multiple Clang bugs
while trying to build Dolphin this way, so it's not ready yet, but I can
start with this prerequisite.)
2014-10-21 21:22:16 -04:00

113 lines
2.9 KiB
C++

// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
// Based off of twintig http://git.infradead.org/?p=users/segher/wii.git
// Copyright 2007,2008 Segher Boessenkool <segher@kernel.crashing.org>
// Licensed under the terms of the GNU GPL, version 2
// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
/*
*
* Structs for keys.bin taken from:
*
* mini - a Free Software replacement for the Nintendo/BroadOn IOS.
* crypto hardware support
*
* Copyright (C) 2008, 2009 Haxx Enterprises <bushing@gmail.com>
* Copyright (C) 2008, 2009 Sven Peter <svenpeter@gmail.com>
* Copyright (C) 2008, 2009 Hector Martin "marcan" <marcan@marcansoft.com>
*
* # This code is licensed to you under the terms of the GNU GPL, version 2;
* # see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
*/
#pragma once
#include "Common/Common.h"
void get_ng_cert(u8* ng_cert_out, u32 NG_id, u32 NG_key_id, const u8* NG_priv, const u8* NG_sig);
void get_ap_sig_and_cert(u8 *sig_out, u8 *ap_cert_out, u64 title_id, u8 *data, u32 data_size, const u8 *NG_priv, u32 NG_id);
void make_blanksig_ec_cert(u8 *cert_out, const char *signer, const char *name, const u8 *private_key, u32 key_id);
class EcWii
{
public:
EcWii();
~EcWii();
static EcWii& GetInstance();
u32 getNgId() {return Common::swap32(BootMiiKeysBin.ng_id);}
u32 getNgKeyId() {return Common::swap32(BootMiiKeysBin.ng_key_id);}
const u8* getNgPriv() {return BootMiiKeysBin.ng_priv;}
const u8* getNgSig() {return BootMiiKeysBin.ng_sig;}
private:
void InitDefaults();
#pragma pack(push,1)
typedef struct
{
u8 boot2version;
u8 unknown1;
u8 unknown2;
u8 pad;
u32 update_tag;
u16 checksum;
}
#ifndef _WIN32
__attribute__((packed))
#endif
eep_ctr_t;
struct
{
u8 creator [0x100]; // 0x000
u8 boot1_hash [ 0x14]; // 0x100
u8 common_key [ 0x10]; // 0x114
u32 ng_id; // 0x124
union
{
struct
{
u8 ng_priv [ 0x1e]; // 0x128
u8 pad1 [ 0x12];
};
struct
{
u8 pad2 [ 0x1c];
u8 nand_hmac [ 0x14]; //0x144
};
};
u8 nand_key [ 0x10]; //0x158
u8 rng_key [ 0x10]; //0x168
u32 unk1; //0x178
u32 unk2; //0x17C
u8 eeprom_pad [ 0x80]; //0x180
u32 ms_id; //0x200
u32 ca_id; //0x204
u32 ng_key_id; //0x208
u8 ng_sig [ 0x3c]; //0x20c
eep_ctr_t counters [ 0x02]; //0x248
u8 fill [ 0x18]; //0x25c
u8 korean_key [ 0x10]; //0x274
u8 pad3 [ 0x74]; //0x284
u16 prng_seed [ 0x02]; //0x2F8
u8 pad4 [ 0x04]; //0x2FC
u8 crack_pad [0x100]; //0x300
}
#ifndef _WIN32
__attribute__((packed))
#endif
BootMiiKeysBin;
#pragma pack(pop)
};