From 8ca82777cc80aa1e0a0143e256f02317a2b24e16 Mon Sep 17 00:00:00 2001 From: Lncvrt Date: Sun, 19 Apr 2026 16:00:06 -0700 Subject: [PATCH] Move away from openssl --- src-tauri/Cargo.toml | 3 ++- src-tauri/src/lib.rs | 40 ++++++++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 943aaf0..064e985 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -31,12 +31,13 @@ tauri-plugin-notification = "2.3.3" sha2 = "0.11.0" tauri-plugin-clipboard-manager = "2.3.2" tauri-plugin-prevent-default = "5.0.0" -openssl = { version = "0.10.78", features = ["vendored"] } base64 = "0.22.1" tauri-plugin-http = "2.5.8" dashmap = "6.1.0" tauri-plugin-store = "2.4.2" hex = "0.4.3" +ed25519-dalek = { version = "2.2.0", features = ["pkcs8"] } +pem = "3.0.6" [target.'cfg(any(target_os = "windows", target_os = "linux"))'.dependencies] sysinfo = "0.38.4" diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index ee23632..bf6b551 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,8 +1,9 @@ -use base64::{Engine as _, engine::general_purpose}; +use base64::Engine; use dashmap::DashMap; +use ed25519_dalek::pkcs8::DecodePublicKey; +use ed25519_dalek::{Signature, Verifier, VerifyingKey}; use futures_util::stream::StreamExt; -use openssl::pkey::PKey; -use openssl::sign::Verifier; +use pem::parse; use sha2::{Digest, Sha512}; use std::fs; use std::path::Path; @@ -509,24 +510,31 @@ fn launch_game( #[tauri::command] fn verify_signature(body: String, signature: String, public_key: String) -> bool { - let Ok(pem) = general_purpose::STANDARD.decode(public_key) else { - return false; - }; - let Ok(pubkey) = PKey::public_key_from_pem(&pem) else { - return false; - }; - let Ok(sig) = general_purpose::STANDARD.decode(signature) else { + let Ok(pubkey_pem_bytes) = base64::engine::general_purpose::STANDARD.decode(public_key) else { return false; }; - let mut verifier = match Verifier::new_without_digest(&pubkey) { - Ok(v) => v, - Err(_) => return false, + let Ok(sig_bytes) = base64::engine::general_purpose::STANDARD.decode(signature) else { + return false; }; - verifier - .verify_oneshot(&sig, body.as_bytes()) - .unwrap_or(false) + let Ok(pubkey_pem) = String::from_utf8(pubkey_pem_bytes) else { + return false; + }; + + let Ok(parsed) = parse(pubkey_pem) else { + return false; + }; + + let Ok(pubkey) = VerifyingKey::from_public_key_der(&parsed.contents()) else { + return false; + }; + + let Ok(sig) = Signature::from_slice(&sig_bytes) else { + return false; + }; + + pubkey.verify(body.as_bytes(), &sig).is_ok() } #[tauri::command]