Skip to content

Commit d4395cd

Browse files
authored
der: make ObjectIdentifier<MAX_SIZE> impls generic (#1851)
1 parent 6d28e00 commit d4395cd

File tree

2 files changed

+15
-15
lines changed

2 files changed

+15
-15
lines changed

der/src/asn1/oid.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,27 @@ use crate::{
44
DecodeValue, EncodeValue, Error, FixedTag, Header, Length, Reader, Result, Tag, Tagged, Writer,
55
asn1::AnyRef, ord::OrdIsValueOrd,
66
};
7-
use const_oid::ObjectIdentifier;
7+
use const_oid::{ObjectIdentifier, ObjectIdentifierRef};
88

99
#[cfg(feature = "alloc")]
1010
use super::Any;
1111

12-
impl<'a> DecodeValue<'a> for ObjectIdentifier {
12+
impl<'a, const MAX_SIZE: usize> DecodeValue<'a> for ObjectIdentifier<MAX_SIZE> {
1313
type Error = Error;
1414

1515
fn decode_value<R: Reader<'a>>(reader: &mut R, header: Header) -> Result<Self> {
16-
let mut buf = [0u8; ObjectIdentifier::MAX_SIZE];
16+
let mut buf = [0u8; MAX_SIZE];
1717
let slice = buf
1818
.get_mut(..header.length.try_into()?)
1919
.ok_or_else(|| Self::TAG.length_error())?;
2020

2121
let actual_len = reader.read_into(slice)?.len();
2222
debug_assert_eq!(actual_len, header.length.try_into()?);
23-
Ok(Self::from_bytes(slice)?)
23+
Ok(ObjectIdentifierRef::from_bytes(slice)?.try_into()?)
2424
}
2525
}
2626

27-
impl EncodeValue for ObjectIdentifier {
27+
impl<const MAX_SIZE: usize> EncodeValue for ObjectIdentifier<MAX_SIZE> {
2828
fn value_len(&self) -> Result<Length> {
2929
Length::try_from(self.as_bytes().len())
3030
}
@@ -34,14 +34,14 @@ impl EncodeValue for ObjectIdentifier {
3434
}
3535
}
3636

37-
impl FixedTag for ObjectIdentifier {
37+
impl<const MAX_SIZE: usize> FixedTag for ObjectIdentifier<MAX_SIZE> {
3838
const TAG: Tag = Tag::ObjectIdentifier;
3939
}
4040

41-
impl OrdIsValueOrd for ObjectIdentifier {}
41+
impl<const MAX_SIZE: usize> OrdIsValueOrd for ObjectIdentifier<MAX_SIZE> {}
4242

43-
impl<'a> From<&'a ObjectIdentifier> for AnyRef<'a> {
44-
fn from(oid: &'a ObjectIdentifier) -> AnyRef<'a> {
43+
impl<'a, const MAX_SIZE: usize> From<&'a ObjectIdentifier<MAX_SIZE>> for AnyRef<'a> {
44+
fn from(oid: &'a ObjectIdentifier<MAX_SIZE>) -> AnyRef<'a> {
4545
// Note: ensuring an infallible conversion is possible relies on the
4646
// invariant that `const_oid::MAX_LEN <= Length::max()`.
4747
//
@@ -56,18 +56,18 @@ impl<'a> From<&'a ObjectIdentifier> for AnyRef<'a> {
5656
}
5757

5858
#[cfg(feature = "alloc")]
59-
impl From<ObjectIdentifier> for Any {
60-
fn from(oid: ObjectIdentifier) -> Any {
59+
impl<const MAX_SIZE: usize> From<ObjectIdentifier<MAX_SIZE>> for Any {
60+
fn from(oid: ObjectIdentifier<MAX_SIZE>) -> Any {
6161
AnyRef::from(&oid).into()
6262
}
6363
}
6464

65-
impl TryFrom<AnyRef<'_>> for ObjectIdentifier {
65+
impl<const MAX_SIZE: usize> TryFrom<AnyRef<'_>> for ObjectIdentifier<MAX_SIZE> {
6666
type Error = Error;
6767

68-
fn try_from(any: AnyRef<'_>) -> Result<ObjectIdentifier> {
68+
fn try_from(any: AnyRef<'_>) -> Result<ObjectIdentifier<MAX_SIZE>> {
6969
any.tag().assert_eq(Tag::ObjectIdentifier)?;
70-
Ok(ObjectIdentifier::from_bytes(any.value())?)
70+
Ok(ObjectIdentifierRef::from_bytes(any.value())?.try_into()?)
7171
}
7272
}
7373

x509-cert/tests/certificate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ fn reencode_cert() {
166166

167167
#[test]
168168
fn decode_oversized_oids() {
169-
let o1parse = ObjectIdentifier::from_der(&hex!(
169+
let o1parse: ObjectIdentifier = Decode::from_der(&hex!(
170170
"06252B060104018237150885C8B86B87AFF00383A99F3C96C34081ADE6494D82B0E91D85B2873D"
171171
))
172172
.unwrap();

0 commit comments

Comments
 (0)