feat: update derparser-rs

This commit is contained in:
2024-08-11 15:50:21 +08:00
parent 43922cda4a
commit 039a195573
3 changed files with 80 additions and 25 deletions

View File

@@ -9,12 +9,14 @@
//! ```
use std::fs;
use std::str::FromStr;
use base64::Engine;
use der_parser::ber::{BerObject, BerObjectContent};
use der_parser::Oid;
use oid_registry::{OidEntry, OidRegistry};
use oid_registry::asn1_rs::oid;
use pem::Pem;
fn main() {
let args = std::env::args().skip(1).collect::<Vec<_>>();
@@ -23,7 +25,7 @@ fn main() {
return;
}
let arg1 = &args[0];
let content = try_parse(arg1);
let content = try_load_and_parse(arg1);
let ber_obj = match der_parser::parse_ber(&content) {
Ok(ber_obj) => ber_obj.1,
Err(e) => panic!("Parse DER failed: {}", e),
@@ -33,7 +35,22 @@ fn main() {
print(&oid_reg, 0, &ber_obj);
}
fn try_load_and_parse(arg1: &str) -> Vec<u8> {
match fs::read(arg1) {
Ok(file_content) => match String::from_utf8(file_content.clone()) {
Ok(file_content_string) => try_parse(&file_content_string),
Err(_) => file_content,
}
Err(_) => try_parse(arg1)
}
}
fn try_parse(arg1: &str) -> Vec<u8> {
if arg1.contains("-----") {
let pem = Pem::from_str(arg1).expect("Parse pem failed.");
return pem.contents().to_vec();
}
let arg1 = arg1.replace("\n", "").replace("\r", "");
if let Ok(h) = hex::decode(&arg1) {
return h;