feat: add parse_padding, padding_to_string

This commit is contained in:
2022-04-09 11:31:19 +08:00
parent cf1e307a06
commit 77771397a6
3 changed files with 27 additions and 32 deletions

View File

@@ -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<BigNum> {
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<Padding> {
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<RsaCrt> {
let mut n = BigNum::new()?;
n.checked_mul(&p, &q, &mut BigNumContext::new().unwrap())?;