mirror of
https://github.com/mii443/RustySecrets.git
synced 2025-08-22 16:25:32 +00:00
Support for wrapped_secrets containing versioning and MIME info.
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
name = "rusty_secrets"
|
||||
version = "0.0.3"
|
||||
authors = ["Frederic Jacobs <github@fredericjacobs.com>", "sellibitze"]
|
||||
description = "Implementation of threshold Shamir secret sharing in the Rust programming language."
|
||||
description = "Implementation of threshold Shamir's secret sharing in the Rust programming language."
|
||||
homepage = "https://github.com/freedomofpress/RustySecrets"
|
||||
license = "BSD-3-Clause"
|
||||
readme = "README.md"
|
||||
|
@ -1,5 +1,5 @@
|
||||
(function() {var implementors = {};
|
||||
implementors["rusty_secrets"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><Error> for <a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>Error</a>",];
|
||||
implementors["rusty_secrets"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>Error</a>> for <a class='struct' href='rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>> for <a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>Error</a>",];
|
||||
|
||||
if (window.register_implementors) {
|
||||
window.register_implementors(implementors);
|
||||
|
10
docs/implementors/core/fmt/trait.Debug.js
Normal file
10
docs/implementors/core/fmt/trait.Debug.js
Normal file
@ -0,0 +1,10 @@
|
||||
(function() {var implementors = {};
|
||||
implementors["rusty_secrets"] = ["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='rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>",];
|
||||
|
||||
if (window.register_implementors) {
|
||||
window.register_implementors(implementors);
|
||||
} else {
|
||||
window.pending_implementors = implementors;
|
||||
}
|
||||
|
||||
})()
|
10
docs/implementors/core/fmt/trait.Display.js
Normal file
10
docs/implementors/core/fmt/trait.Display.js
Normal file
@ -0,0 +1,10 @@
|
||||
(function() {var implementors = {};
|
||||
implementors["rusty_secrets"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='struct' href='rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>",];
|
||||
|
||||
if (window.register_implementors) {
|
||||
window.register_implementors(implementors);
|
||||
} else {
|
||||
window.pending_implementors = implementors;
|
||||
}
|
||||
|
||||
})()
|
10
docs/implementors/std/error/trait.Error.js
Normal file
10
docs/implementors/std/error/trait.Error.js
Normal file
@ -0,0 +1,10 @@
|
||||
(function() {var implementors = {};
|
||||
implementors["rusty_secrets"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html' title='std::error::Error'>Error</a> for <a class='struct' href='rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>",];
|
||||
|
||||
if (window.register_implementors) {
|
||||
window.register_implementors(implementors);
|
||||
} else {
|
||||
window.pending_implementors = implementors;
|
||||
}
|
||||
|
||||
})()
|
@ -1,43 +0,0 @@
|
||||
// Copyright 2014-2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
/*jslint browser: true, es5: true */
|
||||
/*globals $: true, rootPath: true */
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
'use strict';
|
||||
|
||||
if (!window.playgroundUrl) {
|
||||
return;
|
||||
}
|
||||
|
||||
var featureRegexp = new RegExp('^\s*#!\\[feature\\(\.*?\\)\\]');
|
||||
var elements = document.querySelectorAll('pre.rust-example-rendered');
|
||||
|
||||
Array.prototype.forEach.call(elements, function(el) {
|
||||
el.onmouseover = function(e) {
|
||||
if (el.contains(e.relatedTarget)) {
|
||||
return;
|
||||
}
|
||||
|
||||
var a = el.querySelectorAll('a.test-arrow')[0];
|
||||
|
||||
var code = el.previousElementSibling.textContent;
|
||||
|
||||
var channel = '';
|
||||
if (featureRegexp.test(code)) {
|
||||
channel = '&version=nightly';
|
||||
}
|
||||
|
||||
a.setAttribute('href', window.playgroundUrl + '?code=' +
|
||||
encodeURIComponent(code) + channel);
|
||||
};
|
||||
});
|
||||
});
|
@ -570,8 +570,11 @@ pre.rust .self, pre.rust .bool-val, pre.rust .prelude-val,
|
||||
pre.rust .attribute, pre.rust .attribute .ident { color: #C82829; }
|
||||
pre.rust .macro, pre.rust .macro-nonterminal { color: #3E999F; }
|
||||
pre.rust .lifetime { color: #B76514; }
|
||||
pre.rust .question-mark {
|
||||
color: #ff9011;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.rusttest { display: none; }
|
||||
pre.rust { position: relative; }
|
||||
a.test-arrow {
|
||||
background-color: rgba(78, 139, 202, 0.2);
|
||||
@ -585,6 +588,7 @@ a.test-arrow {
|
||||
}
|
||||
a.test-arrow:hover{
|
||||
background-color: #4e8bca;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.section-header:hover a:after {
|
||||
|
10
docs/rusty_secrets/RustyError.t.html
Normal file
10
docs/rusty_secrets/RustyError.t.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;URL=struct.RustyError.html">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="struct.RustyError.html">struct.RustyError.html</a>...</p>
|
||||
<script>location.replace("struct.RustyError.html" + location.search + location.hash);</script>
|
||||
</body>
|
||||
</html>
|
10
docs/rusty_secrets/custom_error/RustyError.t.html
Normal file
10
docs/rusty_secrets/custom_error/RustyError.t.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;URL=struct.RustyError.html">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="struct.RustyError.html">struct.RustyError.html</a>...</p>
|
||||
<script>location.replace("struct.RustyError.html" + location.search + location.hash);</script>
|
||||
</body>
|
||||
</html>
|
10
docs/rusty_secrets/custom_error/struct.RustyError.html
Normal file
10
docs/rusty_secrets/custom_error/struct.RustyError.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;URL=../../rusty_secrets/struct.RustyError.html">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="../../rusty_secrets/struct.RustyError.html">../../rusty_secrets/struct.RustyError.html</a>...</p>
|
||||
<script>location.replace("../../rusty_secrets/struct.RustyError.html" + location.search + location.hash);</script>
|
||||
</body>
|
||||
</html>
|
@ -47,22 +47,30 @@
|
||||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||||
[<span class='inner'>−</span>]
|
||||
</a>
|
||||
</span><a id='src-0' class='srclink' href='../src/rusty_secrets/src/lib.rs.html#1-33' title='goto source code'>[src]</a></span></h1>
|
||||
<div class='docblock'><p><code>RustySecrets</code> implements Shamir Secret Sharing in Rust. It provides the possibility to sign shares.</p>
|
||||
</div><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2>
|
||||
</span><a id='src-0' class='srclink' href='../src/rusty_secrets/src/lib.rs.html#1-35' title='goto source code'>[src]</a></span></h1>
|
||||
<div class='docblock'><p><code>RustySecrets</code> implements Shamir's secret sharing in Rust. It provides the possibility to sign shares.</p>
|
||||
</div><h2 id='modules' class='section-header'><a href="#modules">Modules</a></h2>
|
||||
<table>
|
||||
<tr class=' module-item'>
|
||||
<td><a class='fn' href='fn.generate_shares.html'
|
||||
title='rusty_secrets::generate_shares'>generate_shares</a></td>
|
||||
<td><a class='mod' href='sss/index.html'
|
||||
title='rusty_secrets::sss'>sss</a></td>
|
||||
<td class='docblock-short'>
|
||||
<p>Performs threshold k-out-of-n Shamir secret sharing.</p>
|
||||
<p>SSS provides Shamir's secret sharing with raw data.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class=' module-item'>
|
||||
<td><a class='fn' href='fn.recover_secret.html'
|
||||
title='rusty_secrets::recover_secret'>recover_secret</a></td>
|
||||
<td><a class='mod' href='wrapped_secrets/index.html'
|
||||
title='rusty_secrets::wrapped_secrets'>wrapped_secrets</a></td>
|
||||
<td class='docblock-short'>
|
||||
<p>Recovers the secret from a k-out-of-n Shamir secret sharing.</p>
|
||||
<p>(Beta) <code>wrapped_secrets</code> provides Shamir's secret sharing with a wrapped secret. It currently offers versioning and MIME information about the data.</p>
|
||||
</td>
|
||||
</tr></table><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2>
|
||||
<table>
|
||||
<tr class=' module-item'>
|
||||
<td><a class='struct' href='struct.RustyError.html'
|
||||
title='rusty_secrets::RustyError'>RustyError</a></td>
|
||||
<td class='docblock-short'>
|
||||
<p>Error struct used for generating an <code>io::Error</code> from a generic description.</p>
|
||||
</td>
|
||||
</tr></table></section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
@ -120,11 +128,9 @@
|
||||
<script>
|
||||
window.rootPath = "../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../jquery.js"></script>
|
||||
<script src="../main.js"></script>
|
||||
|
||||
<script defer src="../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -1 +1 @@
|
||||
initSidebarItems({"fn":[["generate_shares","Performs threshold k-out-of-n Shamir secret sharing."],["recover_secret","Recovers the secret from a k-out-of-n Shamir secret sharing."]]});
|
||||
initSidebarItems({"mod":[["sss","SSS provides Shamir's secret sharing with raw data."],["wrapped_secrets","(Beta) `wrapped_secrets` provides Shamir's secret sharing with a wrapped secret. It currently offers versioning and MIME information about the data."]],"struct":[["RustyError","Error struct used for generating an `io::Error` from a generic description."]]});
|
@ -1,10 +1,126 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;URL=../../rusty_secrets/fn.generate_shares.html">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="generator" content="rustdoc">
|
||||
<meta name="description" content="API documentation for the Rust `generate_shares` fn in crate `rusty_secrets`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang, generate_shares">
|
||||
|
||||
<title>rusty_secrets::sss::generate_shares - Rust</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../main.css">
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="../../rusty_secrets/fn.generate_shares.html">../../rusty_secrets/fn.generate_shares.html</a>...</p>
|
||||
<script>location.replace("../../rusty_secrets/fn.generate_shares.html" + location.search + location.hash);</script>
|
||||
<body class="rustdoc">
|
||||
<!--[if lte IE 8]>
|
||||
<div class="warning">
|
||||
This old browser is unsupported and will most likely display funky
|
||||
things.
|
||||
</div>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
<p class='location'><a href='../index.html'>rusty_secrets</a>::<wbr><a href='index.html'>sss</a></p><script>window.sidebarCurrent = {name: 'generate_shares', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script>
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
<form class="search-form js-only">
|
||||
<div class="search-container">
|
||||
<input class="search-input" name="search"
|
||||
autocomplete="off"
|
||||
placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
|
||||
type="search">
|
||||
</div>
|
||||
</form>
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content fn">
|
||||
<h1 class='fqn'><span class='in-band'>Function <a href='../index.html'>rusty_secrets</a>::<wbr><a href='index.html'>sss</a>::<wbr><a class='fn' href=''>generate_shares</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||||
[<span class='inner'>−</span>]
|
||||
</a>
|
||||
</span><a id='src-463' class='srclink' href='../../src/rusty_secrets/src/sss.rs.html#34-69' title='goto source code'>[src]</a></span></h1>
|
||||
<pre class='rust fn'>pub fn generate_shares(k: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>,<br> n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>,<br> secret: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&[</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>,<br> sign_shares: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)<br> -> <a class='type' href='https://doc.rust-lang.org/nightly/std/io/error/type.Result.html' title='std::io::error::Result'>Result</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>>></pre><div class='docblock'><p>Performs threshold k-out-of-n Shamir's secret sharing.</p>
|
||||
|
||||
<h1 id='examples' class='section-header'><a href='#examples'>Examples</a></h1>
|
||||
<pre class='rust rust-example-rendered'>
|
||||
<span class='kw'>use</span> <span class='ident'>rusty_secrets</span>::<span class='ident'>sss</span>::<span class='ident'>generate_shares</span>;
|
||||
<span class='kw'>let</span> <span class='ident'>secret</span> <span class='op'>=</span> <span class='string'>"These programs were never about terrorism: they’re about economic spying,
|
||||
social control, and diplomatic manipulation. They’re about power."</span>.<span class='ident'>to_string</span>();
|
||||
|
||||
<span class='kw'>match</span> <span class='ident'>generate_shares</span>(<span class='number'>7</span>, <span class='number'>10</span>, <span class='kw-2'>&</span><span class='ident'>secret</span>.<span class='ident'>into_bytes</span>(), <span class='bool-val'>true</span>){
|
||||
<span class='prelude-val'>Ok</span>(<span class='ident'>shares</span>) <span class='op'>=></span> {
|
||||
<span class='comment'>// Do something with the shares</span>
|
||||
},
|
||||
<span class='prelude-val'>Err</span>(_) <span class='op'>=></span> {}<span class='comment'>// Deal with error}</span>
|
||||
}</pre>
|
||||
</div></section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
<section class="footer"></section>
|
||||
|
||||
<aside id="help" class="hidden">
|
||||
<div>
|
||||
<h1 class="hidden">Help</h1>
|
||||
|
||||
<div class="shortcuts">
|
||||
<h2>Keyboard Shortcuts</h2>
|
||||
|
||||
<dl>
|
||||
<dt>?</dt>
|
||||
<dd>Show this help dialog</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Focus the search field</dd>
|
||||
<dt>⇤</dt>
|
||||
<dd>Move up in search results</dd>
|
||||
<dt>⇥</dt>
|
||||
<dd>Move down in search results</dd>
|
||||
<dt>⏎</dt>
|
||||
<dd>Go to active search result</dd>
|
||||
<dt>+</dt>
|
||||
<dd>Collapse/expand all sections</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="infos">
|
||||
<h2>Search Tricks</h2>
|
||||
|
||||
<p>
|
||||
Prefix searches with a type followed by a colon (e.g.
|
||||
<code>fn:</code>) to restrict the search to a given type.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Accepted types are: <code>fn</code>, <code>mod</code>,
|
||||
<code>struct</code>, <code>enum</code>,
|
||||
<code>trait</code>, <code>type</code>, <code>macro</code>,
|
||||
and <code>const</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Search functions by type signature (e.g.
|
||||
<code>vec -> usize</code> or <code>* -> vec</code>)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
</script>
|
||||
<script src="../../jquery.js"></script>
|
||||
<script src="../../main.js"></script>
|
||||
<script defer src="../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -1,10 +1,131 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;URL=../../rusty_secrets/fn.recover_secret.html">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="generator" content="rustdoc">
|
||||
<meta name="description" content="API documentation for the Rust `recover_secret` fn in crate `rusty_secrets`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang, recover_secret">
|
||||
|
||||
<title>rusty_secrets::sss::recover_secret - Rust</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../main.css">
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="../../rusty_secrets/fn.recover_secret.html">../../rusty_secrets/fn.recover_secret.html</a>...</p>
|
||||
<script>location.replace("../../rusty_secrets/fn.recover_secret.html" + location.search + location.hash);</script>
|
||||
<body class="rustdoc">
|
||||
<!--[if lte IE 8]>
|
||||
<div class="warning">
|
||||
This old browser is unsupported and will most likely display funky
|
||||
things.
|
||||
</div>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
<p class='location'><a href='../index.html'>rusty_secrets</a>::<wbr><a href='index.html'>sss</a></p><script>window.sidebarCurrent = {name: 'recover_secret', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script>
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
<form class="search-form js-only">
|
||||
<div class="search-container">
|
||||
<input class="search-input" name="search"
|
||||
autocomplete="off"
|
||||
placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
|
||||
type="search">
|
||||
</div>
|
||||
</form>
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content fn">
|
||||
<h1 class='fqn'><span class='in-band'>Function <a href='../index.html'>rusty_secrets</a>::<wbr><a href='index.html'>sss</a>::<wbr><a class='fn' href=''>recover_secret</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||||
[<span class='inner'>−</span>]
|
||||
</a>
|
||||
</span><a id='src-493' class='srclink' href='../../src/rusty_secrets/src/sss.rs.html#113-128' title='goto source code'>[src]</a></span></h1>
|
||||
<pre class='rust fn'>pub fn recover_secret(shares: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>>,<br> verify_signatures: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>>, <a class='struct' href='../../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>></pre><div class='docblock'><p>Recovers the secret from a k-out-of-n Shamir's secret sharing.</p>
|
||||
|
||||
<p>At least <code>k</code> distinct shares need to be provided to recover the share.</p>
|
||||
|
||||
<h1 id='examples' class='section-header'><a href='#examples'>Examples</a></h1>
|
||||
<pre class='rust rust-example-rendered'>
|
||||
<span class='kw'>use</span> <span class='ident'>rusty_secrets</span>::<span class='ident'>sss</span>::<span class='ident'>recover_secret</span>;
|
||||
<span class='kw'>let</span> <span class='ident'>share1</span> <span class='op'>=</span> <span class='string'>"2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP"</span>.<span class='ident'>to_string</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>share2</span> <span class='op'>=</span> <span class='string'>"2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF"</span>.<span class='ident'>to_string</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>shares</span> <span class='op'>=</span> <span class='macro'>vec</span><span class='macro'>!</span>[<span class='ident'>share1</span>, <span class='ident'>share2</span>];
|
||||
|
||||
<span class='kw'>match</span> <span class='ident'>recover_secret</span>(<span class='ident'>shares</span>, <span class='bool-val'>false</span>) {
|
||||
<span class='prelude-val'>Ok</span>(<span class='ident'>secret</span>) <span class='op'>=></span> {
|
||||
<span class='comment'>// Do something with the secret</span>
|
||||
},
|
||||
<span class='prelude-val'>Err</span>(<span class='ident'>e</span>) <span class='op'>=></span> {
|
||||
<span class='comment'>// Deal with the error</span>
|
||||
}
|
||||
}</pre>
|
||||
</div></section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
<section class="footer"></section>
|
||||
|
||||
<aside id="help" class="hidden">
|
||||
<div>
|
||||
<h1 class="hidden">Help</h1>
|
||||
|
||||
<div class="shortcuts">
|
||||
<h2>Keyboard Shortcuts</h2>
|
||||
|
||||
<dl>
|
||||
<dt>?</dt>
|
||||
<dd>Show this help dialog</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Focus the search field</dd>
|
||||
<dt>⇤</dt>
|
||||
<dd>Move up in search results</dd>
|
||||
<dt>⇥</dt>
|
||||
<dd>Move down in search results</dd>
|
||||
<dt>⏎</dt>
|
||||
<dd>Go to active search result</dd>
|
||||
<dt>+</dt>
|
||||
<dd>Collapse/expand all sections</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="infos">
|
||||
<h2>Search Tricks</h2>
|
||||
|
||||
<p>
|
||||
Prefix searches with a type followed by a colon (e.g.
|
||||
<code>fn:</code>) to restrict the search to a given type.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Accepted types are: <code>fn</code>, <code>mod</code>,
|
||||
<code>struct</code>, <code>enum</code>,
|
||||
<code>trait</code>, <code>type</code>, <code>macro</code>,
|
||||
and <code>const</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Search functions by type signature (e.g.
|
||||
<code>vec -> usize</code> or <code>* -> vec</code>)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
</script>
|
||||
<script src="../../jquery.js"></script>
|
||||
<script src="../../main.js"></script>
|
||||
<script defer src="../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
128
docs/rusty_secrets/sss/index.html
Normal file
128
docs/rusty_secrets/sss/index.html
Normal file
@ -0,0 +1,128 @@
|
||||
<!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="API documentation for the Rust `sss` mod in crate `rusty_secrets`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang, sss">
|
||||
|
||||
<title>rusty_secrets::sss - Rust</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../main.css">
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body class="rustdoc">
|
||||
<!--[if lte IE 8]>
|
||||
<div class="warning">
|
||||
This old browser is unsupported and will most likely display funky
|
||||
things.
|
||||
</div>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
<p class='location'><a href='../index.html'>rusty_secrets</a></p><script>window.sidebarCurrent = {name: 'sss', ty: 'mod', relpath: '../'};</script><script defer src="../sidebar-items.js"></script>
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
<form class="search-form js-only">
|
||||
<div class="search-container">
|
||||
<input class="search-input" name="search"
|
||||
autocomplete="off"
|
||||
placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
|
||||
type="search">
|
||||
</div>
|
||||
</form>
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content mod">
|
||||
<h1 class='fqn'><span class='in-band'>Module <a href='../index.html'>rusty_secrets</a>::<wbr><a class='mod' href=''>sss</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||||
[<span class='inner'>−</span>]
|
||||
</a>
|
||||
</span><a id='src-448' class='srclink' href='../../src/rusty_secrets/src/sss.rs.html#1-128' title='goto source code'>[src]</a></span></h1>
|
||||
<div class='docblock'><p>SSS provides Shamir's secret sharing with raw data.</p>
|
||||
</div><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2>
|
||||
<table>
|
||||
<tr class=' module-item'>
|
||||
<td><a class='fn' href='fn.generate_shares.html'
|
||||
title='rusty_secrets::sss::generate_shares'>generate_shares</a></td>
|
||||
<td class='docblock-short'>
|
||||
<p>Performs threshold k-out-of-n Shamir's secret sharing.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class=' module-item'>
|
||||
<td><a class='fn' href='fn.recover_secret.html'
|
||||
title='rusty_secrets::sss::recover_secret'>recover_secret</a></td>
|
||||
<td class='docblock-short'>
|
||||
<p>Recovers the secret from a k-out-of-n Shamir's secret sharing.</p>
|
||||
</td>
|
||||
</tr></table></section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
<section class="footer"></section>
|
||||
|
||||
<aside id="help" class="hidden">
|
||||
<div>
|
||||
<h1 class="hidden">Help</h1>
|
||||
|
||||
<div class="shortcuts">
|
||||
<h2>Keyboard Shortcuts</h2>
|
||||
|
||||
<dl>
|
||||
<dt>?</dt>
|
||||
<dd>Show this help dialog</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Focus the search field</dd>
|
||||
<dt>⇤</dt>
|
||||
<dd>Move up in search results</dd>
|
||||
<dt>⇥</dt>
|
||||
<dd>Move down in search results</dd>
|
||||
<dt>⏎</dt>
|
||||
<dd>Go to active search result</dd>
|
||||
<dt>+</dt>
|
||||
<dd>Collapse/expand all sections</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="infos">
|
||||
<h2>Search Tricks</h2>
|
||||
|
||||
<p>
|
||||
Prefix searches with a type followed by a colon (e.g.
|
||||
<code>fn:</code>) to restrict the search to a given type.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Accepted types are: <code>fn</code>, <code>mod</code>,
|
||||
<code>struct</code>, <code>enum</code>,
|
||||
<code>trait</code>, <code>type</code>, <code>macro</code>,
|
||||
and <code>const</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Search functions by type signature (e.g.
|
||||
<code>vec -> usize</code> or <code>* -> vec</code>)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
</script>
|
||||
<script src="../../jquery.js"></script>
|
||||
<script src="../../main.js"></script>
|
||||
<script defer src="../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
1
docs/rusty_secrets/sss/sidebar-items.js
Normal file
1
docs/rusty_secrets/sss/sidebar-items.js
Normal file
@ -0,0 +1 @@
|
||||
initSidebarItems({"fn":[["generate_shares","Performs threshold k-out-of-n Shamir's secret sharing."],["recover_secret","Recovers the secret from a k-out-of-n Shamir's secret sharing."]]});
|
135
docs/rusty_secrets/struct.RustyError.html
Normal file
135
docs/rusty_secrets/struct.RustyError.html
Normal file
@ -0,0 +1,135 @@
|
||||
<!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="API documentation for the Rust `RustyError` struct in crate `rusty_secrets`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang, RustyError">
|
||||
|
||||
<title>rusty_secrets::RustyError - Rust</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../main.css">
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body class="rustdoc">
|
||||
<!--[if lte IE 8]>
|
||||
<div class="warning">
|
||||
This old browser is unsupported and will most likely display funky
|
||||
things.
|
||||
</div>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
<p class='location'><a href='index.html'>rusty_secrets</a></p><script>window.sidebarCurrent = {name: 'RustyError', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script>
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
<form class="search-form js-only">
|
||||
<div class="search-container">
|
||||
<input class="search-input" name="search"
|
||||
autocomplete="off"
|
||||
placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
|
||||
type="search">
|
||||
</div>
|
||||
</form>
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content struct">
|
||||
<h1 class='fqn'><span class='in-band'>Struct <a href='index.html'>rusty_secrets</a>::<wbr><a class='struct' href=''>RustyError</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||||
[<span class='inner'>−</span>]
|
||||
</a>
|
||||
</span><a id='src-522' class='srclink' href='../src/rusty_secrets/src/custom_error.rs.html#9-14' title='goto source code'>[src]</a></span></h1>
|
||||
<pre class='rust struct'>pub struct RustyError { /* fields omitted */ }</pre><div class='docblock'><p>Error struct used for generating an <code>io::Error</code> from a generic description.</p>
|
||||
</div><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-17' class='srclink' href='../src/rusty_secrets/src/custom_error.rs.html#29-102' title='goto source code'>[src]</a></span></h3>
|
||||
<div class='impl-items'><h4 id='method.with_type' class='method'><span id='with_type.v' class='invisible'><code>fn <a href='#method.with_type' class='fnname'>with_type</a>(error_type: RustyErrorTypes) -> <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span></h4>
|
||||
<div class='docblock'><p>Returns a <code>RustyError</code> with a given <code>RustyErrorType</code>.</p>
|
||||
</div><h4 id='method.share_index' class='method'><span id='share_index.v' class='invisible'><code>fn <a href='#method.share_index' class='fnname'>share_index</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>></code></span></h4>
|
||||
<div class='docblock'><p>Returns the index of the share that raised the error, if any.</p>
|
||||
</div><h4 id='method.share_groups' class='method'><span id='share_groups.v' class='invisible'><code>fn <a href='#method.share_groups' class='fnname'>share_groups</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>>>></code></span></h4>
|
||||
<div class='docblock'><p>Returns the group of shares that were generated during the same secret share.
|
||||
It can be used to provide a debug message to the user telling him what shares are incompatible.</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/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-527' class='srclink' href='../src/rusty_secrets/src/custom_error.rs.html#8' 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>(&self, __arg_0: &mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -> <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/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-46' class='srclink' href='../src/rusty_secrets/src/custom_error.rs.html#104-111' title='goto source code'>[src]</a></span></h3>
|
||||
<div class='impl-items'><h4 id='method.fmt-1' class='method'><span id='fmt.v-1' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html#tymethod.fmt' class='fnname'>fmt</a>(&self, f: &mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -> <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/std/error/trait.Error.html' title='std::error::Error'>Error</a> for <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-52' class='srclink' href='../src/rusty_secrets/src/custom_error.rs.html#113-120' title='goto source code'>[src]</a></span></h3>
|
||||
<div class='impl-items'><h4 id='method.description' class='method'><span id='description.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html#tymethod.description' class='fnname'>description</a>(&self) -> &<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a></code></span></h4>
|
||||
<div class='docblock'><p>A short description of the error. <a href="https://doc.rust-lang.org/nightly/std/error/trait.Error.html#tymethod.description">Read more</a></p>
|
||||
</div><h4 id='method.cause' class='method'><span id='cause.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.cause' class='fnname'>cause</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><&<a class='trait' href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html' title='std::error::Error'>Error</a>></code></span></h4>
|
||||
<div class='docblock'><p>The lower-level cause of this error, if any. <a href="https://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.cause">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/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>Error</a>> for <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-57' class='srclink' href='../src/rusty_secrets/src/custom_error.rs.html#122-128' title='goto source code'>[src]</a></span></h3>
|
||||
<div class='impl-items'><h4 id='method.from' class='method'><span id='from.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(err: <a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>Error</a>) -> <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span></h4>
|
||||
<div class='docblock'><p>Performs the conversion.</p>
|
||||
</div></div></section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
<section class="footer"></section>
|
||||
|
||||
<aside id="help" class="hidden">
|
||||
<div>
|
||||
<h1 class="hidden">Help</h1>
|
||||
|
||||
<div class="shortcuts">
|
||||
<h2>Keyboard Shortcuts</h2>
|
||||
|
||||
<dl>
|
||||
<dt>?</dt>
|
||||
<dd>Show this help dialog</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Focus the search field</dd>
|
||||
<dt>⇤</dt>
|
||||
<dd>Move up in search results</dd>
|
||||
<dt>⇥</dt>
|
||||
<dd>Move down in search results</dd>
|
||||
<dt>⏎</dt>
|
||||
<dd>Go to active search result</dd>
|
||||
<dt>+</dt>
|
||||
<dd>Collapse/expand all sections</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="infos">
|
||||
<h2>Search Tricks</h2>
|
||||
|
||||
<p>
|
||||
Prefix searches with a type followed by a colon (e.g.
|
||||
<code>fn:</code>) to restrict the search to a given type.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Accepted types are: <code>fn</code>, <code>mod</code>,
|
||||
<code>struct</code>, <code>enum</code>,
|
||||
<code>trait</code>, <code>type</code>, <code>macro</code>,
|
||||
and <code>const</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Search functions by type signature (e.g.
|
||||
<code>vec -> usize</code> or <code>* -> vec</code>)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
</script>
|
||||
<script src="../jquery.js"></script>
|
||||
<script src="../main.js"></script>
|
||||
<script defer src="../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -7,10 +7,10 @@
|
||||
<meta name="description" content="API documentation for the Rust `generate_shares` fn in crate `rusty_secrets`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang, generate_shares">
|
||||
|
||||
<title>rusty_secrets::generate_shares - Rust</title>
|
||||
<title>rusty_secrets::wrapped_secrets::generate_shares - Rust</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../main.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../main.css">
|
||||
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
<p class='location'><a href='index.html'>rusty_secrets</a></p><script>window.sidebarCurrent = {name: 'generate_shares', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script>
|
||||
<p class='location'><a href='../index.html'>rusty_secrets</a>::<wbr><a href='index.html'>wrapped_secrets</a></p><script>window.sidebarCurrent = {name: 'generate_shares', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script>
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
@ -43,25 +43,25 @@
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content fn">
|
||||
<h1 class='fqn'><span class='in-band'>Function <a href='index.html'>rusty_secrets</a>::<wbr><a class='fn' href=''>generate_shares</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<h1 class='fqn'><span class='in-band'>Function <a href='../index.html'>rusty_secrets</a>::<wbr><a href='index.html'>wrapped_secrets</a>::<wbr><a class='fn' href=''>generate_shares</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||||
[<span class='inner'>−</span>]
|
||||
</a>
|
||||
</span><a id='src-370' class='srclink' href='../src/rusty_secrets/src/sss.rs.html#32-67' title='goto source code'>[src]</a></span></h1>
|
||||
<pre class='rust fn'>pub fn generate_shares(k: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>, secret: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&[</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>, sign_shares: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>) -> <a class='type' href='https://doc.rust-lang.org/nightly/std/io/error/type.Result.html' title='std::io::error::Result'>Result</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>>></pre><div class='docblock'><p>Performs threshold k-out-of-n Shamir secret sharing.</p>
|
||||
</span><a id='src-510' class='srclink' href='../../src/rusty_secrets/src/wrapped_secrets.rs.html#26-33' title='goto source code'>[src]</a></span></h1>
|
||||
<pre class='rust fn'>pub fn generate_shares(k: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>,<br> n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>,<br> secret: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&[</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>,<br> mime_type: &<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> sign_shares: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)<br> -> <a class='type' href='https://doc.rust-lang.org/nightly/std/io/error/type.Result.html' title='std::io::error::Result'>Result</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>>></pre><div class='docblock'><p>Performs threshold k-out-of-n Shamir's secret sharing.</p>
|
||||
|
||||
<h1 id='examples' class='section-header'><a href='#examples'>Examples</a></h1>
|
||||
<pre class='rust rust-example-rendered'>
|
||||
<span class='kw'>use</span> <span class='ident'>rusty_secrets</span>::<span class='ident'>generate_shares</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>rusty_secrets</span>::<span class='ident'>wrapped_secrets</span>::<span class='ident'>generate_shares</span>;
|
||||
<span class='kw'>let</span> <span class='ident'>secret</span> <span class='op'>=</span> <span class='string'>"These programs were never about terrorism: they’re about economic spying,
|
||||
social control, and diplomatic manipulation. They’re about power."</span>.<span class='ident'>to_string</span>();
|
||||
|
||||
<span class='kw'>match</span> <span class='ident'>generate_shares</span>(<span class='number'>7</span>, <span class='number'>10</span>, <span class='kw-2'>&</span><span class='ident'>secret</span>.<span class='ident'>into_bytes</span>(), <span class='bool-val'>true</span>){
|
||||
<span class='kw'>match</span> <span class='ident'>generate_shares</span>(<span class='number'>7</span>, <span class='number'>10</span>, <span class='kw-2'>&</span><span class='ident'>secret</span>.<span class='ident'>into_bytes</span>(), <span class='string'>"text/html"</span>, <span class='bool-val'>true</span>){
|
||||
<span class='prelude-val'>Ok</span>(<span class='ident'>shares</span>) <span class='op'>=></span> {
|
||||
<span class='comment'>// Do something with the shares</span>
|
||||
},
|
||||
<span class='prelude-val'>Err</span>(_) <span class='op'>=></span> {}<span class='comment'>// Deal with error}</span>
|
||||
}<a class='test-arrow' target='_blank' href=''>Run</a></pre>
|
||||
}</pre>
|
||||
</div></section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
@ -116,13 +116,11 @@
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../";
|
||||
window.rootPath = "../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../jquery.js"></script>
|
||||
<script src="../main.js"></script>
|
||||
|
||||
<script defer src="../search-index.js"></script>
|
||||
<script src="../../jquery.js"></script>
|
||||
<script src="../../main.js"></script>
|
||||
<script defer src="../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -7,10 +7,10 @@
|
||||
<meta name="description" content="API documentation for the Rust `recover_secret` fn in crate `rusty_secrets`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang, recover_secret">
|
||||
|
||||
<title>rusty_secrets::recover_secret - Rust</title>
|
||||
<title>rusty_secrets::wrapped_secrets::recover_secret - Rust</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../main.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../main.css">
|
||||
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
<p class='location'><a href='index.html'>rusty_secrets</a></p><script>window.sidebarCurrent = {name: 'recover_secret', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script>
|
||||
<p class='location'><a href='../index.html'>rusty_secrets</a>::<wbr><a href='index.html'>wrapped_secrets</a></p><script>window.sidebarCurrent = {name: 'recover_secret', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script>
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
@ -43,18 +43,18 @@
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content fn">
|
||||
<h1 class='fqn'><span class='in-band'>Function <a href='index.html'>rusty_secrets</a>::<wbr><a class='fn' href=''>recover_secret</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<h1 class='fqn'><span class='in-band'>Function <a href='../index.html'>rusty_secrets</a>::<wbr><a href='index.html'>wrapped_secrets</a>::<wbr><a class='fn' href=''>recover_secret</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||||
[<span class='inner'>−</span>]
|
||||
</a>
|
||||
</span><a id='src-406' class='srclink' href='../src/rusty_secrets/src/sss.rs.html#111-126' title='goto source code'>[src]</a></span></h1>
|
||||
<pre class='rust fn'>pub fn recover_secret(shares: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>>, verify_signatures: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>) -> <a class='type' href='https://doc.rust-lang.org/nightly/std/io/error/type.Result.html' title='std::io::error::Result'>Result</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>>></pre><div class='docblock'><p>Recovers the secret from a k-out-of-n Shamir secret sharing.</p>
|
||||
</span><a id='src-517' class='srclink' href='../../src/rusty_secrets/src/wrapped_secrets.rs.html#56-61' title='goto source code'>[src]</a></span></h1>
|
||||
<pre class='rust fn'>pub fn recover_secret(shares: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>>,<br> verify_signatures: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><RustySecret, <a class='struct' href='../../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>></pre><div class='docblock'><p>Recovers the secret from a k-out-of-n Shamir's secret sharing.</p>
|
||||
|
||||
<p>At least <code>k</code> distinct shares need to be provided to recover the share.</p>
|
||||
|
||||
<h1 id='examples' class='section-header'><a href='#examples'>Examples</a></h1>
|
||||
<pre class='rust rust-example-rendered'>
|
||||
<span class='kw'>use</span> <span class='ident'>rusty_secrets</span>::<span class='ident'>recover_secret</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>rusty_secrets</span>::<span class='ident'>wrapped_secrets</span>::<span class='ident'>recover_secret</span>;
|
||||
<span class='kw'>let</span> <span class='ident'>share1</span> <span class='op'>=</span> <span class='string'>"2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP"</span>.<span class='ident'>to_string</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>share2</span> <span class='op'>=</span> <span class='string'>"2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF"</span>.<span class='ident'>to_string</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>shares</span> <span class='op'>=</span> <span class='macro'>vec</span><span class='macro'>!</span>[<span class='ident'>share1</span>, <span class='ident'>share2</span>];
|
||||
@ -66,7 +66,7 @@
|
||||
<span class='prelude-val'>Err</span>(<span class='ident'>e</span>) <span class='op'>=></span> {
|
||||
<span class='comment'>// Deal with the error</span>
|
||||
}
|
||||
}<a class='test-arrow' target='_blank' href=''>Run</a></pre>
|
||||
}</pre>
|
||||
</div></section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
@ -121,13 +121,11 @@
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../";
|
||||
window.rootPath = "../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../jquery.js"></script>
|
||||
<script src="../main.js"></script>
|
||||
|
||||
<script defer src="../search-index.js"></script>
|
||||
<script src="../../jquery.js"></script>
|
||||
<script src="../../main.js"></script>
|
||||
<script defer src="../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
128
docs/rusty_secrets/wrapped_secrets/index.html
Normal file
128
docs/rusty_secrets/wrapped_secrets/index.html
Normal file
@ -0,0 +1,128 @@
|
||||
<!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="API documentation for the Rust `wrapped_secrets` mod in crate `rusty_secrets`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang, wrapped_secrets">
|
||||
|
||||
<title>rusty_secrets::wrapped_secrets - Rust</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../main.css">
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body class="rustdoc">
|
||||
<!--[if lte IE 8]>
|
||||
<div class="warning">
|
||||
This old browser is unsupported and will most likely display funky
|
||||
things.
|
||||
</div>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
<p class='location'><a href='../index.html'>rusty_secrets</a></p><script>window.sidebarCurrent = {name: 'wrapped_secrets', ty: 'mod', relpath: '../'};</script><script defer src="../sidebar-items.js"></script>
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
<form class="search-form js-only">
|
||||
<div class="search-container">
|
||||
<input class="search-input" name="search"
|
||||
autocomplete="off"
|
||||
placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
|
||||
type="search">
|
||||
</div>
|
||||
</form>
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content mod">
|
||||
<h1 class='fqn'><span class='in-band'>Module <a href='../index.html'>rusty_secrets</a>::<wbr><a class='mod' href=''>wrapped_secrets</a></span><span class='out-of-band'><span id='render-detail'>
|
||||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||||
[<span class='inner'>−</span>]
|
||||
</a>
|
||||
</span><a id='src-503' class='srclink' href='../../src/rusty_secrets/src/wrapped_secrets.rs.html#1-61' title='goto source code'>[src]</a></span></h1>
|
||||
<div class='docblock'><p>(Beta) <code>wrapped_secrets</code> provides Shamir's secret sharing with a wrapped secret. It currently offers versioning and MIME information about the data.</p>
|
||||
</div><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2>
|
||||
<table>
|
||||
<tr class=' module-item'>
|
||||
<td><a class='fn' href='fn.generate_shares.html'
|
||||
title='rusty_secrets::wrapped_secrets::generate_shares'>generate_shares</a></td>
|
||||
<td class='docblock-short'>
|
||||
<p>Performs threshold k-out-of-n Shamir's secret sharing.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class=' module-item'>
|
||||
<td><a class='fn' href='fn.recover_secret.html'
|
||||
title='rusty_secrets::wrapped_secrets::recover_secret'>recover_secret</a></td>
|
||||
<td class='docblock-short'>
|
||||
<p>Recovers the secret from a k-out-of-n Shamir's secret sharing.</p>
|
||||
</td>
|
||||
</tr></table></section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
<section class="footer"></section>
|
||||
|
||||
<aside id="help" class="hidden">
|
||||
<div>
|
||||
<h1 class="hidden">Help</h1>
|
||||
|
||||
<div class="shortcuts">
|
||||
<h2>Keyboard Shortcuts</h2>
|
||||
|
||||
<dl>
|
||||
<dt>?</dt>
|
||||
<dd>Show this help dialog</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Focus the search field</dd>
|
||||
<dt>⇤</dt>
|
||||
<dd>Move up in search results</dd>
|
||||
<dt>⇥</dt>
|
||||
<dd>Move down in search results</dd>
|
||||
<dt>⏎</dt>
|
||||
<dd>Go to active search result</dd>
|
||||
<dt>+</dt>
|
||||
<dd>Collapse/expand all sections</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="infos">
|
||||
<h2>Search Tricks</h2>
|
||||
|
||||
<p>
|
||||
Prefix searches with a type followed by a colon (e.g.
|
||||
<code>fn:</code>) to restrict the search to a given type.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Accepted types are: <code>fn</code>, <code>mod</code>,
|
||||
<code>struct</code>, <code>enum</code>,
|
||||
<code>trait</code>, <code>type</code>, <code>macro</code>,
|
||||
and <code>const</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Search functions by type signature (e.g.
|
||||
<code>vec -> usize</code> or <code>* -> vec</code>)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
</script>
|
||||
<script src="../../jquery.js"></script>
|
||||
<script src="../../main.js"></script>
|
||||
<script defer src="../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
1
docs/rusty_secrets/wrapped_secrets/sidebar-items.js
Normal file
1
docs/rusty_secrets/wrapped_secrets/sidebar-items.js
Normal file
@ -0,0 +1 @@
|
||||
initSidebarItems({"fn":[["generate_shares","Performs threshold k-out-of-n Shamir's secret sharing."],["recover_secret","Recovers the secret from a k-out-of-n Shamir's secret sharing."]]});
|
@ -1,3 +1,3 @@
|
||||
var searchIndex = {};
|
||||
searchIndex["rusty_secrets"] = {"doc":"`RustySecrets` implements Shamir Secret Sharing in Rust. It provides the possibility to sign shares.","items":[[5,"generate_shares","rusty_secrets","Performs threshold k-out-of-n Shamir secret sharing.",null,null],[5,"recover_secret","","Recovers the secret from a k-out-of-n Shamir secret sharing.",null,{"inputs":[{"name":"vec"},{"name":"bool"}],"output":{"name":"result"}}]],"paths":[]};
|
||||
searchIndex["rusty_secrets"] = {"doc":"`RustySecrets` implements Shamir's secret sharing in Rust. It provides the possibility to sign shares.","items":[[3,"RustyError","rusty_secrets","Error struct used for generating an `io::Error` from a generic description.",null,null],[11,"fmt","","",0,null],[11,"with_type","","Returns a `RustyError` with a given `RustyErrorType`.",0,{"inputs":[{"name":"rustyerrortypes"}],"output":{"name":"rustyerror"}}],[11,"share_index","","Returns the index of the share that raised the error, if any.",0,null],[11,"share_groups","","Returns the group of shares that were generated during the same secret share.\nIt can be used to provide a debug message to the user telling him what shares are incompatible.",0,null],[11,"fmt","","",0,null],[11,"description","","",0,null],[11,"cause","","",0,null],[11,"from","","",0,{"inputs":[{"name":"error"}],"output":{"name":"rustyerror"}}],[0,"sss","","SSS provides Shamir's secret sharing with raw data.",null,null],[5,"generate_shares","rusty_secrets::sss","Performs threshold k-out-of-n Shamir's secret sharing.",null,null],[5,"recover_secret","","Recovers the secret from a k-out-of-n Shamir's secret sharing.",null,{"inputs":[{"name":"vec"},{"name":"bool"}],"output":{"name":"result"}}],[0,"wrapped_secrets","rusty_secrets","(Beta) `wrapped_secrets` provides Shamir's secret sharing with a wrapped secret. It currently offers versioning and MIME information about the data.",null,null],[5,"generate_shares","rusty_secrets::wrapped_secrets","Performs threshold k-out-of-n Shamir's secret sharing.",null,null],[5,"recover_secret","","Recovers the secret from a k-out-of-n Shamir's secret sharing.",null,{"inputs":[{"name":"vec"},{"name":"bool"}],"output":{"name":"result"}}]],"paths":[[3,"RustyError"]]};
|
||||
initSearch(searchIndex);
|
||||
|
@ -51,116 +51,285 @@
|
||||
<span id="7"> 7</span>
|
||||
<span id="8"> 8</span>
|
||||
<span id="9"> 9</span>
|
||||
<span id="10">10</span>
|
||||
<span id="11">11</span>
|
||||
<span id="12">12</span>
|
||||
<span id="13">13</span>
|
||||
<span id="14">14</span>
|
||||
<span id="15">15</span>
|
||||
<span id="16">16</span>
|
||||
<span id="17">17</span>
|
||||
<span id="18">18</span>
|
||||
<span id="19">19</span>
|
||||
<span id="20">20</span>
|
||||
<span id="21">21</span>
|
||||
<span id="22">22</span>
|
||||
<span id="23">23</span>
|
||||
<span id="24">24</span>
|
||||
<span id="25">25</span>
|
||||
<span id="26">26</span>
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
<span id="37">37</span>
|
||||
<span id="38">38</span>
|
||||
<span id="39">39</span>
|
||||
<span id="40">40</span>
|
||||
<span id="41">41</span>
|
||||
<span id="42">42</span>
|
||||
<span id="43">43</span>
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
<span id="46">46</span>
|
||||
<span id="47">47</span>
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
<span id="57">57</span>
|
||||
<span id="58">58</span>
|
||||
<span id="59">59</span>
|
||||
<span id="60">60</span>
|
||||
<span id="61">61</span>
|
||||
<span id="62">62</span>
|
||||
<span id="63">63</span>
|
||||
<span id="64">64</span>
|
||||
<span id="65">65</span>
|
||||
<span id="66">66</span>
|
||||
<span id="67">67</span>
|
||||
<span id="68">68</span>
|
||||
<span id="69">69</span>
|
||||
<span id="70">70</span>
|
||||
<span id="71">71</span>
|
||||
<span id="72">72</span>
|
||||
<span id="73">73</span>
|
||||
<span id="74">74</span>
|
||||
<span id="75">75</span>
|
||||
<span id="76">76</span>
|
||||
<span id="77">77</span>
|
||||
<span id="78">78</span>
|
||||
<span id="79">79</span>
|
||||
<span id="80">80</span>
|
||||
<span id="81">81</span>
|
||||
<span id="82">82</span>
|
||||
<span id="83">83</span>
|
||||
<span id="84">84</span>
|
||||
<span id="85">85</span>
|
||||
<span id="86">86</span>
|
||||
<span id="87">87</span>
|
||||
<span id="88">88</span>
|
||||
<span id="89">89</span>
|
||||
<span id="90">90</span>
|
||||
<span id="91">91</span>
|
||||
<span id="92">92</span>
|
||||
<span id="93">93</span>
|
||||
<span id="94">94</span>
|
||||
<span id="10"> 10</span>
|
||||
<span id="11"> 11</span>
|
||||
<span id="12"> 12</span>
|
||||
<span id="13"> 13</span>
|
||||
<span id="14"> 14</span>
|
||||
<span id="15"> 15</span>
|
||||
<span id="16"> 16</span>
|
||||
<span id="17"> 17</span>
|
||||
<span id="18"> 18</span>
|
||||
<span id="19"> 19</span>
|
||||
<span id="20"> 20</span>
|
||||
<span id="21"> 21</span>
|
||||
<span id="22"> 22</span>
|
||||
<span id="23"> 23</span>
|
||||
<span id="24"> 24</span>
|
||||
<span id="25"> 25</span>
|
||||
<span id="26"> 26</span>
|
||||
<span id="27"> 27</span>
|
||||
<span id="28"> 28</span>
|
||||
<span id="29"> 29</span>
|
||||
<span id="30"> 30</span>
|
||||
<span id="31"> 31</span>
|
||||
<span id="32"> 32</span>
|
||||
<span id="33"> 33</span>
|
||||
<span id="34"> 34</span>
|
||||
<span id="35"> 35</span>
|
||||
<span id="36"> 36</span>
|
||||
<span id="37"> 37</span>
|
||||
<span id="38"> 38</span>
|
||||
<span id="39"> 39</span>
|
||||
<span id="40"> 40</span>
|
||||
<span id="41"> 41</span>
|
||||
<span id="42"> 42</span>
|
||||
<span id="43"> 43</span>
|
||||
<span id="44"> 44</span>
|
||||
<span id="45"> 45</span>
|
||||
<span id="46"> 46</span>
|
||||
<span id="47"> 47</span>
|
||||
<span id="48"> 48</span>
|
||||
<span id="49"> 49</span>
|
||||
<span id="50"> 50</span>
|
||||
<span id="51"> 51</span>
|
||||
<span id="52"> 52</span>
|
||||
<span id="53"> 53</span>
|
||||
<span id="54"> 54</span>
|
||||
<span id="55"> 55</span>
|
||||
<span id="56"> 56</span>
|
||||
<span id="57"> 57</span>
|
||||
<span id="58"> 58</span>
|
||||
<span id="59"> 59</span>
|
||||
<span id="60"> 60</span>
|
||||
<span id="61"> 61</span>
|
||||
<span id="62"> 62</span>
|
||||
<span id="63"> 63</span>
|
||||
<span id="64"> 64</span>
|
||||
<span id="65"> 65</span>
|
||||
<span id="66"> 66</span>
|
||||
<span id="67"> 67</span>
|
||||
<span id="68"> 68</span>
|
||||
<span id="69"> 69</span>
|
||||
<span id="70"> 70</span>
|
||||
<span id="71"> 71</span>
|
||||
<span id="72"> 72</span>
|
||||
<span id="73"> 73</span>
|
||||
<span id="74"> 74</span>
|
||||
<span id="75"> 75</span>
|
||||
<span id="76"> 76</span>
|
||||
<span id="77"> 77</span>
|
||||
<span id="78"> 78</span>
|
||||
<span id="79"> 79</span>
|
||||
<span id="80"> 80</span>
|
||||
<span id="81"> 81</span>
|
||||
<span id="82"> 82</span>
|
||||
<span id="83"> 83</span>
|
||||
<span id="84"> 84</span>
|
||||
<span id="85"> 85</span>
|
||||
<span id="86"> 86</span>
|
||||
<span id="87"> 87</span>
|
||||
<span id="88"> 88</span>
|
||||
<span id="89"> 89</span>
|
||||
<span id="90"> 90</span>
|
||||
<span id="91"> 91</span>
|
||||
<span id="92"> 92</span>
|
||||
<span id="93"> 93</span>
|
||||
<span id="94"> 94</span>
|
||||
<span id="95"> 95</span>
|
||||
<span id="96"> 96</span>
|
||||
<span id="97"> 97</span>
|
||||
<span id="98"> 98</span>
|
||||
<span id="99"> 99</span>
|
||||
<span id="100">100</span>
|
||||
<span id="101">101</span>
|
||||
<span id="102">102</span>
|
||||
<span id="103">103</span>
|
||||
<span id="104">104</span>
|
||||
<span id="105">105</span>
|
||||
<span id="106">106</span>
|
||||
<span id="107">107</span>
|
||||
<span id="108">108</span>
|
||||
<span id="109">109</span>
|
||||
<span id="110">110</span>
|
||||
<span id="111">111</span>
|
||||
<span id="112">112</span>
|
||||
<span id="113">113</span>
|
||||
<span id="114">114</span>
|
||||
<span id="115">115</span>
|
||||
<span id="116">116</span>
|
||||
<span id="117">117</span>
|
||||
<span id="118">118</span>
|
||||
<span id="119">119</span>
|
||||
<span id="120">120</span>
|
||||
<span id="121">121</span>
|
||||
<span id="122">122</span>
|
||||
<span id="123">123</span>
|
||||
<span id="124">124</span>
|
||||
<span id="125">125</span>
|
||||
<span id="126">126</span>
|
||||
<span id="127">127</span>
|
||||
<span id="128">128</span>
|
||||
<span id="129">129</span>
|
||||
<span id="130">130</span>
|
||||
<span id="131">131</span>
|
||||
<span id="132">132</span>
|
||||
<span id="133">133</span>
|
||||
<span id="134">134</span>
|
||||
<span id="135">135</span>
|
||||
<span id="136">136</span>
|
||||
<span id="137">137</span>
|
||||
<span id="138">138</span>
|
||||
<span id="139">139</span>
|
||||
<span id="140">140</span>
|
||||
<span id="141">141</span>
|
||||
<span id="142">142</span>
|
||||
<span id="143">143</span>
|
||||
<span id="144">144</span>
|
||||
<span id="145">145</span>
|
||||
<span id="146">146</span>
|
||||
<span id="147">147</span>
|
||||
<span id="148">148</span>
|
||||
<span id="149">149</span>
|
||||
<span id="150">150</span>
|
||||
<span id="151">151</span>
|
||||
<span id="152">152</span>
|
||||
<span id="153">153</span>
|
||||
<span id="154">154</span>
|
||||
<span id="155">155</span>
|
||||
<span id="156">156</span>
|
||||
<span id="157">157</span>
|
||||
<span id="158">158</span>
|
||||
<span id="159">159</span>
|
||||
<span id="160">160</span>
|
||||
<span id="161">161</span>
|
||||
<span id="162">162</span>
|
||||
<span id="163">163</span>
|
||||
<span id="164">164</span>
|
||||
<span id="165">165</span>
|
||||
<span id="166">166</span>
|
||||
<span id="167">167</span>
|
||||
<span id="168">168</span>
|
||||
<span id="169">169</span>
|
||||
<span id="170">170</span>
|
||||
<span id="171">171</span>
|
||||
<span id="172">172</span>
|
||||
<span id="173">173</span>
|
||||
<span id="174">174</span>
|
||||
<span id="175">175</span>
|
||||
<span id="176">176</span>
|
||||
<span id="177">177</span>
|
||||
<span id="178">178</span>
|
||||
<span id="179">179</span>
|
||||
<span id="180">180</span>
|
||||
<span id="181">181</span>
|
||||
<span id="182">182</span>
|
||||
<span id="183">183</span>
|
||||
</pre><pre class='rust '>
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>convert</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>error</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>error</span>::<span class='ident'>Error</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>fmt</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>num</span>;
|
||||
|
||||
<span class='doccomment'>/// Error struct used for generating an `io::Error` from a generic description.</span>
|
||||
<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Debug</span>)]</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>Error</span> {
|
||||
<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>RustyError</span> {
|
||||
<span class='ident'>descr</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>,
|
||||
<span class='ident'>detail</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>,
|
||||
<span class='ident'>share_index</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>,
|
||||
<span class='ident'>share_groups</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span><span class='op'>></span>
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> <span class='ident'>Error</span> {
|
||||
<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Debug</span>)]</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>enum</span> <span class='ident'>RustyErrorTypes</span> {
|
||||
<span class='ident'>DuplicateShareNum</span>(<span class='ident'>u8</span>),
|
||||
<span class='ident'>DuplicateShareData</span>(<span class='ident'>u8</span>),
|
||||
<span class='ident'>EmptyShares</span>,
|
||||
<span class='ident'>IncompatibleSets</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span>),
|
||||
<span class='ident'>InvalidSignature</span>(<span class='ident'>u8</span>, <span class='ident'>String</span>),
|
||||
<span class='ident'>MissingShares</span>(<span class='ident'>u8</span>, <span class='ident'>usize</span>),
|
||||
<span class='ident'>MissingSignature</span>(<span class='ident'>u8</span>),
|
||||
<span class='ident'>SecretDeserializationIssue</span>,
|
||||
<span class='ident'>ShareParsingError</span>(<span class='ident'>u8</span>, <span class='ident'>String</span>)
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> <span class='ident'>RustyError</span> {
|
||||
<span class='doccomment'>/// Initializes a new error with a description and optional detail string.</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>descr</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, <span class='ident'>detail</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>Error</span> {
|
||||
<span class='ident'>Error</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>descr</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, <span class='ident'>detail</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>, <span class='ident'>share_index</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>, <span class='ident'>share_groups</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>RustyError</span> {
|
||||
<span class='ident'>RustyError</span> {
|
||||
<span class='ident'>descr</span>: <span class='ident'>descr</span>,
|
||||
<span class='ident'>detail</span>: <span class='ident'>detail</span>,
|
||||
<span class='ident'>share_index</span>: <span class='ident'>share_index</span>,
|
||||
<span class='ident'>share_groups</span>: <span class='ident'>share_groups</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class='doccomment'>/// Returns a `RustyError` with a given `RustyErrorType`.</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>with_type</span>(<span class='ident'>error_type</span>: <span class='ident'>RustyErrorTypes</span>) <span class='op'>-></span> <span class='ident'>RustyError</span> {
|
||||
<span class='ident'>RustyError</span> {
|
||||
<span class='ident'>descr</span>: <span class='ident'>RustyError</span>::<span class='ident'>descr_for_type</span>(<span class='kw-2'>&</span><span class='ident'>error_type</span>),
|
||||
<span class='ident'>detail</span>: <span class='ident'>RustyError</span>::<span class='ident'>detail_for_type</span>(<span class='kw-2'>&</span><span class='ident'>error_type</span>),
|
||||
<span class='ident'>share_index</span>: <span class='ident'>RustyError</span>::<span class='ident'>share_num_for_type</span>(<span class='kw-2'>&</span><span class='ident'>error_type</span>),
|
||||
<span class='ident'>share_groups</span>: <span class='ident'>RustyError</span>::<span class='ident'>share_groups_for_type</span>(<span class='ident'>error_type</span>),
|
||||
}
|
||||
}
|
||||
|
||||
<span class='doccomment'>/// Returns the index of the share that raised the error, if any.</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>share_index</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span> {
|
||||
<span class='self'>self</span>.<span class='ident'>share_index</span>
|
||||
}
|
||||
|
||||
<span class='doccomment'>/// Returns the group of shares that were generated during the same secret share.</span>
|
||||
<span class='doccomment'>/// It can be used to provide a debug message to the user telling him what shares are incompatible.</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>share_groups</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span><span class='op'>></span> {
|
||||
<span class='self'>self</span>.<span class='ident'>share_groups</span>.<span class='ident'>clone</span>()
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>descr_for_type</span>(<span class='ident'>error_type</span>: <span class='kw-2'>&</span><span class='ident'>RustyErrorTypes</span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span> {
|
||||
<span class='kw'>match</span> <span class='op'>*</span><span class='ident'>error_type</span> {
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>EmptyShares</span> <span class='op'>=></span> <span class='string'>"No shares were provided."</span>,
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>IncompatibleSets</span>(_) <span class='op'>=></span> <span class='string'>"The shares are incompatible with each other."</span>,
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>InvalidSignature</span>(_, _) <span class='op'>=></span> <span class='string'>"The signature of this share is not valid."</span>,
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>MissingShares</span>(_, _) <span class='op'>=></span> <span class='string'>"The number of shares provided is insufficient to recover the secret."</span>,
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>MissingSignature</span>(_) <span class='op'>=></span> <span class='string'>"Signature is missing while shares are required to be signed."</span>,
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>SecretDeserializationIssue</span> <span class='op'>=></span> <span class='string'>"An issue was encountered deserializing the secret.
|
||||
Updating to the latest version of RustySecrets might help fix this."</span>,
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>ShareParsingError</span>(_, _) <span class='op'>=></span> <span class='string'>"This share is incorrectly formatted."</span>,
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>DuplicateShareNum</span>(_) <span class='op'>=></span> <span class='string'>"This share number has already been used by a previous share."</span>,
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>DuplicateShareData</span>(_) <span class='op'>=></span> <span class='string'>"The data encoded in this share is the same as the one found in a previous share."</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>detail_for_type</span>(<span class='ident'>error_type</span>: <span class='kw-2'>&</span><span class='ident'>RustyErrorTypes</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span> {
|
||||
<span class='kw'>match</span> <span class='op'>*</span><span class='ident'>error_type</span> {
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>MissingShares</span>(<span class='ident'>required</span>, <span class='ident'>found</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>"{} shares are required to recover the secret,
|
||||
found only {}."</span>, <span class='ident'>required</span>, <span class='ident'>found</span>)),
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>ShareParsingError</span>(_, <span class='kw-2'>ref</span> <span class='ident'>description</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>description</span>.<span class='ident'>clone</span>()),
|
||||
_ <span class='op'>=></span> <span class='prelude-val'>None</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>share_groups_for_type</span>(<span class='ident'>error_type</span>: <span class='ident'>RustyErrorTypes</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span><span class='op'>></span>{
|
||||
<span class='kw'>match</span> <span class='ident'>error_type</span> {
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>IncompatibleSets</span>(<span class='ident'>groups</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>groups</span>),
|
||||
_ <span class='op'>=></span> <span class='prelude-val'>None</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>share_num_for_type</span>(<span class='ident'>error_type</span>: <span class='kw-2'>&</span><span class='ident'>RustyErrorTypes</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span> {
|
||||
<span class='kw'>match</span> <span class='op'>*</span><span class='ident'>error_type</span> {
|
||||
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>InvalidSignature</span>(<span class='ident'>share_num</span>, _)
|
||||
<span class='op'>|</span> <span class='ident'>RustyErrorTypes</span>::<span class='ident'>MissingSignature</span>(<span class='ident'>share_num</span>)
|
||||
<span class='op'>|</span> <span class='ident'>RustyErrorTypes</span>::<span class='ident'>ShareParsingError</span>(<span class='ident'>share_num</span>, _)
|
||||
<span class='op'>|</span> <span class='ident'>RustyErrorTypes</span>::<span class='ident'>DuplicateShareNum</span>(<span class='ident'>share_num</span>)
|
||||
<span class='op'>|</span> <span class='ident'>RustyErrorTypes</span>::<span class='ident'>DuplicateShareData</span>(<span class='ident'>share_num</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>share_num</span>),
|
||||
_ <span class='op'>=></span> <span class='prelude-val'>None</span>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> <span class='ident'>fmt</span>::<span class='ident'>Display</span> <span class='kw'>for</span> <span class='ident'>Error</span> {
|
||||
<span class='kw'>impl</span> <span class='ident'>fmt</span>::<span class='ident'>Display</span> <span class='kw'>for</span> <span class='ident'>RustyError</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>fmt</span>(<span class='kw-2'>&</span><span class='self'>self</span>, <span class='ident'>f</span>: <span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>fmt</span>::<span class='ident'>Formatter</span>) <span class='op'>-></span> <span class='ident'>fmt</span>::<span class='prelude-ty'>Result</span> {
|
||||
<span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>detail</span> {
|
||||
<span class='prelude-val'>None</span> <span class='op'>=></span> <span class='macro'>write</span><span class='macro'>!</span>(<span class='ident'>f</span>, <span class='string'>"{}"</span>, <span class='self'>self</span>.<span class='ident'>descr</span>),
|
||||
@ -169,42 +338,51 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> <span class='ident'>error</span>::<span class='ident'>Error</span> <span class='kw'>for</span> <span class='ident'>Error</span> {
|
||||
<span class='kw'>impl</span> <span class='ident'>Error</span> <span class='kw'>for</span> <span class='ident'>RustyError</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>description</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='ident'>str</span> {
|
||||
<span class='self'>self</span>.<span class='ident'>descr</span>
|
||||
}
|
||||
<span class='kw'>fn</span> <span class='ident'>cause</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span><span class='ident'>error</span>::<span class='ident'>Error</span><span class='op'>></span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>cause</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span><span class='ident'>Error</span><span class='op'>></span> {
|
||||
<span class='prelude-val'>None</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>Error</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>io</span>::<span class='ident'>Error</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>me</span>: <span class='ident'>Error</span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='ident'>Error</span> {
|
||||
<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>io</span>::<span class='ident'>Error</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>RustyError</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>err</span>: <span class='ident'>io</span>::<span class='ident'>Error</span>) <span class='op'>-></span> <span class='ident'>RustyError</span> {
|
||||
<span class='kw'>let</span> <span class='ident'>descr</span> <span class='op'>=</span> <span class='ident'>err</span>.<span class='ident'>description</span>().<span class='ident'>to_owned</span>();
|
||||
|
||||
<span class='ident'>RustyError</span>::<span class='ident'>new</span>(<span class='string'>"from io:Error"</span>, <span class='prelude-val'>Some</span>(<span class='ident'>descr</span>), <span class='prelude-val'>None</span>, <span class='prelude-val'>None</span>)
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>RustyError</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>io</span>::<span class='ident'>Error</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>me</span>: <span class='ident'>RustyError</span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='ident'>Error</span> {
|
||||
<span class='ident'>io</span>::<span class='ident'>Error</span>::<span class='ident'>new</span>(<span class='ident'>io</span>::<span class='ident'>ErrorKind</span>::<span class='ident'>Other</span>, <span class='ident'>me</span>)
|
||||
}
|
||||
}
|
||||
|
||||
<span class='doccomment'>/// Returns an `io::Error` from description string and optional detail string.</span>
|
||||
<span class='doccomment'>/// Particularly useful in `Result` expressions.</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>other_io_err</span>(<span class='ident'>descr</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, <span class='ident'>detail</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='ident'>Error</span> {
|
||||
<span class='ident'>convert</span>::<span class='ident'>From</span>::<span class='ident'>from</span>(<span class='ident'>Error</span>::<span class='ident'>new</span>(<span class='ident'>descr</span>, <span class='ident'>detail</span>))
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>other_io_err</span>(<span class='ident'>descr</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, <span class='ident'>detail</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>,
|
||||
<span class='ident'>share_num</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>, <span class='ident'>share_groups</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='ident'>Error</span> {
|
||||
<span class='ident'>convert</span>::<span class='ident'>From</span>::<span class='ident'>from</span>(<span class='ident'>RustyError</span>::<span class='ident'>new</span>(<span class='ident'>descr</span>, <span class='ident'>detail</span>, <span class='ident'>share_num</span>, <span class='ident'>share_groups</span>))
|
||||
}
|
||||
|
||||
<span class='doccomment'>/// maps a `ParseIntError` to an `io::Error`</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>pie2io</span>(<span class='ident'>p</span>: <span class='ident'>num</span>::<span class='ident'>ParseIntError</span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='ident'>Error</span> {
|
||||
<span class='ident'>convert</span>::<span class='ident'>From</span>::<span class='ident'>from</span>(<span class='ident'>Error</span>::<span class='ident'>new</span>(<span class='string'>"Integer parsing error"</span>, <span class='prelude-val'>Some</span>(<span class='ident'>p</span>.<span class='ident'>to_string</span>())))
|
||||
<span class='doccomment'>/// maps a `ParseIntError` to an `Error`</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>pie2error</span>(<span class='ident'>p</span>: <span class='ident'>num</span>::<span class='ident'>ParseIntError</span>) <span class='op'>-></span> <span class='ident'>RustyError</span> {
|
||||
<span class='ident'>RustyError</span>::<span class='ident'>new</span>(<span class='string'>"Integer parsing error"</span>, <span class='prelude-val'>Some</span>(<span class='ident'>p</span>.<span class='ident'>to_string</span>()), <span class='prelude-val'>None</span>, <span class='prelude-val'>None</span>)
|
||||
}
|
||||
|
||||
<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span>
|
||||
<span class='kw'>mod</span> <span class='ident'>tests_custom_err</span> {
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>error</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::<span class='ident'>RustyError</span>;
|
||||
|
||||
<span class='attribute'>#[<span class='ident'>test</span>]</span>
|
||||
<span class='kw'>fn</span> <span class='ident'>test_custom_error</span>() {
|
||||
<span class='kw'>let</span> <span class='ident'>desc</span> <span class='op'>=</span> <span class='string'>"Boring error description"</span>;
|
||||
<span class='kw'>let</span> <span class='ident'>detail</span> <span class='op'>=</span> <span class='string'>"More of it"</span>;
|
||||
<span class='kw'>let</span> <span class='ident'>ewd</span> <span class='op'>=</span> <span class='ident'>custom_error</span>::<span class='ident'>Error</span>::<span class='ident'>new</span>(<span class='ident'>desc</span>, <span class='prelude-val'>Some</span>(<span class='ident'>detail</span>.<span class='ident'>to_string</span>()));
|
||||
<span class='kw'>let</span> <span class='ident'>ewd</span> <span class='op'>=</span> <span class='ident'>RustyError</span>::<span class='ident'>new</span>(<span class='ident'>desc</span>, <span class='prelude-val'>Some</span>(<span class='ident'>detail</span>.<span class='ident'>to_string</span>()), <span class='prelude-val'>None</span>, <span class='prelude-val'>None</span>);
|
||||
|
||||
<span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>error</span>::<span class='ident'>Error</span>::<span class='ident'>description</span>(<span class='kw-2'>&</span><span class='ident'>ewd</span>), <span class='ident'>desc</span>);
|
||||
<span class='kw'>match</span> <span class='ident'>error</span>::<span class='ident'>Error</span>::<span class='ident'>cause</span>(<span class='kw-2'>&</span><span class='ident'>ewd</span>) {
|
||||
@ -212,7 +390,7 @@
|
||||
<span class='prelude-val'>None</span> <span class='op'>=></span> <span class='macro'>assert</span><span class='macro'>!</span>(<span class='bool-val'>true</span>),
|
||||
}
|
||||
<span class='kw'>let</span> <span class='ident'>_formated_err</span> <span class='op'>=</span> <span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>"{}"</span>, <span class='ident'>ewd</span>);
|
||||
<span class='kw'>let</span> <span class='ident'>ewod</span> <span class='op'>=</span> <span class='ident'>custom_error</span>::<span class='ident'>Error</span>::<span class='ident'>new</span>(<span class='ident'>desc</span>, <span class='prelude-val'>None</span>);
|
||||
<span class='kw'>let</span> <span class='ident'>ewod</span> <span class='op'>=</span> <span class='ident'>RustyError</span>::<span class='ident'>new</span>(<span class='ident'>desc</span>, <span class='prelude-val'>None</span>, <span class='prelude-val'>None</span>, <span class='prelude-val'>None</span>);
|
||||
<span class='kw'>let</span> <span class='ident'>_formated_err</span> <span class='op'>=</span> <span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>"{}"</span>, <span class='ident'>ewod</span>);
|
||||
}
|
||||
}
|
||||
@ -220,12 +398,12 @@
|
||||
<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span>
|
||||
<span class='kw'>mod</span> <span class='ident'>tests_std_err</span> {
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>error</span>::<span class='ident'>Error</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::<span class='ident'>pie2io</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::<span class='ident'>pie2error</span>;
|
||||
|
||||
<span class='attribute'>#[<span class='ident'>test</span>]</span>
|
||||
<span class='kw'>fn</span> <span class='ident'>test_parse_errors</span>() {
|
||||
<span class='kw'>let</span> <span class='ident'>nan</span> <span class='op'>=</span> <span class='string'>"2a"</span>.<span class='ident'>to_string</span>();
|
||||
<span class='kw'>match</span> <span class='ident'>nan</span>.<span class='ident'>parse</span>::<span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>().<span class='ident'>map_err</span>(<span class='ident'>pie2io</span>) {
|
||||
<span class='kw'>match</span> <span class='ident'>nan</span>.<span class='ident'>parse</span>::<span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>().<span class='ident'>map_err</span>(<span class='ident'>pie2error</span>) {
|
||||
<span class='prelude-val'>Ok</span>(_) <span class='op'>=></span> <span class='macro'>assert</span><span class='macro'>!</span>(<span class='bool-val'>false</span>),
|
||||
<span class='prelude-val'>Err</span>(<span class='ident'>x</span>) <span class='op'>=></span> <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='string'>"Integer parsing error"</span>, <span class='ident'>x</span>.<span class='ident'>description</span>()),
|
||||
}
|
||||
@ -288,11 +466,9 @@
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -280,11 +280,9 @@
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -180,11 +180,9 @@
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -75,7 +75,11 @@
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
</pre><pre class='rust '>
|
||||
<span class='doccomment'>//! `RustySecrets` implements Shamir's secret sharing in Rust. It provides the possibility to sign shares.</span>
|
||||
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>deny</span>(
|
||||
<span class='ident'>missing_docs</span>,
|
||||
<span class='ident'>missing_debug_implementations</span>, <span class='ident'>missing_copy_implementations</span>,
|
||||
@ -84,8 +88,6 @@
|
||||
<span class='ident'>unused_import_braces</span>, <span class='ident'>unused_qualifications</span>
|
||||
)]</span>
|
||||
|
||||
<span class='doccomment'>//! `RustySecrets` implements Shamir Secret Sharing in Rust. It provides the possibility to sign shares.</span>
|
||||
|
||||
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>protobuf</span>;
|
||||
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>rustc_serialize</span> <span class='kw'>as</span> <span class='ident'>serialize</span>;
|
||||
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>rand</span>;
|
||||
@ -99,13 +101,15 @@
|
||||
<span class='kw'>mod</span> <span class='ident'>custom_error</span>;
|
||||
<span class='kw'>mod</span> <span class='ident'>gf256</span>;
|
||||
<span class='kw'>mod</span> <span class='ident'>interpolation</span>;
|
||||
<span class='kw'>mod</span> <span class='ident'>secret</span>;
|
||||
<span class='kw'>mod</span> <span class='ident'>share_data</span>;
|
||||
<span class='kw'>mod</span> <span class='ident'>share_format</span>;
|
||||
<span class='kw'>mod</span> <span class='ident'>sss</span>;
|
||||
<span class='kw'>mod</span> <span class='ident'>validation</span>;
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>use</span> <span class='ident'>sss</span>::<span class='ident'>generate_shares</span>;
|
||||
<span class='kw'>pub</span> <span class='kw'>use</span> <span class='ident'>sss</span>::<span class='ident'>recover_secret</span>;
|
||||
<span class='kw'>pub</span> <span class='kw'>use</span> <span class='ident'>custom_error</span>::<span class='ident'>RustyError</span>;
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>mod</span> <span class='ident'>sss</span>;
|
||||
<span class='kw'>pub</span> <span class='kw'>mod</span> <span class='ident'>wrapped_secrets</span>;
|
||||
|
||||
<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span>
|
||||
<span class='kw'>mod</span> <span class='ident'>tests</span>;
|
||||
@ -166,11 +170,9 @@
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
890
docs/src/rusty_secrets/src/secret.rs.html
Normal file
890
docs/src/rusty_secrets/src/secret.rs.html
Normal file
@ -0,0 +1,890 @@
|
||||
<!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="Source to the Rust file `src/secret.rs`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang">
|
||||
|
||||
<title>secret.rs.html -- source</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../../../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../main.css">
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body class="rustdoc">
|
||||
<!--[if lte IE 8]>
|
||||
<div class="warning">
|
||||
This old browser is unsupported and will most likely display funky
|
||||
things.
|
||||
</div>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
<form class="search-form js-only">
|
||||
<div class="search-container">
|
||||
<input class="search-input" name="search"
|
||||
autocomplete="off"
|
||||
placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
|
||||
type="search">
|
||||
</div>
|
||||
</form>
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span>
|
||||
<span id="2"> 2</span>
|
||||
<span id="3"> 3</span>
|
||||
<span id="4"> 4</span>
|
||||
<span id="5"> 5</span>
|
||||
<span id="6"> 6</span>
|
||||
<span id="7"> 7</span>
|
||||
<span id="8"> 8</span>
|
||||
<span id="9"> 9</span>
|
||||
<span id="10"> 10</span>
|
||||
<span id="11"> 11</span>
|
||||
<span id="12"> 12</span>
|
||||
<span id="13"> 13</span>
|
||||
<span id="14"> 14</span>
|
||||
<span id="15"> 15</span>
|
||||
<span id="16"> 16</span>
|
||||
<span id="17"> 17</span>
|
||||
<span id="18"> 18</span>
|
||||
<span id="19"> 19</span>
|
||||
<span id="20"> 20</span>
|
||||
<span id="21"> 21</span>
|
||||
<span id="22"> 22</span>
|
||||
<span id="23"> 23</span>
|
||||
<span id="24"> 24</span>
|
||||
<span id="25"> 25</span>
|
||||
<span id="26"> 26</span>
|
||||
<span id="27"> 27</span>
|
||||
<span id="28"> 28</span>
|
||||
<span id="29"> 29</span>
|
||||
<span id="30"> 30</span>
|
||||
<span id="31"> 31</span>
|
||||
<span id="32"> 32</span>
|
||||
<span id="33"> 33</span>
|
||||
<span id="34"> 34</span>
|
||||
<span id="35"> 35</span>
|
||||
<span id="36"> 36</span>
|
||||
<span id="37"> 37</span>
|
||||
<span id="38"> 38</span>
|
||||
<span id="39"> 39</span>
|
||||
<span id="40"> 40</span>
|
||||
<span id="41"> 41</span>
|
||||
<span id="42"> 42</span>
|
||||
<span id="43"> 43</span>
|
||||
<span id="44"> 44</span>
|
||||
<span id="45"> 45</span>
|
||||
<span id="46"> 46</span>
|
||||
<span id="47"> 47</span>
|
||||
<span id="48"> 48</span>
|
||||
<span id="49"> 49</span>
|
||||
<span id="50"> 50</span>
|
||||
<span id="51"> 51</span>
|
||||
<span id="52"> 52</span>
|
||||
<span id="53"> 53</span>
|
||||
<span id="54"> 54</span>
|
||||
<span id="55"> 55</span>
|
||||
<span id="56"> 56</span>
|
||||
<span id="57"> 57</span>
|
||||
<span id="58"> 58</span>
|
||||
<span id="59"> 59</span>
|
||||
<span id="60"> 60</span>
|
||||
<span id="61"> 61</span>
|
||||
<span id="62"> 62</span>
|
||||
<span id="63"> 63</span>
|
||||
<span id="64"> 64</span>
|
||||
<span id="65"> 65</span>
|
||||
<span id="66"> 66</span>
|
||||
<span id="67"> 67</span>
|
||||
<span id="68"> 68</span>
|
||||
<span id="69"> 69</span>
|
||||
<span id="70"> 70</span>
|
||||
<span id="71"> 71</span>
|
||||
<span id="72"> 72</span>
|
||||
<span id="73"> 73</span>
|
||||
<span id="74"> 74</span>
|
||||
<span id="75"> 75</span>
|
||||
<span id="76"> 76</span>
|
||||
<span id="77"> 77</span>
|
||||
<span id="78"> 78</span>
|
||||
<span id="79"> 79</span>
|
||||
<span id="80"> 80</span>
|
||||
<span id="81"> 81</span>
|
||||
<span id="82"> 82</span>
|
||||
<span id="83"> 83</span>
|
||||
<span id="84"> 84</span>
|
||||
<span id="85"> 85</span>
|
||||
<span id="86"> 86</span>
|
||||
<span id="87"> 87</span>
|
||||
<span id="88"> 88</span>
|
||||
<span id="89"> 89</span>
|
||||
<span id="90"> 90</span>
|
||||
<span id="91"> 91</span>
|
||||
<span id="92"> 92</span>
|
||||
<span id="93"> 93</span>
|
||||
<span id="94"> 94</span>
|
||||
<span id="95"> 95</span>
|
||||
<span id="96"> 96</span>
|
||||
<span id="97"> 97</span>
|
||||
<span id="98"> 98</span>
|
||||
<span id="99"> 99</span>
|
||||
<span id="100">100</span>
|
||||
<span id="101">101</span>
|
||||
<span id="102">102</span>
|
||||
<span id="103">103</span>
|
||||
<span id="104">104</span>
|
||||
<span id="105">105</span>
|
||||
<span id="106">106</span>
|
||||
<span id="107">107</span>
|
||||
<span id="108">108</span>
|
||||
<span id="109">109</span>
|
||||
<span id="110">110</span>
|
||||
<span id="111">111</span>
|
||||
<span id="112">112</span>
|
||||
<span id="113">113</span>
|
||||
<span id="114">114</span>
|
||||
<span id="115">115</span>
|
||||
<span id="116">116</span>
|
||||
<span id="117">117</span>
|
||||
<span id="118">118</span>
|
||||
<span id="119">119</span>
|
||||
<span id="120">120</span>
|
||||
<span id="121">121</span>
|
||||
<span id="122">122</span>
|
||||
<span id="123">123</span>
|
||||
<span id="124">124</span>
|
||||
<span id="125">125</span>
|
||||
<span id="126">126</span>
|
||||
<span id="127">127</span>
|
||||
<span id="128">128</span>
|
||||
<span id="129">129</span>
|
||||
<span id="130">130</span>
|
||||
<span id="131">131</span>
|
||||
<span id="132">132</span>
|
||||
<span id="133">133</span>
|
||||
<span id="134">134</span>
|
||||
<span id="135">135</span>
|
||||
<span id="136">136</span>
|
||||
<span id="137">137</span>
|
||||
<span id="138">138</span>
|
||||
<span id="139">139</span>
|
||||
<span id="140">140</span>
|
||||
<span id="141">141</span>
|
||||
<span id="142">142</span>
|
||||
<span id="143">143</span>
|
||||
<span id="144">144</span>
|
||||
<span id="145">145</span>
|
||||
<span id="146">146</span>
|
||||
<span id="147">147</span>
|
||||
<span id="148">148</span>
|
||||
<span id="149">149</span>
|
||||
<span id="150">150</span>
|
||||
<span id="151">151</span>
|
||||
<span id="152">152</span>
|
||||
<span id="153">153</span>
|
||||
<span id="154">154</span>
|
||||
<span id="155">155</span>
|
||||
<span id="156">156</span>
|
||||
<span id="157">157</span>
|
||||
<span id="158">158</span>
|
||||
<span id="159">159</span>
|
||||
<span id="160">160</span>
|
||||
<span id="161">161</span>
|
||||
<span id="162">162</span>
|
||||
<span id="163">163</span>
|
||||
<span id="164">164</span>
|
||||
<span id="165">165</span>
|
||||
<span id="166">166</span>
|
||||
<span id="167">167</span>
|
||||
<span id="168">168</span>
|
||||
<span id="169">169</span>
|
||||
<span id="170">170</span>
|
||||
<span id="171">171</span>
|
||||
<span id="172">172</span>
|
||||
<span id="173">173</span>
|
||||
<span id="174">174</span>
|
||||
<span id="175">175</span>
|
||||
<span id="176">176</span>
|
||||
<span id="177">177</span>
|
||||
<span id="178">178</span>
|
||||
<span id="179">179</span>
|
||||
<span id="180">180</span>
|
||||
<span id="181">181</span>
|
||||
<span id="182">182</span>
|
||||
<span id="183">183</span>
|
||||
<span id="184">184</span>
|
||||
<span id="185">185</span>
|
||||
<span id="186">186</span>
|
||||
<span id="187">187</span>
|
||||
<span id="188">188</span>
|
||||
<span id="189">189</span>
|
||||
<span id="190">190</span>
|
||||
<span id="191">191</span>
|
||||
<span id="192">192</span>
|
||||
<span id="193">193</span>
|
||||
<span id="194">194</span>
|
||||
<span id="195">195</span>
|
||||
<span id="196">196</span>
|
||||
<span id="197">197</span>
|
||||
<span id="198">198</span>
|
||||
<span id="199">199</span>
|
||||
<span id="200">200</span>
|
||||
<span id="201">201</span>
|
||||
<span id="202">202</span>
|
||||
<span id="203">203</span>
|
||||
<span id="204">204</span>
|
||||
<span id="205">205</span>
|
||||
<span id="206">206</span>
|
||||
<span id="207">207</span>
|
||||
<span id="208">208</span>
|
||||
<span id="209">209</span>
|
||||
<span id="210">210</span>
|
||||
<span id="211">211</span>
|
||||
<span id="212">212</span>
|
||||
<span id="213">213</span>
|
||||
<span id="214">214</span>
|
||||
<span id="215">215</span>
|
||||
<span id="216">216</span>
|
||||
<span id="217">217</span>
|
||||
<span id="218">218</span>
|
||||
<span id="219">219</span>
|
||||
<span id="220">220</span>
|
||||
<span id="221">221</span>
|
||||
<span id="222">222</span>
|
||||
<span id="223">223</span>
|
||||
<span id="224">224</span>
|
||||
<span id="225">225</span>
|
||||
<span id="226">226</span>
|
||||
<span id="227">227</span>
|
||||
<span id="228">228</span>
|
||||
<span id="229">229</span>
|
||||
<span id="230">230</span>
|
||||
<span id="231">231</span>
|
||||
<span id="232">232</span>
|
||||
<span id="233">233</span>
|
||||
<span id="234">234</span>
|
||||
<span id="235">235</span>
|
||||
<span id="236">236</span>
|
||||
<span id="237">237</span>
|
||||
<span id="238">238</span>
|
||||
<span id="239">239</span>
|
||||
<span id="240">240</span>
|
||||
<span id="241">241</span>
|
||||
<span id="242">242</span>
|
||||
<span id="243">243</span>
|
||||
<span id="244">244</span>
|
||||
<span id="245">245</span>
|
||||
<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>
|
||||
<span id="270">270</span>
|
||||
<span id="271">271</span>
|
||||
<span id="272">272</span>
|
||||
<span id="273">273</span>
|
||||
<span id="274">274</span>
|
||||
<span id="275">275</span>
|
||||
<span id="276">276</span>
|
||||
<span id="277">277</span>
|
||||
<span id="278">278</span>
|
||||
<span id="279">279</span>
|
||||
<span id="280">280</span>
|
||||
<span id="281">281</span>
|
||||
<span id="282">282</span>
|
||||
<span id="283">283</span>
|
||||
<span id="284">284</span>
|
||||
<span id="285">285</span>
|
||||
<span id="286">286</span>
|
||||
<span id="287">287</span>
|
||||
<span id="288">288</span>
|
||||
<span id="289">289</span>
|
||||
<span id="290">290</span>
|
||||
<span id="291">291</span>
|
||||
<span id="292">292</span>
|
||||
<span id="293">293</span>
|
||||
<span id="294">294</span>
|
||||
<span id="295">295</span>
|
||||
<span id="296">296</span>
|
||||
<span id="297">297</span>
|
||||
<span id="298">298</span>
|
||||
<span id="299">299</span>
|
||||
<span id="300">300</span>
|
||||
<span id="301">301</span>
|
||||
<span id="302">302</span>
|
||||
<span id="303">303</span>
|
||||
<span id="304">304</span>
|
||||
<span id="305">305</span>
|
||||
<span id="306">306</span>
|
||||
<span id="307">307</span>
|
||||
<span id="308">308</span>
|
||||
<span id="309">309</span>
|
||||
<span id="310">310</span>
|
||||
<span id="311">311</span>
|
||||
<span id="312">312</span>
|
||||
<span id="313">313</span>
|
||||
<span id="314">314</span>
|
||||
<span id="315">315</span>
|
||||
<span id="316">316</span>
|
||||
<span id="317">317</span>
|
||||
<span id="318">318</span>
|
||||
<span id="319">319</span>
|
||||
<span id="320">320</span>
|
||||
<span id="321">321</span>
|
||||
<span id="322">322</span>
|
||||
<span id="323">323</span>
|
||||
<span id="324">324</span>
|
||||
<span id="325">325</span>
|
||||
<span id="326">326</span>
|
||||
<span id="327">327</span>
|
||||
<span id="328">328</span>
|
||||
<span id="329">329</span>
|
||||
<span id="330">330</span>
|
||||
<span id="331">331</span>
|
||||
<span id="332">332</span>
|
||||
<span id="333">333</span>
|
||||
<span id="334">334</span>
|
||||
<span id="335">335</span>
|
||||
<span id="336">336</span>
|
||||
<span id="337">337</span>
|
||||
<span id="338">338</span>
|
||||
<span id="339">339</span>
|
||||
<span id="340">340</span>
|
||||
<span id="341">341</span>
|
||||
<span id="342">342</span>
|
||||
<span id="343">343</span>
|
||||
<span id="344">344</span>
|
||||
<span id="345">345</span>
|
||||
<span id="346">346</span>
|
||||
<span id="347">347</span>
|
||||
<span id="348">348</span>
|
||||
<span id="349">349</span>
|
||||
<span id="350">350</span>
|
||||
<span id="351">351</span>
|
||||
<span id="352">352</span>
|
||||
<span id="353">353</span>
|
||||
<span id="354">354</span>
|
||||
<span id="355">355</span>
|
||||
<span id="356">356</span>
|
||||
<span id="357">357</span>
|
||||
<span id="358">358</span>
|
||||
<span id="359">359</span>
|
||||
<span id="360">360</span>
|
||||
<span id="361">361</span>
|
||||
<span id="362">362</span>
|
||||
<span id="363">363</span>
|
||||
<span id="364">364</span>
|
||||
<span id="365">365</span>
|
||||
<span id="366">366</span>
|
||||
<span id="367">367</span>
|
||||
<span id="368">368</span>
|
||||
<span id="369">369</span>
|
||||
<span id="370">370</span>
|
||||
<span id="371">371</span>
|
||||
<span id="372">372</span>
|
||||
<span id="373">373</span>
|
||||
<span id="374">374</span>
|
||||
<span id="375">375</span>
|
||||
<span id="376">376</span>
|
||||
<span id="377">377</span>
|
||||
<span id="378">378</span>
|
||||
<span id="379">379</span>
|
||||
<span id="380">380</span>
|
||||
<span id="381">381</span>
|
||||
<span id="382">382</span>
|
||||
<span id="383">383</span>
|
||||
<span id="384">384</span>
|
||||
<span id="385">385</span>
|
||||
<span id="386">386</span>
|
||||
<span id="387">387</span>
|
||||
<span id="388">388</span>
|
||||
<span id="389">389</span>
|
||||
<span id="390">390</span>
|
||||
<span id="391">391</span>
|
||||
</pre><pre class='rust '>
|
||||
<span class='comment'>// This file is generated. Do not edit</span>
|
||||
<span class='comment'>// @generated</span>
|
||||
|
||||
<span class='comment'>// https://github.com/Manishearth/rust-clippy/issues/702</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>unknown_lints</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>clippy</span>)]</span>
|
||||
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>cfg_attr</span>(<span class='ident'>rustfmt</span>, <span class='ident'>rustfmt_skip</span>)]</span>
|
||||
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>box_pointers</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>dead_code</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>non_camel_case_types</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>non_snake_case</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>non_upper_case_globals</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>trivial_casts</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>unsafe_code</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>unused_imports</span>)]</span>
|
||||
<span class='attribute'>#<span class='op'>!</span>[<span class='ident'>allow</span>(<span class='ident'>unused_results</span>)]</span>
|
||||
|
||||
<span class='kw'>use</span> <span class='ident'>protobuf</span>::<span class='ident'>Message</span> <span class='kw'>as</span> <span class='ident'>Message_imported_for_functions</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>protobuf</span>::<span class='ident'>ProtobufEnum</span> <span class='kw'>as</span> <span class='ident'>ProtobufEnum_imported_for_functions</span>;
|
||||
|
||||
<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Clone</span>,<span class='ident'>Default</span>)]</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>RustySecret</span> {
|
||||
<span class='comment'>// message fields</span>
|
||||
<span class='ident'>version</span>: ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>RustySecretsVersions</span><span class='op'>></span>,
|
||||
<span class='ident'>secret</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span><span class='op'><</span>::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span>,
|
||||
<span class='ident'>mime_type</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span><span class='op'><</span>::<span class='ident'>std</span>::<span class='ident'>string</span>::<span class='ident'>String</span><span class='op'>></span>,
|
||||
<span class='comment'>// special fields</span>
|
||||
<span class='ident'>unknown_fields</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>UnknownFields</span>,
|
||||
<span class='ident'>cached_size</span>: ::<span class='ident'>std</span>::<span class='ident'>cell</span>::<span class='ident'>Cell</span><span class='op'><</span><span class='ident'>u32</span><span class='op'>></span>,
|
||||
}
|
||||
|
||||
<span class='comment'>// see codegen.rs for the explanation why impl Sync explicitly</span>
|
||||
<span class='kw'>unsafe</span> <span class='kw'>impl</span> ::<span class='ident'>std</span>::<span class='ident'>marker</span>::<span class='ident'>Sync</span> <span class='kw'>for</span> <span class='ident'>RustySecret</span> {}
|
||||
|
||||
<span class='kw'>impl</span> <span class='ident'>RustySecret</span> {
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>() <span class='op'>-></span> <span class='ident'>RustySecret</span> {
|
||||
::<span class='ident'>std</span>::<span class='ident'>default</span>::<span class='ident'>Default</span>::<span class='ident'>default</span>()
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>default_instance</span>() <span class='op'>-></span> <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>RustySecret</span> {
|
||||
<span class='kw'>static</span> <span class='kw-2'>mut</span> <span class='ident'>instance</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>Lazy</span><span class='op'><</span><span class='ident'>RustySecret</span><span class='op'>></span> <span class='op'>=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>Lazy</span> {
|
||||
<span class='ident'>lock</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>ONCE_INIT</span>,
|
||||
<span class='ident'>ptr</span>: <span class='number'>0</span> <span class='kw'>as</span> <span class='op'>*</span><span class='kw'>const</span> <span class='ident'>RustySecret</span>,
|
||||
};
|
||||
<span class='kw'>unsafe</span> {
|
||||
<span class='ident'>instance</span>.<span class='ident'>get</span>(<span class='op'>||</span> {
|
||||
<span class='ident'>RustySecret</span> {
|
||||
<span class='ident'>version</span>: ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span>::<span class='prelude-val'>None</span>,
|
||||
<span class='ident'>secret</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span>::<span class='ident'>none</span>(),
|
||||
<span class='ident'>mime_type</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span>::<span class='ident'>none</span>(),
|
||||
<span class='ident'>unknown_fields</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>UnknownFields</span>::<span class='ident'>new</span>(),
|
||||
<span class='ident'>cached_size</span>: ::<span class='ident'>std</span>::<span class='ident'>cell</span>::<span class='ident'>Cell</span>::<span class='ident'>new</span>(<span class='number'>0</span>),
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
<span class='comment'>// optional .RustySecretsVersions version = 1;</span>
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>clear_version</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) {
|
||||
<span class='self'>self</span>.<span class='ident'>version</span> <span class='op'>=</span> ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span>::<span class='prelude-val'>None</span>;
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>has_version</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>bool</span> {
|
||||
<span class='self'>self</span>.<span class='ident'>version</span>.<span class='ident'>is_some</span>()
|
||||
}
|
||||
|
||||
<span class='comment'>// Param is passed by value, moved</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>set_version</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>v</span>: <span class='ident'>RustySecretsVersions</span>) {
|
||||
<span class='self'>self</span>.<span class='ident'>version</span> <span class='op'>=</span> ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span>::<span class='prelude-val'>Some</span>(<span class='ident'>v</span>);
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>get_version</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>RustySecretsVersions</span> {
|
||||
<span class='self'>self</span>.<span class='ident'>version</span>.<span class='ident'>unwrap_or</span>(<span class='ident'>RustySecretsVersions</span>::<span class='ident'>INITIAL_RELEASE</span>)
|
||||
}
|
||||
|
||||
<span class='comment'>// optional bytes secret = 2;</span>
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>clear_secret</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) {
|
||||
<span class='self'>self</span>.<span class='ident'>secret</span>.<span class='ident'>clear</span>();
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>has_secret</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>bool</span> {
|
||||
<span class='self'>self</span>.<span class='ident'>secret</span>.<span class='ident'>is_some</span>()
|
||||
}
|
||||
|
||||
<span class='comment'>// Param is passed by value, moved</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>set_secret</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>v</span>: ::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>) {
|
||||
<span class='self'>self</span>.<span class='ident'>secret</span> <span class='op'>=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span>::<span class='ident'>some</span>(<span class='ident'>v</span>);
|
||||
}
|
||||
|
||||
<span class='comment'>// Mutable pointer to the field.</span>
|
||||
<span class='comment'>// If field is not initialized, it is initialized with default value first.</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>mut_secret</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='kw-2'>mut</span> ::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span> {
|
||||
<span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>secret</span>.<span class='ident'>is_none</span>() {
|
||||
<span class='self'>self</span>.<span class='ident'>secret</span>.<span class='ident'>set_default</span>();
|
||||
};
|
||||
<span class='self'>self</span>.<span class='ident'>secret</span>.<span class='ident'>as_mut</span>().<span class='ident'>unwrap</span>()
|
||||
}
|
||||
|
||||
<span class='comment'>// Take field</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>take_secret</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> ::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span> {
|
||||
<span class='self'>self</span>.<span class='ident'>secret</span>.<span class='ident'>take</span>().<span class='ident'>unwrap_or_else</span>(<span class='op'>||</span> ::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span>::<span class='ident'>new</span>())
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>get_secret</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span>[<span class='ident'>u8</span>] {
|
||||
<span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>secret</span>.<span class='ident'>as_ref</span>() {
|
||||
<span class='prelude-val'>Some</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='kw-2'>&</span><span class='ident'>v</span>,
|
||||
<span class='prelude-val'>None</span> <span class='op'>=></span> <span class='kw-2'>&</span>[],
|
||||
}
|
||||
}
|
||||
|
||||
<span class='comment'>// optional string mime_type = 3;</span>
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>clear_mime_type</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) {
|
||||
<span class='self'>self</span>.<span class='ident'>mime_type</span>.<span class='ident'>clear</span>();
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>has_mime_type</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>bool</span> {
|
||||
<span class='self'>self</span>.<span class='ident'>mime_type</span>.<span class='ident'>is_some</span>()
|
||||
}
|
||||
|
||||
<span class='comment'>// Param is passed by value, moved</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>set_mime_type</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>v</span>: ::<span class='ident'>std</span>::<span class='ident'>string</span>::<span class='ident'>String</span>) {
|
||||
<span class='self'>self</span>.<span class='ident'>mime_type</span> <span class='op'>=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span>::<span class='ident'>some</span>(<span class='ident'>v</span>);
|
||||
}
|
||||
|
||||
<span class='comment'>// Mutable pointer to the field.</span>
|
||||
<span class='comment'>// If field is not initialized, it is initialized with default value first.</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>mut_mime_type</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='kw-2'>mut</span> ::<span class='ident'>std</span>::<span class='ident'>string</span>::<span class='ident'>String</span> {
|
||||
<span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>mime_type</span>.<span class='ident'>is_none</span>() {
|
||||
<span class='self'>self</span>.<span class='ident'>mime_type</span>.<span class='ident'>set_default</span>();
|
||||
};
|
||||
<span class='self'>self</span>.<span class='ident'>mime_type</span>.<span class='ident'>as_mut</span>().<span class='ident'>unwrap</span>()
|
||||
}
|
||||
|
||||
<span class='comment'>// Take field</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>take_mime_type</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> ::<span class='ident'>std</span>::<span class='ident'>string</span>::<span class='ident'>String</span> {
|
||||
<span class='self'>self</span>.<span class='ident'>mime_type</span>.<span class='ident'>take</span>().<span class='ident'>unwrap_or_else</span>(<span class='op'>||</span> ::<span class='ident'>std</span>::<span class='ident'>string</span>::<span class='ident'>String</span>::<span class='ident'>new</span>())
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>get_mime_type</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='ident'>str</span> {
|
||||
<span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>mime_type</span>.<span class='ident'>as_ref</span>() {
|
||||
<span class='prelude-val'>Some</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='kw-2'>&</span><span class='ident'>v</span>,
|
||||
<span class='prelude-val'>None</span> <span class='op'>=></span> <span class='string'>""</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> ::<span class='ident'>protobuf</span>::<span class='ident'>Message</span> <span class='kw'>for</span> <span class='ident'>RustySecret</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>is_initialized</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>bool</span> {
|
||||
<span class='bool-val'>true</span>
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>merge_from</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>is</span>: <span class='kw-2'>&</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>CodedInputStream</span>) <span class='op'>-></span> ::<span class='ident'>protobuf</span>::<span class='ident'>ProtobufResult</span><span class='op'><</span>()<span class='op'>></span> {
|
||||
<span class='kw'>while</span> <span class='op'>!</span><span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>is</span>.<span class='ident'>eof</span>()) {
|
||||
<span class='kw'>let</span> (<span class='ident'>field_number</span>, <span class='ident'>wire_type</span>) <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>is</span>.<span class='ident'>read_tag_unpack</span>());
|
||||
<span class='kw'>match</span> <span class='ident'>field_number</span> {
|
||||
<span class='number'>1</span> <span class='op'>=></span> {
|
||||
<span class='kw'>if</span> <span class='ident'>wire_type</span> <span class='op'>!=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>wire_format</span>::<span class='ident'>WireTypeVarint</span> {
|
||||
<span class='kw'>return</span> ::<span class='ident'>std</span>::<span class='ident'>result</span>::<span class='prelude-ty'>Result</span>::<span class='prelude-val'>Err</span>(::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>unexpected_wire_type</span>(<span class='ident'>wire_type</span>));
|
||||
};
|
||||
<span class='kw'>let</span> <span class='ident'>tmp</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>is</span>.<span class='ident'>read_enum</span>());
|
||||
<span class='self'>self</span>.<span class='ident'>version</span> <span class='op'>=</span> ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span>::<span class='prelude-val'>Some</span>(<span class='ident'>tmp</span>);
|
||||
},
|
||||
<span class='number'>2</span> <span class='op'>=></span> {
|
||||
<span class='macro'>try</span><span class='macro'>!</span>(::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>read_singular_bytes_into</span>(<span class='ident'>wire_type</span>, <span class='ident'>is</span>, <span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>secret</span>));
|
||||
},
|
||||
<span class='number'>3</span> <span class='op'>=></span> {
|
||||
<span class='macro'>try</span><span class='macro'>!</span>(::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>read_singular_string_into</span>(<span class='ident'>wire_type</span>, <span class='ident'>is</span>, <span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>mime_type</span>));
|
||||
},
|
||||
_ <span class='op'>=></span> {
|
||||
<span class='macro'>try</span><span class='macro'>!</span>(::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>read_unknown_or_skip_group</span>(<span class='ident'>field_number</span>, <span class='ident'>wire_type</span>, <span class='ident'>is</span>, <span class='self'>self</span>.<span class='ident'>mut_unknown_fields</span>()));
|
||||
},
|
||||
};
|
||||
}
|
||||
::<span class='ident'>std</span>::<span class='ident'>result</span>::<span class='prelude-ty'>Result</span>::<span class='prelude-val'>Ok</span>(())
|
||||
}
|
||||
|
||||
<span class='comment'>// Compute sizes of nested messages</span>
|
||||
<span class='attribute'>#[<span class='ident'>allow</span>(<span class='ident'>unused_variables</span>)]</span>
|
||||
<span class='kw'>fn</span> <span class='ident'>compute_size</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>u32</span> {
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>my_size</span> <span class='op'>=</span> <span class='number'>0</span>;
|
||||
<span class='kw'>for</span> <span class='ident'>value</span> <span class='kw'>in</span> <span class='kw-2'>&</span><span class='self'>self</span>.<span class='ident'>version</span> {
|
||||
<span class='ident'>my_size</span> <span class='op'>+=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>enum_size</span>(<span class='number'>1</span>, <span class='op'>*</span><span class='ident'>value</span>);
|
||||
};
|
||||
<span class='kw'>for</span> <span class='ident'>value</span> <span class='kw'>in</span> <span class='kw-2'>&</span><span class='self'>self</span>.<span class='ident'>secret</span> {
|
||||
<span class='ident'>my_size</span> <span class='op'>+=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>bytes_size</span>(<span class='number'>2</span>, <span class='kw-2'>&</span><span class='ident'>value</span>);
|
||||
};
|
||||
<span class='kw'>for</span> <span class='ident'>value</span> <span class='kw'>in</span> <span class='kw-2'>&</span><span class='self'>self</span>.<span class='ident'>mime_type</span> {
|
||||
<span class='ident'>my_size</span> <span class='op'>+=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>string_size</span>(<span class='number'>3</span>, <span class='kw-2'>&</span><span class='ident'>value</span>);
|
||||
};
|
||||
<span class='ident'>my_size</span> <span class='op'>+=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>unknown_fields_size</span>(<span class='self'>self</span>.<span class='ident'>get_unknown_fields</span>());
|
||||
<span class='self'>self</span>.<span class='ident'>cached_size</span>.<span class='ident'>set</span>(<span class='ident'>my_size</span>);
|
||||
<span class='ident'>my_size</span>
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>write_to_with_cached_sizes</span>(<span class='kw-2'>&</span><span class='self'>self</span>, <span class='ident'>os</span>: <span class='kw-2'>&</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>CodedOutputStream</span>) <span class='op'>-></span> ::<span class='ident'>protobuf</span>::<span class='ident'>ProtobufResult</span><span class='op'><</span>()<span class='op'>></span> {
|
||||
<span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>v</span>) <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>version</span> {
|
||||
<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>os</span>.<span class='ident'>write_enum</span>(<span class='number'>1</span>, <span class='ident'>v</span>.<span class='ident'>value</span>()));
|
||||
};
|
||||
<span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>v</span>) <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>secret</span>.<span class='ident'>as_ref</span>() {
|
||||
<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>os</span>.<span class='ident'>write_bytes</span>(<span class='number'>2</span>, <span class='kw-2'>&</span><span class='ident'>v</span>));
|
||||
};
|
||||
<span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>v</span>) <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>mime_type</span>.<span class='ident'>as_ref</span>() {
|
||||
<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>os</span>.<span class='ident'>write_string</span>(<span class='number'>3</span>, <span class='kw-2'>&</span><span class='ident'>v</span>));
|
||||
};
|
||||
<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>os</span>.<span class='ident'>write_unknown_fields</span>(<span class='self'>self</span>.<span class='ident'>get_unknown_fields</span>()));
|
||||
::<span class='ident'>std</span>::<span class='ident'>result</span>::<span class='prelude-ty'>Result</span>::<span class='prelude-val'>Ok</span>(())
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>get_cached_size</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>u32</span> {
|
||||
<span class='self'>self</span>.<span class='ident'>cached_size</span>.<span class='ident'>get</span>()
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>get_unknown_fields</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span>::<span class='ident'>protobuf</span>::<span class='ident'>UnknownFields</span> {
|
||||
<span class='kw-2'>&</span><span class='self'>self</span>.<span class='ident'>unknown_fields</span>
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>mut_unknown_fields</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>UnknownFields</span> {
|
||||
<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>unknown_fields</span>
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>type_id</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> ::<span class='ident'>std</span>::<span class='ident'>any</span>::<span class='ident'>TypeId</span> {
|
||||
::<span class='ident'>std</span>::<span class='ident'>any</span>::<span class='ident'>TypeId</span>::<span class='ident'>of</span>::<span class='op'><</span><span class='ident'>RustySecret</span><span class='op'>></span>()
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>as_any</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span>::<span class='ident'>std</span>::<span class='ident'>any</span>::<span class='ident'>Any</span> {
|
||||
<span class='self'>self</span> <span class='kw'>as</span> <span class='kw-2'>&</span>::<span class='ident'>std</span>::<span class='ident'>any</span>::<span class='ident'>Any</span>
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>descriptor</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='lifetime'>'static</span> ::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>MessageDescriptor</span> {
|
||||
::<span class='ident'>protobuf</span>::<span class='ident'>MessageStatic</span>::<span class='ident'>descriptor_static</span>(<span class='prelude-val'>None</span>::<span class='op'><</span><span class='self'>Self</span><span class='op'>></span>)
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> ::<span class='ident'>protobuf</span>::<span class='ident'>MessageStatic</span> <span class='kw'>for</span> <span class='ident'>RustySecret</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>new</span>() <span class='op'>-></span> <span class='ident'>RustySecret</span> {
|
||||
<span class='ident'>RustySecret</span>::<span class='ident'>new</span>()
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>descriptor_static</span>(_: ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>RustySecret</span><span class='op'>></span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='lifetime'>'static</span> ::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>MessageDescriptor</span> {
|
||||
<span class='kw'>static</span> <span class='kw-2'>mut</span> <span class='ident'>descriptor</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>Lazy</span><span class='op'><</span>::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>MessageDescriptor</span><span class='op'>></span> <span class='op'>=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>Lazy</span> {
|
||||
<span class='ident'>lock</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>ONCE_INIT</span>,
|
||||
<span class='ident'>ptr</span>: <span class='number'>0</span> <span class='kw'>as</span> <span class='op'>*</span><span class='kw'>const</span> ::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>MessageDescriptor</span>,
|
||||
};
|
||||
<span class='kw'>unsafe</span> {
|
||||
<span class='ident'>descriptor</span>.<span class='ident'>get</span>(<span class='op'>||</span> {
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>fields</span> <span class='op'>=</span> ::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span>::<span class='ident'>new</span>();
|
||||
<span class='ident'>fields</span>.<span class='ident'>push</span>(::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>accessor</span>::<span class='ident'>make_singular_enum_accessor</span>(
|
||||
<span class='string'>"version"</span>,
|
||||
<span class='ident'>RustySecret</span>::<span class='ident'>has_version</span>,
|
||||
<span class='ident'>RustySecret</span>::<span class='ident'>get_version</span>,
|
||||
));
|
||||
<span class='ident'>fields</span>.<span class='ident'>push</span>(::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>accessor</span>::<span class='ident'>make_singular_bytes_accessor</span>(
|
||||
<span class='string'>"secret"</span>,
|
||||
<span class='ident'>RustySecret</span>::<span class='ident'>has_secret</span>,
|
||||
<span class='ident'>RustySecret</span>::<span class='ident'>get_secret</span>,
|
||||
));
|
||||
<span class='ident'>fields</span>.<span class='ident'>push</span>(::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>accessor</span>::<span class='ident'>make_singular_string_accessor</span>(
|
||||
<span class='string'>"mime_type"</span>,
|
||||
<span class='ident'>RustySecret</span>::<span class='ident'>has_mime_type</span>,
|
||||
<span class='ident'>RustySecret</span>::<span class='ident'>get_mime_type</span>,
|
||||
));
|
||||
::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>MessageDescriptor</span>::<span class='ident'>new</span>::<span class='op'><</span><span class='ident'>RustySecret</span><span class='op'>></span>(
|
||||
<span class='string'>"RustySecret"</span>,
|
||||
<span class='ident'>fields</span>,
|
||||
<span class='ident'>file_descriptor_proto</span>()
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> ::<span class='ident'>protobuf</span>::<span class='ident'>Clear</span> <span class='kw'>for</span> <span class='ident'>RustySecret</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>clear</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) {
|
||||
<span class='self'>self</span>.<span class='ident'>clear_version</span>();
|
||||
<span class='self'>self</span>.<span class='ident'>clear_secret</span>();
|
||||
<span class='self'>self</span>.<span class='ident'>clear_mime_type</span>();
|
||||
<span class='self'>self</span>.<span class='ident'>unknown_fields</span>.<span class='ident'>clear</span>();
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> ::<span class='ident'>std</span>::<span class='ident'>cmp</span>::<span class='ident'>PartialEq</span> <span class='kw'>for</span> <span class='ident'>RustySecret</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>eq</span>(<span class='kw-2'>&</span><span class='self'>self</span>, <span class='ident'>other</span>: <span class='kw-2'>&</span><span class='ident'>RustySecret</span>) <span class='op'>-></span> <span class='ident'>bool</span> {
|
||||
<span class='self'>self</span>.<span class='ident'>version</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>version</span> <span class='op'>&&</span>
|
||||
<span class='self'>self</span>.<span class='ident'>secret</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>secret</span> <span class='op'>&&</span>
|
||||
<span class='self'>self</span>.<span class='ident'>mime_type</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>mime_type</span> <span class='op'>&&</span>
|
||||
<span class='self'>self</span>.<span class='ident'>unknown_fields</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>unknown_fields</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> ::<span class='ident'>std</span>::<span class='ident'>fmt</span>::<span class='ident'>Debug</span> <span class='kw'>for</span> <span class='ident'>RustySecret</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>fmt</span>(<span class='kw-2'>&</span><span class='self'>self</span>, <span class='ident'>f</span>: <span class='kw-2'>&</span><span class='kw-2'>mut</span> ::<span class='ident'>std</span>::<span class='ident'>fmt</span>::<span class='ident'>Formatter</span>) <span class='op'>-></span> ::<span class='ident'>std</span>::<span class='ident'>fmt</span>::<span class='prelude-ty'>Result</span> {
|
||||
::<span class='ident'>protobuf</span>::<span class='ident'>text_format</span>::<span class='ident'>fmt</span>(<span class='self'>self</span>, <span class='ident'>f</span>)
|
||||
}
|
||||
}
|
||||
|
||||
<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Clone</span>,<span class='ident'>PartialEq</span>,<span class='ident'>Eq</span>,<span class='ident'>Debug</span>,<span class='ident'>Hash</span>)]</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>enum</span> <span class='ident'>RustySecretsVersions</span> {
|
||||
<span class='ident'>INITIAL_RELEASE</span> <span class='op'>=</span> <span class='number'>0</span>,
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> ::<span class='ident'>protobuf</span>::<span class='ident'>ProtobufEnum</span> <span class='kw'>for</span> <span class='ident'>RustySecretsVersions</span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>value</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>i32</span> {
|
||||
<span class='op'>*</span><span class='self'>self</span> <span class='kw'>as</span> <span class='ident'>i32</span>
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>from_i32</span>(<span class='ident'>value</span>: <span class='ident'>i32</span>) <span class='op'>-></span> ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>RustySecretsVersions</span><span class='op'>></span> {
|
||||
<span class='kw'>match</span> <span class='ident'>value</span> {
|
||||
<span class='number'>0</span> <span class='op'>=></span> ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span>::<span class='prelude-val'>Some</span>(<span class='ident'>RustySecretsVersions</span>::<span class='ident'>INITIAL_RELEASE</span>),
|
||||
_ <span class='op'>=></span> ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span>::<span class='prelude-val'>None</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>values</span>() <span class='op'>-></span> <span class='kw-2'>&</span><span class='lifetime'>'static</span> [<span class='self'>Self</span>] {
|
||||
<span class='kw'>static</span> <span class='ident'>values</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> [<span class='ident'>RustySecretsVersions</span>] <span class='op'>=</span> <span class='kw-2'>&</span>[
|
||||
<span class='ident'>RustySecretsVersions</span>::<span class='ident'>INITIAL_RELEASE</span>,
|
||||
];
|
||||
<span class='ident'>values</span>
|
||||
}
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>enum_descriptor_static</span>(_: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>RustySecretsVersions</span><span class='op'>></span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='lifetime'>'static</span> ::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>EnumDescriptor</span> {
|
||||
<span class='kw'>static</span> <span class='kw-2'>mut</span> <span class='ident'>descriptor</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>Lazy</span><span class='op'><</span>::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>EnumDescriptor</span><span class='op'>></span> <span class='op'>=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>Lazy</span> {
|
||||
<span class='ident'>lock</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>ONCE_INIT</span>,
|
||||
<span class='ident'>ptr</span>: <span class='number'>0</span> <span class='kw'>as</span> <span class='op'>*</span><span class='kw'>const</span> ::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>EnumDescriptor</span>,
|
||||
};
|
||||
<span class='kw'>unsafe</span> {
|
||||
<span class='ident'>descriptor</span>.<span class='ident'>get</span>(<span class='op'>||</span> {
|
||||
::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>EnumDescriptor</span>::<span class='ident'>new</span>(<span class='string'>"RustySecretsVersions"</span>, <span class='ident'>file_descriptor_proto</span>())
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>impl</span> ::<span class='ident'>std</span>::<span class='ident'>marker</span>::<span class='ident'>Copy</span> <span class='kw'>for</span> <span class='ident'>RustySecretsVersions</span> {
|
||||
}
|
||||
|
||||
<span class='kw'>static</span> <span class='ident'>file_descriptor_proto_data</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> [<span class='ident'>u8</span>] <span class='op'>=</span> <span class='kw-2'>&</span>[
|
||||
<span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x53</span>, <span class='number'>0x65</span>, <span class='number'>0x63</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>, <span class='number'>0x74</span>, <span class='number'>0x2e</span>, <span class='number'>0x70</span>, <span class='number'>0x72</span>, <span class='number'>0x6f</span>, <span class='number'>0x74</span>, <span class='number'>0x6f</span>, <span class='number'>0x22</span>, <span class='number'>0x73</span>,
|
||||
<span class='number'>0x0a</span>, <span class='number'>0x0b</span>, <span class='number'>0x52</span>, <span class='number'>0x75</span>, <span class='number'>0x73</span>, <span class='number'>0x74</span>, <span class='number'>0x79</span>, <span class='number'>0x53</span>, <span class='number'>0x65</span>, <span class='number'>0x63</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>, <span class='number'>0x74</span>, <span class='number'>0x12</span>, <span class='number'>0x2f</span>, <span class='number'>0x0a</span>,
|
||||
<span class='number'>0x07</span>, <span class='number'>0x76</span>, <span class='number'>0x65</span>, <span class='number'>0x72</span>, <span class='number'>0x73</span>, <span class='number'>0x69</span>, <span class='number'>0x6f</span>, <span class='number'>0x6e</span>, <span class='number'>0x18</span>, <span class='number'>0x01</span>, <span class='number'>0x20</span>, <span class='number'>0x01</span>, <span class='number'>0x28</span>, <span class='number'>0x0e</span>, <span class='number'>0x32</span>, <span class='number'>0x15</span>,
|
||||
<span class='number'>0x2e</span>, <span class='number'>0x52</span>, <span class='number'>0x75</span>, <span class='number'>0x73</span>, <span class='number'>0x74</span>, <span class='number'>0x79</span>, <span class='number'>0x53</span>, <span class='number'>0x65</span>, <span class='number'>0x63</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>, <span class='number'>0x74</span>, <span class='number'>0x73</span>, <span class='number'>0x56</span>, <span class='number'>0x65</span>, <span class='number'>0x72</span>,
|
||||
<span class='number'>0x73</span>, <span class='number'>0x69</span>, <span class='number'>0x6f</span>, <span class='number'>0x6e</span>, <span class='number'>0x73</span>, <span class='number'>0x52</span>, <span class='number'>0x07</span>, <span class='number'>0x76</span>, <span class='number'>0x65</span>, <span class='number'>0x72</span>, <span class='number'>0x73</span>, <span class='number'>0x69</span>, <span class='number'>0x6f</span>, <span class='number'>0x6e</span>, <span class='number'>0x12</span>, <span class='number'>0x16</span>,
|
||||
<span class='number'>0x0a</span>, <span class='number'>0x06</span>, <span class='number'>0x73</span>, <span class='number'>0x65</span>, <span class='number'>0x63</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>, <span class='number'>0x74</span>, <span class='number'>0x18</span>, <span class='number'>0x02</span>, <span class='number'>0x20</span>, <span class='number'>0x01</span>, <span class='number'>0x28</span>, <span class='number'>0x0c</span>, <span class='number'>0x52</span>, <span class='number'>0x06</span>,
|
||||
<span class='number'>0x73</span>, <span class='number'>0x65</span>, <span class='number'>0x63</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>, <span class='number'>0x74</span>, <span class='number'>0x12</span>, <span class='number'>0x1b</span>, <span class='number'>0x0a</span>, <span class='number'>0x09</span>, <span class='number'>0x6d</span>, <span class='number'>0x69</span>, <span class='number'>0x6d</span>, <span class='number'>0x65</span>, <span class='number'>0x5f</span>, <span class='number'>0x74</span>,
|
||||
<span class='number'>0x79</span>, <span class='number'>0x70</span>, <span class='number'>0x65</span>, <span class='number'>0x18</span>, <span class='number'>0x03</span>, <span class='number'>0x20</span>, <span class='number'>0x01</span>, <span class='number'>0x28</span>, <span class='number'>0x09</span>, <span class='number'>0x52</span>, <span class='number'>0x08</span>, <span class='number'>0x6d</span>, <span class='number'>0x69</span>, <span class='number'>0x6d</span>, <span class='number'>0x65</span>, <span class='number'>0x54</span>,
|
||||
<span class='number'>0x79</span>, <span class='number'>0x70</span>, <span class='number'>0x65</span>, <span class='number'>0x2a</span>, <span class='number'>0x2b</span>, <span class='number'>0x0a</span>, <span class='number'>0x14</span>, <span class='number'>0x52</span>, <span class='number'>0x75</span>, <span class='number'>0x73</span>, <span class='number'>0x74</span>, <span class='number'>0x79</span>, <span class='number'>0x53</span>, <span class='number'>0x65</span>, <span class='number'>0x63</span>, <span class='number'>0x72</span>,
|
||||
<span class='number'>0x65</span>, <span class='number'>0x74</span>, <span class='number'>0x73</span>, <span class='number'>0x56</span>, <span class='number'>0x65</span>, <span class='number'>0x72</span>, <span class='number'>0x73</span>, <span class='number'>0x69</span>, <span class='number'>0x6f</span>, <span class='number'>0x6e</span>, <span class='number'>0x73</span>, <span class='number'>0x12</span>, <span class='number'>0x13</span>, <span class='number'>0x0a</span>, <span class='number'>0x0f</span>, <span class='number'>0x49</span>,
|
||||
<span class='number'>0x4e</span>, <span class='number'>0x49</span>, <span class='number'>0x54</span>, <span class='number'>0x49</span>, <span class='number'>0x41</span>, <span class='number'>0x4c</span>, <span class='number'>0x5f</span>, <span class='number'>0x52</span>, <span class='number'>0x45</span>, <span class='number'>0x4c</span>, <span class='number'>0x45</span>, <span class='number'>0x41</span>, <span class='number'>0x53</span>, <span class='number'>0x45</span>, <span class='number'>0x10</span>, <span class='number'>0x00</span>,
|
||||
<span class='number'>0x4a</span>, <span class='number'>0xbd</span>, <span class='number'>0x02</span>, <span class='number'>0x0a</span>, <span class='number'>0x06</span>, <span class='number'>0x12</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x00</span>, <span class='number'>0x0a</span>, <span class='number'>0x01</span>, <span class='number'>0x0a</span>, <span class='number'>0x08</span>, <span class='number'>0x0a</span>, <span class='number'>0x01</span>, <span class='number'>0x0c</span>,
|
||||
<span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x00</span>, <span class='number'>0x00</span>, <span class='number'>0x12</span>, <span class='number'>0x0a</span>, <span class='number'>0x0a</span>, <span class='number'>0x0a</span>, <span class='number'>0x02</span>, <span class='number'>0x05</span>, <span class='number'>0x00</span>, <span class='number'>0x12</span>, <span class='number'>0x04</span>, <span class='number'>0x02</span>, <span class='number'>0x00</span>, <span class='number'>0x04</span>,
|
||||
<span class='number'>0x01</span>, <span class='number'>0x0a</span>, <span class='number'>0x0a</span>, <span class='number'>0x0a</span>, <span class='number'>0x03</span>, <span class='number'>0x05</span>, <span class='number'>0x00</span>, <span class='number'>0x01</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x02</span>, <span class='number'>0x05</span>, <span class='number'>0x19</span>, <span class='number'>0x0a</span>, <span class='number'>0x0b</span>, <span class='number'>0x0a</span>,
|
||||
<span class='number'>0x04</span>, <span class='number'>0x05</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x00</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x03</span>, <span class='number'>0x08</span>, <span class='number'>0x1c</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x05</span>, <span class='number'>0x00</span>,
|
||||
<span class='number'>0x02</span>, <span class='number'>0x00</span>, <span class='number'>0x01</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x03</span>, <span class='number'>0x08</span>, <span class='number'>0x17</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x05</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x00</span>,
|
||||
<span class='number'>0x02</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x03</span>, <span class='number'>0x1a</span>, <span class='number'>0x1b</span>, <span class='number'>0x0a</span>, <span class='number'>0x0a</span>, <span class='number'>0x0a</span>, <span class='number'>0x02</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x12</span>, <span class='number'>0x04</span>, <span class='number'>0x06</span>, <span class='number'>0x00</span>,
|
||||
<span class='number'>0x0a</span>, <span class='number'>0x01</span>, <span class='number'>0x0a</span>, <span class='number'>0x0a</span>, <span class='number'>0x0a</span>, <span class='number'>0x03</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x01</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x06</span>, <span class='number'>0x08</span>, <span class='number'>0x13</span>, <span class='number'>0x0a</span>, <span class='number'>0x0b</span>,
|
||||
<span class='number'>0x0a</span>, <span class='number'>0x04</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x00</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x07</span>, <span class='number'>0x08</span>, <span class='number'>0x29</span>, <span class='number'>0x0a</span>, <span class='number'>0x0d</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>,
|
||||
<span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x00</span>, <span class='number'>0x04</span>, <span class='number'>0x12</span>, <span class='number'>0x04</span>, <span class='number'>0x07</span>, <span class='number'>0x08</span>, <span class='number'>0x06</span>, <span class='number'>0x15</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>,
|
||||
<span class='number'>0x02</span>, <span class='number'>0x00</span>, <span class='number'>0x06</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x07</span>, <span class='number'>0x08</span>, <span class='number'>0x1c</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x00</span>,
|
||||
<span class='number'>0x01</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x07</span>, <span class='number'>0x1d</span>, <span class='number'>0x24</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x00</span>, <span class='number'>0x03</span>, <span class='number'>0x12</span>,
|
||||
<span class='number'>0x03</span>, <span class='number'>0x07</span>, <span class='number'>0x27</span>, <span class='number'>0x28</span>, <span class='number'>0x0a</span>, <span class='number'>0x0b</span>, <span class='number'>0x0a</span>, <span class='number'>0x04</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x01</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x08</span>, <span class='number'>0x08</span>,
|
||||
<span class='number'>0x19</span>, <span class='number'>0x0a</span>, <span class='number'>0x0d</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x01</span>, <span class='number'>0x04</span>, <span class='number'>0x12</span>, <span class='number'>0x04</span>, <span class='number'>0x08</span>, <span class='number'>0x08</span>, <span class='number'>0x07</span>, <span class='number'>0x29</span>,
|
||||
<span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x01</span>, <span class='number'>0x05</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x08</span>, <span class='number'>0x08</span>, <span class='number'>0x0d</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>,
|
||||
<span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x01</span>, <span class='number'>0x01</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x08</span>, <span class='number'>0x0e</span>, <span class='number'>0x14</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>,
|
||||
<span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x01</span>, <span class='number'>0x03</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x08</span>, <span class='number'>0x17</span>, <span class='number'>0x18</span>, <span class='number'>0x0a</span>, <span class='number'>0x0b</span>, <span class='number'>0x0a</span>, <span class='number'>0x04</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>,
|
||||
<span class='number'>0x02</span>, <span class='number'>0x02</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x09</span>, <span class='number'>0x08</span>, <span class='number'>0x1d</span>, <span class='number'>0x0a</span>, <span class='number'>0x0d</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x02</span>, <span class='number'>0x04</span>,
|
||||
<span class='number'>0x12</span>, <span class='number'>0x04</span>, <span class='number'>0x09</span>, <span class='number'>0x08</span>, <span class='number'>0x08</span>, <span class='number'>0x19</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x02</span>, <span class='number'>0x05</span>, <span class='number'>0x12</span>,
|
||||
<span class='number'>0x03</span>, <span class='number'>0x09</span>, <span class='number'>0x08</span>, <span class='number'>0x0e</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x02</span>, <span class='number'>0x01</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x09</span>,
|
||||
<span class='number'>0x0f</span>, <span class='number'>0x18</span>, <span class='number'>0x0a</span>, <span class='number'>0x0c</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x04</span>, <span class='number'>0x00</span>, <span class='number'>0x02</span>, <span class='number'>0x02</span>, <span class='number'>0x03</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x09</span>, <span class='number'>0x1b</span>, <span class='number'>0x1c</span>,
|
||||
<span class='number'>0x62</span>, <span class='number'>0x06</span>, <span class='number'>0x70</span>, <span class='number'>0x72</span>, <span class='number'>0x6f</span>, <span class='number'>0x74</span>, <span class='number'>0x6f</span>, <span class='number'>0x33</span>,
|
||||
];
|
||||
|
||||
<span class='kw'>static</span> <span class='kw-2'>mut</span> <span class='ident'>file_descriptor_proto_lazy</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>Lazy</span><span class='op'><</span>::<span class='ident'>protobuf</span>::<span class='ident'>descriptor</span>::<span class='ident'>FileDescriptorProto</span><span class='op'>></span> <span class='op'>=</span> ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>Lazy</span> {
|
||||
<span class='ident'>lock</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>lazy</span>::<span class='ident'>ONCE_INIT</span>,
|
||||
<span class='ident'>ptr</span>: <span class='number'>0</span> <span class='kw'>as</span> <span class='op'>*</span><span class='kw'>const</span> ::<span class='ident'>protobuf</span>::<span class='ident'>descriptor</span>::<span class='ident'>FileDescriptorProto</span>,
|
||||
};
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>parse_descriptor_proto</span>() <span class='op'>-></span> ::<span class='ident'>protobuf</span>::<span class='ident'>descriptor</span>::<span class='ident'>FileDescriptorProto</span> {
|
||||
::<span class='ident'>protobuf</span>::<span class='ident'>parse_from_bytes</span>(<span class='ident'>file_descriptor_proto_data</span>).<span class='ident'>unwrap</span>()
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>file_descriptor_proto</span>() <span class='op'>-></span> <span class='kw-2'>&</span><span class='lifetime'>'static</span> ::<span class='ident'>protobuf</span>::<span class='ident'>descriptor</span>::<span class='ident'>FileDescriptorProto</span> {
|
||||
<span class='kw'>unsafe</span> {
|
||||
<span class='ident'>file_descriptor_proto_lazy</span>.<span class='ident'>get</span>(<span class='op'>||</span> {
|
||||
<span class='ident'>parse_descriptor_proto</span>()
|
||||
})
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
</section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
<section class="footer"></section>
|
||||
|
||||
<aside id="help" class="hidden">
|
||||
<div>
|
||||
<h1 class="hidden">Help</h1>
|
||||
|
||||
<div class="shortcuts">
|
||||
<h2>Keyboard Shortcuts</h2>
|
||||
|
||||
<dl>
|
||||
<dt>?</dt>
|
||||
<dd>Show this help dialog</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Focus the search field</dd>
|
||||
<dt>⇤</dt>
|
||||
<dd>Move up in search results</dd>
|
||||
<dt>⇥</dt>
|
||||
<dd>Move down in search results</dd>
|
||||
<dt>⏎</dt>
|
||||
<dd>Go to active search result</dd>
|
||||
<dt>+</dt>
|
||||
<dd>Collapse/expand all sections</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="infos">
|
||||
<h2>Search Tricks</h2>
|
||||
|
||||
<p>
|
||||
Prefix searches with a type followed by a colon (e.g.
|
||||
<code>fn:</code>) to restrict the search to a given type.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Accepted types are: <code>fn</code>, <code>mod</code>,
|
||||
<code>struct</code>, <code>enum</code>,
|
||||
<code>trait</code>, <code>type</code>, <code>macro</code>,
|
||||
and <code>const</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Search functions by type signature (e.g.
|
||||
<code>vec -> usize</code> or <code>* -> vec</code>)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -790,11 +790,9 @@
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -128,26 +128,27 @@
|
||||
<span id="84">84</span>
|
||||
<span id="85">85</span>
|
||||
<span id="86">86</span>
|
||||
<span id="87">87</span>
|
||||
</pre><pre class='rust '>
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::{<span class='ident'>other_io_err</span>, <span class='ident'>pie2io</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::{<span class='ident'>RustyError</span>, <span class='ident'>RustyErrorTypes</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::<span class='ident'>pie2error</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>digest</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>merkle_sigs</span>::<span class='ident'>Proof</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>merkle_sigs</span>::<span class='ident'>PublicKey</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>merkle_sigs</span>::{<span class='ident'>MerklePublicKey</span>, <span class='ident'>Proof</span>, <span class='ident'>PublicKey</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>protobuf</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>protobuf</span>::{<span class='ident'>Message</span>, <span class='ident'>RepeatedField</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>serialize</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>serialize</span>::<span class='ident'>base64</span>::{<span class='self'>self</span>, <span class='ident'>FromBase64</span>, <span class='ident'>ToBase64</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>share_data</span>::<span class='ident'>ShareData</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>error</span>::<span class='ident'>Error</span>;
|
||||
|
||||
<span class='kw'>type</span> <span class='ident'>ParsedShare</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>, <span class='ident'>u8</span>, <span class='ident'>u8</span>, <span class='prelude-ty'>Option</span><span class='op'><</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span>, <span class='ident'>Proof</span><span class='op'><</span><span class='ident'>MerklePublicKey</span><span class='op'>></span>)<span class='op'>></span>), <span class='ident'>RustyError</span><span class='op'>></span>;
|
||||
|
||||
<span class='kw'>fn</span> <span class='ident'>base64_config</span>() <span class='op'>-></span> <span class='ident'>serialize</span>::<span class='ident'>base64</span>::<span class='ident'>Config</span> {
|
||||
<span class='ident'>base64</span>::<span class='ident'>Config</span> { <span class='ident'>pad</span>: <span class='bool-val'>false</span>, ..<span class='ident'>base64</span>::<span class='ident'>STANDARD</span> }
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>share_string_from</span>(<span class='ident'>share</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>,
|
||||
<span class='ident'>threshold</span>: <span class='ident'>u8</span>,
|
||||
<span class='ident'>share_num</span>: <span class='ident'>u8</span>,
|
||||
<span class='ident'>signature_pair</span>: <span class='prelude-ty'>Option</span><span class='op'><</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span>, <span class='ident'>Proof</span><span class='op'><</span><span class='ident'>PublicKey</span><span class='op'>></span>)<span class='op'>></span>)
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>share_string_from</span>(<span class='ident'>share</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>, <span class='ident'>threshold</span>: <span class='ident'>u8</span>, <span class='ident'>share_num</span>: <span class='ident'>u8</span>,
|
||||
<span class='ident'>signature_pair</span>: <span class='prelude-ty'>Option</span><span class='op'><</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span>, <span class='ident'>Proof</span><span class='op'><</span><span class='ident'>MerklePublicKey</span><span class='op'>></span>)<span class='op'>></span>)
|
||||
<span class='op'>-></span> <span class='ident'>String</span> {
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>share_protobuf</span> <span class='op'>=</span> <span class='ident'>ShareData</span>::<span class='ident'>new</span>();
|
||||
<span class='ident'>share_protobuf</span>.<span class='ident'>set_shamir_data</span>(<span class='ident'>share</span>);
|
||||
@ -164,44 +165,45 @@
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>share_from_string</span>
|
||||
(<span class='ident'>s</span>: <span class='kw-2'>&</span><span class='ident'>str</span>,
|
||||
<span class='ident'>index</span>: <span class='ident'>u8</span>,
|
||||
<span class='ident'>is_signed</span>: <span class='ident'>bool</span>)
|
||||
<span class='op'>-></span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'><</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>, <span class='ident'>u8</span>, <span class='ident'>u8</span>, <span class='prelude-ty'>Option</span><span class='op'><</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span>, <span class='ident'>Proof</span><span class='op'><</span><span class='ident'>PublicKey</span><span class='op'>></span>)<span class='op'>></span>)<span class='op'>></span> {
|
||||
<span class='op'>-></span> <span class='ident'>ParsedShare</span> {
|
||||
<span class='kw'>let</span> <span class='ident'>parts</span>: <span class='ident'>Vec</span><span class='op'><</span>_<span class='op'>></span> <span class='op'>=</span> <span class='ident'>s</span>.<span class='ident'>trim</span>().<span class='ident'>split</span>(<span class='string'>'-'</span>).<span class='ident'>collect</span>();
|
||||
|
||||
<span class='kw'>if</span> <span class='ident'>parts</span>.<span class='ident'>len</span>() <span class='op'>!=</span> <span class='number'>3</span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Share parse error: Expected 3 parts separated by a minus sign"</span>,
|
||||
<span class='prelude-val'>None</span>));
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>ShareParsingError</span>(<span class='ident'>index</span>, <span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>"Expected 3 parts separated by a minus sign. Found {}."</span>, <span class='ident'>s</span>))));
|
||||
}
|
||||
<span class='kw'>let</span> (<span class='ident'>k</span>, <span class='ident'>n</span>, <span class='ident'>p3</span>) <span class='op'>=</span> {
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>iter</span> <span class='op'>=</span> <span class='ident'>parts</span>.<span class='ident'>into_iter</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>k</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>iter</span>.<span class='ident'>next</span>().<span class='ident'>unwrap</span>().<span class='ident'>parse</span>::<span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>().<span class='ident'>map_err</span>(<span class='ident'>pie2io</span>));
|
||||
<span class='kw'>let</span> <span class='ident'>n</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>iter</span>.<span class='ident'>next</span>().<span class='ident'>unwrap</span>().<span class='ident'>parse</span>::<span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>().<span class='ident'>map_err</span>(<span class='ident'>pie2io</span>));
|
||||
<span class='kw'>let</span> <span class='ident'>k</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>iter</span>.<span class='ident'>next</span>().<span class='ident'>unwrap</span>().<span class='ident'>parse</span>::<span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>().<span class='ident'>map_err</span>(<span class='ident'>pie2error</span>));
|
||||
<span class='kw'>let</span> <span class='ident'>n</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>iter</span>.<span class='ident'>next</span>().<span class='ident'>unwrap</span>().<span class='ident'>parse</span>::<span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>().<span class='ident'>map_err</span>(<span class='ident'>pie2error</span>));
|
||||
<span class='kw'>let</span> <span class='ident'>p3</span> <span class='op'>=</span> <span class='ident'>iter</span>.<span class='ident'>next</span>().<span class='ident'>unwrap</span>();
|
||||
(<span class='ident'>k</span>, <span class='ident'>n</span>, <span class='ident'>p3</span>)
|
||||
};
|
||||
<span class='kw'>if</span> <span class='ident'>k</span> <span class='op'><</span> <span class='number'>1</span> <span class='op'>||</span> <span class='ident'>n</span> <span class='op'><</span> <span class='number'>1</span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Share parse error: Illegal K,N parameters"</span>, <span class='prelude-val'>None</span>));
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>ShareParsingError</span>(<span class='ident'>index</span>, <span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>"Found illegal parameters K: {} N: {}."</span>, <span class='ident'>k</span>, <span class='ident'>n</span>))));
|
||||
}
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>raw_data</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>p3</span>.<span class='ident'>from_base64</span>().<span class='ident'>map_err</span>(<span class='op'>|</span>_<span class='op'>|</span> {
|
||||
<span class='ident'>other_io_err</span>(<span class='string'>"Share parse error: Base64 decoding of data block failed"</span>,
|
||||
<span class='prelude-val'>None</span>)
|
||||
<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>ShareParsingError</span>(<span class='ident'>index</span>, <span class='string'>"Base64 decoding of data block failed"</span>.<span class='ident'>to_owned</span>()))
|
||||
}));
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>protobuf_data</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>protobuf</span>::<span class='ident'>parse_from_bytes</span>::<span class='op'><</span><span class='ident'>ShareData</span><span class='op'>></span>(<span class='ident'>raw_data</span>.<span class='ident'>as_slice</span>())
|
||||
.<span class='ident'>map_err</span>(<span class='op'>|</span>_<span class='op'>|</span> <span class='ident'>other_io_err</span>(<span class='string'>"Share parse error: Protobuffer could not be decoded."</span>, <span class='prelude-val'>None</span>)));
|
||||
|
||||
.<span class='ident'>map_err</span>(<span class='op'>|</span><span class='ident'>e</span><span class='op'>|</span> <span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>ShareParsingError</span>(<span class='ident'>index</span>, <span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>"Protobuf decoding of data block failed with error: {} ."</span>, <span class='ident'>e</span>.<span class='ident'>description</span>())))));
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>share</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>from</span>(<span class='ident'>protobuf_data</span>.<span class='ident'>get_shamir_data</span>());
|
||||
|
||||
<span class='kw'>if</span> <span class='ident'>is_signed</span> {
|
||||
<span class='kw'>let</span> <span class='ident'>p</span> <span class='op'>=</span> <span class='ident'>Proof</span>::<span class='ident'>parse_from_bytes</span>(<span class='ident'>protobuf_data</span>.<span class='ident'>get_proof</span>(), <span class='ident'>digest</span>).<span class='ident'>unwrap</span>().<span class='ident'>unwrap</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>p_result</span> <span class='op'>=</span> <span class='ident'>Proof</span>::<span class='ident'>parse_from_bytes</span>(<span class='ident'>protobuf_data</span>.<span class='ident'>get_proof</span>(), <span class='ident'>digest</span>);
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>p_opt</span> <span class='op'>=</span> <span class='ident'>p_result</span>.<span class='ident'>unwrap</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>p</span> <span class='op'>=</span> <span class='ident'>p_opt</span>.<span class='ident'>unwrap</span>();
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>proof</span> <span class='op'>=</span> <span class='ident'>Proof</span> {
|
||||
<span class='ident'>algorithm</span>: <span class='ident'>digest</span>,
|
||||
<span class='ident'>lemma</span>: <span class='ident'>p</span>.<span class='ident'>lemma</span>,
|
||||
<span class='ident'>root_hash</span>: <span class='ident'>p</span>.<span class='ident'>root_hash</span>,
|
||||
<span class='ident'>value</span>: <span class='ident'>PublicKey</span>::<span class='ident'>from_vec</span>(<span class='ident'>p</span>.<span class='ident'>value</span>, <span class='ident'>digest</span>).<span class='ident'>unwrap</span>(),
|
||||
<span class='ident'>value</span>: <span class='ident'>MerklePublicKey</span>::<span class='ident'>new</span>(<span class='ident'>PublicKey</span>::<span class='ident'>from_vec</span>(<span class='ident'>p</span>.<span class='ident'>value</span>, <span class='ident'>digest</span>).<span class='ident'>unwrap</span>()),
|
||||
};
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>signature</span> <span class='op'>=</span> <span class='ident'>protobuf_data</span>.<span class='ident'>get_signature</span>();
|
||||
@ -272,11 +274,9 @@
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -168,8 +168,12 @@
|
||||
<span id="124">124</span>
|
||||
<span id="125">125</span>
|
||||
<span id="126">126</span>
|
||||
<span id="127">127</span>
|
||||
<span id="128">128</span>
|
||||
</pre><pre class='rust '>
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::<span class='ident'>other_io_err</span>;
|
||||
<span class='doccomment'>//! SSS provides Shamir's secret sharing with raw data.</span>
|
||||
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::{<span class='ident'>RustyError</span>, <span class='ident'>other_io_err</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>digest</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>interpolation</span>::{<span class='ident'>encode</span>, <span class='ident'>lagrange_interpolate</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>merkle_sigs</span>::<span class='ident'>sign_data_vec</span>;
|
||||
@ -184,12 +188,12 @@
|
||||
<span class='ident'>repeat</span>(<span class='ident'>x</span>).<span class='ident'>take</span>(<span class='ident'>n</span>).<span class='ident'>collect</span>()
|
||||
}
|
||||
|
||||
<span class='doccomment'>/// Performs threshold k-out-of-n Shamir secret sharing.</span>
|
||||
<span class='doccomment'>/// Performs threshold k-out-of-n Shamir's secret sharing.</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// # Examples</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// ```</span>
|
||||
<span class='doccomment'>/// use rusty_secrets::generate_shares;</span>
|
||||
<span class='doccomment'>/// use rusty_secrets::sss::generate_shares;</span>
|
||||
<span class='doccomment'>/// let secret = "These programs were never about terrorism: they’re about economic spying,</span>
|
||||
<span class='doccomment'>/// social control, and diplomatic manipulation. They’re about power.".to_string();</span>
|
||||
<span class='doccomment'>///</span>
|
||||
@ -202,10 +206,10 @@
|
||||
<span class='doccomment'>/// ```</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>generate_shares</span>(<span class='ident'>k</span>: <span class='ident'>u8</span>, <span class='ident'>n</span>: <span class='ident'>u8</span>, <span class='ident'>secret</span>: <span class='kw-2'>&</span>[<span class='ident'>u8</span>], <span class='ident'>sign_shares</span>: <span class='ident'>bool</span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>String</span><span class='op'>>></span> {
|
||||
<span class='kw'>if</span> <span class='ident'>k</span> <span class='op'>></span> <span class='ident'>n</span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Threshold K can not be larger than N"</span>, <span class='prelude-val'>None</span>));
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Threshold K can not be larger than N"</span>, <span class='prelude-val'>None</span>, <span class='prelude-val'>None</span>, <span class='prelude-val'>None</span>));
|
||||
}
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>shares</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>secret_share</span>(<span class='kw-2'>&</span><span class='op'>*</span><span class='ident'>secret</span>, <span class='ident'>k</span>, <span class='ident'>n</span>));
|
||||
<span class='kw'>let</span> <span class='ident'>shares</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>secret_share</span>(<span class='ident'>secret</span>, <span class='ident'>k</span>, <span class='ident'>n</span>));
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>signatures</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='ident'>sign_shares</span> {
|
||||
<span class='kw'>let</span> <span class='ident'>shares_to_sign</span> <span class='op'>=</span> <span class='ident'>shares</span>.<span class='ident'>iter</span>()
|
||||
@ -237,7 +241,7 @@
|
||||
<span class='prelude-val'>Ok</span>(<span class='ident'>result</span>)
|
||||
}
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>secret_share</span>(<span class='ident'>src</span>: <span class='kw-2'>&</span>[<span class='ident'>u8</span>], <span class='ident'>k</span>: <span class='ident'>u8</span>, <span class='ident'>n</span>: <span class='ident'>u8</span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span><span class='op'>></span> {
|
||||
<span class='kw'>fn</span> <span class='ident'>secret_share</span>(<span class='ident'>src</span>: <span class='kw-2'>&</span>[<span class='ident'>u8</span>], <span class='ident'>k</span>: <span class='ident'>u8</span>, <span class='ident'>n</span>: <span class='ident'>u8</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span>, <span class='ident'>RustyError</span><span class='op'>></span> {
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>result</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>with_capacity</span>(<span class='ident'>n</span> <span class='kw'>as</span> <span class='ident'>usize</span>);
|
||||
<span class='kw'>for</span> _ <span class='kw'>in</span> <span class='number'>0</span>..(<span class='ident'>n</span> <span class='kw'>as</span> <span class='ident'>usize</span>) {
|
||||
<span class='ident'>result</span>.<span class='ident'>push</span>(<span class='ident'>new_vec</span>(<span class='ident'>src</span>.<span class='ident'>len</span>(), <span class='number'>0u8</span>));
|
||||
@ -258,14 +262,14 @@
|
||||
}
|
||||
|
||||
|
||||
<span class='doccomment'>/// Recovers the secret from a k-out-of-n Shamir secret sharing.</span>
|
||||
<span class='doccomment'>/// Recovers the secret from a k-out-of-n Shamir's secret sharing.</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// At least `k` distinct shares need to be provided to recover the share.</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// # Examples</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// ```</span>
|
||||
<span class='doccomment'>/// use rusty_secrets::recover_secret;</span>
|
||||
<span class='doccomment'>/// use rusty_secrets::sss::recover_secret;</span>
|
||||
<span class='doccomment'>/// let share1 = "2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP".to_string();</span>
|
||||
<span class='doccomment'>/// let share2 = "2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF".to_string();</span>
|
||||
<span class='doccomment'>/// let shares = vec![share1, share2];</span>
|
||||
@ -279,7 +283,7 @@
|
||||
<span class='doccomment'>/// }</span>
|
||||
<span class='doccomment'>/// }</span>
|
||||
<span class='doccomment'>/// ```</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>recover_secret</span>(<span class='ident'>shares</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>, <span class='ident'>verify_signatures</span>: <span class='ident'>bool</span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span> {
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>recover_secret</span>(<span class='ident'>shares</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>, <span class='ident'>verify_signatures</span>: <span class='ident'>bool</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>, <span class='ident'>RustyError</span><span class='op'>></span> {
|
||||
<span class='kw'>let</span> (<span class='ident'>k</span>, <span class='ident'>shares</span>) <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>process_and_validate_shares</span>(<span class='ident'>shares</span>, <span class='ident'>verify_signatures</span>));
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>slen</span> <span class='op'>=</span> <span class='ident'>shares</span>[<span class='number'>0</span>].<span class='number'>1</span>.<span class='ident'>len</span>();
|
||||
@ -352,11 +356,9 @@
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -51,135 +51,215 @@
|
||||
<span id="7"> 7</span>
|
||||
<span id="8"> 8</span>
|
||||
<span id="9"> 9</span>
|
||||
<span id="10">10</span>
|
||||
<span id="11">11</span>
|
||||
<span id="12">12</span>
|
||||
<span id="13">13</span>
|
||||
<span id="14">14</span>
|
||||
<span id="15">15</span>
|
||||
<span id="16">16</span>
|
||||
<span id="17">17</span>
|
||||
<span id="18">18</span>
|
||||
<span id="19">19</span>
|
||||
<span id="20">20</span>
|
||||
<span id="21">21</span>
|
||||
<span id="22">22</span>
|
||||
<span id="23">23</span>
|
||||
<span id="24">24</span>
|
||||
<span id="25">25</span>
|
||||
<span id="26">26</span>
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
<span id="37">37</span>
|
||||
<span id="38">38</span>
|
||||
<span id="39">39</span>
|
||||
<span id="40">40</span>
|
||||
<span id="41">41</span>
|
||||
<span id="42">42</span>
|
||||
<span id="43">43</span>
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
<span id="46">46</span>
|
||||
<span id="47">47</span>
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
<span id="57">57</span>
|
||||
<span id="58">58</span>
|
||||
<span id="59">59</span>
|
||||
<span id="60">60</span>
|
||||
<span id="61">61</span>
|
||||
<span id="62">62</span>
|
||||
<span id="63">63</span>
|
||||
<span id="64">64</span>
|
||||
<span id="65">65</span>
|
||||
<span id="66">66</span>
|
||||
<span id="67">67</span>
|
||||
<span id="68">68</span>
|
||||
<span id="69">69</span>
|
||||
<span id="10"> 10</span>
|
||||
<span id="11"> 11</span>
|
||||
<span id="12"> 12</span>
|
||||
<span id="13"> 13</span>
|
||||
<span id="14"> 14</span>
|
||||
<span id="15"> 15</span>
|
||||
<span id="16"> 16</span>
|
||||
<span id="17"> 17</span>
|
||||
<span id="18"> 18</span>
|
||||
<span id="19"> 19</span>
|
||||
<span id="20"> 20</span>
|
||||
<span id="21"> 21</span>
|
||||
<span id="22"> 22</span>
|
||||
<span id="23"> 23</span>
|
||||
<span id="24"> 24</span>
|
||||
<span id="25"> 25</span>
|
||||
<span id="26"> 26</span>
|
||||
<span id="27"> 27</span>
|
||||
<span id="28"> 28</span>
|
||||
<span id="29"> 29</span>
|
||||
<span id="30"> 30</span>
|
||||
<span id="31"> 31</span>
|
||||
<span id="32"> 32</span>
|
||||
<span id="33"> 33</span>
|
||||
<span id="34"> 34</span>
|
||||
<span id="35"> 35</span>
|
||||
<span id="36"> 36</span>
|
||||
<span id="37"> 37</span>
|
||||
<span id="38"> 38</span>
|
||||
<span id="39"> 39</span>
|
||||
<span id="40"> 40</span>
|
||||
<span id="41"> 41</span>
|
||||
<span id="42"> 42</span>
|
||||
<span id="43"> 43</span>
|
||||
<span id="44"> 44</span>
|
||||
<span id="45"> 45</span>
|
||||
<span id="46"> 46</span>
|
||||
<span id="47"> 47</span>
|
||||
<span id="48"> 48</span>
|
||||
<span id="49"> 49</span>
|
||||
<span id="50"> 50</span>
|
||||
<span id="51"> 51</span>
|
||||
<span id="52"> 52</span>
|
||||
<span id="53"> 53</span>
|
||||
<span id="54"> 54</span>
|
||||
<span id="55"> 55</span>
|
||||
<span id="56"> 56</span>
|
||||
<span id="57"> 57</span>
|
||||
<span id="58"> 58</span>
|
||||
<span id="59"> 59</span>
|
||||
<span id="60"> 60</span>
|
||||
<span id="61"> 61</span>
|
||||
<span id="62"> 62</span>
|
||||
<span id="63"> 63</span>
|
||||
<span id="64"> 64</span>
|
||||
<span id="65"> 65</span>
|
||||
<span id="66"> 66</span>
|
||||
<span id="67"> 67</span>
|
||||
<span id="68"> 68</span>
|
||||
<span id="69"> 69</span>
|
||||
<span id="70"> 70</span>
|
||||
<span id="71"> 71</span>
|
||||
<span id="72"> 72</span>
|
||||
<span id="73"> 73</span>
|
||||
<span id="74"> 74</span>
|
||||
<span id="75"> 75</span>
|
||||
<span id="76"> 76</span>
|
||||
<span id="77"> 77</span>
|
||||
<span id="78"> 78</span>
|
||||
<span id="79"> 79</span>
|
||||
<span id="80"> 80</span>
|
||||
<span id="81"> 81</span>
|
||||
<span id="82"> 82</span>
|
||||
<span id="83"> 83</span>
|
||||
<span id="84"> 84</span>
|
||||
<span id="85"> 85</span>
|
||||
<span id="86"> 86</span>
|
||||
<span id="87"> 87</span>
|
||||
<span id="88"> 88</span>
|
||||
<span id="89"> 89</span>
|
||||
<span id="90"> 90</span>
|
||||
<span id="91"> 91</span>
|
||||
<span id="92"> 92</span>
|
||||
<span id="93"> 93</span>
|
||||
<span id="94"> 94</span>
|
||||
<span id="95"> 95</span>
|
||||
<span id="96"> 96</span>
|
||||
<span id="97"> 97</span>
|
||||
<span id="98"> 98</span>
|
||||
<span id="99"> 99</span>
|
||||
<span id="100">100</span>
|
||||
<span id="101">101</span>
|
||||
<span id="102">102</span>
|
||||
<span id="103">103</span>
|
||||
<span id="104">104</span>
|
||||
<span id="105">105</span>
|
||||
<span id="106">106</span>
|
||||
<span id="107">107</span>
|
||||
<span id="108">108</span>
|
||||
<span id="109">109</span>
|
||||
</pre><pre class='rust '>
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::<span class='ident'>other_io_err</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::{<span class='ident'>RustyError</span>, <span class='ident'>RustyErrorTypes</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>merkle_sigs</span>::<span class='ident'>verify_data_vec_signature</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>share_format</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>share_format</span>::<span class='ident'>format_share_for_signing</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>collections</span>::<span class='ident'>HashMap</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>error</span>::<span class='ident'>Error</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>;
|
||||
|
||||
<span class='kw'>type</span> <span class='ident'>ProcessedShares</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span>(<span class='ident'>u8</span>, <span class='ident'>Vec</span><span class='op'><</span>(<span class='ident'>u8</span>, <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>)<span class='op'>></span>), <span class='ident'>RustyError</span><span class='op'>></span>;
|
||||
|
||||
<span class='comment'>// The order of validation that we think makes the most sense is the following:</span>
|
||||
<span class='comment'>// 1) Validate shares individually</span>
|
||||
<span class='comment'>// 2) Validate duplicate shares share num && data</span>
|
||||
<span class='comment'>// 2) Validate group consistency</span>
|
||||
<span class='comment'>// 3) Validate other properties, in no specific order</span>
|
||||
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>process_and_validate_shares</span>(<span class='ident'>shares_strings</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>,
|
||||
<span class='ident'>verify_signatures</span>: <span class='ident'>bool</span>)
|
||||
<span class='op'>-></span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'><</span>(<span class='ident'>u8</span>, <span class='ident'>Vec</span><span class='op'><</span>(<span class='ident'>u8</span>, <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>)<span class='op'>></span>)<span class='op'>></span> {
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>opt_k</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span> <span class='op'>=</span> <span class='prelude-val'>None</span>;
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>opt_root_hash</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span> <span class='op'>=</span> <span class='prelude-val'>None</span>;
|
||||
|
||||
<span class='op'>-></span> <span class='ident'>ProcessedShares</span> {
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>shares</span>: <span class='ident'>Vec</span><span class='op'><</span>(<span class='ident'>u8</span>, <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>)<span class='op'>></span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>new</span>();
|
||||
|
||||
<span class='kw'>for</span> (<span class='ident'>counter</span>, <span class='ident'>line</span>) <span class='kw'>in</span> <span class='ident'>shares_strings</span>.<span class='ident'>iter</span>().<span class='ident'>enumerate</span>() {
|
||||
<span class='kw'>let</span> (<span class='ident'>share_data</span>, <span class='ident'>k</span>, <span class='ident'>n</span>, <span class='ident'>sig_pair</span>) <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>share_format</span>::<span class='ident'>share_from_string</span>(<span class='ident'>line</span>,
|
||||
<span class='ident'>verify_signatures</span>));
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>k_compatibility_sets</span> <span class='op'>=</span> <span class='ident'>HashMap</span>::<span class='ident'>new</span>();
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>rh_compatibility_sets</span> <span class='op'>=</span> <span class='ident'>HashMap</span>::<span class='ident'>new</span>();
|
||||
|
||||
<span class='kw'>for</span> (<span class='ident'>counter</span>, <span class='ident'>line</span>) <span class='kw'>in</span> <span class='ident'>shares_strings</span>.<span class='ident'>iter</span>().<span class='ident'>enumerate</span>() {
|
||||
<span class='kw'>if</span> <span class='ident'>k_compatibility_sets</span>.<span class='ident'>len</span>() <span class='op'>==</span> <span class='number'>1</span> {
|
||||
<span class='kw'>let</span> <span class='ident'>k</span> <span class='op'>=</span> <span class='ident'>k_compatibility_sets</span>.<span class='ident'>keys</span>().<span class='ident'>last</span>().<span class='ident'>unwrap</span>();
|
||||
<span class='kw'>if</span> <span class='op'>*</span><span class='ident'>k</span> <span class='op'>==</span> <span class='ident'>shares</span>.<span class='ident'>len</span>() <span class='kw'>as</span> <span class='ident'>u8</span> {
|
||||
<span class='kw'>break</span>;
|
||||
}
|
||||
}
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>share_index</span> <span class='op'>=</span> <span class='ident'>counter</span> <span class='kw'>as</span> <span class='ident'>u8</span>;
|
||||
<span class='kw'>let</span> (<span class='ident'>share_data</span>, <span class='ident'>k</span>, <span class='ident'>n</span>, <span class='ident'>sig_pair</span>) <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>share_format</span>::<span class='ident'>share_from_string</span>(<span class='ident'>line</span>,
|
||||
<span class='ident'>counter</span> <span class='kw'>as</span> <span class='ident'>u8</span>,
|
||||
<span class='ident'>verify_signatures</span>));
|
||||
<span class='kw'>if</span> <span class='ident'>verify_signatures</span> {
|
||||
<span class='kw'>if</span> <span class='ident'>sig_pair</span>.<span class='ident'>is_none</span>() {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Signature is missing while shares are required to be \
|
||||
signed."</span>,
|
||||
<span class='prelude-val'>None</span>));
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>MissingSignature</span>(<span class='ident'>share_index</span>)));
|
||||
}
|
||||
|
||||
<span class='kw'>let</span> (<span class='ident'>signature</span>, <span class='ident'>p</span>) <span class='op'>=</span> <span class='ident'>sig_pair</span>.<span class='ident'>unwrap</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>root_hash</span> <span class='op'>=</span> <span class='ident'>p</span>.<span class='ident'>root_hash</span>.<span class='ident'>clone</span>();
|
||||
|
||||
<span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>rh</span>) <span class='op'>=</span> <span class='ident'>opt_root_hash</span>.<span class='ident'>clone</span>() {
|
||||
<span class='kw'>if</span> <span class='ident'>root_hash</span> <span class='op'>!=</span> <span class='ident'>rh</span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Root hash not matching"</span>, <span class='prelude-val'>None</span>));
|
||||
}
|
||||
<span class='ident'>p</span>.<span class='ident'>validate</span>(<span class='kw-2'>&</span><span class='ident'>rh</span>);
|
||||
} <span class='kw'>else</span> {
|
||||
<span class='ident'>opt_root_hash</span> <span class='op'>=</span> <span class='prelude-val'>Some</span>(<span class='ident'>root_hash</span>.<span class='ident'>clone</span>());
|
||||
}
|
||||
|
||||
<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>verify_data_vec_signature</span>(<span class='ident'>format_share_for_signing</span>(<span class='ident'>k</span>,
|
||||
<span class='ident'>n</span>,
|
||||
<span class='kw-2'>&</span><span class='ident'>share_data</span>.<span class='ident'>as_slice</span>()),
|
||||
<span class='kw-2'>&</span>(<span class='ident'>signature</span>.<span class='ident'>to_vec</span>(), <span class='ident'>p</span>),
|
||||
<span class='kw-2'>&</span><span class='ident'>root_hash</span>)
|
||||
.<span class='ident'>map_err</span>(<span class='op'>|</span><span class='ident'>e</span><span class='op'>|</span> <span class='ident'>other_io_err</span>(<span class='string'>"Invalid signature"</span>, <span class='prelude-val'>Some</span>(<span class='ident'>String</span>::<span class='ident'>from</span>(<span class='ident'>e</span>.<span class='ident'>description</span>())))));
|
||||
.<span class='ident'>map_err</span>(<span class='op'>|</span><span class='ident'>e</span><span class='op'>|</span> <span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>InvalidSignature</span>(<span class='ident'>share_index</span>, <span class='ident'>String</span>::<span class='ident'>from</span>(<span class='ident'>e</span>.<span class='ident'>description</span>())))));
|
||||
<span class='ident'>rh_compatibility_sets</span>.<span class='ident'>entry</span>(<span class='ident'>root_hash</span>.<span class='ident'>clone</span>()).<span class='ident'>or_insert_with</span>(<span class='ident'>Vec</span>::<span class='ident'>new</span>);
|
||||
<span class='kw'>let</span> <span class='ident'>vec</span> <span class='op'>=</span> <span class='ident'>rh_compatibility_sets</span>.<span class='ident'>get_mut</span>(<span class='kw-2'>&</span><span class='ident'>root_hash</span>).<span class='ident'>unwrap</span>();
|
||||
<span class='ident'>vec</span>.<span class='ident'>push</span>(<span class='ident'>share_index</span>);
|
||||
}
|
||||
|
||||
<span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>k_global</span>) <span class='op'>=</span> <span class='ident'>opt_k</span> {
|
||||
<span class='kw'>if</span> <span class='ident'>k</span> <span class='op'>!=</span> <span class='ident'>k_global</span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Incompatible shares"</span>, <span class='prelude-val'>None</span>));
|
||||
}
|
||||
} <span class='kw'>else</span> {
|
||||
<span class='ident'>opt_k</span> <span class='op'>=</span> <span class='prelude-val'>Some</span>(<span class='ident'>k</span>);
|
||||
}
|
||||
<span class='ident'>k_compatibility_sets</span>.<span class='ident'>entry</span>(<span class='ident'>k</span>).<span class='ident'>or_insert_with</span>(<span class='ident'>Vec</span>::<span class='ident'>new</span>);
|
||||
<span class='kw'>let</span> <span class='ident'>vec</span> <span class='op'>=</span> <span class='ident'>k_compatibility_sets</span>.<span class='ident'>get_mut</span>(<span class='kw-2'>&</span><span class='ident'>k</span>).<span class='ident'>unwrap</span>();
|
||||
<span class='ident'>vec</span>.<span class='ident'>push</span>(<span class='ident'>share_index</span>);
|
||||
|
||||
<span class='kw'>if</span> <span class='ident'>shares</span>.<span class='ident'>iter</span>().<span class='ident'>any</span>(<span class='op'>|</span><span class='ident'>s</span><span class='op'>|</span> <span class='ident'>s</span>.<span class='number'>0</span> <span class='op'>==</span> <span class='ident'>n</span>) {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Duplicate Share Number"</span>, <span class='prelude-val'>None</span>));
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>DuplicateShareNum</span>(<span class='ident'>share_index</span>)));
|
||||
};
|
||||
|
||||
<span class='kw'>if</span> <span class='ident'>shares</span>.<span class='ident'>iter</span>().<span class='ident'>any</span>(<span class='op'>|</span><span class='ident'>s</span><span class='op'>|</span> <span class='ident'>s</span>.<span class='number'>1</span> <span class='op'>==</span> <span class='ident'>share_data</span>) {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Duplicate Share Data"</span>, <span class='prelude-val'>None</span>));
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>DuplicateShareData</span>(<span class='ident'>share_index</span>)));
|
||||
};
|
||||
|
||||
<span class='ident'>shares</span>.<span class='ident'>push</span>((<span class='ident'>n</span>, <span class='ident'>share_data</span>));
|
||||
<span class='kw'>if</span> <span class='ident'>counter</span> <span class='op'>+</span> <span class='number'>1</span> <span class='op'>==</span> <span class='ident'>k</span> <span class='kw'>as</span> <span class='ident'>usize</span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Ok</span>((<span class='ident'>k</span>, <span class='ident'>shares</span>));
|
||||
}
|
||||
|
||||
<span class='comment'>// Validate k</span>
|
||||
|
||||
<span class='kw'>let</span> <span class='ident'>k_sets</span> <span class='op'>=</span> <span class='ident'>k_compatibility_sets</span>.<span class='ident'>keys</span>().<span class='ident'>count</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>rh_sets</span> <span class='op'>=</span> <span class='ident'>rh_compatibility_sets</span>.<span class='ident'>keys</span>().<span class='ident'>count</span>();
|
||||
|
||||
<span class='kw'>if</span> <span class='ident'>verify_signatures</span> {
|
||||
<span class='kw'>match</span> <span class='ident'>rh_sets</span> {
|
||||
<span class='number'>0</span> <span class='op'>=></span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>EmptyShares</span>))
|
||||
}
|
||||
<span class='number'>1</span> <span class='op'>=></span> { } <span class='comment'>// All shares have the same roothash.</span>
|
||||
_ <span class='op'>=></span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>IncompatibleSets</span>(<span class='ident'>rh_compatibility_sets</span>.<span class='ident'>values</span>()
|
||||
.<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>x</span><span class='op'>|</span> <span class='ident'>x</span>.<span class='ident'>to_owned</span>()).<span class='ident'>collect</span>())))
|
||||
}
|
||||
}
|
||||
<span class='prelude-val'>Err</span>(<span class='ident'>other_io_err</span>(<span class='string'>"Not enough shares provided!"</span>, <span class='prelude-val'>None</span>))
|
||||
}
|
||||
|
||||
<span class='kw'>match</span> <span class='ident'>k_sets</span> {
|
||||
<span class='number'>0</span> <span class='op'>=></span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>EmptyShares</span>))
|
||||
}
|
||||
<span class='number'>1</span> <span class='op'>=></span> { } <span class='comment'>// All shares have the same roothash.</span>
|
||||
_ <span class='op'>=></span> {
|
||||
<span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>IncompatibleSets</span>(<span class='ident'>k_compatibility_sets</span>.<span class='ident'>values</span>()
|
||||
.<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>x</span><span class='op'>|</span> <span class='ident'>x</span>.<span class='ident'>to_owned</span>()).<span class='ident'>collect</span>())))
|
||||
}
|
||||
}
|
||||
|
||||
<span class='comment'>// It is safe to unwrap because k_sets == 1</span>
|
||||
<span class='kw'>let</span> <span class='ident'>k</span> <span class='op'>=</span> <span class='op'>*</span><span class='ident'>k_compatibility_sets</span>.<span class='ident'>keys</span>().<span class='ident'>last</span>().<span class='ident'>unwrap</span>();
|
||||
<span class='kw'>let</span> <span class='ident'>shares_num</span> <span class='op'>=</span> <span class='ident'>shares</span>.<span class='ident'>len</span>();
|
||||
|
||||
<span class='kw'>if</span> <span class='ident'>shares_num</span> <span class='op'>>=</span> <span class='ident'>k</span> <span class='kw'>as</span> <span class='ident'>usize</span> {
|
||||
<span class='ident'>shares</span>.<span class='ident'>truncate</span>(<span class='ident'>k</span> <span class='kw'>as</span> <span class='ident'>usize</span>);
|
||||
<span class='prelude-val'>Ok</span>((<span class='ident'>k</span>, <span class='ident'>shares</span>))
|
||||
} <span class='kw'>else</span> {
|
||||
<span class='prelude-val'>Err</span>(<span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>MissingShares</span>(<span class='ident'>k</span>, <span class='ident'>shares_num</span>)))
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
</section>
|
||||
@ -238,11 +318,9 @@
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
window.playgroundUrl = "";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
230
docs/src/rusty_secrets/src/wrapped_secrets.rs.html
Normal file
230
docs/src/rusty_secrets/src/wrapped_secrets.rs.html
Normal file
@ -0,0 +1,230 @@
|
||||
<!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="Source to the Rust file `src/wrapped_secrets.rs`.">
|
||||
<meta name="keywords" content="rust, rustlang, rust-lang">
|
||||
|
||||
<title>wrapped_secrets.rs.html -- source</title>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../../../rustdoc.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../../main.css">
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body class="rustdoc">
|
||||
<!--[if lte IE 8]>
|
||||
<div class="warning">
|
||||
This old browser is unsupported and will most likely display funky
|
||||
things.
|
||||
</div>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
|
||||
<nav class="sidebar">
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
<nav class="sub">
|
||||
<form class="search-form js-only">
|
||||
<div class="search-container">
|
||||
<input class="search-input" name="search"
|
||||
autocomplete="off"
|
||||
placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
|
||||
type="search">
|
||||
</div>
|
||||
</form>
|
||||
</nav>
|
||||
|
||||
<section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span>
|
||||
<span id="2"> 2</span>
|
||||
<span id="3"> 3</span>
|
||||
<span id="4"> 4</span>
|
||||
<span id="5"> 5</span>
|
||||
<span id="6"> 6</span>
|
||||
<span id="7"> 7</span>
|
||||
<span id="8"> 8</span>
|
||||
<span id="9"> 9</span>
|
||||
<span id="10">10</span>
|
||||
<span id="11">11</span>
|
||||
<span id="12">12</span>
|
||||
<span id="13">13</span>
|
||||
<span id="14">14</span>
|
||||
<span id="15">15</span>
|
||||
<span id="16">16</span>
|
||||
<span id="17">17</span>
|
||||
<span id="18">18</span>
|
||||
<span id="19">19</span>
|
||||
<span id="20">20</span>
|
||||
<span id="21">21</span>
|
||||
<span id="22">22</span>
|
||||
<span id="23">23</span>
|
||||
<span id="24">24</span>
|
||||
<span id="25">25</span>
|
||||
<span id="26">26</span>
|
||||
<span id="27">27</span>
|
||||
<span id="28">28</span>
|
||||
<span id="29">29</span>
|
||||
<span id="30">30</span>
|
||||
<span id="31">31</span>
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
<span id="37">37</span>
|
||||
<span id="38">38</span>
|
||||
<span id="39">39</span>
|
||||
<span id="40">40</span>
|
||||
<span id="41">41</span>
|
||||
<span id="42">42</span>
|
||||
<span id="43">43</span>
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
<span id="46">46</span>
|
||||
<span id="47">47</span>
|
||||
<span id="48">48</span>
|
||||
<span id="49">49</span>
|
||||
<span id="50">50</span>
|
||||
<span id="51">51</span>
|
||||
<span id="52">52</span>
|
||||
<span id="53">53</span>
|
||||
<span id="54">54</span>
|
||||
<span id="55">55</span>
|
||||
<span id="56">56</span>
|
||||
<span id="57">57</span>
|
||||
<span id="58">58</span>
|
||||
<span id="59">59</span>
|
||||
<span id="60">60</span>
|
||||
<span id="61">61</span>
|
||||
</pre><pre class='rust '>
|
||||
<span class='doccomment'>//! (Beta) `wrapped_secrets` provides Shamir's secret sharing with a wrapped secret. It currently offers versioning and MIME information about the data.</span>
|
||||
|
||||
<span class='kw'>use</span> <span class='ident'>custom_error</span>::{<span class='ident'>RustyError</span>, <span class='ident'>RustyErrorTypes</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>protobuf</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>protobuf</span>::<span class='ident'>Message</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>secret</span>::{<span class='ident'>RustySecret</span>, <span class='ident'>RustySecretsVersions</span>};
|
||||
<span class='kw'>use</span> <span class='ident'>sss</span>;
|
||||
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>;
|
||||
|
||||
<span class='doccomment'>/// Performs threshold k-out-of-n Shamir's secret sharing.</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// # Examples</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// ```</span>
|
||||
<span class='doccomment'>/// use rusty_secrets::wrapped_secrets::generate_shares;</span>
|
||||
<span class='doccomment'>/// let secret = "These programs were never about terrorism: they’re about economic spying,</span>
|
||||
<span class='doccomment'>/// social control, and diplomatic manipulation. They’re about power.".to_string();</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// match generate_shares(7, 10, &secret.into_bytes(), "text/html", true){</span>
|
||||
<span class='doccomment'>/// Ok(shares) => {</span>
|
||||
<span class='doccomment'>/// // Do something with the shares</span>
|
||||
<span class='doccomment'>/// },</span>
|
||||
<span class='doccomment'>/// Err(_) => {}// Deal with error}</span>
|
||||
<span class='doccomment'>/// }</span>
|
||||
<span class='doccomment'>/// ```</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>generate_shares</span>(<span class='ident'>k</span>: <span class='ident'>u8</span>, <span class='ident'>n</span>: <span class='ident'>u8</span>, <span class='ident'>secret</span>: <span class='kw-2'>&</span>[<span class='ident'>u8</span>], <span class='ident'>mime_type</span>: <span class='kw-2'>&</span><span class='ident'>str</span>, <span class='ident'>sign_shares</span>: <span class='ident'>bool</span>) <span class='op'>-></span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>String</span><span class='op'>>></span> {
|
||||
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>rusty_secret</span> <span class='op'>=</span> <span class='ident'>RustySecret</span>::<span class='ident'>new</span>();
|
||||
<span class='ident'>rusty_secret</span>.<span class='ident'>set_version</span>(<span class='ident'>RustySecretsVersions</span>::<span class='ident'>INITIAL_RELEASE</span>);
|
||||
<span class='ident'>rusty_secret</span>.<span class='ident'>set_mime_type</span>(<span class='ident'>mime_type</span>.<span class='ident'>to_owned</span>());
|
||||
<span class='ident'>rusty_secret</span>.<span class='ident'>set_secret</span>(<span class='ident'>secret</span>.<span class='ident'>to_owned</span>());
|
||||
|
||||
<span class='ident'>sss</span>::<span class='ident'>generate_shares</span>(<span class='ident'>k</span>, <span class='ident'>n</span>, <span class='ident'>rusty_secret</span>.<span class='ident'>write_to_bytes</span>().<span class='ident'>unwrap</span>().<span class='ident'>as_slice</span>(), <span class='ident'>sign_shares</span>)
|
||||
}
|
||||
|
||||
<span class='doccomment'>/// Recovers the secret from a k-out-of-n Shamir's secret sharing.</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// At least `k` distinct shares need to be provided to recover the share.</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// # Examples</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// ```</span>
|
||||
<span class='doccomment'>/// use rusty_secrets::wrapped_secrets::recover_secret;</span>
|
||||
<span class='doccomment'>/// let share1 = "2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP".to_string();</span>
|
||||
<span class='doccomment'>/// let share2 = "2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF".to_string();</span>
|
||||
<span class='doccomment'>/// let shares = vec![share1, share2];</span>
|
||||
<span class='doccomment'>///</span>
|
||||
<span class='doccomment'>/// match recover_secret(shares, false) {</span>
|
||||
<span class='doccomment'>/// Ok(secret) => {</span>
|
||||
<span class='doccomment'>/// // Do something with the secret</span>
|
||||
<span class='doccomment'>/// },</span>
|
||||
<span class='doccomment'>/// Err(e) => {</span>
|
||||
<span class='doccomment'>/// // Deal with the error</span>
|
||||
<span class='doccomment'>/// }</span>
|
||||
<span class='doccomment'>/// }</span>
|
||||
<span class='doccomment'>/// ```</span>
|
||||
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>recover_secret</span>(<span class='ident'>shares</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>, <span class='ident'>verify_signatures</span>: <span class='ident'>bool</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>RustySecret</span>, <span class='ident'>RustyError</span><span class='op'>></span> {
|
||||
<span class='kw'>let</span> <span class='ident'>secret</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>sss</span>::<span class='ident'>recover_secret</span>(<span class='ident'>shares</span>, <span class='ident'>verify_signatures</span>));
|
||||
|
||||
<span class='ident'>protobuf</span>::<span class='ident'>parse_from_bytes</span>::<span class='op'><</span><span class='ident'>RustySecret</span><span class='op'>></span>(<span class='ident'>secret</span>.<span class='ident'>as_slice</span>())
|
||||
.<span class='ident'>map_err</span>(<span class='op'>|</span>_<span class='op'>|</span> <span class='ident'>RustyError</span>::<span class='ident'>with_type</span>(<span class='ident'>RustyErrorTypes</span>::<span class='ident'>SecretDeserializationIssue</span>))
|
||||
}
|
||||
</pre>
|
||||
</section>
|
||||
<section id='search' class="content hidden"></section>
|
||||
|
||||
<section class="footer"></section>
|
||||
|
||||
<aside id="help" class="hidden">
|
||||
<div>
|
||||
<h1 class="hidden">Help</h1>
|
||||
|
||||
<div class="shortcuts">
|
||||
<h2>Keyboard Shortcuts</h2>
|
||||
|
||||
<dl>
|
||||
<dt>?</dt>
|
||||
<dd>Show this help dialog</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Focus the search field</dd>
|
||||
<dt>⇤</dt>
|
||||
<dd>Move up in search results</dd>
|
||||
<dt>⇥</dt>
|
||||
<dd>Move down in search results</dd>
|
||||
<dt>⏎</dt>
|
||||
<dd>Go to active search result</dd>
|
||||
<dt>+</dt>
|
||||
<dd>Collapse/expand all sections</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="infos">
|
||||
<h2>Search Tricks</h2>
|
||||
|
||||
<p>
|
||||
Prefix searches with a type followed by a colon (e.g.
|
||||
<code>fn:</code>) to restrict the search to a given type.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Accepted types are: <code>fn</code>, <code>mod</code>,
|
||||
<code>struct</code>, <code>enum</code>,
|
||||
<code>trait</code>, <code>type</code>, <code>macro</code>,
|
||||
and <code>const</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Search functions by type signature (e.g.
|
||||
<code>vec -> usize</code> or <code>* -> vec</code>)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
window.rootPath = "../../../";
|
||||
window.currentCrate = "rusty_secrets";
|
||||
</script>
|
||||
<script src="../../../jquery.js"></script>
|
||||
<script src="../../../main.js"></script>
|
||||
<script defer src="../../../search-index.js"></script>
|
||||
</body>
|
||||
</html>
|
11
protobuf/Secret.proto
Normal file
11
protobuf/Secret.proto
Normal file
@ -0,0 +1,11 @@
|
||||
syntax = "proto3";
|
||||
|
||||
enum RustySecretsVersions {
|
||||
INITIAL_RELEASE = 0;
|
||||
}
|
||||
|
||||
message RustySecret {
|
||||
RustySecretsVersions version = 1;
|
||||
bytes secret = 2;
|
||||
string mime_type = 3;
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
use std::convert;
|
||||
use std::error;
|
||||
use std::error::Error;
|
||||
use std::fmt;
|
||||
use std::io;
|
||||
@ -10,10 +9,11 @@ use std::num;
|
||||
pub struct RustyError {
|
||||
descr: &'static str,
|
||||
detail: Option<String>,
|
||||
share_num: Option<u8>,
|
||||
share_index: Option<u8>,
|
||||
share_groups: Option<Vec<Vec<u8>>>
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum RustyErrorTypes {
|
||||
DuplicateShareNum(u8),
|
||||
DuplicateShareData(u8),
|
||||
@ -22,33 +22,38 @@ pub enum RustyErrorTypes {
|
||||
InvalidSignature(u8, String),
|
||||
MissingShares(u8, usize),
|
||||
MissingSignature(u8),
|
||||
SecretDeserializationIssue,
|
||||
ShareParsingError(u8, String)
|
||||
}
|
||||
|
||||
impl RustyError {
|
||||
/// Initializes a new error with a description and optional detail string.
|
||||
fn new(descr: &'static str, detail: Option<String>, share_num: Option<u8>, share_groups: Option<Vec<Vec<u8>>>) -> RustyError {
|
||||
fn new(descr: &'static str, detail: Option<String>, share_index: Option<u8>, share_groups: Option<Vec<Vec<u8>>>) -> RustyError {
|
||||
RustyError {
|
||||
descr: descr,
|
||||
detail: detail,
|
||||
share_num: share_num,
|
||||
share_index: share_index,
|
||||
share_groups: share_groups
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns a `RustyError` with a given `RustyErrorType`.
|
||||
pub fn with_type(error_type: RustyErrorTypes) -> RustyError {
|
||||
RustyError {
|
||||
descr: RustyError::descr_for_type(&error_type),
|
||||
detail: RustyError::detail_for_type(&error_type),
|
||||
share_num: RustyError::share_num_for_type(&error_type),
|
||||
share_index: RustyError::share_num_for_type(&error_type),
|
||||
share_groups: RustyError::share_groups_for_type(error_type),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn share_num(&self) -> Option<u8> {
|
||||
self.share_num
|
||||
/// Returns the index of the share that raised the error, if any.
|
||||
pub fn share_index(&self) -> Option<u8> {
|
||||
self.share_index
|
||||
}
|
||||
|
||||
/// Returns the group of shares that were generated during the same secret share.
|
||||
/// It can be used to provide a debug message to the user telling him what shares are incompatible.
|
||||
pub fn share_groups(&self) -> Option<Vec<Vec<u8>>> {
|
||||
self.share_groups.clone()
|
||||
}
|
||||
@ -60,6 +65,8 @@ impl RustyError {
|
||||
RustyErrorTypes::InvalidSignature(_, _) => "The signature of this share is not valid.",
|
||||
RustyErrorTypes::MissingShares(_, _) => "The number of shares provided is insufficient to recover the secret.",
|
||||
RustyErrorTypes::MissingSignature(_) => "Signature is missing while shares are required to be signed.",
|
||||
RustyErrorTypes::SecretDeserializationIssue => "An issue was encountered deserializing the secret.
|
||||
Updating to the latest version of RustySecrets might help fix this.",
|
||||
RustyErrorTypes::ShareParsingError(_, _) => "This share is incorrectly formatted.",
|
||||
RustyErrorTypes::DuplicateShareNum(_) => "This share number has already been used by a previous share.",
|
||||
RustyErrorTypes::DuplicateShareData(_) => "The data encoded in this share is the same as the one found in a previous share."
|
||||
@ -103,11 +110,11 @@ impl fmt::Display for RustyError {
|
||||
}
|
||||
}
|
||||
|
||||
impl error::Error for RustyError {
|
||||
impl Error for RustyError {
|
||||
fn description(&self) -> &str {
|
||||
self.descr
|
||||
}
|
||||
fn cause(&self) -> Option<&error::Error> {
|
||||
fn cause(&self) -> Option<&Error> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
25
src/lib.rs
25
src/lib.rs
@ -1,12 +1,12 @@
|
||||
// #![deny(
|
||||
// missing_docs,
|
||||
// missing_debug_implementations, missing_copy_implementations,
|
||||
// trivial_casts, trivial_numeric_casts,
|
||||
// unsafe_code, unstable_features,
|
||||
// unused_import_braces, unused_qualifications
|
||||
// )]
|
||||
//! `RustySecrets` implements Shamir's secret sharing in Rust. It provides the possibility to sign shares.
|
||||
|
||||
//! `RustySecrets` implements Shamir Secret Sharing in Rust. It provides the possibility to sign shares.
|
||||
#![deny(
|
||||
missing_docs,
|
||||
missing_debug_implementations, missing_copy_implementations,
|
||||
trivial_casts, trivial_numeric_casts,
|
||||
unsafe_code, unstable_features,
|
||||
unused_import_braces, unused_qualifications
|
||||
)]
|
||||
|
||||
extern crate protobuf;
|
||||
extern crate rustc_serialize as serialize;
|
||||
@ -21,14 +21,17 @@ static digest: &'static Algorithm = &SHA512;
|
||||
mod custom_error;
|
||||
mod gf256;
|
||||
mod interpolation;
|
||||
#[allow(unused_qualifications)]
|
||||
mod secret;
|
||||
#[allow(unused_qualifications)]
|
||||
mod share_data;
|
||||
mod share_format;
|
||||
mod sss;
|
||||
mod validation;
|
||||
|
||||
pub use sss::generate_shares;
|
||||
pub use sss::recover_secret;
|
||||
pub use custom_error::RustyError;
|
||||
|
||||
pub mod sss;
|
||||
pub mod wrapped_secrets;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
391
src/secret.rs
Normal file
391
src/secret.rs
Normal file
@ -0,0 +1,391 @@
|
||||
// This file is generated. Do not edit
|
||||
// @generated
|
||||
|
||||
// https://github.com/Manishearth/rust-clippy/issues/702
|
||||
#![allow(unknown_lints)]
|
||||
#![allow(clippy)]
|
||||
|
||||
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||||
|
||||
#![allow(box_pointers)]
|
||||
#![allow(dead_code)]
|
||||
#![allow(non_camel_case_types)]
|
||||
#![allow(non_snake_case)]
|
||||
#![allow(non_upper_case_globals)]
|
||||
#![allow(trivial_casts)]
|
||||
#![allow(unsafe_code)]
|
||||
#![allow(unused_imports)]
|
||||
#![allow(unused_results)]
|
||||
|
||||
use protobuf::Message as Message_imported_for_functions;
|
||||
use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions;
|
||||
|
||||
#[derive(Clone,Default)]
|
||||
pub struct RustySecret {
|
||||
// message fields
|
||||
version: ::std::option::Option<RustySecretsVersions>,
|
||||
secret: ::protobuf::SingularField<::std::vec::Vec<u8>>,
|
||||
mime_type: ::protobuf::SingularField<::std::string::String>,
|
||||
// special fields
|
||||
unknown_fields: ::protobuf::UnknownFields,
|
||||
cached_size: ::std::cell::Cell<u32>,
|
||||
}
|
||||
|
||||
// see codegen.rs for the explanation why impl Sync explicitly
|
||||
unsafe impl ::std::marker::Sync for RustySecret {}
|
||||
|
||||
impl RustySecret {
|
||||
pub fn new() -> RustySecret {
|
||||
::std::default::Default::default()
|
||||
}
|
||||
|
||||
pub fn default_instance() -> &'static RustySecret {
|
||||
static mut instance: ::protobuf::lazy::Lazy<RustySecret> = ::protobuf::lazy::Lazy {
|
||||
lock: ::protobuf::lazy::ONCE_INIT,
|
||||
ptr: 0 as *const RustySecret,
|
||||
};
|
||||
unsafe {
|
||||
instance.get(|| {
|
||||
RustySecret {
|
||||
version: ::std::option::Option::None,
|
||||
secret: ::protobuf::SingularField::none(),
|
||||
mime_type: ::protobuf::SingularField::none(),
|
||||
unknown_fields: ::protobuf::UnknownFields::new(),
|
||||
cached_size: ::std::cell::Cell::new(0),
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// optional .RustySecretsVersions version = 1;
|
||||
|
||||
pub fn clear_version(&mut self) {
|
||||
self.version = ::std::option::Option::None;
|
||||
}
|
||||
|
||||
pub fn has_version(&self) -> bool {
|
||||
self.version.is_some()
|
||||
}
|
||||
|
||||
// Param is passed by value, moved
|
||||
pub fn set_version(&mut self, v: RustySecretsVersions) {
|
||||
self.version = ::std::option::Option::Some(v);
|
||||
}
|
||||
|
||||
pub fn get_version(&self) -> RustySecretsVersions {
|
||||
self.version.unwrap_or(RustySecretsVersions::INITIAL_RELEASE)
|
||||
}
|
||||
|
||||
// optional bytes secret = 2;
|
||||
|
||||
pub fn clear_secret(&mut self) {
|
||||
self.secret.clear();
|
||||
}
|
||||
|
||||
pub fn has_secret(&self) -> bool {
|
||||
self.secret.is_some()
|
||||
}
|
||||
|
||||
// Param is passed by value, moved
|
||||
pub fn set_secret(&mut self, v: ::std::vec::Vec<u8>) {
|
||||
self.secret = ::protobuf::SingularField::some(v);
|
||||
}
|
||||
|
||||
// Mutable pointer to the field.
|
||||
// If field is not initialized, it is initialized with default value first.
|
||||
pub fn mut_secret(&mut self) -> &mut ::std::vec::Vec<u8> {
|
||||
if self.secret.is_none() {
|
||||
self.secret.set_default();
|
||||
};
|
||||
self.secret.as_mut().unwrap()
|
||||
}
|
||||
|
||||
// Take field
|
||||
pub fn take_secret(&mut self) -> ::std::vec::Vec<u8> {
|
||||
self.secret.take().unwrap_or_else(|| ::std::vec::Vec::new())
|
||||
}
|
||||
|
||||
pub fn get_secret(&self) -> &[u8] {
|
||||
match self.secret.as_ref() {
|
||||
Some(v) => &v,
|
||||
None => &[],
|
||||
}
|
||||
}
|
||||
|
||||
// optional string mime_type = 3;
|
||||
|
||||
pub fn clear_mime_type(&mut self) {
|
||||
self.mime_type.clear();
|
||||
}
|
||||
|
||||
pub fn has_mime_type(&self) -> bool {
|
||||
self.mime_type.is_some()
|
||||
}
|
||||
|
||||
// Param is passed by value, moved
|
||||
pub fn set_mime_type(&mut self, v: ::std::string::String) {
|
||||
self.mime_type = ::protobuf::SingularField::some(v);
|
||||
}
|
||||
|
||||
// Mutable pointer to the field.
|
||||
// If field is not initialized, it is initialized with default value first.
|
||||
pub fn mut_mime_type(&mut self) -> &mut ::std::string::String {
|
||||
if self.mime_type.is_none() {
|
||||
self.mime_type.set_default();
|
||||
};
|
||||
self.mime_type.as_mut().unwrap()
|
||||
}
|
||||
|
||||
// Take field
|
||||
pub fn take_mime_type(&mut self) -> ::std::string::String {
|
||||
self.mime_type.take().unwrap_or_else(|| ::std::string::String::new())
|
||||
}
|
||||
|
||||
pub fn get_mime_type(&self) -> &str {
|
||||
match self.mime_type.as_ref() {
|
||||
Some(v) => &v,
|
||||
None => "",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ::protobuf::Message for RustySecret {
|
||||
fn is_initialized(&self) -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> {
|
||||
while !try!(is.eof()) {
|
||||
let (field_number, wire_type) = try!(is.read_tag_unpack());
|
||||
match field_number {
|
||||
1 => {
|
||||
if wire_type != ::protobuf::wire_format::WireTypeVarint {
|
||||
return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type));
|
||||
};
|
||||
let tmp = try!(is.read_enum());
|
||||
self.version = ::std::option::Option::Some(tmp);
|
||||
},
|
||||
2 => {
|
||||
try!(::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.secret));
|
||||
},
|
||||
3 => {
|
||||
try!(::protobuf::rt::read_singular_string_into(wire_type, is, &mut self.mime_type));
|
||||
},
|
||||
_ => {
|
||||
try!(::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields()));
|
||||
},
|
||||
};
|
||||
}
|
||||
::std::result::Result::Ok(())
|
||||
}
|
||||
|
||||
// Compute sizes of nested messages
|
||||
#[allow(unused_variables)]
|
||||
fn compute_size(&self) -> u32 {
|
||||
let mut my_size = 0;
|
||||
for value in &self.version {
|
||||
my_size += ::protobuf::rt::enum_size(1, *value);
|
||||
};
|
||||
for value in &self.secret {
|
||||
my_size += ::protobuf::rt::bytes_size(2, &value);
|
||||
};
|
||||
for value in &self.mime_type {
|
||||
my_size += ::protobuf::rt::string_size(3, &value);
|
||||
};
|
||||
my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
|
||||
self.cached_size.set(my_size);
|
||||
my_size
|
||||
}
|
||||
|
||||
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> {
|
||||
if let Some(v) = self.version {
|
||||
try!(os.write_enum(1, v.value()));
|
||||
};
|
||||
if let Some(v) = self.secret.as_ref() {
|
||||
try!(os.write_bytes(2, &v));
|
||||
};
|
||||
if let Some(v) = self.mime_type.as_ref() {
|
||||
try!(os.write_string(3, &v));
|
||||
};
|
||||
try!(os.write_unknown_fields(self.get_unknown_fields()));
|
||||
::std::result::Result::Ok(())
|
||||
}
|
||||
|
||||
fn get_cached_size(&self) -> u32 {
|
||||
self.cached_size.get()
|
||||
}
|
||||
|
||||
fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
|
||||
&self.unknown_fields
|
||||
}
|
||||
|
||||
fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
|
||||
&mut self.unknown_fields
|
||||
}
|
||||
|
||||
fn type_id(&self) -> ::std::any::TypeId {
|
||||
::std::any::TypeId::of::<RustySecret>()
|
||||
}
|
||||
|
||||
fn as_any(&self) -> &::std::any::Any {
|
||||
self as &::std::any::Any
|
||||
}
|
||||
|
||||
fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
|
||||
::protobuf::MessageStatic::descriptor_static(None::<Self>)
|
||||
}
|
||||
}
|
||||
|
||||
impl ::protobuf::MessageStatic for RustySecret {
|
||||
fn new() -> RustySecret {
|
||||
RustySecret::new()
|
||||
}
|
||||
|
||||
fn descriptor_static(_: ::std::option::Option<RustySecret>) -> &'static ::protobuf::reflect::MessageDescriptor {
|
||||
static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy {
|
||||
lock: ::protobuf::lazy::ONCE_INIT,
|
||||
ptr: 0 as *const ::protobuf::reflect::MessageDescriptor,
|
||||
};
|
||||
unsafe {
|
||||
descriptor.get(|| {
|
||||
let mut fields = ::std::vec::Vec::new();
|
||||
fields.push(::protobuf::reflect::accessor::make_singular_enum_accessor(
|
||||
"version",
|
||||
RustySecret::has_version,
|
||||
RustySecret::get_version,
|
||||
));
|
||||
fields.push(::protobuf::reflect::accessor::make_singular_bytes_accessor(
|
||||
"secret",
|
||||
RustySecret::has_secret,
|
||||
RustySecret::get_secret,
|
||||
));
|
||||
fields.push(::protobuf::reflect::accessor::make_singular_string_accessor(
|
||||
"mime_type",
|
||||
RustySecret::has_mime_type,
|
||||
RustySecret::get_mime_type,
|
||||
));
|
||||
::protobuf::reflect::MessageDescriptor::new::<RustySecret>(
|
||||
"RustySecret",
|
||||
fields,
|
||||
file_descriptor_proto()
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ::protobuf::Clear for RustySecret {
|
||||
fn clear(&mut self) {
|
||||
self.clear_version();
|
||||
self.clear_secret();
|
||||
self.clear_mime_type();
|
||||
self.unknown_fields.clear();
|
||||
}
|
||||
}
|
||||
|
||||
impl ::std::cmp::PartialEq for RustySecret {
|
||||
fn eq(&self, other: &RustySecret) -> bool {
|
||||
self.version == other.version &&
|
||||
self.secret == other.secret &&
|
||||
self.mime_type == other.mime_type &&
|
||||
self.unknown_fields == other.unknown_fields
|
||||
}
|
||||
}
|
||||
|
||||
impl ::std::fmt::Debug for RustySecret {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
::protobuf::text_format::fmt(self, f)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone,PartialEq,Eq,Debug,Hash)]
|
||||
pub enum RustySecretsVersions {
|
||||
INITIAL_RELEASE = 0,
|
||||
}
|
||||
|
||||
impl ::protobuf::ProtobufEnum for RustySecretsVersions {
|
||||
fn value(&self) -> i32 {
|
||||
*self as i32
|
||||
}
|
||||
|
||||
fn from_i32(value: i32) -> ::std::option::Option<RustySecretsVersions> {
|
||||
match value {
|
||||
0 => ::std::option::Option::Some(RustySecretsVersions::INITIAL_RELEASE),
|
||||
_ => ::std::option::Option::None
|
||||
}
|
||||
}
|
||||
|
||||
fn values() -> &'static [Self] {
|
||||
static values: &'static [RustySecretsVersions] = &[
|
||||
RustySecretsVersions::INITIAL_RELEASE,
|
||||
];
|
||||
values
|
||||
}
|
||||
|
||||
fn enum_descriptor_static(_: Option<RustySecretsVersions>) -> &'static ::protobuf::reflect::EnumDescriptor {
|
||||
static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy {
|
||||
lock: ::protobuf::lazy::ONCE_INIT,
|
||||
ptr: 0 as *const ::protobuf::reflect::EnumDescriptor,
|
||||
};
|
||||
unsafe {
|
||||
descriptor.get(|| {
|
||||
::protobuf::reflect::EnumDescriptor::new("RustySecretsVersions", file_descriptor_proto())
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ::std::marker::Copy for RustySecretsVersions {
|
||||
}
|
||||
|
||||
static file_descriptor_proto_data: &'static [u8] = &[
|
||||
0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x73,
|
||||
0x0a, 0x0b, 0x52, 0x75, 0x73, 0x74, 0x79, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x2f, 0x0a,
|
||||
0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15,
|
||||
0x2e, 0x52, 0x75, 0x73, 0x74, 0x79, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x56, 0x65, 0x72,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16,
|
||||
0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06,
|
||||
0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74,
|
||||
0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54,
|
||||
0x79, 0x70, 0x65, 0x2a, 0x2b, 0x0a, 0x14, 0x52, 0x75, 0x73, 0x74, 0x79, 0x53, 0x65, 0x63, 0x72,
|
||||
0x65, 0x74, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x13, 0x0a, 0x0f, 0x49,
|
||||
0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x5f, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x10, 0x00,
|
||||
0x4a, 0xbd, 0x02, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x0a, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c,
|
||||
0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, 0x02, 0x00, 0x04,
|
||||
0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x02, 0x05, 0x19, 0x0a, 0x0b, 0x0a,
|
||||
0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x03, 0x08, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00,
|
||||
0x02, 0x00, 0x01, 0x12, 0x03, 0x03, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00,
|
||||
0x02, 0x12, 0x03, 0x03, 0x1a, 0x1b, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00,
|
||||
0x0a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x06, 0x08, 0x13, 0x0a, 0x0b,
|
||||
0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x07, 0x08, 0x29, 0x0a, 0x0d, 0x0a, 0x05, 0x04,
|
||||
0x00, 0x02, 0x00, 0x04, 0x12, 0x04, 0x07, 0x08, 0x06, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00,
|
||||
0x02, 0x00, 0x06, 0x12, 0x03, 0x07, 0x08, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00,
|
||||
0x01, 0x12, 0x03, 0x07, 0x1d, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12,
|
||||
0x03, 0x07, 0x27, 0x28, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x08, 0x08,
|
||||
0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x04, 0x08, 0x08, 0x07, 0x29,
|
||||
0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x08, 0x08, 0x0d, 0x0a, 0x0c,
|
||||
0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x08, 0x0e, 0x14, 0x0a, 0x0c, 0x0a, 0x05,
|
||||
0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x08, 0x17, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00,
|
||||
0x02, 0x02, 0x12, 0x03, 0x09, 0x08, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x04,
|
||||
0x12, 0x04, 0x09, 0x08, 0x08, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12,
|
||||
0x03, 0x09, 0x08, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x09,
|
||||
0x0f, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x09, 0x1b, 0x1c,
|
||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
];
|
||||
|
||||
static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy {
|
||||
lock: ::protobuf::lazy::ONCE_INIT,
|
||||
ptr: 0 as *const ::protobuf::descriptor::FileDescriptorProto,
|
||||
};
|
||||
|
||||
fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
|
||||
::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
|
||||
}
|
||||
|
||||
pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
|
||||
unsafe {
|
||||
file_descriptor_proto_lazy.get(|| {
|
||||
parse_descriptor_proto()
|
||||
})
|
||||
}
|
||||
}
|
14
src/sss.rs
14
src/sss.rs
@ -1,3 +1,5 @@
|
||||
//! SSS provides Shamir's secret sharing with raw data.
|
||||
|
||||
use custom_error::{RustyError, other_io_err};
|
||||
use digest;
|
||||
use interpolation::{encode, lagrange_interpolate};
|
||||
@ -13,12 +15,12 @@ fn new_vec<T: Clone>(n: usize, x: T) -> Vec<T> {
|
||||
repeat(x).take(n).collect()
|
||||
}
|
||||
|
||||
/// Performs threshold k-out-of-n Shamir secret sharing.
|
||||
/// Performs threshold k-out-of-n Shamir's secret sharing.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use rusty_secrets::generate_shares;
|
||||
/// use rusty_secrets::sss::generate_shares;
|
||||
/// let secret = "These programs were never about terrorism: they’re about economic spying,
|
||||
/// social control, and diplomatic manipulation. They’re about power.".to_string();
|
||||
///
|
||||
@ -34,7 +36,7 @@ pub fn generate_shares(k: u8, n: u8, secret: &[u8], sign_shares: bool) -> io::Re
|
||||
return Err(other_io_err("Threshold K can not be larger than N", None, None, None));
|
||||
}
|
||||
|
||||
let shares = try!(secret_share(&*secret, k, n));
|
||||
let shares = try!(secret_share(secret, k, n));
|
||||
|
||||
let signatures = if sign_shares {
|
||||
let shares_to_sign = shares.iter()
|
||||
@ -66,7 +68,7 @@ pub fn generate_shares(k: u8, n: u8, secret: &[u8], sign_shares: bool) -> io::Re
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
pub fn secret_share(src: &[u8], k: u8, n: u8) -> Result<Vec<Vec<u8>>, RustyError> {
|
||||
fn secret_share(src: &[u8], k: u8, n: u8) -> Result<Vec<Vec<u8>>, RustyError> {
|
||||
let mut result = Vec::with_capacity(n as usize);
|
||||
for _ in 0..(n as usize) {
|
||||
result.push(new_vec(src.len(), 0u8));
|
||||
@ -87,14 +89,14 @@ pub fn secret_share(src: &[u8], k: u8, n: u8) -> Result<Vec<Vec<u8>>, RustyError
|
||||
}
|
||||
|
||||
|
||||
/// Recovers the secret from a k-out-of-n Shamir secret sharing.
|
||||
/// Recovers the secret from a k-out-of-n Shamir's secret sharing.
|
||||
///
|
||||
/// At least `k` distinct shares need to be provided to recover the share.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use rusty_secrets::recover_secret;
|
||||
/// use rusty_secrets::sss::recover_secret;
|
||||
/// let share1 = "2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP".to_string();
|
||||
/// let share2 = "2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF".to_string();
|
||||
/// let shares = vec![share1, share2];
|
||||
|
61
src/wrapped_secrets.rs
Normal file
61
src/wrapped_secrets.rs
Normal file
@ -0,0 +1,61 @@
|
||||
//! (Beta) `wrapped_secrets` provides Shamir's secret sharing with a wrapped secret. It currently offers versioning and MIME information about the data.
|
||||
|
||||
use custom_error::{RustyError, RustyErrorTypes};
|
||||
use protobuf;
|
||||
use protobuf::Message;
|
||||
use secret::{RustySecret, RustySecretsVersions};
|
||||
use sss;
|
||||
use std::io;
|
||||
|
||||
/// Performs threshold k-out-of-n Shamir's secret sharing.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use rusty_secrets::wrapped_secrets::generate_shares;
|
||||
/// let secret = "These programs were never about terrorism: they’re about economic spying,
|
||||
/// social control, and diplomatic manipulation. They’re about power.".to_string();
|
||||
///
|
||||
/// match generate_shares(7, 10, &secret.into_bytes(), "text/html", true){
|
||||
/// Ok(shares) => {
|
||||
/// // Do something with the shares
|
||||
/// },
|
||||
/// Err(_) => {}// Deal with error}
|
||||
/// }
|
||||
/// ```
|
||||
pub fn generate_shares(k: u8, n: u8, secret: &[u8], mime_type: &str, sign_shares: bool) -> io::Result<Vec<String>> {
|
||||
let mut rusty_secret = RustySecret::new();
|
||||
rusty_secret.set_version(RustySecretsVersions::INITIAL_RELEASE);
|
||||
rusty_secret.set_mime_type(mime_type.to_owned());
|
||||
rusty_secret.set_secret(secret.to_owned());
|
||||
|
||||
sss::generate_shares(k, n, rusty_secret.write_to_bytes().unwrap().as_slice(), sign_shares)
|
||||
}
|
||||
|
||||
/// Recovers the secret from a k-out-of-n Shamir's secret sharing.
|
||||
///
|
||||
/// At least `k` distinct shares need to be provided to recover the share.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use rusty_secrets::wrapped_secrets::recover_secret;
|
||||
/// let share1 = "2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP".to_string();
|
||||
/// let share2 = "2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF".to_string();
|
||||
/// let shares = vec![share1, share2];
|
||||
///
|
||||
/// match recover_secret(shares, false) {
|
||||
/// Ok(secret) => {
|
||||
/// // Do something with the secret
|
||||
/// },
|
||||
/// Err(e) => {
|
||||
/// // Deal with the error
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
pub fn recover_secret(shares: Vec<String>, verify_signatures: bool) -> Result<RustySecret, RustyError> {
|
||||
let secret = try!(sss::recover_secret(shares, verify_signatures));
|
||||
|
||||
protobuf::parse_from_bytes::<RustySecret>(secret.as_slice())
|
||||
.map_err(|_| RustyError::with_type(RustyErrorTypes::SecretDeserializationIssue))
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
extern crate rusty_secrets;
|
||||
|
||||
use rusty_secrets::generate_shares;
|
||||
use rusty_secrets::sss::generate_shares;
|
||||
|
||||
#[test]
|
||||
#[should_panic(expected = "Threshold K can not be larger than N")]
|
||||
|
@ -1,6 +1,6 @@
|
||||
extern crate rusty_secrets;
|
||||
|
||||
use rusty_secrets::{generate_shares, recover_secret};
|
||||
use rusty_secrets::*;
|
||||
|
||||
#[ignore]
|
||||
#[test]
|
||||
@ -13,12 +13,18 @@ fn test_reasonable_splits() {
|
||||
across public lines."
|
||||
.to_string()
|
||||
.into_bytes();
|
||||
|
||||
let mime_type = "image/jpeg";
|
||||
|
||||
for is_signing in &[true, false] {
|
||||
for k in 1..max_shares {
|
||||
for n in k..max_shares {
|
||||
let shares = generate_shares(k, n, &secret, *is_signing).unwrap();
|
||||
let shares = wrapped_secrets::generate_shares(k, n, &secret, mime_type,*is_signing).unwrap();
|
||||
println!("Testing {} out-of- {}", k, n);
|
||||
assert_eq!(secret, recover_secret(shares, *is_signing).unwrap());
|
||||
|
||||
let s = wrapped_secrets::recover_secret(shares, *is_signing).unwrap();
|
||||
assert_eq!(s.get_secret().to_owned(), secret);
|
||||
assert_eq!(mime_type, s.get_mime_type());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
extern crate rusty_secrets;
|
||||
|
||||
use rusty_secrets::recover_secret;
|
||||
use rusty_secrets::sss::recover_secret;
|
||||
|
||||
#[test]
|
||||
#[should_panic(expected = "No shares were provided.")]
|
||||
|
Reference in New Issue
Block a user