feat: pem_to_der_bytes
This commit is contained in:
@@ -3,7 +3,6 @@ use std::io::Write;
|
||||
use flate2::Compression;
|
||||
use flate2::write::{GzDecoder, GzEncoder};
|
||||
use rust_util::{simple_error, XResult};
|
||||
use x509_parser::nom::AsBytes;
|
||||
|
||||
pub struct GzStreamEncoder {
|
||||
gz_encoder: GzEncoder<Vec<u8>>,
|
||||
|
||||
@@ -11,7 +11,7 @@ use crate::util::decode_base64;
|
||||
|
||||
/// Parse RSA Subject Public Key Info(SPKI) to Rsa Public Key
|
||||
pub fn parse_spki(pem: &str) -> XResult<RsaPublicKey> {
|
||||
let der = normalize_public_key_pem(pem)?;
|
||||
let der = pem_to_der_bytes(pem)?;
|
||||
let spki = opt_result!(SubjectPublicKeyInfo::from_der(&der), "Parse SKPI failed: {}").1;
|
||||
let public_key_der = spki.subject_public_key.data;
|
||||
let public_key = opt_result!(RSAPublicKey::from_der(&public_key_der), "Parse RSA public key failed: {}").1;
|
||||
@@ -22,19 +22,19 @@ pub fn parse_spki(pem: &str) -> XResult<RsaPublicKey> {
|
||||
Ok(rsa_public_key)
|
||||
}
|
||||
|
||||
fn normalize_public_key_pem(pem: &str) -> XResult<Vec<u8>> {
|
||||
fn pem_to_der_bytes(pem: &str) -> XResult<Vec<u8>> {
|
||||
let mut pem = pem.trim().to_owned();
|
||||
if pem.starts_with("-----BEGIN PUBLIC KEY-----") {
|
||||
pem = pem.chars().skip("-----BEGIN PUBLIC KEY-----".len()).collect::<String>();
|
||||
}
|
||||
if pem.ends_with("-----END PUBLIC KEY-----") {
|
||||
pem = pem.chars().take(pem.len() - "-----END PUBLIC KEY-----".len()).collect::<String>();
|
||||
}
|
||||
if pem.starts_with("-----BEGIN PRIVATE KEY-----") {
|
||||
pem = pem.chars().skip("-----BEGIN PRIVATE KEY-----".len()).collect::<String>();
|
||||
}
|
||||
if pem.ends_with("-----END PRIVATE KEY-----") {
|
||||
pem = pem.chars().take(pem.len() - "-----END PRIVATE KEY-----".len()).collect::<String>();
|
||||
if pem.starts_with("-----BEGIN") {
|
||||
let mut filter_lines = vec![];
|
||||
let lines = pem.lines().skip(1);
|
||||
for ln in lines {
|
||||
if ln.starts_with("-----END") {
|
||||
break;
|
||||
} else {
|
||||
filter_lines.push(ln.to_string());
|
||||
}
|
||||
}
|
||||
pem = filter_lines.join("");
|
||||
}
|
||||
pem = pem.chars().filter(|c| *c != '\n' && *c != '\r').clone().collect::<String>();
|
||||
|
||||
@@ -109,7 +109,7 @@ qaCoQsuRtnowGKzrbVdinukd1wj0LkBuz2oNMB3qsXyq7QtOxiFTuKkMOoQNUiCE
|
||||
KQIDAQAB
|
||||
-----END PUBLIC KEY-----";
|
||||
let public_key = parse_spki(public_key_pem).unwrap();
|
||||
let private_key_der = normalize_public_key_pem(&private_key_pem).unwrap();
|
||||
let private_key_der = pem_to_der_bytes(&private_key_pem).unwrap();
|
||||
let private_key_info = PrivateKeyInfo::from_der(&private_key_der).unwrap();
|
||||
let private_key = RsaPrivateKey::try_from(private_key_info).unwrap();
|
||||
let mut rng = rand::thread_rng();
|
||||
|
||||
Reference in New Issue
Block a user