diff --git a/derparse-rs/Cargo.lock b/derparse-rs/Cargo.lock index 833c5d4..315b034 100644 --- a/derparse-rs/Cargo.lock +++ b/derparse-rs/Cargo.lock @@ -42,15 +42,21 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "der-parser" @@ -69,21 +75,22 @@ dependencies = [ name = "derparse-rs" version = "0.1.0" dependencies = [ - "base64", + "base64 0.21.7", "der-parser", "hex", "oid-registry", + "pem", ] [[package]] name = "displaydoc" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.73", ] [[package]] @@ -94,9 +101,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "minimal-lexical" @@ -116,9 +123,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -133,19 +140,29 @@ dependencies = [ ] [[package]] -name = "proc-macro2" -version = "1.0.69" +name = "pem" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -159,6 +176,26 @@ dependencies = [ "nom", ] +[[package]] +name = "serde" +version = "1.0.206" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b3e4cd94123dd520a128bcd11e34d9e9e423e7e3e50425cb1b4b1e3549d0284" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.206" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabfb6138d2383ea8208cf98ccf69cdfb1aff4088460681d84189aa259762f97" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.73", +] + [[package]] name = "syn" version = "1.0.109" @@ -172,9 +209,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.39" +version = "2.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +checksum = "837a7e8026c6ce912ff01cefbe8cafc2f8010ac49682e2a3d9decc3bce1ecaaf" dependencies = [ "proc-macro2", "quote", @@ -195,22 +232,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.73", ] [[package]] diff --git a/derparse-rs/Cargo.toml b/derparse-rs/Cargo.toml index 8a794c1..ee0c2d2 100644 --- a/derparse-rs/Cargo.toml +++ b/derparse-rs/Cargo.toml @@ -10,5 +10,6 @@ base64 = "0.21.5" der-parser = "8.2.0" hex = "0.4.3" oid-registry = { version = "0.6.1", features = ["x962", "x509", "crypto", "pkcs1", "pkcs12", "pkcs7", "pkcs9", "kdf", "ms_spc", "nist_algs"] } +pem = "3.0.4" diff --git a/derparse-rs/src/main.rs b/derparse-rs/src/main.rs index 31679ce..fc55a0a 100755 --- a/derparse-rs/src/main.rs +++ b/derparse-rs/src/main.rs @@ -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::>(); @@ -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 { + 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 { + 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;