Skip to content

Commit beac77b

Browse files
committed
der: clarify draft
der: more clarify
1 parent 08aace2 commit beac77b

File tree

7 files changed

+436
-5
lines changed

7 files changed

+436
-5
lines changed

der/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ 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"
3233
proptest = "1"
3334

3435
[features]
36+
default = ["clarify"]
3537
alloc = ["zeroize?/alloc"]
3638
std = ["alloc"]
3739

@@ -41,6 +43,7 @@ derive = ["dep:der_derive"]
4143
oid = ["dep:const-oid"]
4244
pem = ["dep:pem-rfc7468", "alloc", "zeroize"]
4345
real = []
46+
clarify = ["std", "pem", "dep:tynm"]
4447

4548
[package.metadata.docs.rs]
4649
all-features = true

der/src/asn1/any.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ impl<'a> AnyRef<'a> {
5656
pub fn value(self) -> &'a [u8] {
5757
self.value.as_slice()
5858
}
59+
/// Returns [`Tag`] and [`Length`] of self.
60+
pub fn header(&self) -> Header {
61+
Header {
62+
tag: self.tag,
63+
length: self.value.len(),
64+
}
65+
}
5966

6067
/// Attempt to decode this [`AnyRef`] type into the inner value.
6168
pub fn decode_as<T>(self) -> Result<T, <T as DecodeValue<'a>>::Error>
@@ -66,10 +73,7 @@ impl<'a> AnyRef<'a> {
6673
return Err(self.tag.unexpected_error(None).to_error().into());
6774
}
6875

69-
let header = Header {
70-
tag: self.tag,
71-
length: self.value.len(),
72-
};
76+
let header = self.header();
7377

7478
let mut decoder = SliceReader::new(self.value())?;
7579
let result = T::decode_value(&mut decoder, header)?;

der/src/writer.rs

Lines changed: 47 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(crate) mod clarify;
35
#[cfg(feature = "pem")]
46
pub(crate) mod pem;
57
pub(crate) mod slice;
@@ -9,6 +11,9 @@ use crate::Result;
911
#[cfg(feature = "std")]
1012
use std::io;
1113

14+
#[cfg(feature = "clarify")]
15+
use crate::Tag;
16+
1217
/// Writer trait which outputs encoded DER.
1318
pub trait Writer {
1419
/// Write the given DER-encoded bytes as output.
@@ -18,6 +23,48 @@ pub trait Writer {
1823
fn write_byte(&mut self, byte: u8) -> Result<()> {
1924
self.write(&[byte])
2025
}
26+
27+
#[cfg(feature = "clarify")]
28+
/// Should return true for clarify writers
29+
fn is_clarify(&self) -> bool {
30+
false
31+
}
32+
33+
#[cfg(feature = "clarify")]
34+
/// Called when starting next TLV value
35+
fn clarify_start_value_type<T>(&mut self) {
36+
// can be overrided
37+
}
38+
39+
#[cfg(feature = "clarify")]
40+
/// Called when ending next TLV value
41+
fn clarify_end_value_type<T>(&mut self) {
42+
// can be overrided
43+
}
44+
45+
#[cfg(feature = "clarify")]
46+
/// Called when starting next TLV tag
47+
fn clarify_start_tag(&mut self, _tag: &Tag) {
48+
// can be overrided
49+
}
50+
51+
#[cfg(feature = "clarify")]
52+
/// Called when ending next TLV tag
53+
fn clarify_end_tag(&mut self, _tag: &Tag) {
54+
// can be overrided
55+
}
56+
57+
#[cfg(feature = "clarify")]
58+
/// Called when writing field with name
59+
fn clarify_field_name(&mut self, _field_name: &str) {
60+
// can be overrided
61+
}
62+
63+
#[cfg(feature = "clarify")]
64+
// Called when writing choice, e.g. enum name: "DnsName"
65+
fn clarify_choice(&mut self, _choice_name: &[u8]) {
66+
// can be overrided
67+
}
2168
}
2269

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

0 commit comments

Comments
 (0)