summaryrefslogtreecommitdiff
path: root/crates/renderer/src/overlay
diff options
context:
space:
mode:
Diffstat (limited to 'crates/renderer/src/overlay')
-rw-r--r--crates/renderer/src/overlay/tcg.rs99
1 files changed, 3 insertions, 96 deletions
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))
-}