diff --git a/pem-rfc7468/src/decoder.rs b/pem-rfc7468/src/decoder.rs index d0bf5d64e..7d0c84cc8 100644 --- a/pem-rfc7468/src/decoder.rs +++ b/pem-rfc7468/src/decoder.rs @@ -44,6 +44,12 @@ fn decode_encapsulated_text<'i, 'o>( } Ok(()) } +/// Decode the encapsulation boundaries of a PEM document according to RFC 7468's "Strict" grammar. +/// +/// On success, returning the decoded label. +pub fn decode_label(pem: &[u8]) -> Result<&str> { + Ok(Encapsulation::try_from(pem)?.label()) +} /// Decode a PEM document according to RFC 7468's "Strict" grammar. /// diff --git a/pem-rfc7468/src/lib.rs b/pem-rfc7468/src/lib.rs index defd0a805..b58fee369 100644 --- a/pem-rfc7468/src/lib.rs +++ b/pem-rfc7468/src/lib.rs @@ -112,7 +112,7 @@ mod error; mod grammar; pub use crate::{ - decoder::decode, + decoder::{decode, decode_label}, encoder::{encode, encoded_len, LineEnding}, error::{Error, Result}, }; diff --git a/pem-rfc7468/tests/decode.rs b/pem-rfc7468/tests/decode.rs index 20e4b09df..6b2c571b1 100644 --- a/pem-rfc7468/tests/decode.rs +++ b/pem-rfc7468/tests/decode.rs @@ -17,6 +17,8 @@ fn pkcs1_enc_example() { Err(pem_rfc7468::Error::HeaderDetected) => (), _ => panic!("Expected HeaderDetected error"), } + let label = pem_rfc7468::decode_label(pem).unwrap(); + assert_eq!(label, "RSA PRIVATE KEY"); } #[test] @@ -37,6 +39,8 @@ fn header_of_length_64() { Err(pem_rfc7468::Error::HeaderDetected) => (), _ => panic!("Expected HeaderDetected error"), } + let label = pem_rfc7468::decode_label(pem).unwrap(); + assert_eq!(label, "RSA PRIVATE KEY"); } #[test]