Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 23 additions & 23 deletions der/src/tag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ impl Tag {
}

/// Get the [`Class`] that corresponds to this [`Tag`].
pub fn class(self) -> Class {
pub const fn class(self) -> Class {
match self {
Tag::Application { .. } => Class::Application,
Tag::ContextSpecific { .. } => Class::ContextSpecific,
Expand All @@ -199,29 +199,29 @@ impl Tag {
}

/// Get the [`TagNumber`] for this tag.
pub fn number(self) -> TagNumber {
pub const fn number(self) -> TagNumber {
match self {
Tag::Boolean => TagNumber::N1,
Tag::Integer => TagNumber::N2,
Tag::BitString => TagNumber::N3,
Tag::OctetString => TagNumber::N4,
Tag::Null => TagNumber::N5,
Tag::ObjectIdentifier => TagNumber::N6,
Tag::Real => TagNumber::N9,
Tag::Enumerated => TagNumber::N10,
Tag::Utf8String => TagNumber::N12,
Tag::Sequence => TagNumber::N16,
Tag::Set => TagNumber::N17,
Tag::NumericString => TagNumber::N18,
Tag::PrintableString => TagNumber::N19,
Tag::TeletexString => TagNumber::N20,
Tag::VideotexString => TagNumber::N21,
Tag::Ia5String => TagNumber::N22,
Tag::UtcTime => TagNumber::N23,
Tag::GeneralizedTime => TagNumber::N24,
Tag::VisibleString => TagNumber::N26,
Tag::GeneralString => TagNumber::N27,
Tag::BmpString => TagNumber::N30,
Tag::Boolean => TagNumber::new(1),
Tag::Integer => TagNumber::new(2),
Tag::BitString => TagNumber::new(3),
Tag::OctetString => TagNumber::new(4),
Tag::Null => TagNumber::new(5),
Tag::ObjectIdentifier => TagNumber::new(6),
Tag::Real => TagNumber::new(9),
Tag::Enumerated => TagNumber::new(10),
Tag::Utf8String => TagNumber::new(12),
Tag::Sequence => TagNumber::new(16),
Tag::Set => TagNumber::new(17),
Tag::NumericString => TagNumber::new(18),
Tag::PrintableString => TagNumber::new(19),
Tag::TeletexString => TagNumber::new(20),
Tag::VideotexString => TagNumber::new(21),
Tag::Ia5String => TagNumber::new(22),
Tag::UtcTime => TagNumber::new(23),
Tag::GeneralizedTime => TagNumber::new(24),
Tag::VisibleString => TagNumber::new(26),
Tag::GeneralString => TagNumber::new(27),
Tag::BmpString => TagNumber::new(30),
Tag::Application { number, .. } => number,
Tag::ContextSpecific { number, .. } => number,
Tag::Private { number, .. } => number,
Expand Down
93 changes: 0 additions & 93 deletions der/src/tag/number.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,99 +20,6 @@ use core::fmt;
pub struct TagNumber(pub u32);

impl TagNumber {
/// Tag number `0`
pub const N0: Self = Self(0);

/// Tag number `1`
pub const N1: Self = Self(1);

/// Tag number `2`
pub const N2: Self = Self(2);

/// Tag number `3`
pub const N3: Self = Self(3);

/// Tag number `4`
pub const N4: Self = Self(4);

/// Tag number `5`
pub const N5: Self = Self(5);

/// Tag number `6`
pub const N6: Self = Self(6);

/// Tag number `7`
pub const N7: Self = Self(7);

/// Tag number `8`
pub const N8: Self = Self(8);

/// Tag number `9`
pub const N9: Self = Self(9);

/// Tag number `10`
pub const N10: Self = Self(10);

/// Tag number `11`
pub const N11: Self = Self(11);

/// Tag number `12`
pub const N12: Self = Self(12);

/// Tag number `13`
pub const N13: Self = Self(13);

/// Tag number `14`
pub const N14: Self = Self(14);

/// Tag number `15`
pub const N15: Self = Self(15);

/// Tag number `16`
pub const N16: Self = Self(16);

/// Tag number `17`
pub const N17: Self = Self(17);

/// Tag number `18`
pub const N18: Self = Self(18);

/// Tag number `19`
pub const N19: Self = Self(19);

/// Tag number `20`
pub const N20: Self = Self(20);

/// Tag number `21`
pub const N21: Self = Self(21);

/// Tag number `22`
pub const N22: Self = Self(22);

/// Tag number `23`
pub const N23: Self = Self(23);

/// Tag number `24`
pub const N24: Self = Self(24);

/// Tag number `25`
pub const N25: Self = Self(25);

/// Tag number `26`
pub const N26: Self = Self(26);

/// Tag number `27`
pub const N27: Self = Self(27);

/// Tag number `28`
pub const N28: Self = Self(28);

/// Tag number `29`
pub const N29: Self = Self(29);

/// Tag number `30`
pub const N30: Self = Self(30);

/// Mask value used to obtain the tag number from a tag octet.
pub(super) const MASK: u8 = 0b11111;

Expand Down
6 changes: 3 additions & 3 deletions der_derive/src/sequence/field.rs
Original file line number Diff line number Diff line change
Expand Up @@ -348,11 +348,11 @@ mod tests {
quote! {
let implicit_field = ::der::asn1::ContextSpecific::<>::decode_implicit(
reader,
::der::TagNumber::N0
::der::TagNumber(0u32)
Comment thread
tarcieri marked this conversation as resolved.
)?
.ok_or_else(|| {
der::Tag::ContextSpecific {
number: ::der::TagNumber::N0,
number: ::der::TagNumber(0u32),
constructed: false
}
.value_error()
Expand All @@ -366,7 +366,7 @@ mod tests {
field.to_encode_tokens().to_string(),
quote! {
::der::asn1::ContextSpecificRef {
tag_number: ::der::TagNumber::N0,
tag_number: ::der::TagNumber(0u32),
tag_mode: ::der::TagMode::Implicit,
value: &self.implicit_field,
}
Expand Down
49 changes: 4 additions & 45 deletions der_derive/src/tag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,62 +117,21 @@ impl Display for TagMode {

/// ASN.1 tag numbers (i.e. lower 5 bits of a [`Tag`]).
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
pub(crate) struct TagNumber(pub u8);
pub(crate) struct TagNumber(pub u32);

impl TagNumber {
/// Maximum tag number supported (inclusive).
pub const MAX: u8 = 30;

/// Get tokens describing this tag.
pub fn to_tokens(self) -> TokenStream {
match self.0 {
0 => quote!(::der::TagNumber::N0),
1 => quote!(::der::TagNumber::N1),
2 => quote!(::der::TagNumber::N2),
3 => quote!(::der::TagNumber::N3),
4 => quote!(::der::TagNumber::N4),
5 => quote!(::der::TagNumber::N5),
6 => quote!(::der::TagNumber::N6),
7 => quote!(::der::TagNumber::N7),
8 => quote!(::der::TagNumber::N8),
9 => quote!(::der::TagNumber::N9),
10 => quote!(::der::TagNumber::N10),
11 => quote!(::der::TagNumber::N11),
12 => quote!(::der::TagNumber::N12),
13 => quote!(::der::TagNumber::N13),
14 => quote!(::der::TagNumber::N14),
15 => quote!(::der::TagNumber::N15),
16 => quote!(::der::TagNumber::N16),
17 => quote!(::der::TagNumber::N17),
18 => quote!(::der::TagNumber::N18),
19 => quote!(::der::TagNumber::N19),
20 => quote!(::der::TagNumber::N20),
21 => quote!(::der::TagNumber::N21),
22 => quote!(::der::TagNumber::N22),
23 => quote!(::der::TagNumber::N23),
24 => quote!(::der::TagNumber::N24),
25 => quote!(::der::TagNumber::N25),
26 => quote!(::der::TagNumber::N26),
27 => quote!(::der::TagNumber::N27),
28 => quote!(::der::TagNumber::N28),
29 => quote!(::der::TagNumber::N29),
30 => quote!(::der::TagNumber::N30),
_ => unreachable!("tag number out of range: {}", self),
}
let num = self.0;
quote!(::der::TagNumber(#num))
}
}

impl FromStr for TagNumber {
type Err = ParseError;

fn from_str(s: &str) -> Result<Self, ParseError> {
let n = s.parse::<u8>().map_err(|_| ParseError)?;

if n <= Self::MAX {
Ok(Self(n))
} else {
Err(ParseError)
}
s.parse::<u32>().map(Self).map_err(|_| ParseError)
}
}

Expand Down
4 changes: 2 additions & 2 deletions gss-api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ mod tests {
AnyRef::new(
Tag::ContextSpecific {
constructed: true,
number: TagNumber::N0
number: TagNumber::new(0)
},
&inner_bytes
)
Expand All @@ -153,7 +153,7 @@ mod tests {
inner_context_token: AnyRef::new(
Tag::ContextSpecific {
constructed: true,
number: TagNumber::N0,
number: TagNumber::new(0),
},
&inner_bytes,
)
Expand Down
28 changes: 14 additions & 14 deletions pkcs1/src/params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ impl<'a> RsaPssParams<'a> {
None
} else {
Some(ContextSpecificRef {
tag_number: TagNumber::N0,
tag_number: TagNumber::new(0),
tag_mode: TagMode::Explicit,
value: &self.hash,
})
Expand All @@ -136,7 +136,7 @@ impl<'a> RsaPssParams<'a> {
None
} else {
Some(ContextSpecificRef {
tag_number: TagNumber::N1,
tag_number: TagNumber::new(1),
tag_mode: TagMode::Explicit,
value: &self.mask_gen,
})
Expand All @@ -148,7 +148,7 @@ impl<'a> RsaPssParams<'a> {
None
} else {
Some(ContextSpecificRef {
tag_number: TagNumber::N2,
tag_number: TagNumber::new(2),
tag_mode: TagMode::Explicit,
value: &self.salt_len,
})
Expand All @@ -160,7 +160,7 @@ impl<'a> RsaPssParams<'a> {
None
} else {
Some(ContextSpecificRef {
tag_number: TagNumber::N3,
tag_number: TagNumber::new(3),
tag_mode: TagMode::Explicit,
value: &self.trailer_field,
})
Expand All @@ -186,16 +186,16 @@ impl<'a> DecodeValue<'a> for RsaPssParams<'a> {
reader.read_nested(header.length, |reader| {
Ok(Self {
hash: reader
.context_specific(TagNumber::N0, TagMode::Explicit)?
.context_specific(TagNumber::new(0), TagMode::Explicit)?
.unwrap_or(SHA_1_AI),
mask_gen: reader
.context_specific(TagNumber::N1, TagMode::Explicit)?
.context_specific(TagNumber::new(1), TagMode::Explicit)?
.unwrap_or_else(default_mgf1_sha1),
salt_len: reader
.context_specific(TagNumber::N2, TagMode::Explicit)?
.context_specific(TagNumber::new(2), TagMode::Explicit)?
.unwrap_or(RsaPssParams::SALT_LEN_DEFAULT),
trailer_field: reader
.context_specific(TagNumber::N3, TagMode::Explicit)?
.context_specific(TagNumber::new(3), TagMode::Explicit)?
.unwrap_or_default(),
})
})
Expand Down Expand Up @@ -299,7 +299,7 @@ impl<'a> RsaOaepParams<'a> {
None
} else {
Some(ContextSpecificRef {
tag_number: TagNumber::N0,
tag_number: TagNumber::new(0),
tag_mode: TagMode::Explicit,
value: &self.hash,
})
Expand All @@ -313,7 +313,7 @@ impl<'a> RsaOaepParams<'a> {
None
} else {
Some(ContextSpecificRef {
tag_number: TagNumber::N1,
tag_number: TagNumber::new(1),
tag_mode: TagMode::Explicit,
value: &self.mask_gen,
})
Expand All @@ -327,7 +327,7 @@ impl<'a> RsaOaepParams<'a> {
None
} else {
Some(ContextSpecificRef {
tag_number: TagNumber::N2,
tag_number: TagNumber::new(2),
tag_mode: TagMode::Explicit,
value: &self.p_source,
})
Expand All @@ -351,13 +351,13 @@ impl<'a> DecodeValue<'a> for RsaOaepParams<'a> {
reader.read_nested(header.length, |reader| {
Ok(Self {
hash: reader
.context_specific(TagNumber::N0, TagMode::Explicit)?
.context_specific(TagNumber::new(0), TagMode::Explicit)?
.unwrap_or(SHA_1_AI),
mask_gen: reader
.context_specific(TagNumber::N1, TagMode::Explicit)?
.context_specific(TagNumber::new(1), TagMode::Explicit)?
.unwrap_or_else(default_mgf1_sha1),
p_source: reader
.context_specific(TagNumber::N2, TagMode::Explicit)?
.context_specific(TagNumber::new(2), TagMode::Explicit)?
.unwrap_or_else(default_pempty_string),
})
})
Expand Down
4 changes: 2 additions & 2 deletions pkcs12/src/safe_bag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ impl ::der::EncodeValue for SafeBag {
[
self.bag_id.encoded_len()?,
::der::asn1::ContextSpecificRef {
tag_number: ::der::TagNumber::N0,
tag_number: ::der::TagNumber::new(0),
tag_mode: ::der::TagMode::Explicit,
value: &content,
}
Expand All @@ -80,7 +80,7 @@ impl ::der::EncodeValue for SafeBag {
self.bag_id.encode(writer)?;
let content = AnyRef::from_der(&self.bag_value)?;
::der::asn1::ContextSpecificRef {
tag_number: ::der::TagNumber::N0,
tag_number: ::der::TagNumber::new(0),
tag_mode: ::der::TagMode::Explicit,
value: &content,
}
Expand Down
2 changes: 1 addition & 1 deletion pkcs8/src/private_key_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use der::pem::PemLabel;
use subtle::{Choice, ConstantTimeEq};

/// Context-specific tag number for the public key.
const PUBLIC_KEY_TAG: TagNumber = TagNumber::N1;
const PUBLIC_KEY_TAG: TagNumber = TagNumber::new(1);

/// PKCS#8 `PrivateKeyInfo`.
///
Expand Down
Loading