diff --git a/sdgb-api/src/title/encryption/mod.rs b/sdgb-api/src/title/encryption/mod.rs index fc33094..b0ee0ed 100644 --- a/sdgb-api/src/title/encryption/mod.rs +++ b/sdgb-api/src/title/encryption/mod.rs @@ -9,36 +9,7 @@ use flate2::write::{ZlibDecoder, ZlibEncoder}; use spdlog::debug; use crate::error::ApiError; -use crate::title::{MaiVersion, MaiVersionExt, Sdgb1_40, Sdgb1_50}; - -impl MaiVersionExt for Sdgb1_40 { - fn decode(mut data: impl AsMut<[u8]>) -> Result, ApiError> { - let mut decompressed = decompress(data.as_mut()); - if decompressed.is_empty() { - return Err(ApiError::EmptyResponse); - } - - let orig_len = decompressed.len(); - - let remain = 16 - decompressed.len() % 16; - - if - // weird but nessacary for Rust Pkcs7 - remain != 16 { - decompressed.resize(remain + orig_len, remain as _); - } - - let unpad_size = decrypt(&mut decompressed, Self::AES_KEY, Self::AES_IV)?.len(); - decompressed.truncate(unpad_size); - Ok(decompressed) - } - - fn encode(data: impl AsRef<[u8]>) -> Result, ApiError> { - let enc = encrypt(data, Self::AES_KEY, Self::AES_IV)?; - let compressed = compress(enc)?; - Ok(compressed) - } -} +use crate::title::{MaiVersion, MaiVersionExt, Sdgb1_50}; impl MaiVersionExt for Sdgb1_50 { fn decode(mut data: impl AsMut<[u8]>) -> Result, ApiError> { @@ -110,21 +81,6 @@ mod _tests { use crate::title::{Sdgb1_50, encryption::*}; - #[test] - fn test_sdgb_140_dec_enc() -> Result<(), ApiError> { - let data = [ - 120_u8, 156, 171, 77, 91, 233, 184, 108, 2, 71, 125, 142, 118, 135, 112, 181, 85, 217, - 239, 243, 159, 153, 248, 98, 159, 185, 63, 43, 173, 106, 221, 115, 104, 105, 221, 107, - 0, 241, 176, 16, 37, - ]; - - let dec = Sdgb1_40::decode(data)?; - assert_eq!(dec, br#"{"result":"Pong"}"#); - let enc = Sdgb1_40::encode(dec)?; - assert_eq!(enc, data); - Ok(()) - } - #[test] fn test_sdgb_150_dec_enc() -> Result<(), ApiError> { let data = [ diff --git a/sdgb-api/src/title/mod.rs b/sdgb-api/src/title/mod.rs index e0074d0..07180ff 100644 --- a/sdgb-api/src/title/mod.rs +++ b/sdgb-api/src/title/mod.rs @@ -117,16 +117,8 @@ pub trait MaiVersionExt: MaiVersion { } } -pub struct Sdgb1_40; pub struct Sdgb1_50; -impl MaiVersion for Sdgb1_40 { - const AES_KEY: &[u8; 32] = b"n7bx6:@Fg_:2;5E89Phy7AyIcpxEQ:R@"; - const AES_IV: &[u8; 16] = b";;KjR1C3hgB1ovXa"; - const OBFUSECATE_SUFFIX: &str = "MaimaiChnBEs2D5vW"; - - const VERSION: &str = "1.40"; -} impl MaiVersion for Sdgb1_50 { const AES_KEY: &[u8; 32] = b"a>32bVP7v<63BVLkY[xM>daZ1s9MBP Result<(), Box> { human_readable_display(preview, human_readable)?; } commands::Commands::Ping => { - let decoded: PingResp = Sdgb1_40::request( - &client, - APIMethod::Ping, - "", - Ping {}, // note: must not be `Ping`, or serde_json serializes to nothing - ) - .await?; - info!("sdgb 1.40 resp: {decoded}"); let decoded: PingResp = Sdgb1_50::request(&client, APIMethod::Ping, "", Ping {}).await?; info!("sdgb 1.50 resp: {decoded}");