start migrating to new system
Some checks failed
Build and Test / wii-u-chat (push) Failing after 5m20s
Build and Test / friends (push) Failing after 5m19s
Build and Test / sonic-transformed (push) Failing after 6m27s
Build and Test / splatoon-testfire (push) Failing after 6m28s
Build and Test / super-mario-maker (push) Failing after 6m46s
Build and Test / fast-racing-neo (push) Failing after 6m47s
Build and Test / wii-sports-club (push) Failing after 6m52s
Build and Test / puyopuyo (push) Failing after 6m52s
Build and Test / mario-tennis (push) Failing after 6m57s
Build and Test / splatoon (push) Failing after 7m2s
Build and Test / minecraft-wiiu (push) Failing after 8m6s
Some checks failed
Build and Test / wii-u-chat (push) Failing after 5m20s
Build and Test / friends (push) Failing after 5m19s
Build and Test / sonic-transformed (push) Failing after 6m27s
Build and Test / splatoon-testfire (push) Failing after 6m28s
Build and Test / super-mario-maker (push) Failing after 6m46s
Build and Test / fast-racing-neo (push) Failing after 6m47s
Build and Test / wii-sports-club (push) Failing after 6m52s
Build and Test / puyopuyo (push) Failing after 6m52s
Build and Test / mario-tennis (push) Failing after 6m57s
Build and Test / splatoon (push) Failing after 7m2s
Build and Test / minecraft-wiiu (push) Failing after 8m6s
This commit is contained in:
parent
09f8d33e0c
commit
0f233fd355
6 changed files with 29 additions and 31 deletions
14
Cargo.lock
generated
14
Cargo.lock
generated
|
|
@ -1693,7 +1693,7 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"socket2 0.6.3",
|
"socket2 0.5.10",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
|
@ -2091,9 +2091,9 @@ checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nex-account"
|
name = "nex-account"
|
||||||
version = "0.1.3"
|
version = "0.2.0"
|
||||||
source = "sparse+https://crates.spbr.net/api/v1/crates/"
|
source = "sparse+https://crates.spbr.net/api/v1/crates/"
|
||||||
checksum = "16be02914ed26b15f68fc8c0c11f719ca9796e90be5899523baad8a3bdf0069b"
|
checksum = "10e60c4ce2c2fd11862b85dd0176e0de57b4e9057b78ee98d9b00c82fa978601"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hmac 0.13.0",
|
"hmac 0.13.0",
|
||||||
"log",
|
"log",
|
||||||
|
|
@ -2787,7 +2787,7 @@ dependencies = [
|
||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -3595,10 +3595,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
|
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fastrand",
|
"fastrand",
|
||||||
"getrandom 0.3.4",
|
"getrandom 0.4.2",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix",
|
"rustix",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -4237,7 +4237,7 @@ version = "0.1.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ urlencoding = "2.1.3"
|
||||||
futures = "0.3.32"
|
futures = "0.3.32"
|
||||||
async-trait = "0.1.89"
|
async-trait = "0.1.89"
|
||||||
ctor = "1.0.7"
|
ctor = "1.0.7"
|
||||||
nex-account = { version = "0.1.3", registry = "spbr" }
|
nex-account = { version = "0.2.0", registry = "spbr" }
|
||||||
tonic = "0.14.6"
|
tonic = "0.14.6"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ use cfg_if::cfg_if;
|
||||||
use chrono::{Datelike, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc};
|
use chrono::{Datelike, NaiveDate, NaiveDateTime, NaiveTime, Timelike, Utc};
|
||||||
use hmac::Hmac;
|
use hmac::Hmac;
|
||||||
use hmac::Mac;
|
use hmac::Mac;
|
||||||
|
use md5::digest::generic_array::GenericArray;
|
||||||
use md5::{Digest, Md5};
|
use md5::{Digest, Md5};
|
||||||
use rc4::KeyInit;
|
use rc4::KeyInit;
|
||||||
use rc4::cipher::StreamCipherCoreWrapper;
|
use rc4::cipher::StreamCipherCoreWrapper;
|
||||||
|
|
@ -28,18 +29,6 @@ pub const SESSION_KEY_LENGTH: usize = SessionLengthTy::USIZE;
|
||||||
|
|
||||||
type Md5Hmac = Hmac<md5::Md5>;
|
type Md5Hmac = Hmac<md5::Md5>;
|
||||||
|
|
||||||
pub fn derive_kerberos_key(pid: PID, nex_key: [u8; 16]) -> [u8; 16] {
|
|
||||||
let iteration_count = pid % 1024;
|
|
||||||
let mut key = nex_key;
|
|
||||||
|
|
||||||
for _ in 0..iteration_count {
|
|
||||||
let mut md5 = Md5::new();
|
|
||||||
md5.update(key);
|
|
||||||
key = md5.finalize().try_into().unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
key
|
|
||||||
}
|
|
||||||
#[derive(Pod, Zeroable, Copy, Clone, Debug, Eq, PartialEq)]
|
#[derive(Pod, Zeroable, Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
pub struct KerberosDateTime(pub u64);
|
pub struct KerberosDateTime(pub u64);
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ pub struct Account {
|
||||||
|
|
||||||
impl Account {
|
impl Account {
|
||||||
pub fn new(pid: PID, username: &str, passwd: &str) -> Self {
|
pub fn new(pid: PID, username: &str, passwd: &str) -> Self {
|
||||||
let iteration_count = 65000;
|
let iteration_count = 65000 + pid % 1024;
|
||||||
// we do one iteration out here to ensure the key is always 16 bytes
|
// we do one iteration out here to ensure the key is always 16 bytes
|
||||||
|
|
||||||
let mut key: [u8; 16] = {
|
let mut key: [u8; 16] = {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use cfg_if::cfg_if;
|
||||||
use log::{info, warn};
|
use log::{info, warn};
|
||||||
use macros::rmc_struct;
|
use macros::rmc_struct;
|
||||||
use rnex_core::PID;
|
use rnex_core::PID;
|
||||||
use rnex_core::kerberos::{KerberosDateTime, Ticket, derive_kerberos_key};
|
use rnex_core::kerberos::{KerberosDateTime, Ticket};
|
||||||
use rnex_core::nex::account::Account;
|
use rnex_core::nex::account::Account;
|
||||||
use rnex_core::rmc::protocols::OnlyRemote;
|
use rnex_core::rmc::protocols::OnlyRemote;
|
||||||
use rnex_core::rmc::protocols::auth::{Auth, RawAuth, RawAuthInfo, RemoteAuth};
|
use rnex_core::rmc::protocols::auth::{Auth, RawAuth, RawAuthInfo, RemoteAuth};
|
||||||
|
|
@ -37,8 +37,8 @@ pub fn generate_ticket(
|
||||||
source_act_login_data: (PID, [u8; 16]),
|
source_act_login_data: (PID, [u8; 16]),
|
||||||
dest_act_login_data: (PID, [u8; 16]),
|
dest_act_login_data: (PID, [u8; 16]),
|
||||||
) -> Box<[u8]> {
|
) -> Box<[u8]> {
|
||||||
let source_key = derive_kerberos_key(source_act_login_data.0, source_act_login_data.1);
|
let source_key = source_act_login_data.1;
|
||||||
let dest_key = derive_kerberos_key(dest_act_login_data.0, dest_act_login_data.1);
|
let dest_key = dest_act_login_data.1;
|
||||||
|
|
||||||
let internal_data = kerberos::TicketInternalData::new(source_act_login_data.0);
|
let internal_data = kerberos::TicketInternalData::new(source_act_login_data.0);
|
||||||
|
|
||||||
|
|
@ -58,7 +58,7 @@ pub fn generate_ticket_with_string_user_key(
|
||||||
let source_key: [u8; 8] = rand::random();
|
let source_key: [u8; 8] = rand::random();
|
||||||
let key_string = hex::encode(source_key);
|
let key_string = hex::encode(source_key);
|
||||||
let key_data: [u8; 16] = key_string.as_bytes().try_into().unwrap();
|
let key_data: [u8; 16] = key_string.as_bytes().try_into().unwrap();
|
||||||
let dest_key = derive_kerberos_key(dest_act_login_data.0, dest_act_login_data.1);
|
let dest_key = dest_act_login_data.1;
|
||||||
|
|
||||||
let internal_data = kerberos::TicketInternalData::new(source_act);
|
let internal_data = kerberos::TicketInternalData::new(source_act);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,17 @@
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::io::{Cursor, Write};
|
use std::io::{Cursor, Write};
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::sync::{LazyLock, Weak};
|
|
||||||
use std::sync::{Arc, atomic::AtomicU32};
|
use std::sync::{Arc, atomic::AtomicU32};
|
||||||
|
use std::sync::{LazyLock, Weak};
|
||||||
|
|
||||||
use bytemuck::bytes_of;
|
use bytemuck::bytes_of;
|
||||||
use hmac::Mac;
|
use hmac::Mac;
|
||||||
use log::info;
|
use log::info;
|
||||||
use macros::rmc_struct;
|
use macros::rmc_struct;
|
||||||
use rnex_core::rmc::protocols::account_management::{AccountExtraInfo, AccountManagement, RawAccountManagement, RawAccountManagementInfo, RemoteAccountManagement};
|
use rnex_core::rmc::protocols::account_management::{
|
||||||
|
AccountExtraInfo, AccountManagement, RawAccountManagement, RawAccountManagementInfo,
|
||||||
|
RemoteAccountManagement,
|
||||||
|
};
|
||||||
use rnex_core::rmc::protocols::friends_wiiu::{
|
use rnex_core::rmc::protocols::friends_wiiu::{
|
||||||
FriendsWiiU, RawFriendsWiiU, RawFriendsWiiUInfo, RemoteFriendsWiiU,
|
FriendsWiiU, RawFriendsWiiU, RawFriendsWiiUInfo, RemoteFriendsWiiU,
|
||||||
};
|
};
|
||||||
|
|
@ -49,8 +52,8 @@ use rnex_core::rmc::structures::data::Data;
|
||||||
use crate::executables::common::get_db;
|
use crate::executables::common::get_db;
|
||||||
|
|
||||||
use nex_account::derive_pid_hmac;
|
use nex_account::derive_pid_hmac;
|
||||||
use nex_account::grpc::nex_account_service_client::NexAccountServiceClient;
|
|
||||||
use nex_account::grpc::ActCreateInfoNoPid;
|
use nex_account::grpc::ActCreateInfoNoPid;
|
||||||
|
use nex_account::grpc::nex_account_service_client::NexAccountServiceClient;
|
||||||
|
|
||||||
define_rmc_proto!(
|
define_rmc_proto!(
|
||||||
proto FriendsUser{
|
proto FriendsUser{
|
||||||
|
|
@ -293,6 +296,8 @@ impl AccountManagement for FriendsGuest {
|
||||||
email: String,
|
email: String,
|
||||||
auth_data: Any,
|
auth_data: Any,
|
||||||
) -> Result<(PID, String), ErrorCode> {
|
) -> Result<(PID, String), ErrorCode> {
|
||||||
|
todo("fix breaking changes in the code below")
|
||||||
|
/*
|
||||||
println!("{}, {}, {}, {}", principal_name, key, groups, email);
|
println!("{}, {}, {}, {}", principal_name, key, groups, email);
|
||||||
|
|
||||||
if let Ok(data) = auth_data.try_get_as::<NintendoCreateAccountData>() {
|
if let Ok(data) = auth_data.try_get_as::<NintendoCreateAccountData>() {
|
||||||
|
|
@ -328,11 +333,15 @@ impl AccountManagement for FriendsGuest {
|
||||||
|
|
||||||
let new_account: ActCreateInfoNoPid = ActCreateInfoNoPid {
|
let new_account: ActCreateInfoNoPid = ActCreateInfoNoPid {
|
||||||
principal_name,
|
principal_name,
|
||||||
key: nexkey.into(),
|
|
||||||
email,
|
email,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let pid = client.create_new_sequential_or_update_and_get_account(new_account).await.map_err(|_| ErrorCode::Core_Unknown)?.into_inner();
|
let pid = client
|
||||||
|
.create_new_sequential_or_update_and_get_account(new_account)
|
||||||
|
.await
|
||||||
|
.map_err(|_| ErrorCode::Core_Unknown)?
|
||||||
|
.into_inner();
|
||||||
|
|
||||||
let mac = derive_pid_hmac(pid.pid, &nexkey);
|
let mac = derive_pid_hmac(pid.pid, &nexkey);
|
||||||
|
|
||||||
|
|
@ -341,6 +350,6 @@ impl AccountManagement for FriendsGuest {
|
||||||
return Ok((pid.pid, hex_str));
|
return Ok((pid.pid, hex_str));
|
||||||
}
|
}
|
||||||
|
|
||||||
Err(ErrorCode::Authentication_InvalidParam)
|
Err(ErrorCode::Authentication_InvalidParam)*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue