der_parser::der

Type Alias DerObject

Source
pub type DerObject<'a> = BerObject<'a>;
Expand description

Representation of a DER-encoded (X.690) object

Note that a DER object is just a BER object, with additional constraints.

Aliased Type§

struct DerObject<'a> {
    pub header: Header<'a>,
    pub content: BerObjectContent<'a>,
}

Fields§

§header: Header<'a>§content: BerObjectContent<'a>

Implementations

Source§

impl BerObject<'_>

Source

pub fn as_bigint(&self) -> Result<BigInt, BerError>

Attempt to read an integer value from this object.

This can fail if the object is not an integer.

§Examples
use der_parser::ber::*;

let data = &[0x02, 0x03, 0x01, 0x00, 0x01];

let (_, object) = parse_ber_integer(data).expect("parsing failed");
assert_eq!(object.as_bigint(), Ok(65537.into()))
Source

pub fn as_biguint(&self) -> Result<BigUint, BerError>

Attempt to read a positive integer value from this object.

This can fail if the object is not an integer, or is negative.

§Examples
use der_parser::ber::*;

let data = &[0x02, 0x03, 0x01, 0x00, 0x01];

let (_, object) = parse_ber_integer(data).expect("parsing failed");
assert_eq!(object.as_biguint(), Ok(65537_u32.into()))
Source§

impl<'a> BerObject<'a>

Source

pub const fn from_header_and_content<'o>( header: Header<'o>, content: BerObjectContent<'o>, ) -> BerObject<'o>

Build a BerObject from a header and content.

Note: values are not checked, so the tag can be different from the real content, or flags can be invalid.

Source

