pub struct DERWriter<'a> { /* private fields */ }
Expand description
A writer object that accepts an ASN.1 value.
The two main sources of DERWriterSeq
are:
- The
construct_der
function, the starting point of DER serialization. - The
next
method ofDERWriterSeq
.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_i64(10)
});
assert_eq!(der, vec![2, 1, 10]);
Implementations§
source§impl<'a> DERWriter<'a>
impl<'a> DERWriter<'a>
sourcepub fn write_bool(self, val: bool)
pub fn write_bool(self, val: bool)
Writes bool
as an ASN.1 BOOLEAN value.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_bool(true)
});
assert_eq!(der, vec![1, 1, 255]);
sourcepub fn write_i64(self, val: i64)
pub fn write_i64(self, val: i64)
Writes i64
as an ASN.1 INTEGER value.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_i64(1234567890)
});
assert_eq!(der, vec![2, 4, 73, 150, 2, 210]);
sourcepub fn write_bytes(self, bytes: &[u8])
pub fn write_bytes(self, bytes: &[u8])
Writes &[u8]
as an ASN.1 OCTETSTRING value.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_bytes(b"Hello!")
});
assert_eq!(der, vec![4, 6, 72, 101, 108, 108, 111, 33]);
sourcepub fn write_utf8_string(self, string: &str)
pub fn write_utf8_string(self, string: &str)
Writes &str
as an ASN.1 UTF8String value.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_utf8_string("Hello!")
});
assert_eq!(der, vec![12, 6, 72, 101, 108, 108, 111, 33]);
sourcepub fn write_null(self)
pub fn write_null(self)
Writes the ASN.1 NULL value.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_null()
});
assert_eq!(der, vec![5, 0]);
sourcepub fn write_oid(self, oid: &ObjectIdentifier)
pub fn write_oid(self, oid: &ObjectIdentifier)
Writes an ASN.1 object identifier.
Examples
use yasna;
use yasna::models::ObjectIdentifier;
let der = yasna::construct_der(|writer| {
writer.write_oid(&ObjectIdentifier::from_slice(
&[1, 2, 840, 113549, 1, 1]))
});
assert_eq!(&der, &[6, 8, 42, 134, 72, 134, 247, 13, 1, 1]);
Panics
It panics when the OID cannot be canonically encoded in BER.
sourcepub fn write_utf8string(self, string: &str)
pub fn write_utf8string(self, string: &str)
Writes an ASN.1 UTF8String.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_utf8string("gnaw ροκανίζω 𪘂る")
});
assert_eq!(&der, &[
12, 29, 103, 110, 97, 119, 32, 207, 129, 206, 191, 206,
186, 206, 177, 206, 189, 206, 175, 206, 182, 207,
137, 32, 240, 170, 152, 130, 227, 130, 139]);
sourcepub fn write_sequence<T, F>(self, callback: F) -> Twhere
F: FnOnce(&mut DERWriterSeq<'_>) -> T,
pub fn write_sequence<T, F>(self, callback: F) -> Twhere
F: FnOnce(&mut DERWriterSeq<'_>) -> T,
Writes ASN.1 SEQUENCE.
This function uses the loan pattern: callback
is called back with
a DERWriterSeq
, to which the contents of the
SEQUENCE is written.
This is equivalent to write_sequence_of
in behaviors.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_sequence(|writer| {
writer.next().write_i64(10);
writer.next().write_bool(true);
})
});
assert_eq!(der, vec![48, 6, 2, 1, 10, 1, 1, 255]);
sourcepub fn write_sequence_of<T, F>(self, callback: F) -> Twhere
F: FnOnce(&mut DERWriterSeq<'_>) -> T,
pub fn write_sequence_of<T, F>(self, callback: F) -> Twhere
F: FnOnce(&mut DERWriterSeq<'_>) -> T,
Writes ASN.1 SEQUENCE OF.
This function uses the loan pattern: callback
is called back with
a DERWriterSeq
, to which the contents of the
SEQUENCE OF are written.
This is equivalent to write_sequence
in behaviors.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_sequence_of(|writer| {
for &i in &[10, -129] {
writer.next().write_i64(i);
}
})
});
assert_eq!(der, vec![48, 7, 2, 1, 10, 2, 2, 255, 127]);
sourcepub fn write_set<T, F>(self, callback: F) -> Twhere
F: FnOnce(&mut DERWriterSet<'_>) -> T,
pub fn write_set<T, F>(self, callback: F) -> Twhere
F: FnOnce(&mut DERWriterSet<'_>) -> T,
Writes ASN.1 SET.
This function uses the loan pattern: callback
is called back with
a DERWriterSet
, to which the contents of the
SET are written.
For SET OF values, use write_set_of
instead.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_set(|writer| {
writer.next().write_i64(10);
writer.next().write_bool(true);
})
});
assert_eq!(der, vec![49, 6, 1, 1, 255, 2, 1, 10]);
sourcepub fn write_set_of<T, F>(self, callback: F) -> Twhere
F: FnOnce(&mut DERWriterSet<'_>) -> T,
pub fn write_set_of<T, F>(self, callback: F) -> Twhere
F: FnOnce(&mut DERWriterSet<'_>) -> T,
Writes ASN.1 SET OF.
This function uses the loan pattern: callback
is called back with
a DERWriterSet
, to which the contents of the
SET OF are written.
For SET values, use write_set
instead.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_set_of(|writer| {
for &i in &[10, -129] {
writer.next().write_i64(i);
}
})
});
assert_eq!(der, vec![49, 7, 2, 1, 10, 2, 2, 255, 127]);
sourcepub fn write_numeric_string(self, string: &str)
pub fn write_numeric_string(self, string: &str)
Writes an ASN.1 NumericString.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_numeric_string("128 256")
});
assert_eq!(&der, &[18, 7, 49, 50, 56, 32, 50, 53, 54]);
sourcepub fn write_printable_string(self, string: &str)
pub fn write_printable_string(self, string: &str)
Writes an ASN.1 PrintableString.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_printable_string("Co., Ltd.")
});
assert_eq!(&der, &[19, 9, 67, 111, 46, 44, 32, 76, 116, 100, 46]);
sourcepub fn write_visible_string(self, string: &str)
pub fn write_visible_string(self, string: &str)
Writes an ASN.1 VisibleString.
Examples
use yasna;
let der = yasna::construct_der(|writer| {
writer.write_visible_string("Hi!")
});
assert_eq!(&der, &[26, 3, 72, 105, 33]);
sourcepub fn write_tagged<T, F>(self, tag: Tag, callback: F) -> Twhere
F: FnOnce(DERWriter<'_>) -> T,
pub fn write_tagged<T, F>(self, tag: Tag, callback: F) -> Twhere
F: FnOnce(DERWriter<'_>) -> T,
Writes a (explicitly) tagged value.
Examples
use yasna::{self,Tag};
let der = yasna::construct_der(|writer| {
writer.write_tagged(Tag::context(3), |writer| {
writer.write_i64(10)
})
});
assert_eq!(der, vec![163, 3, 2, 1, 10]);
Note: you can achieve the same using write_tagged_implicit
:
use yasna::{self,Tag};
let der = yasna::construct_der(|writer| {
writer.write_tagged_implicit(Tag::context(3), |writer| {
writer.write_sequence(|writer| {
let writer = writer.next();
writer.write_i64(10)
})
})
});
assert_eq!(der, vec![163, 3, 2, 1, 10]);
sourcepub fn write_tagged_implicit<T, F>(self, tag: Tag, callback: F) -> Twhere
F: FnOnce(DERWriter<'_>) -> T,
pub fn write_tagged_implicit<T, F>(self, tag: Tag, callback: F) -> Twhere
F: FnOnce(DERWriter<'_>) -> T,
Writes an implicitly tagged value.
Examples
use yasna::{self,Tag};
let der = yasna::construct_der(|writer| {
writer.write_tagged_implicit(Tag::context(3), |writer| {
writer.write_i64(10)
})
});
assert_eq!(der, vec![131, 1, 10]);