use rsa::pkcs1::{DecodeRsaPrivateKey, DecodeRsaPublicKey};
use std::str;
use crate::error::{Result, Error};
use crate::pubkey::{RsaPrivkey, RsaPubkey};
pub fn decode_pkcs1_pem_privkey_nopass(pem_data: &[u8]) -> Result<RsaPrivkey> {
let pem_data = str::from_utf8(pem_data).map_err(|_| Error::Decode("PEM file is not in valid UTF-8"))?;
let privkey = rsa::RsaPrivateKey::from_pkcs1_pem(pem_data).map_err(Error::Pkcs1)?;
Ok(RsaPrivkey { privkey })
}
pub fn decode_pkcs1_der_privkey(der_data: &[u8]) -> Result<RsaPrivkey> {
let privkey = rsa::RsaPrivateKey::from_pkcs1_der(der_data).map_err(Error::Pkcs1)?;
Ok(RsaPrivkey { privkey })
}
pub fn decode_pkcs1_pem_pubkey(pem_data: &[u8]) -> Result<RsaPubkey> {
let pem_data = str::from_utf8(pem_data).map_err(|_| Error::Decode("PEM file is not in valid UTF-8"))?;
let pubkey = rsa::RsaPublicKey::from_pkcs1_pem(pem_data).map_err(Error::Pkcs1)?;
Ok(RsaPubkey { pubkey })
}
pub fn decode_pkcs1_der_pubkey(der_data: &[u8]) -> Result<RsaPubkey> {
let pubkey = rsa::RsaPublicKey::from_pkcs1_der(der_data).map_err(Error::Pkcs1)?;
Ok(RsaPubkey { pubkey })
}