summaryrefslogtreecommitdiffstats
path: root/vendor/der/tests/pem.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/der/tests/pem.rs')
-rw-r--r--vendor/der/tests/pem.rs67
1 files changed, 67 insertions, 0 deletions
diff --git a/vendor/der/tests/pem.rs b/vendor/der/tests/pem.rs
new file mode 100644
index 0000000..d2c8654
--- /dev/null
+++ b/vendor/der/tests/pem.rs
@@ -0,0 +1,67 @@
+//! PEM decoding and encoding tests.
+
+#![cfg(all(feature = "derive", feature = "oid", feature = "pem"))]
+
+use der::{
+ asn1::{BitString, ObjectIdentifier},
+ pem::{LineEnding, PemLabel},
+ Decode, DecodePem, EncodePem, Sequence,
+};
+
+/// Example SPKI document encoded as DER.
+const SPKI_DER: &[u8] = include_bytes!("examples/spki.der");
+
+/// Example SPKI document encoded as PEM.
+const SPKI_PEM: &str = include_str!("examples/spki.pem");
+
+/// X.509 `AlgorithmIdentifier`
+#[derive(Copy, Clone, Debug, Eq, PartialEq, Sequence)]
+pub struct AlgorithmIdentifier {
+ pub algorithm: ObjectIdentifier,
+ // pub parameters: ... (not used in spki.pem)
+}
+
+/// X.509 `SubjectPublicKeyInfo` (SPKI) in borrowed form
+#[derive(Copy, Clone, Debug, Eq, PartialEq, Sequence)]
+pub struct SpkiBorrowed<'a> {
+ pub algorithm: AlgorithmIdentifier,
+ #[asn1(type = "BIT STRING")]
+ pub subject_public_key: &'a [u8],
+}
+
+impl PemLabel for SpkiBorrowed<'_> {
+ const PEM_LABEL: &'static str = "PUBLIC KEY";
+}
+
+/// X.509 `SubjectPublicKeyInfo` (SPKI) in owned form
+#[derive(Clone, Debug, Eq, PartialEq, Sequence)]
+pub struct SpkiOwned {
+ pub algorithm: AlgorithmIdentifier,
+ pub subject_public_key: BitString,
+}
+
+impl PemLabel for SpkiOwned {
+ const PEM_LABEL: &'static str = "PUBLIC KEY";
+}
+
+#[test]
+fn from_pem() {
+ // Decode PEM to owned form.
+ let pem_spki = SpkiOwned::from_pem(SPKI_PEM).unwrap();
+
+ // Decode DER to borrowed form.
+ let der_spki = SpkiBorrowed::from_der(SPKI_DER).unwrap();
+
+ assert_eq!(pem_spki.algorithm, der_spki.algorithm);
+ assert_eq!(
+ pem_spki.subject_public_key.raw_bytes(),
+ der_spki.subject_public_key
+ );
+}
+
+#[test]
+fn to_pem() {
+ let spki = SpkiBorrowed::from_der(SPKI_DER).unwrap();
+ let pem = spki.to_pem(LineEnding::LF).unwrap();
+ assert_eq!(&pem, SPKI_PEM);
+}