blob: 542577c11a06d0c53be8e5ed660fd613df5138a7 [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A library for reading and writing ASN.1 data."><meta name="keywords" content="rust, rustlang, rust-lang, yasna"><title>yasna - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="../crates.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc mod crate"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../yasna/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../yasna/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Crate yasna</a></h2><div class="sidebar-elems"><ul class="block"><li class="version">Version 0.3.2</li><li><a id="all-types" href="all.html">All Items</a></li></ul><section><ul class="block"><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li><li><a href="#traits">Traits</a></li><li><a href="#functions">Functions</a></li><li><a href="#types">Type Definitions</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Crate <a class="mod" href="#">yasna</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/yasna/lib.rs.html#9-196">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A library for reading and writing ASN.1 data.</p>
<h2 id="examples"><a href="#examples">Examples</a></h2><h3 id="encodingdecoding-simple-data"><a href="#encodingdecoding-simple-data">Encoding/decoding simple data</a></h3>
<p>A type implementing <a href="trait.DEREncodable.html"><code>DEREncodable</code></a> can be easily encoded:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">extern crate </span>yasna;
<span class="kw">fn </span>main() {
<span class="kw">let </span>der = yasna::encode_der(<span class="kw-2">&amp;</span>(<span class="number">10</span>, <span class="bool-val">true</span>));
<span class="macro">println!</span>(<span class="string">&quot;(10, true) = {:?}&quot;</span>, der);
}</code></pre></div>
<p>Similarly, a type implementing <a href="trait.BERDecodable.html"><code>BERDecodable</code></a> can be
easily decoded:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">extern crate </span>yasna;
<span class="kw">fn </span>main() {
<span class="kw">let </span>asn: (i64, bool) = yasna::decode_der(
<span class="kw-2">&amp;</span>[<span class="number">48</span>, <span class="number">6</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">10</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">255</span>]).unwrap();
<span class="macro">println!</span>(<span class="string">&quot;{:?} = [48, 6, 2, 1, 10, 1, 1, 255]&quot;</span>, asn);
}</code></pre></div>
<h3 id="encodingdecoding-by-hand"><a href="#encodingdecoding-by-hand">Encoding/decoding by hand</a></h3>
<p>Default <code>DEREncodable</code>/<code>BERDecodable</code> implementations can’t handle
all ASN.1 type. In many cases you have to write your reader/writer
by hand.</p>
<p>To serialize ASN.1 data, you can use <a href="fn.construct_der.html"><code>construct_der</code></a>.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">extern crate </span>yasna;
<span class="kw">fn </span>main() {
<span class="kw">let </span>der = yasna::construct_der(|writer| {
writer.write_sequence(|writer| {
writer.next().write_i64(<span class="number">10</span>);
writer.next().write_bool(<span class="bool-val">true</span>);
})
});
<span class="macro">println!</span>(<span class="string">&quot;(10, true) = {:?}&quot;</span>, der);
}</code></pre></div>
<p>To deserialize ASN.1 data, you can use <a href="fn.parse_ber.html"><code>parse_ber</code></a>
or <a href="fn.parse_der.html"><code>parse_der</code></a>.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">extern crate </span>yasna;
<span class="kw">fn </span>main() {
<span class="kw">let </span>asn = yasna::parse_der(<span class="kw-2">&amp;</span>[<span class="number">48</span>, <span class="number">6</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">10</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">255</span>], |reader| {
reader.read_sequence(|reader| {
<span class="kw">let </span>i = <span class="macro">try!</span>(reader.next().read_i64());
<span class="kw">let </span>b = <span class="macro">try!</span>(reader.next().read_bool());
<span class="kw">return </span><span class="prelude-val">Ok</span>((i, b));
})
}).unwrap();
<span class="macro">println!</span>(<span class="string">&quot;{:?} = [48, 6, 2, 1, 10, 1, 1, 255]&quot;</span>, asn);
}</code></pre></div>
</div></details><h2 id="modules" class="small-section-header"><a href="#modules">Modules</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="mod" href="models/index.html" title="yasna::models mod">models</a></div><div class="item-right docblock-short">Provides datatypes which correspond to ASN.1 types.</div></div><div class="item-row"><div class="item-left module-item"><a class="mod" href="tags/index.html" title="yasna::tags mod">tags</a></div><div class="item-right docblock-short">Provides universal tag constants.</div></div></div><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.ASN1Error.html" title="yasna::ASN1Error struct">ASN1Error</a></div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.BERReader.html" title="yasna::BERReader struct">BERReader</a></div><div class="item-right docblock-short">A reader object for BER/DER-encoded ASN.1 data.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.BERReaderSeq.html" title="yasna::BERReaderSeq struct">BERReaderSeq</a></div><div class="item-right docblock-short">A reader object for a sequence of BER/DER-encoded ASN.1 data.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.BERReaderSet.html" title="yasna::BERReaderSet struct">BERReaderSet</a></div><div class="item-right docblock-short">A reader object for a set of BER/DER-encoded ASN.1 data.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.DERWriter.html" title="yasna::DERWriter struct">DERWriter</a></div><div class="item-right docblock-short">A writer object that accepts an ASN.1 value.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.DERWriterSeq.html" title="yasna::DERWriterSeq struct">DERWriterSeq</a></div><div class="item-right docblock-short">A writer object that accepts ASN.1 values.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.DERWriterSet.html" title="yasna::DERWriterSet struct">DERWriterSet</a></div><div class="item-right docblock-short">A writer object that accepts ASN.1 values.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.Tag.html" title="yasna::Tag struct">Tag</a></div><div class="item-right docblock-short">An ASN.1 tag.</div></div></div><h2 id="enums" class="small-section-header"><a href="#enums">Enums</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.ASN1ErrorKind.html" title="yasna::ASN1ErrorKind enum">ASN1ErrorKind</a></div></div><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.BERMode.html" title="yasna::BERMode enum">BERMode</a></div><div class="item-right docblock-short">Used by <a href="struct.BERReader.html"><code>BERReader</code></a> to determine whether or not to enforce
DER restrictions when parsing.</div></div><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.PCBit.html" title="yasna::PCBit enum">PCBit</a></div><div class="item-right docblock-short">A value of the ASN.1 primitive/constructed (“P/C”) bit.</div></div><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.TagClass.html" title="yasna::TagClass enum">TagClass</a></div><div class="item-right docblock-short">An ASN.1 tag class, used in <a href="struct.Tag.html"><code>Tag</code></a>.</div></div></div><h2 id="traits" class="small-section-header"><a href="#traits">Traits</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="trait" href="trait.BERDecodable.html" title="yasna::BERDecodable trait">BERDecodable</a></div><div class="item-right docblock-short">Types decodable in BER.</div></div><div class="item-row"><div class="item-left module-item"><a class="trait" href="trait.DEREncodable.html" title="yasna::DEREncodable trait">DEREncodable</a></div><div class="item-right docblock-short">Types encodable in DER.</div></div></div><h2 id="functions" class="small-section-header"><a href="#functions">Functions</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.construct_der.html" title="yasna::construct_der fn">construct_der</a></div><div class="item-right docblock-short">Constructs DER-encoded data as <code>Vec&lt;u8&gt;</code>.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.construct_der_seq.html" title="yasna::construct_der_seq fn">construct_der_seq</a></div><div class="item-right docblock-short">Constructs DER-encoded sequence of data as <code>Vec&lt;u8&gt;</code>.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.decode_ber.html" title="yasna::decode_ber fn">decode_ber</a></div><div class="item-right docblock-short">Reads an ASN.1 value from <code>&amp;[u8]</code>.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.decode_ber_general.html" title="yasna::decode_ber_general fn">decode_ber_general</a></div><div class="item-right docblock-short">Decodes DER/BER-encoded data.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.decode_der.html" title="yasna::decode_der fn">decode_der</a></div><div class="item-right docblock-short">Reads an ASN.1 value from <code>&amp;[u8]</code>.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.encode_der.html" title="yasna::encode_der fn">encode_der</a></div><div class="item-right docblock-short">Encodes a value to DER-encoded ASN.1 data.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.parse_ber.html" title="yasna::parse_ber fn">parse_ber</a></div><div class="item-right docblock-short">Parses BER-encoded data.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.parse_ber_general.html" title="yasna::parse_ber_general fn">parse_ber_general</a></div><div class="item-right docblock-short">Parses DER/BER-encoded data.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.parse_der.html" title="yasna::parse_der fn">parse_der</a></div><div class="item-right docblock-short">Parses DER-encoded data.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.try_construct_der.html" title="yasna::try_construct_der fn">try_construct_der</a></div><div class="item-right docblock-short">Tries to construct DER-encoded data as <code>Vec&lt;u8&gt;</code>.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.try_construct_der_seq.html" title="yasna::try_construct_der_seq fn">try_construct_der_seq</a></div><div class="item-right docblock-short">Tries to construct a DER-encoded sequence of data as <code>Vec&lt;u8&gt;</code>.</div></div></div><h2 id="types" class="small-section-header"><a href="#types">Type Definitions</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="type" href="type.ASN1Result.html" title="yasna::ASN1Result type">ASN1Result</a></div></div></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="yasna" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>