From c208ce2e819d3b9eb8ba10e0e155a262264e4b9a Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Wed, 31 Dec 2025 05:21:28 +0200 Subject: [PATCH] feat(web): create AES-CBC page The AES-CBC page supports: - Text input: Large textarea for typing/pasting plaintext or ciphertext - File input: File upload for binary encryption/decryption - IV input: Hex-based 16-byte initialization vector - Download: Download encrypted/decrypted output as a file - Output formats: Hex, Binary, Octal, Text for decryption output --- web/Cargo.toml | 23 +- web/src/app.rs | 4 +- web/src/components/cipher_form.rs | 247 ++-------------------- web/src/components/cipher_form_cbc.rs | 290 ++++++++++++++++++++++++++ web/src/components/config_section.rs | 77 +++++++ web/src/components/error_box.rs | 14 ++ web/src/components/file_input.rs | 151 ++++++++++++++ web/src/components/iv_input.rs | 71 +++++++ web/src/components/key_input.rs | 73 +++++++ web/src/components/mod.rs | 9 + web/src/components/output_box.rs | 33 +++ web/src/components/radio_button.rs | 25 +++ web/src/components/text_input.rs | 73 +++++++ web/src/pages/aes_cbc.rs | 9 + web/src/pages/header.rs | 3 + web/src/pages/mod.rs | 1 + web/style/main.scss | 182 ++++++++++++++++ 17 files changed, 1048 insertions(+), 237 deletions(-) create mode 100644 web/src/components/cipher_form_cbc.rs create mode 100644 web/src/components/config_section.rs create mode 100644 web/src/components/error_box.rs create mode 100644 web/src/components/file_input.rs create mode 100644 web/src/components/iv_input.rs create mode 100644 web/src/components/key_input.rs create mode 100644 web/src/components/output_box.rs create mode 100644 web/src/components/radio_button.rs create mode 100644 web/src/components/text_input.rs create mode 100644 web/src/pages/aes_cbc.rs diff --git a/web/Cargo.toml b/web/Cargo.toml index 9e5fc04..7dabfb5 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -20,16 +20,31 @@ leptos_meta = { version = "0.8" } leptos_router = { version = "0.8", features = ["nightly"] } strum.workspace = true tokio = { version = "1", features = ["rt-multi-thread"], optional = true } -wasm-bindgen = { version = "=0.2.104", optional = true } +wasm-bindgen = "0.2" +js-sys = "0.3" web-sys = { version = "0.3", features = [ - "Navigator", - "Window", + "Blob", "Clipboard", + "Crypto", + "Document", + "Element", + "Event", + "EventTarget", + "File", + "FileList", + "FileReader", + "HtmlElement", + "HtmlInputElement", + "HtmlTextAreaElement", + "Navigator", + "ProgressEvent", "Storage", + "Url", + "Window", ] } [features] -hydrate = ["leptos/hydrate", "dep:console_error_panic_hook", "dep:wasm-bindgen"] +hydrate = ["leptos/hydrate", "dep:console_error_panic_hook"] ssr = [ "dep:axum", "dep:tokio", diff --git a/web/src/app.rs b/web/src/app.rs index bc99423..1a8a186 100644 --- a/web/src/app.rs +++ b/web/src/app.rs @@ -1,5 +1,6 @@ use crate::pages::{ - aes::AesPage, des::DesPage, footer::Footer, header::Header, home::Home, not_found::NotFound, + aes::AesPage, aes_cbc::AesCbcPage, des::DesPage, footer::Footer, header::Header, home::Home, + not_found::NotFound, }; use leptos::prelude::*; use leptos_meta::{MetaTags, Stylesheet, Title, provide_meta_context}; @@ -49,6 +50,7 @@ pub fn App() -> impl IntoView { +