From 4862c2cf3eafdb6fa017a4e86a6fad8b4fc64171 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Sun, 13 Nov 2022 11:50:28 +0400 Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B2=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20=D0=BB=D0=B0=D0=B1?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab2/src/compute_window.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 lab2/src/compute_window.rs (limited to 'lab2/src/compute_window.rs') diff --git a/lab2/src/compute_window.rs b/lab2/src/compute_window.rs new file mode 100644 index 0000000..6a9a7e8 --- /dev/null +++ b/lab2/src/compute_window.rs @@ -0,0 +1,62 @@ +use crate::utils::powmod; +use crate::window_state::WindowState; +use eframe::egui; + +pub struct Window { + e: u64, + k: u64, + phi: u64, + closed: Option, + error: Option, +} + +impl Default for Window { + fn default() -> Self { + Self { + e: 0, + k: 0, + phi: 0, + closed: None, + error: None, + } + } +} + +impl Window { + fn compute(&mut self) { + self.closed = Some(powmod(self.e, self.k - 1, self.phi)); + } +} + +impl WindowState for Window { + fn get_name(&self) -> &str { + "Вычисление секретной экспоненты" + } + + fn update(&mut self, ui: &mut egui::Ui) { + ui.label("Открытая экспонента e:"); + let resp1 = ui.add(egui::DragValue::new(&mut self.e)); + ui.label("Модуль phi(e):"); + let resp2 = ui.add(egui::DragValue::new(&mut self.phi).clamp_range(1..=u64::MAX)); + ui.label("Порядок k элемента e по модулю phi(n):"); + let resp3 = ui.add(egui::DragValue::new(&mut self.k).clamp_range(1..=u64::MAX)); + if resp1.changed() || resp2.changed() || resp3.changed() { + self.closed = None; + self.error = None; + } + + if ui.button("Вычислить секретную экспоненту d").clicked() { + self.compute(); + } + + if let Some(d) = &self.closed { + let mut tmp = d.to_string(); + ui.label("Секретная экспонента d:"); + ui.add_enabled(false, egui::TextEdit::singleline(&mut tmp)); + } + + if let Some(err) = &self.error { + ui.label(err); + } + } +} -- cgit v1.2.3