[][src]Trait rdp::nla::asn1::ASN1

pub trait ASN1 {
    fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>;
fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>;
fn visit(&self) -> ASN1Type; }

This trait is a wrapper around the yasna library to better declare ASN1 type

Required methods

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>

write type into a DERWriter stream

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>

Read the type from an ASN1 BER reader

fn visit(&self) -> ASN1Type

To retrieve original type We use visitor pattern like in Message

Loading content...

Implementations on Foreign Types

impl ASN1 for bool[src]

ASN1 for boolean

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>[src]

Write an ASN1 boolean Node using a DERWriter

Example

    let s = true;
    assert_eq!(to_der(&s), [1, 1, 255]);

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>[src]

Read an ASN1 Boolean using a BerReader

Example

    let mut s = false;
    from_der(&mut s, &[1, 1, 255]).unwrap();
    assert_eq!(s, true);

fn visit(&self) -> ASN1Type[src]

Cast an ASN1 node into boolean

Example

    let mut s = false;
    from_der(&mut s, &[1, 1, 255]).unwrap();
    assert_eq!(cast!(ASN1Type::Bool, s).unwrap(), true);
Loading content...

Implementors

impl ASN1 for SequenceOf[src]

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>[src]

Write an ASN1 sequenceof model using a DERWriter

Example

    let s = sequence_of![
        8 as Integer,
        9 as Integer
    ];
    assert_eq!(to_der(&s), [48, 6, 2, 1, 8, 2, 1, 9]);

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>[src]

Read an ASN1 sequenceof model using a BerReader

Example

    let mut s = SequenceOf::reader(|| Box::new(0 as Integer));
    from_der(&mut s, &[48, 6, 2, 1, 8, 2, 1, 9]).unwrap();
    assert_eq!(s.inner.len(), 2);

fn visit(&self) -> ASN1Type[src]

Use to cast an ASN1 node into SequenceOf

Example

    let mut s = SequenceOf::reader(|| Box::new(0 as Integer));
    from_der(&mut s, &[48, 6, 2, 1, 8, 2, 1, 9]).unwrap();
    assert_eq!(cast!(ASN1Type::SequenceOf, s).unwrap().inner.len(), 2);

impl ASN1 for Enumerate[src]

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>[src]

Write an ASN1 Enumerate Node using a DERWriter

Example

    let s = 4 as Enumerate;
    assert_eq!(to_der(&s), [10, 1, 4]);

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>[src]

Read an ASN1 Enumerate using a BerReader

Example

    let mut s = 0 as Enumerate;
    from_der(&mut s, &[10, 1, 4]).unwrap();
    assert_eq!(s, 4);

fn visit(&self) -> ASN1Type[src]

Allow to cast an ASN1 node into enumerate using a BerReader

Example

    let mut s = 0 as Enumerate;
    from_der(&mut s, &[10, 1, 4]).unwrap();
    assert_eq!(cast!(ASN1Type::Enumerate, s).unwrap(), 4);

impl ASN1 for Integer[src]

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>[src]

Write an ASN1 Integer Node using a DERWriter

Example

    let s = 8 as Integer;
    assert_eq!(to_der(&s), [2, 1, 8]);

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>[src]

Read an ASN1 Integer using a BerReader

Example

    let mut s = 0 as Integer;
    from_der(&mut s, &[2, 1, 8]).unwrap();
    assert_eq!(s, 8);

fn visit(&self) -> ASN1Type[src]

Allow to cast a ASN1 node into Interger

Example

    let mut s = 0 as Integer;
    from_der(&mut s, &[2, 1, 8]).unwrap();
    assert_eq!(cast!(ASN1Type::U32, s).unwrap(), 8);

impl ASN1 for OctetString[src]

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>[src]

Write an ASN1 OctetString model using a DERWriter

Example

    let s = vec![0, 1, 2, 3];
    assert_eq!(to_der(&s), [4, 4, 0, 1, 2, 3]);

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>[src]