pub const fn from_obj(c: BerObjectContent<'_>) -> BerObject<'_>

Build a BerObject from its content, using default flags (no class, correct tag, and constructed flag set only for Set and Sequence)

Source

pub const fn from_int_slice(i: &'a [u8]) -> BerObject<'a>

Build a DER integer object from a slice containing an encoded integer

Source

pub fn set_raw_tag(self, raw_tag: Option<&'a [u8]>) -> BerObject<'a>

Set a tag for the BER object

Source

pub const fn from_seq(l: Vec<BerObject<'_>>) -> BerObject<'_>

Build a DER sequence object from a vector of DER objects

Source

pub const fn from_set(l: Vec<BerObject<'_>>) -> BerObject<'_>

Build a DER set object from a vector of DER objects

Source

pub fn as_i64(&self) -> Result<i64, BerError>

Attempt to read a signed integer value from DER object.

This can fail if the object is not an integer, or if it is too large.

§Examples
let der_int  = BerObject::from_int_slice(b"\x80");
assert_eq!(
    der_int.as_i64(),
    Ok(-128)
);
Source

pub fn as_i32(&self) -> Result<i32, BerError>

Attempt to read a signed integer value from DER object.

This can fail if the object is not an integer, or if it is too large.

§Examples
let der_int  = BerObject::from_int_slice(b"\x80");
assert_eq!(
    der_int.as_i32(),
    Ok(-128)
);
Source

pub fn as_u64(&self) -> Result<u64, BerError>

Attempt to read integer value from DER object.

This can fail if the object is not an unsigned integer, or if it is too large.

§Examples
let der_int  = BerObject::from_int_slice(b"\x01\x00\x01");
assert_eq!(
    der_int.as_u64(),
    Ok(0x10001)
);
Source

pub fn as_u32(&self) -> Result<u32, BerError>

Attempt to read integer value from DER object.

This can fail if the object is not an unsigned integer, or if it is too large.

§Examples
let der_int  = BerObject::from_obj(BerObjectContent::Integer(b"\x01\x00\x01"));
assert_eq!(
    der_int.as_u32(),
    Ok(0x10001)
);
Source

pub fn as_bool(&self) -> Result<bool, BerError>

Attempt to read integer value from DER object. This can fail if the object is not a boolean.

Source

pub fn as_oid(&self) -> Result<&Oid<'a>, BerError>

Attempt to read an OID value from DER object. This can fail if the object is not an OID.

Source

pub fn as_oid_val(&self) -> Result<Oid<'a>, BerError>

Attempt to read an OID value from DER object. This can fail if the object is not an OID.

Source

pub fn as_optional(&self) -> Result<Option<&BerObject<'a>>, BerError>

Attempt to get a reference on the content from an optional object. This can fail if the object is not optional.

Source

pub fn as_tagged(&self) -> Result<(Class, Tag, &BerObject<'a>), BerError>

Attempt to get a reference on the content from a tagged object. This can fail if the object is not tagged.

Source

pub fn as_bitstring_ref(&self) -> Result<&BitStringObject<'_>, BerError>

Attempt to read a reference to a BitString value from DER object. This can fail if the object is not an BitString.

Note that this function returns a reference to the BitString. To get an owned value, use as_bitstring

Source

pub fn as_bitstring(&self) -> Result<BitStringObject<'a>, BerError>

Attempt to read a BitString value from DER object. This can fail if the object is not an BitString.

Source

pub fn as_sequence(&self) -> Result<&Vec<BerObject<'a>>, BerError>

Attempt to extract the list of objects from a DER sequence. This can fail if the object is not a sequence.

Source

pub fn as_set(&self) -> Result<&Vec<BerObject<'a>>, BerError>

Attempt to extract the list of objects from a DER set. This can fail if the object is not a set.

Source

pub fn as_slice(&self) -> Result<&'a [u8], BerError>

Attempt to get the content from a DER object, as a slice. This can fail if the object does not contain a type directly equivalent to a slice (e.g a sequence). This function mostly concerns string types, integers, or unknown DER objects.

Source

pub fn as_str(&self) -> Result<&'a str, BerError>

Attempt to get the content from a DER object, as a str. This can fail if the object does not contain a string type.

Only some string types are considered here. Other string types can be read using as_slice.

Source

pub const fn class(&self) -> Class

Get the BER object header’s class.

Source

pub const fn tag(&self) -> Tag

Get the BER object header’s tag.

Source

pub const fn length(&self) -> Length

Get the BER object header’s length.

Source

pub const fn is_universal(&self) -> bool

Test if object class is Universal

Source

pub const fn is_application(&self) -> bool

Test if object class is Application

Source

pub const fn is_contextspecific(&self) -> bool

Test if object class is Context-specific

Source

pub fn is_private(&self) -> bool

Test if object class is Private

Source

pub const fn is_primitive(&self) -> bool

Test if object is primitive

Source

pub const fn is_constructed(&self) -> bool

Test if object is constructed

Source

pub const fn assert_class(&self, class: Class) -> Result<(), BerError>

Return error if class is not the expected class

Source

pub const fn assert_tag(&self, tag: Tag) -> Result<(), BerError>

Return error if tag is not the expected tag

Source

pub const fn assert_constructed(&self) -> Result<(), BerError>

Return error if object is not constructed

Source

pub const fn assert_primitive(&self) -> Result<(), BerError>

Return error if object is not primitive

Source§

impl<'a> BerObject<'a>

Source

pub fn ref_iter(&'a self) -> BerObjectRefIterator<'a>

Source§

impl<'a> BerObject<'a>

Source

pub fn as_pretty(&'a self, indent: usize, increment: usize) -> PrettyBer<'a>

Trait Implementations

Source§

impl<'a> Clone for BerObject<'a>

Source§

fn clone(&self) -> BerObject<'a>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for BerObject<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> From<BerObjectContent<'a>> for BerObject<'a>

Build a DER object from a BerObjectContent.

Source§

fn from(obj: BerObjectContent<'a>) -> BerObject<'a>

Converts to this type from the input type.
Source§

impl<'a> From<Oid<'a>> for BerObject<'a>

Build a DER object from an OID.

Source§

fn from(oid: Oid<'a>) -> BerObject<'a>

Converts to this type from the input type.
Source§

impl<'a> Index<usize> for BerObject<'a>

Source§

type Output = BerObject<'a>

The returned type after indexing.
Source§

fn index(&self, idx: usize) -> &BerObject<'a>

Performs the indexing (container[index]) operation. Read more
Source§

impl<'a> IntoIterator for BerObject<'a>

Source§

type Item = BerObject<'a>

The type of the elements being iterated over.
Source§

type IntoIter = BerObjectIntoIterator<'a>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<'a> PartialEq for BerObject<'a>

Source§

fn eq(&self, other: &BerObject<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a, 'b> TryFrom<&'b Any<'a>> for BerObject<'a>

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(any: &'b Any<'a>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<'a> TryFrom<Any<'a>> for BerObject<'a>

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(any: Any<'a>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<'a> StructuralPartialEq for BerObject<'a>