Skip to content

Commit 6abcbf8

Browse files
committed
der: add pretty-printing hex encoder
1 parent ee9dd86 commit 6abcbf8

File tree

11 files changed

+724
-4
lines changed

11 files changed

+724
-4
lines changed

.github/workflows/der.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
toolchain: ${{ matrix.rust }}
3838
targets: ${{ matrix.target }}
3939
- uses: RustCrypto/actions/cargo-hack-install@master
40-
- run: cargo hack build --target ${{ matrix.target }} --feature-powerset --exclude-features arbitrary,std
40+
- run: cargo hack build --target ${{ matrix.target }} --feature-powerset --exclude-features arbitrary,std,clarify
4141

4242
minimal-versions:
4343
if: false # TODO: temp disabled due to unpublished prerelease dependencies

der/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pem-rfc7468 = { version = "1.0.0-rc.3", optional = true, features = ["alloc"] }
2626
time = { version = "0.3.4", optional = true, default-features = false }
2727
zeroize = { version = "1.8", optional = true, default-features = false }
2828
heapless = { version = "0.8", optional = true, default-features = false }
29+
tynm = { version = "0.2", optional = true, default-features = false }
2930

3031
[dev-dependencies]
3132
hex-literal = "1"
@@ -42,6 +43,7 @@ derive = ["dep:der_derive"]
4243
oid = ["dep:const-oid"]
4344
pem = ["dep:pem-rfc7468", "alloc", "zeroize"]
4445
real = []
46+
clarify = ["dep:tynm", "std", "pem", "derive", "oid"]
4547

4648
[package.metadata.docs.rs]
4749
all-features = true

der/src/encode.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,26 @@ where
8181
/// Encode this value as ASN.1 DER using the provided [`Writer`].
8282
fn encode(&self, writer: &mut impl Writer) -> Result<()> {
8383
self.header()?.encode(writer)?;
84-
self.encode_value(writer)
84+
clarify_start_value_type::<T>(writer);
85+
let result = self.encode_value(writer);
86+
clarify_end_value_type::<T>(writer);
87+
result
88+
}
89+
}
90+
91+
#[allow(unused_variables)]
92+
fn clarify_start_value_type<T: ?Sized>(writer: &mut impl Writer) {
93+
#[cfg(feature = "clarify")]
94+
if let Some(clarifier) = writer.clarifier() {
95+
clarifier.clarify_start_value_type::<T>();
96+
}
97+
}
98+
99+
#[allow(unused_variables)]
100+
fn clarify_end_value_type<T: ?Sized>(writer: &mut impl Writer) {
101+
#[cfg(feature = "clarify")]
102+
if let Some(clarifier) = writer.clarifier() {
103+
clarifier.clarify_end_value_type::<T>();
85104
}
86105
}
87106

der/src/header.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,27 @@ impl Encode for Header {
6666
}
6767

6868
fn encode(&self, writer: &mut impl Writer) -> Result<()> {
69+
clarify_start_tag(writer, &self.tag);
6970
self.tag.encode(writer)?;
70-
self.length.encode(writer)
71+
let result = self.length.encode(writer);
72+
clarify_end_length(writer, &self.tag, self.length);
73+
result
74+
}
75+
}
76+
77+
#[allow(unused_variables)]
78+
fn clarify_start_tag(writer: &mut impl Writer, tag: &Tag) {
79+
#[cfg(feature = "clarify")]
80+
if let Some(clarifier) = writer.clarifier() {
81+
clarifier.clarify_header_start_tag(tag);
82+
}
83+
}
84+
85+
#[allow(unused_variables)]
86+
fn clarify_end_length(writer: &mut impl Writer, tag: &Tag, length: Length) {
87+
#[cfg(feature = "clarify")]
88+
if let Some(clarifier) = writer.clarifier() {
89+
clarifier.clarify_header_end_length(Some(tag), length);
7190
}
7291
}
7392

der/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,11 @@ pub use {
395395
pem_rfc7468 as pem,
396396
};
397397

398+
#[cfg(feature = "clarify")]
399+
pub use writer::clarify::{
400+
Clarifier, ClarifyFlavor, ClarifyOptions, ClarifySliceWriter, EncodeClarifyExt,
401+
};
402+
398403
#[cfg(feature = "time")]
399404
pub use time;
400405

der/src/writer.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! Writer trait.
22
3+
#[cfg(feature = "clarify")]
4+
pub mod clarify;
35
#[cfg(feature = "pem")]
46
pub(crate) mod pem;
57
pub(crate) mod slice;
@@ -18,6 +20,12 @@ pub trait Writer {
1820
fn write_byte(&mut self, byte: u8) -> Result<()> {
1921
self.write(&[byte])
2022
}
23+
24+
#[cfg(feature = "clarify")]
25+
/// Should return Some(clarifier) for clarify writers
26+
fn clarifier(&mut self) -> Option<&mut clarify::Clarifier> {
27+
None
28+
}
2129
}
2230

2331
#[cfg(feature = "std")]

0 commit comments

Comments
 (0)