From 77771397a60cf3a669fb161ceeb8af4db5bbc48a Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 9 Apr 2022 11:31:19 +0800 Subject: [PATCH] feat: add parse_padding, padding_to_string --- src/cmd_rsadecrypt.rs | 19 +++---------------- src/cmd_rsaencrypt.rs | 19 +++---------------- src/rsautil.rs | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 32 deletions(-) diff --git a/src/cmd_rsadecrypt.rs b/src/cmd_rsadecrypt.rs index 26bea29..b4bd232 100644 --- a/src/cmd_rsadecrypt.rs +++ b/src/cmd_rsadecrypt.rs @@ -3,7 +3,7 @@ use std::collections::BTreeMap; use clap::{App, Arg, ArgMatches, SubCommand}; use openssl::encrypt::Decrypter; use openssl::pkey::PKey; -use openssl::rsa::{Padding, Rsa}; +use openssl::rsa::Rsa; use rust_util::util_clap::{Command, CommandError}; pub struct CommandImpl; @@ -29,21 +29,8 @@ impl Command for CommandImpl { let pri_key_bytes = opt_result!(std::fs::read(pri_key_in), "Read file: {}, failed: {}", pri_key_in); let padding_opt = sub_arg_matches.value_of("padding"); - - let padding = match padding_opt { - Some("oaep") | Some("pkcs1_oaep") => Padding::PKCS1_OAEP, - Some("pss") | Some("pkcs1_pss") => Padding::PKCS1_PSS, - Some("none") => Padding::NONE, - Some("pkcs1") | None => Padding::PKCS1, - Some(p) => return simple_error!("Not supported padding: {}", p), - }; - let padding_str = match padding { - Padding::NONE => "none", - Padding::PKCS1 => "pkcs1", - Padding::PKCS1_PSS => "pkcs1_pss", - Padding::PKCS1_OAEP => "pkcs1_oaep", - _ => "unknown", - }; + let padding = crate::rsautil::parse_padding(padding_opt)?; + let padding_str = crate::rsautil::padding_to_string(padding); let mut json = BTreeMap::new(); diff --git a/src/cmd_rsaencrypt.rs b/src/cmd_rsaencrypt.rs index 87841a8..bb64212 100644 --- a/src/cmd_rsaencrypt.rs +++ b/src/cmd_rsaencrypt.rs @@ -3,7 +3,7 @@ use std::collections::BTreeMap; use clap::{App, Arg, ArgMatches, SubCommand}; use openssl::encrypt::Encrypter; use openssl::pkey::PKey; -use openssl::rsa::{Padding, Rsa}; +use openssl::rsa::Rsa; use rust_util::util_clap::{Command, CommandError}; use crate::digest::sha256_bytes; @@ -32,21 +32,8 @@ impl Command for CommandImpl { let pub_key_bytes = opt_result!(std::fs::read(pub_key_in), "Read file: {}, failed: {}", pub_key_in); let padding_opt = sub_arg_matches.value_of("padding"); - - let padding = match padding_opt { - Some("oaep") | Some("pkcs1_oaep") => Padding::PKCS1_OAEP, - Some("pss") | Some("pkcs1_pss") => Padding::PKCS1_PSS, - Some("none") => Padding::NONE, - Some("pkcs1") | None => Padding::PKCS1, - Some(p) => return simple_error!("Not supported padding: {}", p), - }; - let padding_str = match padding { - Padding::NONE => "none", - Padding::PKCS1 => "pkcs1", - Padding::PKCS1_PSS => "pkcs1_pss", - Padding::PKCS1_OAEP => "pkcs1_oaep", - _ => "unknown", - }; + let padding = crate::rsautil::parse_padding(padding_opt)?; + let padding_str = crate::rsautil::padding_to_string(padding); let mut json = BTreeMap::new(); diff --git a/src/rsautil.rs b/src/rsautil.rs index 6b06ed0..119cae4 100644 --- a/src/rsautil.rs +++ b/src/rsautil.rs @@ -1,4 +1,5 @@ use openssl::bn::{BigNum, BigNumContext}; +use openssl::rsa::Padding; use rust_util::XResult; #[derive(Debug)] @@ -31,6 +32,26 @@ pub fn clone_big_num(n: &BigNum) -> XResult { Ok(opt_result!(BigNum::from_slice(n.to_vec().as_slice()), "Clone big num:{}, failed: {}", n)) } +pub fn parse_padding(padding_opt: Option<&str>) -> XResult { + Ok(match padding_opt { + Some("oaep") | Some("pkcs1_oaep") => Padding::PKCS1_OAEP, + Some("pss") | Some("pkcs1_pss") => Padding::PKCS1_PSS, + Some("none") => Padding::NONE, + Some("pkcs1") | None => Padding::PKCS1, + Some(p) => return simple_error!("Not supported padding: {}", p), + }) +} + +pub fn padding_to_string(padding: Padding) -> &'static str { + match padding { + Padding::NONE => "none", + Padding::PKCS1 => "pkcs1", + Padding::PKCS1_PSS => "pkcs1_pss", + Padding::PKCS1_OAEP => "pkcs1_oaep", + _ => "unknown", + } +} + fn inner_from(p: BigNum, q: BigNum, e: BigNum) -> XResult { let mut n = BigNum::new()?; n.checked_mul(&p, &q, &mut BigNumContext::new().unwrap())?;