NetKDRequest: Minor adjustments to NWC24MakeUserID
- Make use of std::array - Move helper functions inside it as lambdas - Eliminate sign-conversions that were occurring (promotion of u8 to int)
This commit is contained in:
parent
e7a30dd468
commit
ff3947a1b9
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "Core/IOS/Network/KD/NetKDRequest.h"
|
#include "Core/IOS/Network/KD/NetKDRequest.h"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -201,34 +202,35 @@ u8 NetKDRequestDevice::GetHardwareModel(const std::string& model) const
|
||||||
return MODEL_ELSE;
|
return MODEL_ELSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 u64_get_byte(u64 value, u8 shift)
|
|
||||||
{
|
|
||||||
return (u8)(value >> (shift * 8));
|
|
||||||
}
|
|
||||||
|
|
||||||
static u64 u64_insert_byte(u64 value, u8 shift, u8 byte)
|
|
||||||
{
|
|
||||||
u64 mask = 0x00000000000000FFULL << (shift * 8);
|
|
||||||
u64 inst = (u64)byte << (shift * 8);
|
|
||||||
return (value & ~mask) | inst;
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 NetKDRequestDevice::NWC24MakeUserID(u64* nwc24_id, u32 hollywood_id, u16 id_ctr,
|
s32 NetKDRequestDevice::NWC24MakeUserID(u64* nwc24_id, u32 hollywood_id, u16 id_ctr,
|
||||||
u8 hardware_model, u8 area_code)
|
u8 hardware_model, u8 area_code)
|
||||||
{
|
{
|
||||||
const u8 table2[8] = {0x1, 0x5, 0x0, 0x4, 0x2, 0x3, 0x6, 0x7};
|
static constexpr std::array<u8, 8> table2{
|
||||||
const u8 table1[16] = {0x4, 0xB, 0x7, 0x9, 0xF, 0x1, 0xD, 0x3,
|
0x1, 0x5, 0x0, 0x4, 0x2, 0x3, 0x6, 0x7,
|
||||||
0xC, 0x2, 0x6, 0xE, 0x8, 0x0, 0xA, 0x5};
|
};
|
||||||
|
static constexpr std::array<u8, 16> table1{
|
||||||
|
0x4, 0xB, 0x7, 0x9, 0xF, 0x1, 0xD, 0x3, 0xC, 0x2, 0x6, 0xE, 0x8, 0x0, 0xA, 0x5,
|
||||||
|
};
|
||||||
|
|
||||||
u64 mix_id = ((u64)area_code << 50) | ((u64)hardware_model << 47) | ((u64)hollywood_id << 15) |
|
constexpr auto u64_get_byte = [](u64 value, u32 shift) -> u8 {
|
||||||
((u64)id_ctr << 10);
|
return u8(value >> (shift * 8));
|
||||||
u64 mix_id_copy1 = mix_id;
|
};
|
||||||
|
|
||||||
int ctr = 0;
|
constexpr auto u64_insert_byte = [](u64 value, u32 shift, u8 byte) -> u64 {
|
||||||
|
const u64 mask = 0x00000000000000FFULL << (shift * 8);
|
||||||
|
const u64 inst = u64{byte} << (shift * 8);
|
||||||
|
return (value & ~mask) | inst;
|
||||||
|
};
|
||||||
|
|
||||||
|
u64 mix_id = (u64{area_code} << 50) | (u64{hardware_model} << 47) | (u64{hollywood_id} << 15) |
|
||||||
|
(u64{id_ctr} << 10);
|
||||||
|
const u64 mix_id_copy1 = mix_id;
|
||||||
|
|
||||||
|
u32 ctr = 0;
|
||||||
for (ctr = 0; ctr <= 42; ctr++)
|
for (ctr = 0; ctr <= 42; ctr++)
|
||||||
{
|
{
|
||||||
u64 value = mix_id >> (52 - ctr);
|
u64 value = mix_id >> (52 - ctr);
|
||||||
if (value & 1)
|
if ((value & 1) != 0)
|
||||||
{
|
{
|
||||||
value = 0x0000000000000635ULL << (42 - ctr);
|
value = 0x0000000000000635ULL << (42 - ctr);
|
||||||
mix_id ^= value;
|
mix_id ^= value;
|
||||||
|
@ -240,15 +242,16 @@ s32 NetKDRequestDevice::NWC24MakeUserID(u64* nwc24_id, u32 hollywood_id, u16 id_
|
||||||
|
|
||||||
for (ctr = 0; ctr <= 5; ctr++)
|
for (ctr = 0; ctr <= 5; ctr++)
|
||||||
{
|
{
|
||||||
u8 ret = u64_get_byte(mix_id, ctr);
|
const u8 ret = u64_get_byte(mix_id, ctr);
|
||||||
u8 foobar = ((table1[(ret >> 4) & 0xF]) << 4) | (table1[ret & 0xF]);
|
const u8 foobar = u8((u32{table1[(ret >> 4) & 0xF]} << 4) | table1[ret & 0xF]);
|
||||||
mix_id = u64_insert_byte(mix_id, ctr, foobar & 0xff);
|
mix_id = u64_insert_byte(mix_id, ctr, foobar & 0xff);
|
||||||
}
|
}
|
||||||
u64 mix_id_copy2 = mix_id;
|
|
||||||
|
const u64 mix_id_copy2 = mix_id;
|
||||||
|
|
||||||
for (ctr = 0; ctr <= 5; ctr++)
|
for (ctr = 0; ctr <= 5; ctr++)
|
||||||
{
|
{
|
||||||
u8 ret = u64_get_byte(mix_id_copy2, ctr);
|
const u8 ret = u64_get_byte(mix_id_copy2, ctr);
|
||||||
mix_id = u64_insert_byte(mix_id, table2[ctr], ret);
|
mix_id = u64_insert_byte(mix_id, table2[ctr], ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue