mirror of
https://git.eta.st/eta/rsp6-decoder.git
synced 2025-07-11 16:18:44 +00:00
add sub utn, decrease verbosity
This commit is contained in:
parent
1bb6e5cff8
commit
7a8648da9c
12
src/main.rs
12
src/main.rs
@ -71,7 +71,6 @@ fn main() -> anyhow::Result<()> {
|
|||||||
let issuer_id = &ticket_str[13..15];
|
let issuer_id = &ticket_str[13..15];
|
||||||
let ticket_reference = format!("{}{}", issuer_id, &ticket_str[2..11]);
|
let ticket_reference = format!("{}{}", issuer_id, &ticket_str[2..11]);
|
||||||
eprintln!("[+] RSP6 ticket, reference {}", ticket_reference);
|
eprintln!("[+] RSP6 ticket, reference {}", ticket_reference);
|
||||||
eprintln!("[+] Ticket issuer: {}", issuer_id);
|
|
||||||
let ticket = base26_decode(&ticket_str[15..]);
|
let ticket = base26_decode(&ticket_str[15..]);
|
||||||
let keys = iks
|
let keys = iks
|
||||||
.keys
|
.keys
|
||||||
@ -82,16 +81,7 @@ fn main() -> anyhow::Result<()> {
|
|||||||
let message = message.to_bytes_be();
|
let message = message.to_bytes_be();
|
||||||
if let Some(unpadded) = strip_padding(&message) {
|
if let Some(unpadded) = strip_padding(&message) {
|
||||||
eprintln!("[+] decrypt done!");
|
eprintln!("[+] decrypt done!");
|
||||||
let ticket_ref_inner = Rsp6Ticket::base64(unpadded, 8, 62);
|
let ticket = Rsp6Ticket::decode(unpadded, issuer_id.into(), ticket_str[11..13].into())?;
|
||||||
let extra_bit = Rsp6Ticket::base64(unpadded, 62, 68);
|
|
||||||
let inner_data = format!("{}{}", ticket_ref_inner, extra_bit);
|
|
||||||
let outer_data = &ticket_str[2..12];
|
|
||||||
if inner_data != outer_data {
|
|
||||||
eprintln!("[-] checksum mismatch: {} vs {}", inner_data, outer_data);
|
|
||||||
} else {
|
|
||||||
eprintln!("[+] checksum ok");
|
|
||||||
}
|
|
||||||
let ticket = Rsp6Ticket::decode(unpadded, issuer_id.into())?;
|
|
||||||
serde_json::to_writer_pretty(std::io::stdout(), &ticket)?;
|
serde_json::to_writer_pretty(std::io::stdout(), &ticket)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
} else {
|
} else {
|
||||||
|
@ -67,6 +67,7 @@ pub struct Rsp6Ticket {
|
|||||||
pub manually_inspect: bool,
|
pub manually_inspect: bool,
|
||||||
pub issuer_id: String,
|
pub issuer_id: String,
|
||||||
pub ticket_reference: String,
|
pub ticket_reference: String,
|
||||||
|
pub sub_utn: String,
|
||||||
pub checksum: char,
|
pub checksum: char,
|
||||||
pub version: u8,
|
pub version: u8,
|
||||||
pub standard_class: bool,
|
pub standard_class: bool,
|
||||||
@ -144,7 +145,7 @@ impl Rsp6Ticket {
|
|||||||
Some(format!("{}{:04}", prefix, (id % 10000)))
|
Some(format!("{}{:04}", prefix, (id % 10000)))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn decode(tkt: &[u8], issuer_id: String) -> anyhow::Result<Self> {
|
pub fn decode(tkt: &[u8], issuer_id: String, sub_utn: String) -> anyhow::Result<Self> {
|
||||||
let bit_tkt = tkt.view_bits::<Msb0>();
|
let bit_tkt = tkt.view_bits::<Msb0>();
|
||||||
|
|
||||||
let manually_inspect = bit_tkt[0];
|
let manually_inspect = bit_tkt[0];
|
||||||
@ -281,6 +282,7 @@ impl Rsp6Ticket {
|
|||||||
osi_nlc,
|
osi_nlc,
|
||||||
mystery_flag,
|
mystery_flag,
|
||||||
mystery_header,
|
mystery_header,
|
||||||
|
sub_utn,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user