diff --git a/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp b/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp index 92b5cbaa62..3dedbc726f 100644 --- a/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp +++ b/Source/Core/Core/IOS/Network/KD/NetKDRequest.cpp @@ -3,6 +3,7 @@ #include "Core/IOS/Network/KD/NetKDRequest.h" +#include #include #include @@ -201,34 +202,35 @@ u8 NetKDRequestDevice::GetHardwareModel(const std::string& model) const 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, u8 hardware_model, u8 area_code) { - const u8 table2[8] = {0x1, 0x5, 0x0, 0x4, 0x2, 0x3, 0x6, 0x7}; - const u8 table1[16] = {0x4, 0xB, 0x7, 0x9, 0xF, 0x1, 0xD, 0x3, - 0xC, 0x2, 0x6, 0xE, 0x8, 0x0, 0xA, 0x5}; + static constexpr std::array table2{ + 0x1, 0x5, 0x0, 0x4, 0x2, 0x3, 0x6, 0x7, + }; + static constexpr std::array 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) | - ((u64)id_ctr << 10); - u64 mix_id_copy1 = mix_id; + constexpr auto u64_get_byte = [](u64 value, u32 shift) -> u8 { + return u8(value >> (shift * 8)); + }; - 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++) { u64 value = mix_id >> (52 - ctr); - if (value & 1) + if ((value & 1) != 0) { value = 0x0000000000000635ULL << (42 - ctr); mix_id ^= value; @@ -240,15 +242,16 @@ s32 NetKDRequestDevice::NWC24MakeUserID(u64* nwc24_id, u32 hollywood_id, u16 id_ for (ctr = 0; ctr <= 5; ctr++) { - u8 ret = u64_get_byte(mix_id, ctr); - u8 foobar = ((table1[(ret >> 4) & 0xF]) << 4) | (table1[ret & 0xF]); + const u8 ret = u64_get_byte(mix_id, ctr); + const u8 foobar = u8((u32{table1[(ret >> 4) & 0xF]} << 4) | table1[ret & 0xF]); 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++) { - 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); }