Read an ASN1 OctetString model using a BerReader

Example

    let mut s = OctetString::new();
    from_der(&mut s, &[4, 4, 0, 1, 2, 3]).unwrap();
    assert_eq!(s.len(), 4);

fn visit(&self) -> ASN1Type[src]

Use to cast an ASN1 node into SequenceOf

Example

    let mut s = OctetString::new();
    from_der(&mut s, &[4, 4, 0, 1, 2, 3]).unwrap();
    assert_eq!(cast!(ASN1Type::OctetString, s).unwrap().len(), 4);

impl ASN1 for Sequence[src]

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>[src]

Write an ASN1 sequence Node using a DERWriter

Example

    let s = sequence![
        "field1" => 1 as Integer,
        "field2" => false
    ];
    assert_eq!(to_der(&s), [48, 6, 2, 1, 1, 1, 1, 0]);

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>[src]

Read an ASN1 sequence of node using a BerReader

Example

    let mut s = sequence![
        "field1" => 1 as Integer,
        "field2" => true
    ];

    from_der(&mut s, &[48, 6, 2, 1, 1, 1, 1, 0]).unwrap();
    assert_eq!(cast!(ASN1Type::Bool, s["field2"]).unwrap(), false);

fn visit(&self) -> ASN1Type[src]

Allow to cast an ASN1 node into sequence

Example

    let mut s = sequence![
        "field1" => 1 as Integer,
        "field2" => true
    ];

    from_der(&mut s, &[48, 6, 2, 1, 1, 1, 1, 0]).unwrap();
    assert_eq!(cast!(ASN1Type::Bool, cast!(ASN1Type::Sequence, s).unwrap()["field2"]).unwrap(), false);

impl<T: ASN1> ASN1 for ExplicitTag<T>[src]

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>[src]

Write an ASN1 Node with an explicit tag using a DERWriter

Example

    let s = ExplicitTag::new(Tag::context(0), vec![0, 1, 2, 3]);
    assert_eq!(to_der(&s), [160, 6, 4, 4, 0, 1, 2, 3]);

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>[src]

Read an ASN1 Explicit tag using a BerReader

Example

    let mut s = ExplicitTag::new(Tag::context(0), OctetString::new());
    from_der(&mut s, &[160, 6, 4, 4, 0, 1, 2, 3]).unwrap();
    assert_eq!(s.inner().len(), 4);

fn visit(&self) -> ASN1Type[src]

Allow to cast the ASN1 inner type

Example

    let mut s = ExplicitTag::new(Tag::context(0), OctetString::new());
    from_der(&mut s, &[160, 6, 4, 4, 0, 1, 2, 3]).unwrap();
    assert_eq!(cast!(ASN1Type::OctetString, s).unwrap(), &[0, 1, 2, 3]);

impl<T: ASN1> ASN1 for ImplicitTag<T>[src]

fn write_asn1(&self, writer: DERWriter) -> RdpResult<()>[src]

Write an ASN1 Node with an implicit tag using a DERWriter

Example

    let s = ImplicitTag::new(Tag::context(0), vec![0, 1, 2, 3]);
    assert_eq!(to_der(&s), [128, 4, 0, 1, 2, 3]);

fn read_asn1(&mut self, reader: BERReader) -> RdpResult<()>[src]

Read an ASN1 Implicit tag for a node using a BerReader

Example

    let mut s = ImplicitTag::new(Tag::context(0), OctetString::new());
    from_der(&mut s, &[128, 4, 0, 1, 2, 3]).unwrap();
    assert_eq!(s.inner.len(), 4);

fn visit(&self) -> ASN1Type[src]

Allow to cast the inner node

Example

    let mut s = ImplicitTag::new(Tag::context(0), OctetString::new());
    from_der(&mut s, &[128, 4, 0, 1, 2, 3]).unwrap();
    assert_eq!(cast!(ASN1Type::OctetString, s).unwrap(), &[0, 1, 2, 3]);
Loading content...