Expand description
A library for reading and writing ASN.1 data.
§Examples
§Encoding/decoding simple data
A type implementing DEREncodable
can be easily encoded:
fn main() {
let der = yasna::encode_der(&(10, true));
println!("(10, true) = {:?}", der);
}
Similarly, a type implementing BERDecodable
can be
easily decoded:
fn main() {
let asn: (i64, bool) = yasna::decode_der(
&[48, 6, 2, 1, 10, 1, 1, 255]).unwrap();
println!("{:?} = [48, 6, 2, 1, 10, 1, 1, 255]", asn);
}
§Encoding/decoding by hand
The default DEREncodable
/BERDecodable
implementations can’t handle
all ASN.1 types. In many cases you have to write your reader/writer
by hand.
To serialize ASN.1 data, you can use construct_der
.
fn main() {
let der = yasna::construct_der(|writer| {
writer.write_sequence(|writer| {
writer.next().write_i64(10);
writer.next().write_bool(true);
})
});
println!("(10, true) = {:?}", der);
}
To deserialize ASN.1 data, you can use parse_ber
or parse_der
.
fn main() {
let asn = yasna::parse_der(&[48, 6, 2, 1, 10, 1, 1, 255], |reader| {
reader.read_sequence(|reader| {
let i = reader.next().read_i64()?;
let b = reader.next().read_bool()?;
return Ok((i, b));
})
}).unwrap();
println!("{:?} = [48, 6, 2, 1, 10, 1, 1, 255]", asn);
}
Modules§
Structs§
- ASN1
Error - BERReader
- A reader object for BER/DER-encoded ASN.1 data.
- BERReader
Seq - A reader object for a sequence of BER/DER-encoded ASN.1 data.
- BERReader
Set - A reader object for a set of BER/DER-encoded ASN.1 data.
- DERWriter
- A writer object that accepts an ASN.1 value.
- DERWriter
Seq - A writer object that accepts ASN.1 values.
- DERWriter
Set - A writer object that accepts ASN.1 values.
- Tag
- An ASN.1 tag.
Enums§
- ASN1
Error Kind - BERMode
- Used by
BERReader
to determine whether or not to enforce DER restrictions when parsing. - PCBit
- A value of the ASN.1 primitive/constructed (“P/C”) bit.
- TagClass
- An ASN.1 tag class, used in
Tag
.
Traits§
- BERDecodable
- Types decodable in BER.
- DEREncodable
- Types encodable in DER.
Functions§
- construct_
der - Constructs DER-encoded data as
Vec<u8>
. - construct_
der_ seq - Constructs DER-encoded sequence of data as
Vec<u8>
. - decode_
ber - Reads an ASN.1 value from
&[u8]
. - decode_
ber_ general - Decodes DER/BER-encoded data.
- decode_
der - Reads an ASN.1 value from
&[u8]
. - encode_
der - Encodes a value to DER-encoded ASN.1 data.
- parse_
ber - Parses BER-encoded data.
- parse_
ber_ general - Parses DER/BER-encoded data.
- parse_
der - Parses DER-encoded data.
- try_
construct_ der - Tries to construct DER-encoded data as
Vec<u8>
. - try_
construct_ der_ seq - Tries to construct a DER-encoded sequence of data as
Vec<u8>
.