diff options
Diffstat (limited to 'crates/renderer')
| -rw-r--r-- | crates/renderer/src/overlay.rs | 1 | ||||
| -rw-r--r-- | crates/renderer/src/overlay/tcg.rs | 99 |
2 files changed, 3 insertions, 97 deletions
diff --git a/crates/renderer/src/overlay.rs b/crates/renderer/src/overlay.rs index 5abeb04..90c2016 100644 --- a/crates/renderer/src/overlay.rs +++ b/crates/renderer/src/overlay.rs @@ -12,7 +12,6 @@ use teleia::*; use std::f32::consts::PI; use byteorder::{LE, ReadBytesExt}; -use sha2::Digest; use crate::{assets, background, input, net::fig, texture_server, toggle}; diff --git a/crates/renderer/src/overlay/tcg.rs b/crates/renderer/src/overlay/tcg.rs index ece01e8..c3e6a38 100644 --- a/crates/renderer/src/overlay/tcg.rs +++ b/crates/renderer/src/overlay/tcg.rs @@ -290,20 +290,11 @@ impl Marquee { fn upload_card(ctx: &context::Context, st: &mut state::State, ost: &mut overlay::State, c: &Card, buf: &[u8], hashes: &[u8], ) -> Erm<()> { - let mut signed = Vec::from(c.encoded.as_bytes()); - signed.extend(hashes); - let signature = sign(&mut ost.redis_conn, &signed)?; - let mut res = "+SIGNED+".to_owned(); - for s in signature { - write!(res, "{:02x}", s)?; - } - res.push_str("+"); - res.push_str(&c.encoded); - let with_signature = web_image_meta::png::add_text_chunk( - buf, "lcolonqtcg", &res, + let with_meta = web_image_meta::png::add_text_chunk( + buf, "lcolonqtcg", &c.encoded, )?; let uuid = uuid::Uuid::new_v4(); - let () = ost.redis_conn.hset("tcg:cards", uuid.to_string(), &with_signature)?; + let () = ost.redis_conn.hset("tcg:cards", uuid.to_string(), &with_meta)?; let inventory_key = format!("tcg-inventory:{}", c.owner_id); let () = ost.redis_conn.lpush(inventory_key, uuid.to_string())?; Ok(()) @@ -635,87 +626,3 @@ impl overlay::Overlay for Overlay { Ok(()) } } - -pub fn sign(conn: &mut redis::Connection, data: &[u8]) -> Erm<Vec<u8>> { - let mut secret: Vec<u8> = conn.get("tcg:secret")?; - secret.extend_from_slice(data); - Ok(Vec::from(sha2::Sha256::digest(&secret).as_slice())) -} - -pub fn validate_card(png: &[u8]) -> Erm<bool> { - let decoder = png::Decoder::new(png); - let mut reader = decoder.read_info()?; - let mut buf = vec![0; reader.output_buffer_size()]; - let mut frame_hashes = Vec::new(); - while let Ok(f) = reader.next_frame(&mut buf) { - frame_hashes.extend_from_slice(sha2::Sha256::digest(&buf).as_slice()); - } - reader.finish()?; - for tc in reader.info().uncompressed_latin1_text.iter() { - if tc.keyword == "lcolonqtcg" { - eprintln!("{}", tc.text); - let (sig, meta) = if let Some(suffix) = tc.text.strip_prefix("+SIGNED+") { - suffix.split_once("+").unwrap_or(("", suffix)) - } else { - ("", &*tc.text) - }; - let mut to_sign = Vec::from(meta); - to_sign.extend_from_slice(&frame_hashes); - eprintln!("to_sign: {:?}", to_sign); - let signed = { - let redis = redis::Client::open("redis://shiro").unwrap(); - let mut redis_conn = redis.get_connection().unwrap(); - sign(&mut redis_conn, &to_sign)? - }; - let mut computed_sig = String::new(); - for s in signed { - write!(computed_sig, "{:02x}", s)?; - } - eprintln!("attached signature: {}", sig); - eprintln!("computed signature: {}", computed_sig); - return Ok(sig == computed_sig); - } - } - Ok(false) -} - -pub fn repair_card(png: &[u8]) -> Erm<Vec<u8>> { - let decoder = png::Decoder::new(png); - let mut reader = decoder.read_info()?; - let mut buf = vec![0; reader.output_buffer_size()]; - let mut frame_hashes = Vec::new(); - while let Ok(f) = reader.next_frame(&mut buf) { - frame_hashes.extend_from_slice(sha2::Sha256::digest(&buf).as_slice()); - } - reader.finish()?; - for tc in reader.info().uncompressed_latin1_text.iter() { - if tc.keyword == "lcolonqtcg" { - let (sig, meta) = if let Some(suffix) = tc.text.strip_prefix("+SIGNED+") { - suffix.split_once("+").unwrap_or(("", suffix)) - } else { - ("", &*tc.text) - }; - let mut to_sign = Vec::from(meta); - to_sign.extend_from_slice(&frame_hashes); - eprintln!("to_sign: {:?}", to_sign); - let signed = { - let redis = redis::Client::open("redis://shiro").unwrap(); - let mut redis_conn = redis.get_connection().unwrap(); - sign(&mut redis_conn, &to_sign)? - }; - let mut computed_sig = String::new(); - for s in signed { - write!(computed_sig, "{:02x}", s)?; - } - if sig != computed_sig { - eprintln!("repairing, new signature: {}", computed_sig); - eprintln!("old signature: {}", sig); - let clean = web_image_meta::png::clean_chunks(png)?; - return Ok(web_image_meta::png::add_text_chunk( - &clean, "lcolonqtcg", &format!("+SIGNED+{}+{}", computed_sig, meta), - )?); - } - } - } - Ok(Vec::from(png)) -} |
