Adding PartialEq, Hash and Eq to PublicKey.

This commit is contained in:
Frederic Jacobs
2016-12-20 14:37:42 +01:00
parent 89357c7908
commit 6549afdc63
10 changed files with 111 additions and 17 deletions

View File

@ -0,0 +1,10 @@
(function() {var implementors = {};
implementors["lamport_sigs"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html' title='core::cmp::Eq'>Eq</a> for <a class='struct' href='lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()

View File

@ -1,5 +1,5 @@
(function() {var implementors = {};
implementors["lamport_sigs"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='struct' href='lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a>",];
implementors["lamport_sigs"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='struct' href='lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='struct' href='lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View File

@ -0,0 +1,10 @@
(function() {var implementors = {};
implementors["lamport_sigs"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html' title='core::hash::Hash'>Hash</a> for <a class='struct' href='lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);
} else {
window.pending_implementors = implementors;
}
})()

View File

@ -47,7 +47,7 @@
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
[<span class='inner'>&#x2212;</span>]
</a>
</span><a id='src-0' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#1-248' title='goto source code'>[src]</a></span></h1>
</span><a id='src-0' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#1-269' title='goto source code'>[src]</a></span></h1>
<div class='docblock'><p><em>lamport</em> implements one-time hash-based signatures using the Lamport signature scheme.</p>
</div><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
<table>

View File

@ -47,9 +47,9 @@
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
[<span class='inner'>&#x2212;</span>]
</a>
</span><a id='src-28' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#31-37' title='goto source code'>[src]</a></span></h1>
</span><a id='src-39' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#52-58' title='goto source code'>[src]</a></span></h1>
<pre class='rust struct'>pub struct PrivateKey { /* fields omitted */ }</pre><div class='docblock'><p>A one-time signing private key</p>
</div><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-92' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#126-210' title='goto source code'>[src]</a></span></h3>
</div><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-103' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#147-231' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.new' class='method'><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>(algorithm: &amp;'static <a class='struct' href='https://briansmith.org/rustdoc/ring/digest/struct.Algorithm.html' title='ring::digest::Algorithm'>Algorithm</a>) -&gt; <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span></h4>
<div class='docblock'><p>Generates a new random one-time signing key. This method can panic if OS RNG fails</p>
</div><h4 id='method.public_key' class='method'><span id='public_key.v' class='invisible'><code>fn <a href='#method.public_key' class='fnname'>public_key</a>(&amp;self) -&gt; <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span></h4>
@ -57,18 +57,18 @@
</div><h4 id='method.sign' class='method'><span id='sign.v' class='invisible'><code>fn <a href='#method.sign' class='fnname'>sign</a>(&amp;mut self, data: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&amp;[</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>) -&gt; <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a>&lt;<a class='type' href='../lamport_sigs/type.LamportSignatureData.html' title='lamport_sigs::LamportSignatureData'>LamportSignatureData</a>,&nbsp;&amp;'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>&gt;</code></span></h4>
<div class='docblock'><p>Signs the data with the private key and returns the result if successful.
If unsuccesful, an explanation string is returned</p>
</div></div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a> for <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-33' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#30' title='goto source code'>[src]</a></span></h3>
</div></div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a> for <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-44' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#51' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.clone' class='method'><span id='clone.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone' class='fnname'>clone</a>(&amp;self) -&gt; <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span></h4>
<div class='docblock'><p>Returns a copy of the value. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone">Read more</a></p>
</div><h4 id='method.clone_from' class='method'><span id='clone_from.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from' class='fnname'>clone_from</a>(&amp;mut self, source: &amp;Self)</code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4>
<div class='docblock'><p>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from">Read more</a></p>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-40' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#30' title='goto source code'>[src]</a></span></h3>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-51' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#51' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.fmt' class='method'><span id='fmt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt' class='fnname'>fmt</a>(&amp;self, __arg_0: &amp;mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -&gt; <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></span></h4>
<div class='docblock'><p>Formats the value using the given formatter.</p>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Drop.html' title='core::ops::Drop'>Drop</a> for <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-131' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#212-225' title='goto source code'>[src]</a></span></h3>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.Drop.html' title='core::ops::Drop'>Drop</a> for <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-142' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#233-246' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.drop' class='method'><span id='drop.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/ops/trait.Drop.html#tymethod.drop' class='fnname'>drop</a>(&amp;mut self)</code></span></h4>
<div class='docblock'><p>A method called when the value goes out of scope. <a href="https://doc.rust-lang.org/nightly/core/ops/trait.Drop.html#tymethod.drop">Read more</a></p>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-139' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#227-245' title='goto source code'>[src]</a></span></h3>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-150' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#248-266' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.eq' class='method'><span id='eq.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq' class='fnname'>eq</a>(&amp;self, other: &amp;<a class='struct' href='../lamport_sigs/struct.PrivateKey.html' title='lamport_sigs::PrivateKey'>PrivateKey</a>) -&gt; <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code></span></h4>
<div class='docblock'><p>This method tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq">Read more</a></p>
</div><h4 id='method.ne' class='method'><span id='ne.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne' class='fnname'>ne</a>(&amp;self, other: &amp;Rhs) -&gt; <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4>

View File

@ -47,9 +47,9 @@
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
[<span class='inner'>&#x2212;</span>]
</a>
</span><a id='src-10' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#23-27' title='goto source code'>[src]</a></span></h1>
</span><a id='src-11' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#24-28' title='goto source code'>[src]</a></span></h1>
<pre class='rust struct'>pub struct PublicKey { /* fields omitted */ }</pre><div class='docblock'><p>A one-time signing public key</p>
</div><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-52' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#45-124' title='goto source code'>[src]</a></span></h3>
</div><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-63' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#66-145' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.from_vec' class='method'><span id='from_vec.v' class='invisible'><code>fn <a href='#method.from_vec' class='fnname'>from_vec</a>(vec: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a>&lt;<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>&gt;, algorithm: &amp;'static <a class='struct' href='https://briansmith.org/rustdoc/ring/digest/struct.Algorithm.html' title='ring::digest::Algorithm'>Algorithm</a>) -&gt; <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a>&lt;<a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a>&gt;</code></span></h4>
<div class='docblock'><p>Intializes a public key with a byte vector.
Returns <code>None</code> if it couldn&#39;t parse the provided data</p>
@ -57,15 +57,26 @@ Returns <code>None</code> if it couldn&#39;t parse the provided data</p>
<div class='docblock'><p>Serializes a public key into a byte vector</p>
</div><h4 id='method.verify_signature' class='method'><span id='verify_signature.v' class='invisible'><code>fn <a href='#method.verify_signature' class='fnname'>verify_signature</a>(&amp;self, signature: &amp;<a class='type' href='../lamport_sigs/type.LamportSignatureData.html' title='lamport_sigs::LamportSignatureData'>LamportSignatureData</a>, data: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&amp;[</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>) -&gt; <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code></span></h4>
<div class='docblock'><p>Verifies that the signature of the data is correctly signed with the given key</p>
</div></div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a> for <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-14' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#22' title='goto source code'>[src]</a></span></h3>
</div></div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a> for <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-15' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#23' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.clone' class='method'><span id='clone.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone' class='fnname'>clone</a>(&amp;self) -&gt; <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span></h4>
<div class='docblock'><p>Returns a copy of the value. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone">Read more</a></p>
</div><h4 id='method.clone_from' class='method'><span id='clone_from.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from' class='fnname'>clone_from</a>(&amp;mut self, source: &amp;Self)</code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4>
<div class='docblock'><p>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from">Read more</a></p>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-20' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#22' title='goto source code'>[src]</a></span></h3>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-21' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#23' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.fmt' class='method'><span id='fmt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt' class='fnname'>fmt</a>(&amp;self, __arg_0: &amp;mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -&gt; <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></span></h4>
<div class='docblock'><p>Formats the value using the given formatter.</p>
</div></div></section>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-29' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#30-37' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.eq' class='method'><span id='eq.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq' class='fnname'>eq</a>(&amp;self, other: &amp;Self) -&gt; <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code></span></h4>
<div class='docblock'><p>This method tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq">Read more</a></p>
</div><h4 id='method.ne' class='method'><span id='ne.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne' class='fnname'>ne</a>(&amp;self, other: &amp;Rhs) -&gt; <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4>
<div class='docblock'><p>This method tests for <code>!=</code>.</p>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html' title='core::hash::Hash'>Hash</a> for <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-33' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#39-46' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'><h4 id='method.hash' class='method'><span id='hash.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#tymethod.hash' class='fnname'>hash</a>&lt;H:&nbsp;<a class='trait' href='https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html' title='core::hash::Hasher'>Hasher</a>&gt;(&amp;self, state: &amp;mut H)</code></span></h4>
<div class='docblock'><p>Feeds this value into the state given, updating the hasher as necessary.</p>
</div><h4 id='method.hash_slice' class='method'><span id='hash_slice.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice' class='fnname'>hash_slice</a>&lt;H&gt;(data: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&amp;[Self]</a>, state: &amp;mut H) <span class='where'>where H: <a class='trait' href='https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html' title='core::hash::Hasher'>Hasher</a></span></code><div class='since' title='Stable since Rust version 1.3.0'>1.3.0</div></span></h4>
<div class='docblock'><p>Feeds a slice of this type into the state provided.</p>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html' title='core::cmp::Eq'>Eq</a> for <a class='struct' href='../lamport_sigs/struct.PublicKey.html' title='lamport_sigs::PublicKey'>PublicKey</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-38' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#48' title='goto source code'>[src]</a></span></h3>
<div class='impl-items'></div></section>
<section id='search' class="content hidden"></section>
<section class="footer"></section>

View File

@ -47,7 +47,7 @@
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
[<span class='inner'>&#x2212;</span>]
</a>
</span><a id='src-9' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#19' title='goto source code'>[src]</a></span></h1>
</span><a id='src-10' class='srclink' href='../src/lamport_sigs/src/lib.rs.html#20' title='goto source code'>[src]</a></span></h1>
<pre class='rust typedef'>type LamportSignatureData = <a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a>&lt;<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>&gt;&gt;;</pre><div class='docblock'><p>A type alias defining a Lamport signature</p>
</div></section>
<section id='search' class="content hidden"></section>

View File

@ -1,3 +1,3 @@
var searchIndex = {};
searchIndex["lamport_sigs"] = {"doc":"*lamport* implements one-time hash-based signatures using the Lamport signature scheme.","items":[[3,"PublicKey","lamport_sigs","A one-time signing public key",null,null],[3,"PrivateKey","","A one-time signing private key",null,null],[6,"LamportSignatureData","","A type alias defining a Lamport signature",null,null],[11,"clone","","",0,null],[11,"fmt","","",0,null],[11,"clone","","",1,null],[11,"fmt","","",1,null],[11,"from_vec","","Intializes a public key with a byte vector.\nReturns `None` if it couldn&#39;t parse the provided data",0,{"inputs":[{"name":"vec"},{"name":"algorithm"}],"output":{"name":"option"}}],[11,"to_bytes","","Serializes a public key into a byte vector",0,null],[11,"verify_signature","","Verifies that the signature of the data is correctly signed with the given key",0,null],[11,"new","","Generates a new random one-time signing key. This method can panic if OS RNG fails",1,{"inputs":[{"name":"algorithm"}],"output":{"name":"privatekey"}}],[11,"public_key","","Returns the public key associated with this private key",1,null],[11,"sign","","Signs the data with the private key and returns the result if successful.\nIf unsuccesful, an explanation string is returned",1,null],[11,"drop","","",1,null],[11,"eq","","",1,null]],"paths":[[3,"PublicKey"],[3,"PrivateKey"]]};
searchIndex["lamport_sigs"] = {"doc":"*lamport* implements one-time hash-based signatures using the Lamport signature scheme.","items":[[3,"PublicKey","lamport_sigs","A one-time signing public key",null,null],[3,"PrivateKey","","A one-time signing private key",null,null],[6,"LamportSignatureData","","A type alias defining a Lamport signature",null,null],[11,"clone","","",0,null],[11,"fmt","","",0,null],[11,"eq","","",0,null],[11,"hash","","",0,null],[11,"clone","","",1,null],[11,"fmt","","",1,null],[11,"from_vec","","Intializes a public key with a byte vector.\nReturns `None` if it couldn&#39;t parse the provided data",0,{"inputs":[{"name":"vec"},{"name":"algorithm"}],"output":{"name":"option"}}],[11,"to_bytes","","Serializes a public key into a byte vector",0,null],[11,"verify_signature","","Verifies that the signature of the data is correctly signed with the given key",0,null],[11,"new","","Generates a new random one-time signing key. This method can panic if OS RNG fails",1,{"inputs":[{"name":"algorithm"}],"output":{"name":"privatekey"}}],[11,"public_key","","Returns the public key associated with this private key",1,null],[11,"sign","","Signs the data with the private key and returns the result if successful.\nIf unsuccesful, an explanation string is returned",1,null],[11,"drop","","",1,null],[11,"eq","","",1,null]],"paths":[[3,"PublicKey"],[3,"PrivateKey"]]};
initSearch(searchIndex);

View File

@ -290,6 +290,27 @@
<span id="246">246</span>
<span id="247">247</span>
<span id="248">248</span>
<span id="249">249</span>
<span id="250">250</span>
<span id="251">251</span>
<span id="252">252</span>
<span id="253">253</span>
<span id="254">254</span>
<span id="255">255</span>
<span id="256">256</span>
<span id="257">257</span>
<span id="258">258</span>
<span id="259">259</span>
<span id="260">260</span>
<span id="261">261</span>
<span id="262">262</span>
<span id="263">263</span>
<span id="264">264</span>
<span id="265">265</span>
<span id="266">266</span>
<span id="267">267</span>
<span id="268">268</span>
<span id="269">269</span>
</pre><pre class='rust '>
<span class='doccomment'>//! *lamport* implements one-time hash-based signatures using the Lamport signature scheme.</span>
@ -304,6 +325,7 @@
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>ring</span>;
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>rand</span>;
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>hash</span>::{<span class='ident'>Hash</span>, <span class='ident'>Hasher</span>};
<span class='kw'>use</span> <span class='ident'>rand</span>::<span class='ident'>OsRng</span>;
<span class='kw'>use</span> <span class='ident'>rand</span>::<span class='ident'>Rng</span>;
<span class='kw'>use</span> <span class='ident'>ring</span>::<span class='ident'>digest</span>::{<span class='ident'>Algorithm</span>, <span class='ident'>Context</span>};
@ -319,6 +341,26 @@
<span class='ident'>algorithm</span>: <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> <span class='ident'>Algorithm</span>,
}
<span class='kw'>impl</span> <span class='ident'>PartialEq</span> <span class='kw'>for</span> <span class='ident'>PublicKey</span> {
<span class='attribute'>#[<span class='ident'>allow</span>(<span class='ident'>trivial_casts</span>)]</span>
<span class='kw'>fn</span> <span class='ident'>eq</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>, <span class='ident'>other</span>: <span class='kw-2'>&amp;</span><span class='self'>Self</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
<span class='self'>self</span>.<span class='ident'>zero_values</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>zero_values</span> <span class='op'>&amp;&amp;</span>
<span class='self'>self</span>.<span class='ident'>one_values</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>one_values</span> <span class='op'>&amp;&amp;</span>
<span class='self'>self</span>.<span class='ident'>algorithm</span> <span class='kw'>as</span> <span class='op'>*</span><span class='kw'>const</span> <span class='ident'>Algorithm</span> <span class='kw'>as</span> <span class='ident'>usize</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>algorithm</span> <span class='kw'>as</span> <span class='op'>*</span><span class='kw'>const</span> <span class='ident'>Algorithm</span> <span class='kw'>as</span> <span class='ident'>usize</span>
}
}
<span class='kw'>impl</span> <span class='ident'>Hash</span> <span class='kw'>for</span> <span class='ident'>PublicKey</span> {
<span class='attribute'>#[<span class='ident'>allow</span>(<span class='ident'>trivial_casts</span>)]</span>
<span class='kw'>fn</span> <span class='ident'>hash</span><span class='op'>&lt;</span><span class='ident'>H</span>: <span class='ident'>Hasher</span><span class='op'>&gt;</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>, <span class='ident'>state</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>H</span>) {
<span class='self'>self</span>.<span class='ident'>zero_values</span>.<span class='ident'>hash</span>(<span class='ident'>state</span>);
<span class='self'>self</span>.<span class='ident'>one_values</span>.<span class='ident'>hash</span>(<span class='ident'>state</span>);
(<span class='self'>self</span>.<span class='ident'>algorithm</span> <span class='kw'>as</span> <span class='op'>*</span><span class='kw'>const</span> <span class='ident'>Algorithm</span> <span class='kw'>as</span> <span class='ident'>usize</span>).<span class='ident'>hash</span>(<span class='ident'>state</span>);
}
}
<span class='kw'>impl</span> <span class='ident'>Eq</span> <span class='kw'>for</span> <span class='ident'>PublicKey</span> {}
<span class='doccomment'>/// A one-time signing private key</span>
<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Clone</span>, <span class='ident'>Debug</span>)]</span>
<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>PrivateKey</span> {

View File

@ -11,6 +11,7 @@
extern crate ring;
extern crate rand;
use std::hash::{Hash, Hasher};
use rand::OsRng;
use rand::Rng;
use ring::digest::{Algorithm, Context};
@ -26,6 +27,26 @@ pub struct PublicKey {
algorithm: &'static Algorithm,
}
impl PartialEq for PublicKey {
#[allow(trivial_casts)]
fn eq(&self, other: &Self) -> bool {
self.zero_values == other.zero_values &&
self.one_values == other.one_values &&
self.algorithm as *const Algorithm as usize == other.algorithm as *const Algorithm as usize
}
}
impl Hash for PublicKey {
#[allow(trivial_casts)]
fn hash<H: Hasher>(&self, state: &mut H) {
self.zero_values.hash(state);
self.one_values.hash(state);
(self.algorithm as *const Algorithm as usize).hash(state);
}
}
impl Eq for PublicKey {}
/// A one-time signing private key
#[derive(Clone, Debug)]
pub struct PrivateKey {