add support for PKCS#1 v2 padding (used by seatfrog)

This commit is contained in:
eta 2022-12-30 21:50:07 +00:00
parent d4918a2b00
commit 11b41c3281

View File

@ -16,9 +16,12 @@ fn base26_decode(input: &str) -> BigUint {
}
fn strip_padding(tkt: &[u8]) -> Option<&[u8]> {
if tkt.is_empty() || tkt[0] != 1 {
if tkt.is_empty() {
return None;
}
match tkt[0] {
1 => {
// PKCS#1 v1
let tkt = &tkt[1..];
let mut iter = tkt.iter();
loop {
@ -30,6 +33,22 @@ fn strip_padding(tkt: &[u8]) -> Option<&[u8]> {
_ => return None,
}
}
}
2 => {
// PKCS#1 v2
let tkt = &tkt[1..];
let mut iter = tkt.iter();
loop {
match iter.next()? {
0 => {
return Some(iter.as_slice());
}
_ => {}
}
}
}
_ => None,
}
}
fn main() -> anyhow::Result<()> {
@ -59,9 +78,8 @@ fn main() -> anyhow::Result<()> {
.get(issuer_id)
.ok_or_else(|| anyhow!("unknown issuer ID {}", issuer_id))?;
for key in keys {
let message = ticket
.modpow(&key.public_exponent, &key.modulus)
.to_bytes_be();
let message = ticket.modpow(&key.public_exponent, &key.modulus);
let message = message.to_bytes_be();
if let Some(unpadded) = strip_padding(&message) {
eprintln!("[+] decrypt done!");
let ticket_ref_inner = Rsp6Ticket::base64(unpadded, 8, 62);