Update documentation.

This commit is contained in:
Romain Ruetschi
2017-08-03 17:04:34 +02:00
committed by Romain Ruetschi
parent cb44533c62
commit 2d39c5950b
37 changed files with 4956 additions and 4648 deletions

View File

@ -27,11 +27,6 @@ included, and carry their own copyright notices and license terms:
Licensed under the SIL Open Font License, Version 1.1.
See Heuristica-LICENSE.txt.
* jQuery (jquery-2.1.4.min.js):
Copyright 2005, 2015 jQuery Foundation, Inc.
Licensed under the MIT license (see LICENSE-MIT.txt).
* rustdoc.css, main.js, and playpen.js:
Copyright 2015 The Rust Developers.

View File

@ -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>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>Error</a>&gt; 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>&lt;<a class='struct' href='rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>&gt; 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=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html\" title=\"struct std::io::error::Error\">Error</a>&gt; for <a class=\"struct\" href=\"rusty_secrets/struct.RustyError.html\" title=\"struct rusty_secrets::RustyError\">RustyError</a>","impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"rusty_secrets/struct.RustyError.html\" title=\"struct rusty_secrets::RustyError\">RustyError</a>&gt; for <a class=\"struct\" href=\"https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html\" title=\"struct std::io::error::Error\">Error</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View File

@ -1,5 +1,5 @@
(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>",];
implementors["rusty_secrets"] = ["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"rusty_secrets/struct.RustyError.html\" title=\"struct rusty_secrets::RustyError\">RustyError</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View File

@ -1,5 +1,5 @@
(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>",];
implementors["rusty_secrets"] = ["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html\" title=\"trait core::fmt::Display\">Display</a> for <a class=\"struct\" href=\"rusty_secrets/struct.RustyError.html\" title=\"struct rusty_secrets::RustyError\">RustyError</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

View File

@ -1,5 +1,5 @@
(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>",];
implementors["rusty_secrets"] = ["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/error/trait.Error.html\" title=\"trait std::error::Error\">Error</a> for <a class=\"struct\" href=\"rusty_secrets/struct.RustyError.html\" title=\"struct rusty_secrets::RustyError\">RustyError</a>",];
if (window.register_implementors) {
window.register_implementors(implementors);

4
docs/jquery.js vendored

File diff suppressed because one or more lines are too long

View File

@ -13,52 +13,61 @@
/* General structure and fonts */
body {
background-color: white;
color: black;
background-color: white;
color: black;
}
h1, h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) {
color: black;
color: black;
}
h1.fqn {
border-bottom-color: #D5D5D5;
border-bottom-color: #D5D5D5;
}
h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) {
border-bottom-color: #DDDDDD;
border-bottom-color: #DDDDDD;
}
.in-band {
background-color: white;
}
div.stability > em > code {
background-color: initial;
background-color: white;
}
.docblock code, .docblock-short code {
background-color: #F5F5F5;
background-color: #F5F5F5;
}
pre {
background-color: #F5F5F5;
background-color: #F5F5F5;
}
.sidebar {
background-color: #F1F1F1;
}
.sidebar .current {
background-color: #fff;
}
.source .sidebar {
background-color: #fff;
}
.sidebar .location {
background: #e1e1e1;
color: #333;
border-color: #000;
background-color: #fff;
color: #333;
}
.block a:hover {
background: #F5F5F5;
background: #F5F5F5;
}
.line-numbers span { color: #c67e2d; }
.line-numbers .line-highlighted {
background-color: #f6fdb0 !important;
background-color: #f6fdb0 !important;
}
:target { background: #FDFFD3; }
.content .highlighted {
color: #000 !important;
background-color: #ccc;
color: #000 !important;
background-color: #ccc;
}
.content .highlighted a, .content .highlighted span { color: #000 !important; }
.content .highlighted.trait { background-color: #fece7e; }
@ -71,21 +80,21 @@ pre {
.content .highlighted.type { background-color: #c6afb3; }
.docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 {
border-bottom-color: #DDD;
border-bottom-color: #DDD;
}
.docblock table {
border-color: #ddd;
border-color: #ddd;
}
.docblock table td {
border-top-color: #ddd;
border-bottom-color: #ddd;
border-top-color: #ddd;
border-bottom-color: #ddd;
}
.docblock table th {
border-top-color: #ddd;
border-bottom-color: #ddd;
border-top-color: #ddd;
border-bottom-color: #ddd;
}
.content span.primitive, .content a.primitive, .block a.current.primitive { color: #39a7bf; }
@ -100,34 +109,78 @@ pre.rust .comment { color: #8E908C; }
pre.rust .doccomment { color: #4D4D4C; }
nav {
border-bottom-color: #e0e0e0;
border-bottom-color: #e0e0e0;
}
nav.main .current {
border-top-color: #000;
border-bottom-color: #000;
border-top-color: #000;
border-bottom-color: #000;
}
nav.main .separator {
border: 1px solid #000;
border: 1px solid #000;
}
a {
color: #000;
color: #000;
}
.docblock a, .docblock-short a, .stability a {
color: #3873AD;
color: #3873AD;
}
a.test-arrow {
color: #f5f5f5;
color: #f5f5f5;
}
.content span.trait, .content a.trait, .block a.current.trait { color: #7c5af3; }
.search-input {
color: #555;
box-shadow: 0 0 0 1px #e0e0e0, 0 0 0 2px transparent;
background-color: white;
color: #555;
box-shadow: 0 0 0 1px #e0e0e0, 0 0 0 2px transparent;
background-color: white;
}
em.stab.unstable { background: #FFF5D6; border-color: #FFC600; }
em.stab.deprecated { background: #F3DFFF; border-color: #7F0087; }
.stab.unstable { background: #FFF5D6; border-color: #FFC600; }
.stab.deprecated { background: #F3DFFF; border-color: #7F0087; }
#help > div {
background: #e9e9e9;
border-color: #bfbfbf;;
}
#help dt {
border-color: #bfbfbf;
background: #fff;
}
.since {
color: grey;
}
.line-numbers :target { background-color: transparent; }
/* Code highlighting */
pre.rust .kw { color: #8959A8; }
pre.rust .kw-2, pre.rust .prelude-ty { color: #4271AE; }
pre.rust .number, pre.rust .string { color: #718C00; }
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;
}
a.test-arrow {
background-color: rgba(78, 139, 202, 0.2);
}
a.test-arrow:hover{
background-color: #4e8bca;
}
.toggle-label {
color: #999;
}
:target > code {
background: #FDFFD3;
}

View File

@ -37,10 +37,63 @@
"associatedconstant",
"union"];
function hasClass(elem, className) {
if (elem && className && elem.className) {
var elemClass = elem.className;
var start = elemClass.indexOf(className);
if (start == -1) {
return false;
} else if (elemClass.length == className.length) {
return true;
} else {
if (start > 0 && elemClass[start - 1] != ' ') {
return false;
}
var end = start + className.length;
if (end < elemClass.length && elemClass[end] != ' ') {
return false;
}
return true;
}
}
return false;
}
function addClass(elem, className) {
if (elem && className && !hasClass(elem, className)) {
if (elem.className && elem.className.length > 0) {
elem.className += ' ' + className;
} else {
elem.className = className;
}
}
}
function removeClass(elem, className) {
if (elem && className && elem.className) {
elem.className = (" " + elem.className + " ").replace(" " + className + " ", " ")
.trim();
}
}
function onEach(arr, func) {
if (arr && arr.length > 0 && func) {
for (var i = 0; i < arr.length; i++) {
func(arr[i]);
}
}
}
function isHidden(elem) {
return (elem.offsetParent === null)
}
// used for special search precedence
var TY_PRIMITIVE = itemTypes.indexOf("primitive");
$('.js-only').removeClass('js-only');
onEach(document.getElementsByClassName('js-only'), function(e) {
removeClass(e, 'js-only');
});
function getQueryStringParams() {
var params = {};
@ -65,18 +118,28 @@
from = parseInt(match[1], 10);
to = Math.min(50000, parseInt(match[2] || match[1], 10));
from = Math.min(from, to);
if ($('#' + from).length === 0) {
var elem = document.getElementById(from);
if (!elem) {
return;
}
if (ev === null) { $('#' + from)[0].scrollIntoView(); };
$('.line-numbers span').removeClass('line-highlighted');
if (ev === null) {
var x = document.getElementById(from);
if (x) {
x.scrollIntoView();
}
};
onEach(document.getElementsByClassName('line-numbers'), function(e) {
onEach(e.getElementsByTagName('span'), function(i_e) {
removeClass(i_e, 'line-highlighted');
});
})
for (i = from; i <= to; ++i) {
$('#' + i).addClass('line-highlighted');
addClass(document.getElementById(i), 'line-highlighted');
}
}
}
highlightSourceLines(null);
$(window).on('hashchange', highlightSourceLines);
window.onhashchange = highlightSourceLines;
// Gets the human-readable string for the virtual-key code of the
// given KeyboardEvent, ev.
@ -99,23 +162,25 @@
}
function handleShortcut(ev) {
if (document.activeElement.tagName == "INPUT")
if (document.activeElement.tagName === "INPUT")
return;
// Don't interfere with browser shortcuts
if (ev.ctrlKey || ev.altKey || ev.metaKey)
return;
var help = document.getElementById("help");
switch (getVirtualKey(ev)) {
case "Escape":
if (!$("#help").hasClass("hidden")) {
var search = document.getElementById("search");
if (!hasClass(help, "hidden")) {
ev.preventDefault();
$("#help").addClass("hidden");
$("body").removeClass("blur");
} else if (!$("#search").hasClass("hidden")) {
addClass(help, "hidden");
removeClass(document.body, "blur");
} else if (!hasClass(search, "hidden")) {
ev.preventDefault();
$("#search").addClass("hidden");
$("#main").removeClass("hidden");
addClass(search, "hidden");
removeClass(document.getElementById("main"), "hidden");
}
break;
@ -131,42 +196,76 @@
break;
case "?":
if (ev.shiftKey && $("#help").hasClass("hidden")) {
if (ev.shiftKey && hasClass(help, "hidden")) {
ev.preventDefault();
$("#help").removeClass("hidden");
$("body").addClass("blur");
removeClass(help, "hidden");
addClass(document.body, "blur");
}
break;
}
}
$(document).on("keypress", handleShortcut);
$(document).on("keydown", handleShortcut);
$(document).on("click", function(ev) {
if (!$(ev.target).closest("#help > div").length) {
$("#help").addClass("hidden");
$("body").removeClass("blur");
}
});
document.onkeypress = handleShortcut;
document.onkeydown = handleShortcut;
document.onclick = function(ev) {
if (hasClass(ev.target, 'collapse-toggle')) {
collapseDocs(ev.target);
} else if (hasClass(ev.target.parentNode, 'collapse-toggle')) {
collapseDocs(ev.target.parentNode);
} else if (ev.target.tagName === 'SPAN' && hasClass(ev.target.parentNode, 'line-numbers')) {
var prev_id = 0;
$('.version-selector').on('change', function() {
var i, match,
url = document.location.href,
stripped = '',
len = rootPath.match(/\.\.\//g).length + 1;
var set_fragment = function (name) {
if (browserSupportsHistoryApi()) {
history.replaceState(null, null, '#' + name);
window.hashchange();
} else {
location.replace('#' + name);
}
};
for (i = 0; i < len; ++i) {
match = url.match(/\/[^\/]*$/);
if (i < len - 1) {
stripped = match[0] + stripped;
var cur_id = parseInt(ev.target.id, 10);
if (ev.shiftKey && prev_id) {
if (prev_id > cur_id) {
var tmp = prev_id;
prev_id = cur_id;
cur_id = tmp;
}
set_fragment(prev_id + '-' + cur_id);
} else {
prev_id = cur_id;
set_fragment(cur_id);
}
url = url.substring(0, url.length - match[0].length);
} else if (!hasClass(document.getElementById("help"), "hidden")) {
addClass(document.getElementById("help"), "hidden");
removeClass(document.body, "blur");
}
};
url += '/' + $('.version-selector').val() + stripped;
var x = document.getElementsByClassName('version-selector');
if (x.length > 0) {
x[0].onchange = function() {
var i, match,
url = document.location.href,
stripped = '',
len = rootPath.match(/\.\.\//g).length + 1;
document.location.href = url;
});
for (i = 0; i < len; ++i) {
match = url.match(/\/[^\/]*$/);
if (i < len - 1) {
stripped = match[0] + stripped;
}
url = url.substring(0, url.length - match[0].length);
}
url += '/' + document.getElementsByClassName('version-selector')[0].value + stripped;
document.location.href = url;
};
}
/**
* A function to compute the Levenshtein distance between two strings
@ -214,8 +313,8 @@
// but only if the input bar is empty. This avoid the obnoxious issue
// where you start trying to do a search, and the index loads, and
// suddenly your search is gone!
if ($(".search-input")[0].value === "") {
$(".search-input")[0].value = params.search || '';
if (document.getElementsByClassName("search-input")[0].value === "") {
document.getElementsByClassName("search-input")[0].value = params.search || '';
}
/**
@ -484,7 +583,8 @@
}
function getQuery() {
var matches, type, query, raw = $('.search-input').val();
var matches, type, query, raw =
document.getElementsByClassName('search-input')[0].value;
query = raw;
matches = query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);
@ -502,54 +602,92 @@
}
function initSearchNav() {
var hoverTimeout, $results = $('.search-results .result');
var hoverTimeout;
$results.on('click', function() {
var dst = $(this).find('a')[0];
var click_func = function(e) {
var el = e.target;
// to retrieve the real "owner" of the event.
while (el.tagName !== 'TR') {
el = el.parentNode;
}
var dst = e.target.getElementsByTagName('a');
if (dst.length < 1) {
return;
}
dst = dst[0];
if (window.location.pathname === dst.pathname) {
$('#search').addClass('hidden');
$('#main').removeClass('hidden');
addClass(document.getElementById('search'), 'hidden');
removeClass(document.getElementById('main'), 'hidden');
document.location.href = dst.href;
}
}).on('mouseover', function() {
var $el = $(this);
};
var mouseover_func = function(e) {
var el = e.target;
// to retrieve the real "owner" of the event.
while (el.tagName !== 'TR') {
el = el.parentNode;
}
clearTimeout(hoverTimeout);
hoverTimeout = setTimeout(function() {
$results.removeClass('highlighted');
$el.addClass('highlighted');
onEach(document.getElementsByClassName('search-results'), function(e) {
onEach(e.getElementsByClassName('result'), function(i_e) {
removeClass(i_e, 'highlighted');
});
});
addClass(el, 'highlighted');
}, 20);
};
onEach(document.getElementsByClassName('search-results'), function(e) {
onEach(e.getElementsByClassName('result'), function(i_e) {
i_e.onclick = click_func;
i_e.onmouseover = mouseover_func;
});
});
$(document).off('keydown.searchnav');
$(document).on('keydown.searchnav', function(e) {
var $active = $results.filter('.highlighted');
var search_input = document.getElementsByClassName('search-input')[0];
search_input.onkeydown = null;
search_input.onkeydown = function(e) {
var actives = [];
onEach(document.getElementsByClassName('search-results'), function(e) {
onEach(document.getElementsByClassName('highlighted'), function(e) {
actives.push(e);
});
});
if (e.which === 38) { // up
if (!$active.length || !$active.prev()) {
if (!actives.length || !actives[0].previousElementSibling) {
return;
}
$active.prev().addClass('highlighted');
$active.removeClass('highlighted');
addClass(actives[0].previousElementSibling, 'highlighted');
removeClass(actives[0], 'highlighted');
} else if (e.which === 40) { // down
if (!$active.length) {
$results.first().addClass('highlighted');
} else if ($active.next().length) {
$active.next().addClass('highlighted');
$active.removeClass('highlighted');
if (!actives.length) {
var results = document.getElementsByClassName('search-results');
if (results.length > 0) {
var res = results[0].getElementsByClassName('result');
if (res.length > 0) {
addClass(res[0], 'highlighted');
}
}
} else if (actives[0].nextElementSibling) {
addClass(actives[0].nextElementSibling, 'highlighted');
removeClass(actives[0], 'highlighted');
}
} else if (e.which === 13) { // return
if ($active.length) {
document.location.href = $active.find('a').prop('href');
if (actives.length) {
document.location.href = actives[0].getElementsByTagName('a')[0].href;
}
} else {
$active.removeClass('highlighted');
} else if (actives.length > 0) {
removeClass(actives[0], 'highlighted');
}
});
};
}
function escape(content) {
return $('<h1/>').text(content).html();
var h1 = document.createElement('h1');
h1.textContent = content;
return h1.innerHTML;
}
function showResults(results) {
@ -609,7 +747,7 @@
displayPath + '<span class="' + type + '">' +
name + '</span></a></td><td>' +
'<a href="' + href + '">' +
'<span class="desc">' + item.desc +
'<span class="desc">' + escape(item.desc) +
'&nbsp;</span></a></td></tr>';
});
} else {
@ -619,10 +757,19 @@
}
output += "</p>";
$('#main.content').addClass('hidden');
$('#search.content').removeClass('hidden').html(output);
$('#search .desc').width($('#search').width() - 40 -
$('#search td:first-child').first().width());
addClass(document.getElementById('main'), 'hidden');
var search = document.getElementById('search');
removeClass(search, 'hidden');
search.innerHTML = output;
var tds = search.getElementsByTagName('td');
var td_width = 0;
if (tds.length > 0) {
td_width = tds[0].offsetWidth;
}
var width = search.offsetWidth - 40 - td_width;
onEach(search.getElementsByClassName('desc'), function(e) {
e.style.width = width + 'px';
});
initSearchNav();
}
@ -645,17 +792,15 @@
}
// Update document title to maintain a meaningful browser history
$(document).prop("title", "Results for " + query.query + " - Rust");
document.title = "Results for " + query.query + " - Rust";
// Because searching is incremental by character, only the most
// recent search query is added to the browser history.
if (browserSupportsHistoryApi()) {
if (!history.state && !params.search) {
history.pushState(query, "", "?search=" +
encodeURIComponent(query.raw));
history.pushState(query, "", "?search=" + encodeURIComponent(query.raw));
} else {
history.replaceState(query, "", "?search=" +
encodeURIComponent(query.raw));
history.replaceState(query, "", "?search=" + encodeURIComponent(query.raw));
}
}
@ -744,49 +889,68 @@
function startSearch() {
var searchTimeout;
$(".search-input").on("keyup input",function() {
var callback = function() {
var search_input = document.getElementsByClassName('search-input');
if (search_input.length < 1) { return; }
search_input = search_input[0];
clearTimeout(searchTimeout);
if ($(this).val().length === 0) {
if (search_input.value.length === 0) {
if (browserSupportsHistoryApi()) {
history.replaceState("", "std - Rust", "?search=");
}
$('#main.content').removeClass('hidden');
$('#search.content').addClass('hidden');
var main = document.getElementById('main');
if (hasClass(main, 'content')) {
removeClass(main, 'hidden');
}
var search_c = document.getElementById('search');
if (hasClass(search_c, 'content')) {
addClass(search_c, 'hidden');
}
} else {
searchTimeout = setTimeout(search, 500);
}
});
$('.search-form').on('submit', function(e){
};
var search_input = document.getElementsByClassName("search-input")[0];
search_input.onkeyup = callback;
search_input.oninput = callback;
document.getElementsByClassName("search-form")[0].onsubmit = function(e){
e.preventDefault();
clearTimeout(searchTimeout);
search();
});
$('.search-input').on('change paste', function(e) {
};
search_input.onchange = function(e) {
// Do NOT e.preventDefault() here. It will prevent pasting.
clearTimeout(searchTimeout);
// zero-timeout necessary here because at the time of event handler execution the
// pasted content is not in the input field yet. Shouldnt make any difference for
// change, though.
setTimeout(search, 0);
});
};
search_input.onpaste = search_input.onchange;
// Push and pop states are used to add search results to the browser
// history.
if (browserSupportsHistoryApi()) {
// Store the previous <title> so we can revert back to it later.
var previousTitle = $(document).prop("title");
var previousTitle = document.title;
$(window).on('popstate', function(e) {
window.onpopstate = function(e) {
var params = getQueryStringParams();
// When browsing back from search results the main page
// visibility must be reset.
if (!params.search) {
$('#main.content').removeClass('hidden');
$('#search.content').addClass('hidden');
var main = document.getElementById('main');
if (hasClass(main, 'content')) {
removeClass(main, 'hidden');
}
var search_c = document.getElementById('search');
if (hasClass(search_c, 'content')) {
addClass(search_c, 'hidden');
}
}
// Revert to the previous title manually since the History
// API ignores the title parameter.
$(document).prop("title", previousTitle);
document.title = previousTitle;
// When browsing forward to search results the previous
// search will be repeated, so the currentResults are
// cleared to ensure the search is successful.
@ -795,35 +959,33 @@
// perform the search. This will empty the bar if there's
// nothing there, which lets you really go back to a
// previous state with nothing in the bar.
$('.search-input').val(params.search);
if (params.search) {
document.getElementsByClassName('search-input')[0].value = params.search;
} else {
document.getElementsByClassName('search-input')[0].value = '';
}
// Some browsers fire 'onpopstate' for every page load
// (Chrome), while others fire the event only when actually
// popping a state (Firefox), which is why search() is
// called both here and at the end of the startSearch()
// function.
search();
});
};
}
search();
}
function plainSummaryLine(markdown) {
markdown.replace(/\n/g, ' ')
.replace(/'/g, "\'")
.replace(/^#+? (.+?)/, "$1")
.replace(/\[(.*?)\]\(.*?\)/g, "$1")
.replace(/\[(.*?)\]\[.*?\]/g, "$1");
}
index = buildIndex(rawSearchIndex);
startSearch();
// Draw a convenient sidebar of known crates if we have a listing
if (rootPath === '../') {
var sidebar = $('.sidebar');
var div = $('<div>').attr('class', 'block crate');
div.append($('<h3>').text('Crates'));
var ul = $('<ul>').appendTo(div);
var sidebar = document.getElementsByClassName('sidebar')[0];
var div = document.createElement('div');
div.className = 'block crate';
div.innerHTML = '<h3>Crates</h3>';
var ul = document.createElement('ul');
div.appendChild(ul);
var crates = [];
for (var crate in rawSearchIndex) {
@ -836,15 +998,17 @@
if (crates[i] === window.currentCrate) {
klass += ' current';
}
if (rawSearchIndex[crates[i]].items[0]) {
var desc = rawSearchIndex[crates[i]].items[0][3];
var link = $('<a>', {'href': '../' + crates[i] + '/index.html',
'title': plainSummaryLine(desc),
'class': klass}).text(crates[i]);
ul.append($('<li>').append(link));
}
var link = document.createElement('a');
link.href = '../' + crates[i] + '/index.html';
link.title = rawSearchIndex[crates[i]].doc;
link.className = klass;
link.textContent = crates[i];
var li = document.createElement('li');
li.appendChild(link);
ul.appendChild(li);
}
sidebar.append(div);
sidebar.appendChild(div);
}
}
@ -852,16 +1016,19 @@
// delayed sidebar rendering.
function initSidebarItems(items) {
var sidebar = $('.sidebar');
var sidebar = document.getElementsByClassName('sidebar')[0];
var current = window.sidebarCurrent;
function block(shortty, longty) {
var filtered = items[shortty];
if (!filtered) { return; }
var div = $('<div>').attr('class', 'block ' + shortty);
div.append($('<h3>').text(longty));
var ul = $('<ul>').appendTo(div);
var div = document.createElement('div');
div.className = 'block ' + shortty;
var h3 = document.createElement('h3');
h3.textContent = longty;
div.appendChild(h3);
var ul = document.createElement('ul');
for (var i = 0; i < filtered.length; ++i) {
var item = filtered[i];
@ -878,12 +1045,17 @@
} else {
path = shortty + '.' + name + '.html';
}
var link = $('<a>', {'href': current.relpath + path,
'title': desc,
'class': klass}).text(name);
ul.append($('<li>').append(link));
var link = document.createElement('a');
link.href = current.relpath + path;
link.title = desc;
link.className = klass;
link.textContent = name;
var li = document.createElement('li');
li.appendChild(link);
ul.appendChild(li);
}
sidebar.append(div);
div.appendChild(ul);
sidebar.appendChild(div);
}
block("primitive", "Primitive Types");
@ -901,21 +1073,25 @@
window.initSidebarItems = initSidebarItems;
window.register_implementors = function(imp) {
var list = $('#implementors-list');
var list = document.getElementById('implementors-list');
var libs = Object.getOwnPropertyNames(imp);
for (var i = 0; i < libs.length; ++i) {
if (libs[i] === currentCrate) { continue; }
var structs = imp[libs[i]];
for (var j = 0; j < structs.length; ++j) {
var code = $('<code>').append(structs[j]);
$.each(code.find('a'), function(idx, a) {
var href = $(a).attr('href');
var code = document.createElement('code');
code.innerHTML = structs[j];
var x = code.getElementsByTagName('a');
for (var k = 0; k < x.length; k++) {
var href = x[k].getAttribute('href');
if (href && href.indexOf('http') !== 0) {
$(a).attr('href', rootPath + href);
x[k].setAttribute('href', rootPath + href);
}
});
var li = $('<li>').append(code);
list.append(li);
}
var li = document.createElement('li');
li.appendChild(code);
list.appendChild(li);
}
}
};
@ -923,15 +1099,6 @@
window.register_implementors(window.pending_implementors);
}
// See documentation in html/render.rs for what this is doing.
var query = getQueryStringParams();
if (query['gotosrc']) {
window.location = $('#src-' + query['gotosrc']).attr('href');
}
if (query['gotomacrosrc']) {
window.location = $('.srclink').attr('href');
}
function labelForToggleButton(sectionIsCollapsed) {
if (sectionIsCollapsed) {
// button will expand the section
@ -942,105 +1109,186 @@
return "\u2212"; // "\u2212" is '' minus sign
}
function toggleAllDocs() {
var toggle = $("#toggle-all-docs");
if (toggle.hasClass("will-expand")) {
toggle.removeClass("will-expand");
toggle.children(".inner").text(labelForToggleButton(false));
toggle.attr("title", "collapse all docs");
$(".docblock").show();
$(".toggle-label").hide();
$(".toggle-wrapper").removeClass("collapsed");
$(".collapse-toggle").children(".inner").text(labelForToggleButton(false));
} else {
toggle.addClass("will-expand");
toggle.children(".inner").text(labelForToggleButton(true));
toggle.attr("title", "expand all docs");
$(".docblock").hide();
$(".toggle-label").show();
$(".toggle-wrapper").addClass("collapsed");
$(".collapse-toggle").children(".inner").text(labelForToggleButton(true));
function onEveryMatchingChild(elem, className, func) {
if (elem && className && func) {
for (var i = 0; i < elem.childNodes.length; i++) {
if (hasClass(elem.childNodes[i], className)) {
func(elem.childNodes[i]);
} else {
onEveryMatchingChild(elem.childNodes[i], className, func);
}
}
}
}
$("#toggle-all-docs").on("click", toggleAllDocs);
$(document).on("click", ".collapse-toggle", function() {
var toggle = $(this);
var relatedDoc = toggle.parent().next();
if (relatedDoc.is(".stability")) {
relatedDoc = relatedDoc.next();
function toggleAllDocs() {
var toggle = document.getElementById("toggle-all-docs");
if (hasClass(toggle, "will-expand")) {
removeClass(toggle, "will-expand");
onEveryMatchingChild(toggle, "inner", function(e) {
e.innerHTML = labelForToggleButton(false);
});
toggle.title = "collapse all docs";
onEach(document.getElementsByClassName("docblock"), function(e) {
e.style.display = 'block';
});
onEach(document.getElementsByClassName("toggle-label"), function(e) {
e.style.display = 'none';
});
onEach(document.getElementsByClassName("toggle-wrapper"), function(e) {
removeClass(e, "collapsed");
});
onEach(document.getElementsByClassName("collapse-toggle"), function(e) {
onEveryMatchingChild(e, "inner", function(i_e) {
i_e.innerHTML = labelForToggleButton(false);
});
});
} else {
addClass(toggle, "will-expand");
onEveryMatchingChild(toggle, "inner", function(e) {
e.innerHTML = labelForToggleButton(true);
});
toggle.title = "expand all docs";
onEach(document.getElementsByClassName("docblock"), function(e) {
e.style.display = 'none';
});
onEach(document.getElementsByClassName("toggle-label"), function(e) {
e.style.display = 'inline-block';
});
onEach(document.getElementsByClassName("toggle-wrapper"), function(e) {
addClass(e, "collapsed");
});
onEach(document.getElementsByClassName("collapse-toggle"), function(e) {
onEveryMatchingChild(e, "inner", function(i_e) {
i_e.innerHTML = labelForToggleButton(true);
});
});
}
if (relatedDoc.is(".docblock")) {
if (relatedDoc.is(":visible")) {
relatedDoc.slideUp({duration: 'fast', easing: 'linear'});
toggle.parent(".toggle-wrapper").addClass("collapsed");
toggle.children(".inner").text(labelForToggleButton(true));
toggle.children(".toggle-label").fadeIn();
}
function collapseDocs(toggle) {
if (!toggle || !toggle.parentNode) {
return;
}
var relatedDoc = toggle.parentNode.nextElementSibling;
if (hasClass(relatedDoc, "stability")) {
relatedDoc = relatedDoc.nextElementSibling;
}
if (hasClass(relatedDoc, "docblock")) {
if (!isHidden(relatedDoc)) {
relatedDoc.style.display = 'none';
onEach(toggle.childNodes, function(e) {
if (hasClass(e, 'toggle-label')) {
e.style.display = 'inline-block';
}
if (hasClass(e, 'inner')) {
e.innerHTML = labelForToggleButton(true);
}
});
addClass(toggle.parentNode, 'collapsed');
} else {
relatedDoc.slideDown({duration: 'fast', easing: 'linear'});
toggle.parent(".toggle-wrapper").removeClass("collapsed");
toggle.children(".inner").text(labelForToggleButton(false));
toggle.children(".toggle-label").hide();
relatedDoc.style.display = 'block';
removeClass(toggle.parentNode, 'collapsed');
onEach(toggle.childNodes, function(e) {
if (hasClass(e, 'toggle-label')) {
e.style.display = 'none';
}
if (hasClass(e, 'inner')) {
e.innerHTML = labelForToggleButton(false);
}
});
}
}
}
var x = document.getElementById('toggle-all-docs');
if (x) {
x.onclick = toggleAllDocs;
}
function insertAfter(newNode, referenceNode) {
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}
var toggle = document.createElement('a');
toggle.href = 'javascript:void(0)';
toggle.className = 'collapse-toggle';
toggle.innerHTML = "[<span class='inner'>"+labelForToggleButton(false)+"</span>]";
var func = function(e) {
var next = e.nextElementSibling;
if (!next) {
return;
}
if (hasClass(next, 'docblock') ||
(hasClass(next, 'stability') &&
hasClass(next.nextElementSibling, 'docblock'))) {
insertAfter(toggle.cloneNode(true), e.childNodes[e.childNodes.length - 1]);
}
}
onEach(document.getElementsByClassName('method'), func);
onEach(document.getElementsByClassName('impl-items'), function(e) {
onEach(e.getElementsByClassName('associatedconstant'), func);
});
var span = document.createElement('span');
span.className = 'toggle-label';
span.style.display = 'none';
span.innerHTML = '&nbsp;Expand&nbsp;description';
var mainToggle = toggle.cloneNode(true);
mainToggle.appendChild(span);
var wrapper = document.createElement('div');
wrapper.className = 'toggle-wrapper';
wrapper.appendChild(mainToggle);
onEach(document.getElementById('main').getElementsByClassName('docblock'), function(e) {
if (e.parentNode.id === "main") {
e.parentNode.insertBefore(wrapper, e);
}
});
$(function() {
var toggle = $("<a/>", {'href': 'javascript:void(0)', 'class': 'collapse-toggle'})
.html("[<span class='inner'></span>]");
toggle.children(".inner").text(labelForToggleButton(false));
$(".method").each(function() {
if ($(this).next().is(".docblock") ||
($(this).next().is(".stability") && $(this).next().next().is(".docblock"))) {
$(this).children().last().after(toggle.clone());
}
});
var mainToggle =
$(toggle).append(
$('<span/>', {'class': 'toggle-label'})
.css('display', 'none')
.html('&nbsp;Expand&nbsp;description'));
var wrapper = $("<div class='toggle-wrapper'>").append(mainToggle);
$("#main > .docblock").before(wrapper);
});
$('pre.line-numbers').on('click', 'span', function() {
var prev_id = 0;
function set_fragment(name) {
if (browserSupportsHistoryApi()) {
history.replaceState(null, null, '#' + name);
$(window).trigger('hashchange');
} else {
location.replace('#' + name);
}
}
return function(ev) {
var cur_id = parseInt(ev.target.id, 10);
if (ev.shiftKey && prev_id) {
if (prev_id > cur_id) {
var tmp = prev_id;
prev_id = cur_id;
cur_id = tmp;
onEach(document.getElementsByClassName('docblock'), function(e) {
if (hasClass(e, 'autohide')) {
var wrap = e.previousElementSibling;
if (wrap && hasClass(wrap, 'toggle-wrapper')) {
var toggle = wrap.childNodes[0];
if (e.childNodes[0].tagName === 'H3') {
onEach(toggle.getElementsByClassName('toggle-label'), function(i_e) {
i_e.innerHTML = " Show " + e.childNodes[0].innerHTML;
});
}
set_fragment(prev_id + '-' + cur_id);
} else {
prev_id = cur_id;
set_fragment(cur_id);
e.style.display = 'none';
addClass(wrap, 'collapsed');
onEach(toggle.getElementsByClassName('inner'), function(e) {
e.innerHTML = labelForToggleButton(true);
});
onEach(toggle.getElementsByClassName('toggle-label'), function(e) {
e.style.display = 'block';
});
}
};
}());
}
})
var span = document.createElement('span');
span.className = 'toggle-label';
span.style.display = 'none';
span.innerHTML = '&nbsp;Expand&nbsp;attributes';
toggle.appendChild(span);
var wrapper = document.createElement('div');
wrapper.className = 'toggle-wrapper toggle-attributes';
wrapper.appendChild(toggle);
onEach(document.getElementById('main').getElementsByTagName('pre'), function(e) {
onEach(e.getElementsByClassName('attributes'), function(i_e) {
i_e.parentNode.insertBefore(wrapper, i_e);
collapseDocs(i_e.previousSibling.childNodes[0]);
});
});
}());
// Sets the focus on the search bar at the top of the page
function focusSearchBar() {
$('.search-input').focus();
document.getElementsByClassName('search-input')[0].focus();
}

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,7 @@
<title>rusty_secrets - Rust</title>
<link rel="stylesheet" type="text/css" href="../normalize.css">
<link rel="stylesheet" type="text/css" href="../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../main.css">
@ -16,7 +17,7 @@
</head>
<body class="rustdoc">
<body class="rustdoc mod">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -28,7 +29,7 @@
<nav class="sidebar">
<p class='location'></p><script>window.sidebarCurrent = {name: 'rusty_secrets', ty: 'mod', relpath: '../'};</script>
<p class='location'>Crate rusty_secrets</p><div class="block items"><ul><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li></ul></div><p class='location'></p><script>window.sidebarCurrent = {name: 'rusty_secrets', ty: 'mod', relpath: '../'};</script>
</nav>
<nav class="sub">
@ -42,33 +43,33 @@
</form>
</nav>
<section id='main' class="content mod">
<h1 class='fqn'><span class='in-band'>Crate <a class='mod' href=''>rusty_secrets</a></span><span class='out-of-band'><span id='render-detail'>
<section id='main' class="content">
<h1 class='fqn'><span class='in-band'>Crate <a class="mod" href=''>rusty_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'>&#x2212;</span>]
</a>
</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>
</span><a class='srclink' href='../src/rusty_secrets/lib.rs.html#1-37' title='goto source code'>[src]</a></span></h1>
<div class='docblock'><p><code>RustySecrets</code> implements Shamir&#39;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='mod' href='sss/index.html'
title='rusty_secrets::sss'>sss</a></td>
<td><a class="mod" href="sss/index.html"
title='mod rusty_secrets::sss'>sss</a></td>
<td class='docblock-short'>
<p>SSS provides Shamir&#39;s secret sharing with raw data.</p>
</td>
</tr>
<tr class=' module-item'>
<td><a class='mod' href='wrapped_secrets/index.html'
title='rusty_secrets::wrapped_secrets'>wrapped_secrets</a></td>
<td><a class="mod" href="wrapped_secrets/index.html"
title='mod rusty_secrets::wrapped_secrets'>wrapped_secrets</a></td>
<td class='docblock-short'>
<p>(Beta) <code>wrapped_secrets</code> provides Shamir&#39;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><a class="struct" href="struct.RustyError.html"
title='struct 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>
@ -129,7 +130,6 @@
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>

View File

@ -9,6 +9,7 @@
<title>rusty_secrets::sss::generate_shares - Rust</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
@ -16,7 +17,7 @@
</head>
<body class="rustdoc">
<body class="rustdoc fn">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -42,25 +43,25 @@
</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'>
<section id='main' class="content">
<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'>&#x2212;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secret: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&amp;[</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sign_shares: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; <a class='type' href='https://doc.rust-lang.org/nightly/std/io/error/type.Result.html' title='std::io::error::Result'>Result</a>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>&gt;&gt;</pre><div class='docblock'><p>Performs threshold k-out-of-n Shamir&#39;s secret sharing.</p>
</span><a class='srclink' href='../../src/rusty_secrets/sss.rs.html#34-69' title='goto source code'>[src]</a></span></h1>
<pre class='rust fn'>pub fn generate_shares(<br>&nbsp;&nbsp;&nbsp;&nbsp;k: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;secret: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;sign_shares: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html" title="struct collections::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/string/struct.String.html" title="struct collections::string::String">String</a>&gt;&gt;</pre><div class='docblock'><p>Performs threshold k-out-of-n Shamir&#39;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'>&quot;These programs were never about terrorism: theyre about economic spying,
social control, and diplomatic manipulation. Theyre about power.&quot;</span>.<span class='ident'>to_string</span>();
<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">&quot;These programs were never about terrorism: theyre about economic spying,
social control, and diplomatic manipulation. Theyre about power.&quot;</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'>&amp;</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'>=&gt;</span> {
<span class='comment'>// Do something with the shares</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">&amp;</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">=&gt;</span> {
<span class="comment">// Do something with the shares</span>
},
<span class='prelude-val'>Err</span>(_) <span class='op'>=&gt;</span> {}<span class='comment'>// Deal with error}</span>
<span class="prelude-val">Err</span>(_) <span class="op">=&gt;</span> {}<span class="comment">// Deal with error}</span>
}</pre>
</div></section>
<section id='search' class="content hidden"></section>
@ -119,7 +120,6 @@
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>

View File

@ -9,6 +9,7 @@
<title>rusty_secrets::sss::recover_secret - Rust</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
@ -16,7 +17,7 @@
</head>
<body class="rustdoc">
<body class="rustdoc fn">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -42,29 +43,29 @@
</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'>
<section id='main' class="content">
<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'>&#x2212;</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>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verify_signatures: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a>&lt;<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>&gt;, <a class='struct' href='../../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>&gt;</pre><div class='docblock'><p>Recovers the secret from a k-out-of-n Shamir&#39;s secret sharing.</p>
</span><a class='srclink' href='../../src/rusty_secrets/sss.rs.html#113-128' title='goto source code'>[src]</a></span></h1>
<pre class='rust fn'>pub fn recover_secret(<br>&nbsp;&nbsp;&nbsp;&nbsp;shares: <a class="struct" href="https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html" title="struct collections::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/string/struct.String.html" title="struct collections::string::String">String</a>&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;verify_signatures: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html" title="struct collections::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;, <a class="struct" href="../../rusty_secrets/struct.RustyError.html" title="struct rusty_secrets::RustyError">RustyError</a>&gt;</pre><div class='docblock'><p>Recovers the secret from a k-out-of-n Shamir&#39;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'>&quot;2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP&quot;</span>.<span class='ident'>to_string</span>();
<span class='kw'>let</span> <span class='ident'>share2</span> <span class='op'>=</span> <span class='string'>&quot;2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF&quot;</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>];
<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">&quot;2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP&quot;</span>.<span class="ident">to_string</span>();
<span class="kw">let</span> <span class="ident">share2</span> <span class="op">=</span> <span class="string">&quot;2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF&quot;</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'>=&gt;</span> {
<span class='comment'>// Do something with the secret</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">=&gt;</span> {
<span class="comment">// Do something with the secret</span>
},
<span class='prelude-val'>Err</span>(<span class='ident'>e</span>) <span class='op'>=&gt;</span> {
<span class='comment'>// Deal with the error</span>
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=&gt;</span> {
<span class="comment">// Deal with the error</span>
}
}</pre>
</div></section>
@ -124,7 +125,6 @@
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>

View File

@ -9,6 +9,7 @@
<title>rusty_secrets::sss - Rust</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
@ -16,7 +17,7 @@
</head>
<body class="rustdoc">
<body class="rustdoc mod">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -28,7 +29,7 @@
<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>
<p class='location'>Module sss</p><div class="block items"><ul><li><a href="#functions">Functions</a></li></ul></div><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">
@ -42,25 +43,25 @@
</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'>
<section id='main' class="content">
<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'>&#x2212;</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>
</span><a class='srclink' href='../../src/rusty_secrets/sss.rs.html#1-128' title='goto source code'>[src]</a></span></h1>
<div class='docblock'><p>SSS provides Shamir&#39;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><a class="fn" href="fn.generate_shares.html"
title='fn rusty_secrets::sss::generate_shares'>generate_shares</a></td>
<td class='docblock-short'>
<p>Performs threshold k-out-of-n Shamir&#39;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><a class="fn" href="fn.recover_secret.html"
title='fn rusty_secrets::sss::recover_secret'>recover_secret</a></td>
<td class='docblock-short'>
<p>Recovers the secret from a k-out-of-n Shamir&#39;s secret sharing.</p>
</td>
@ -121,7 +122,6 @@
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>

View File

@ -9,6 +9,7 @@
<title>rusty_secrets::RustyError - Rust</title>
<link rel="stylesheet" type="text/css" href="../normalize.css">
<link rel="stylesheet" type="text/css" href="../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../main.css">
@ -16,7 +17,7 @@
</head>
<body class="rustdoc">
<body class="rustdoc struct">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -28,7 +29,7 @@
<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>
<p class='location'>Struct RustyError</p><div class="block items"><ul><li><a href="#methods">Methods</a></li><li><a href="#implementations">Trait Implementations</a></li></ul></div><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">
@ -42,34 +43,34 @@
</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'>
<section id='main' class="content">
<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'>&#x2212;</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>
</span><a class='srclink' href='../src/rusty_secrets/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) -&gt; <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span></h4>
</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="struct rusty_secrets::RustyError">RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rusty_secrets/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) -&gt; <a class="struct" href="../rusty_secrets/struct.RustyError.html" title="struct 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>(&amp;self) -&gt; <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a>&lt;<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>&gt;</code></span></h4>
</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>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;</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>(&amp;self) -&gt; <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a>&lt;<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>&gt;&gt;&gt;</code></span></h4>
</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>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html" title="struct collections::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html" title="struct collections::vec::Vec">Vec</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>&gt;&gt;&gt;</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>(&amp;self, __arg_0: &amp;mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -&gt; <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></span></h4>
</div></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="trait core::fmt::Debug">Debug</a> for <a class="struct" href="../rusty_secrets/struct.RustyError.html" title="struct rusty_secrets::RustyError">RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rusty_secrets/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>(&amp;self, __arg_0: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/nightly/core/fmt/type.Result.html" title="type 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>(&amp;self, f: &amp;mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -&gt; <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></span></h4>
<div class='docblock'><p>Formats the value using the given formatter.</p>
</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/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>(&amp;self) -&gt; &amp;<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a></code></span></h4>
</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="trait core::fmt::Display">Display</a> for <a class="struct" href="../rusty_secrets/struct.RustyError.html" title="struct rusty_secrets::RustyError">RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rusty_secrets/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>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>) -&gt; <a class="type" href="https://doc.rust-lang.org/nightly/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></code></span></h4>
<div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html#tymethod.fmt">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/std/error/trait.Error.html" title="trait std::error::Error">Error</a> for <a class="struct" href="../rusty_secrets/struct.RustyError.html" title="struct rusty_secrets::RustyError">RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rusty_secrets/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>(&amp;self) -&gt; &amp;<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>(&amp;self) -&gt; <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a>&lt;&amp;<a class='trait' href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html' title='std::error::Error'>Error</a>&gt;</code></span></h4>
</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>(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;<a class="trait" href="https://doc.rust-lang.org/nightly/std/error/trait.Error.html" title="trait std::error::Error">Error</a>&gt;</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>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>Error</a>&gt; 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>) -&gt; <a class='struct' href='../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a></code></span></h4>
</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="trait core::convert::From">From</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt; for <a class="struct" href="../rusty_secrets/struct.RustyError.html" title="struct rusty_secrets::RustyError">RustyError</a></code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../src/rusty_secrets/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="struct std::io::error::Error">Error</a>) -&gt; <a class="struct" href="../rusty_secrets/struct.RustyError.html" title="struct 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>
@ -128,7 +129,6 @@ It can be used to provide a debug message to the user telling him what shares ar
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>

View File

@ -9,6 +9,7 @@
<title>rusty_secrets::wrapped_secrets::generate_shares - Rust</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
@ -16,7 +17,7 @@
</head>
<body class="rustdoc">
<body class="rustdoc fn">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -42,25 +43,25 @@
</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'>wrapped_secrets</a>::<wbr><a class='fn' href=''>generate_shares</a></span><span class='out-of-band'><span id='render-detail'>
<section id='main' class="content">
<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'>&#x2212;</span>]
</a>
</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; secret: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&amp;[</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mime_type: &amp;<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sign_shares: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; <a class='type' href='https://doc.rust-lang.org/nightly/std/io/error/type.Result.html' title='std::io::error::Result'>Result</a>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>&gt;&gt;</pre><div class='docblock'><p>Performs threshold k-out-of-n Shamir&#39;s secret sharing.</p>
</span><a class='srclink' href='../../src/rusty_secrets/wrapped_secrets.rs.html#26-36' title='goto source code'>[src]</a></span></h1>
<pre class='rust fn'>pub fn generate_shares(<br>&nbsp;&nbsp;&nbsp;&nbsp;k: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;secret: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&amp;[</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>, <br>&nbsp;&nbsp;&nbsp;&nbsp;mime_type: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/string/struct.String.html" title="struct collections::string::String">String</a>&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;sign_shares: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html" title="struct collections::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/string/struct.String.html" title="struct collections::string::String">String</a>&gt;&gt;</pre><div class='docblock'><p>Performs threshold k-out-of-n Shamir&#39;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'>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'>&quot;These programs were never about terrorism: theyre about economic spying,
social control, and diplomatic manipulation. Theyre about power.&quot;</span>.<span class='ident'>to_string</span>();
<pre class="rust rust-example-rendered">
<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">&quot;These programs were never about terrorism: theyre about economic spying,
social control, and diplomatic manipulation. Theyre about power.&quot;</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'>&amp;</span><span class='ident'>secret</span>.<span class='ident'>into_bytes</span>(), <span class='string'>&quot;text/html&quot;</span>, <span class='bool-val'>true</span>){
<span class='prelude-val'>Ok</span>(<span class='ident'>shares</span>) <span class='op'>=&gt;</span> {
<span class='comment'>// Do something with the shares</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">&amp;</span><span class="ident">secret</span>.<span class="ident">into_bytes</span>(), <span class="prelude-val">Some</span>(<span class="string">&quot;text/html&quot;</span>.<span class="ident">to_string</span>()), <span class="bool-val">true</span>){
<span class="prelude-val">Ok</span>(<span class="ident">shares</span>) <span class="op">=&gt;</span> {
<span class="comment">// Do something with the shares</span>
},
<span class='prelude-val'>Err</span>(_) <span class='op'>=&gt;</span> {}<span class='comment'>// Deal with error}</span>
<span class="prelude-val">Err</span>(_) <span class="op">=&gt;</span> {}<span class="comment">// Deal with error}</span>
}</pre>
</div></section>
<section id='search' class="content hidden"></section>
@ -119,7 +120,6 @@
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>

View File

@ -9,6 +9,7 @@
<title>rusty_secrets::wrapped_secrets::recover_secret - Rust</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
@ -16,7 +17,7 @@
</head>
<body class="rustdoc">
<body class="rustdoc fn">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -42,29 +43,29 @@
</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'>wrapped_secrets</a>::<wbr><a class='fn' href=''>recover_secret</a></span><span class='out-of-band'><span id='render-detail'>
<section id='main' class="content">
<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'>&#x2212;</span>]
</a>
</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>&lt;<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>&gt;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verify_signatures: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a>&lt;RustySecret, <a class='struct' href='../../rusty_secrets/struct.RustyError.html' title='rusty_secrets::RustyError'>RustyError</a>&gt;</pre><div class='docblock'><p>Recovers the secret from a k-out-of-n Shamir&#39;s secret sharing.</p>
</span><a class='srclink' href='../../src/rusty_secrets/wrapped_secrets.rs.html#59-64' title='goto source code'>[src]</a></span></h1>
<pre class='rust fn'>pub fn recover_secret(<br>&nbsp;&nbsp;&nbsp;&nbsp;shares: <a class="struct" href="https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html" title="struct collections::vec::Vec">Vec</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/collections/string/struct.String.html" title="struct collections::string::String">String</a>&gt;, <br>&nbsp;&nbsp;&nbsp;&nbsp;verify_signatures: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><br>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;RustySecret, <a class="struct" href="../../rusty_secrets/struct.RustyError.html" title="struct rusty_secrets::RustyError">RustyError</a>&gt;</pre><div class='docblock'><p>Recovers the secret from a k-out-of-n Shamir&#39;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'>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'>&quot;2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP&quot;</span>.<span class='ident'>to_string</span>();
<span class='kw'>let</span> <span class='ident'>share2</span> <span class='op'>=</span> <span class='string'>&quot;2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF&quot;</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>];
<pre class="rust rust-example-rendered">
<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">&quot;2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP&quot;</span>.<span class="ident">to_string</span>();
<span class="kw">let</span> <span class="ident">share2</span> <span class="op">=</span> <span class="string">&quot;2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF&quot;</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'>=&gt;</span> {
<span class='comment'>// Do something with the secret</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">=&gt;</span> {
<span class="comment">// Do something with the secret</span>
},
<span class='prelude-val'>Err</span>(<span class='ident'>e</span>) <span class='op'>=&gt;</span> {
<span class='comment'>// Deal with the error</span>
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=&gt;</span> {
<span class="comment">// Deal with the error</span>
}
}</pre>
</div></section>
@ -124,7 +125,6 @@
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>

View File

@ -9,6 +9,7 @@
<title>rusty_secrets::wrapped_secrets - Rust</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
@ -16,7 +17,7 @@
</head>
<body class="rustdoc">
<body class="rustdoc mod">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -28,7 +29,7 @@
<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>
<p class='location'>Module wrapped_secrets</p><div class="block items"><ul><li><a href="#functions">Functions</a></li></ul></div><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">
@ -42,25 +43,25 @@
</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'>
<section id='main' class="content">
<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'>&#x2212;</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>
</span><a class='srclink' href='../../src/rusty_secrets/wrapped_secrets.rs.html#1-64' title='goto source code'>[src]</a></span></h1>
<div class='docblock'><p>(Beta) <code>wrapped_secrets</code> provides Shamir&#39;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><a class="fn" href="fn.generate_shares.html"
title='fn rusty_secrets::wrapped_secrets::generate_shares'>generate_shares</a></td>
<td class='docblock-short'>
<p>Performs threshold k-out-of-n Shamir&#39;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><a class="fn" href="fn.recover_secret.html"
title='fn 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&#39;s secret sharing.</p>
</td>
@ -121,7 +122,6 @@
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>

View File

@ -1,3 +1,3 @@
var searchIndex = {};
searchIndex["rusty_secrets"] = {"doc":"`RustySecrets` implements Shamir&#39;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&#39;s secret sharing with raw data.",null,null],[5,"generate_shares","rusty_secrets::sss","Performs threshold k-out-of-n Shamir&#39;s secret sharing.",null,null],[5,"recover_secret","","Recovers the secret from a k-out-of-n Shamir&#39;s secret sharing.",null,{"inputs":[{"name":"vec"},{"name":"bool"}],"output":{"name":"result"}}],[0,"wrapped_secrets","rusty_secrets","(Beta) `wrapped_secrets` provides Shamir&#39;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&#39;s secret sharing.",null,null],[5,"recover_secret","","Recovers the secret from a k-out-of-n Shamir&#39;s secret sharing.",null,{"inputs":[{"name":"vec"},{"name":"bool"}],"output":{"name":"result"}}]],"paths":[[3,"RustyError"]]};
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,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[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,{"inputs":[{"name":"self"}],"output":{"name":"option"}}],[11,"share_groups","","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.",0,{"inputs":[{"name":"self"}],"output":{"name":"option"}}],[11,"fmt","","",0,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"description","","",0,{"inputs":[{"name":"self"}],"output":{"name":"str"}}],[11,"cause","","",0,{"inputs":[{"name":"self"}],"output":{"name":"option"}}],[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);

View File

@ -0,0 +1,474 @@
<!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/custom_error.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>custom_error.rs.html -- source</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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>
</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="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">RustyError</span> {
<span class="ident">descr</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
<span class="ident">detail</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
<span class="ident">share_index</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>,
<span class="ident">share_groups</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span><span class="op">&gt;</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">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</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">fn</span> <span class="ident">new</span>(<span class="ident">descr</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>, <span class="ident">detail</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>, <span class="ident">share_index</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>, <span class="ident">share_groups</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span><span class="op">&gt;</span>) <span class="op">-&gt;</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">-&gt;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span><span class="op">&gt;</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">&amp;</span><span class="ident">RustyErrorTypes</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span> {
<span class="kw">match</span> <span class="kw-2">*</span><span class="ident">error_type</span> {
<span class="ident">RustyErrorTypes</span>::<span class="ident">EmptyShares</span> <span class="op">=&gt;</span> <span class="string">&quot;No shares were provided.&quot;</span>,
<span class="ident">RustyErrorTypes</span>::<span class="ident">IncompatibleSets</span>(_) <span class="op">=&gt;</span> <span class="string">&quot;The shares are incompatible with each other.&quot;</span>,
<span class="ident">RustyErrorTypes</span>::<span class="ident">InvalidSignature</span>(_, _) <span class="op">=&gt;</span> <span class="string">&quot;The signature of this share is not valid.&quot;</span>,
<span class="ident">RustyErrorTypes</span>::<span class="ident">MissingShares</span>(_, _) <span class="op">=&gt;</span> <span class="string">&quot;The number of shares provided is insufficient to recover the secret.&quot;</span>,
<span class="ident">RustyErrorTypes</span>::<span class="ident">MissingSignature</span>(_) <span class="op">=&gt;</span> <span class="string">&quot;Signature is missing while shares are required to be signed.&quot;</span>,
<span class="ident">RustyErrorTypes</span>::<span class="ident">SecretDeserializationIssue</span> <span class="op">=&gt;</span> <span class="string">&quot;An issue was encountered deserializing the secret.
Updating to the latest version of RustySecrets might help fix this.&quot;</span>,
<span class="ident">RustyErrorTypes</span>::<span class="ident">ShareParsingError</span>(_, _) <span class="op">=&gt;</span> <span class="string">&quot;This share is incorrectly formatted.&quot;</span>,
<span class="ident">RustyErrorTypes</span>::<span class="ident">DuplicateShareNum</span>(_) <span class="op">=&gt;</span> <span class="string">&quot;This share number has already been used by a previous share.&quot;</span>,
<span class="ident">RustyErrorTypes</span>::<span class="ident">DuplicateShareData</span>(_) <span class="op">=&gt;</span> <span class="string">&quot;The data encoded in this share is the same as the one found in a previous share.&quot;</span>
}
}
<span class="kw">fn</span> <span class="ident">detail_for_type</span>(<span class="ident">error_type</span>: <span class="kw-2">&amp;</span><span class="ident">RustyErrorTypes</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="kw-2">*</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">=&gt;</span> <span class="prelude-val">Some</span>(<span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{} shares are required to recover the secret,
found only {}.&quot;</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">=&gt;</span> <span class="prelude-val">Some</span>(<span class="ident">description</span>.<span class="ident">clone</span>()),
_ <span class="op">=&gt;</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">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span><span class="op">&gt;</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">=&gt;</span> <span class="prelude-val">Some</span>(<span class="ident">groups</span>),
_ <span class="op">=&gt;</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">&amp;</span><span class="ident">RustyErrorTypes</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="kw-2">*</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">=&gt;</span> <span class="prelude-val">Some</span>(<span class="ident">share_num</span>),
_ <span class="op">=&gt;</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">RustyError</span> {
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">fmt</span>::<span class="ident">Formatter</span>) <span class="op">-&gt;</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">=&gt;</span> <span class="macro">write</span><span class="macro">!</span>(<span class="ident">f</span>, <span class="string">&quot;{}&quot;</span>, <span class="self">self</span>.<span class="ident">descr</span>),
<span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">detail</span>) <span class="op">=&gt;</span> <span class="macro">write</span><span class="macro">!</span>(<span class="ident">f</span>, <span class="string">&quot;{} ({})&quot;</span>, <span class="self">self</span>.<span class="ident">descr</span>, <span class="ident">detail</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">Error</span><span class="op">&gt;</span> {
<span class="prelude-val">None</span>
}
}
<span class="kw">impl</span> <span class="ident">From</span><span class="op">&lt;</span><span class="ident">io</span>::<span class="ident">Error</span><span class="op">&gt;</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">-&gt;</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">&quot;from io:Error&quot;</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">&lt;</span><span class="ident">RustyError</span><span class="op">&gt;</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">-&gt;</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">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>, <span class="ident">detail</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
<span class="ident">share_num</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>, <span class="ident">share_groups</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span><span class="op">&gt;</span>) <span class="op">-&gt;</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 `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">-&gt;</span> <span class="ident">RustyError</span> {
<span class="ident">RustyError</span>::<span class="ident">new</span>(<span class="string">&quot;Integer parsing error&quot;</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="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">&quot;Boring error description&quot;</span>;
<span class="kw">let</span> <span class="ident">detail</span> <span class="op">=</span> <span class="string">&quot;More of it&quot;</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">&amp;</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">&amp;</span><span class="ident">ewd</span>) {
<span class="prelude-val">Some</span>(_) <span class="op">=&gt;</span> <span class="macro">assert</span><span class="macro">!</span>(<span class="bool-val">false</span>),
<span class="prelude-val">None</span> <span class="op">=&gt;</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">&quot;{}&quot;</span>, <span class="ident">ewd</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">&quot;{}&quot;</span>, <span class="ident">ewod</span>);
}
}
<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">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">&quot;2a&quot;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>().<span class="ident">map_err</span>(<span class="ident">pie2error</span>) {
<span class="prelude-val">Ok</span>(_) <span class="op">=&gt;</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">=&gt;</span> <span class="macro">assert_eq</span><span class="macro">!</span>(<span class="string">&quot;Integer parsing error&quot;</span>, <span class="ident">x</span>.<span class="ident">description</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View File

@ -0,0 +1,288 @@
<!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/gf256.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>gf256.rs.html -- source</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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>
</pre><pre class="rust ">
<span class="doccomment">//! This module provides the Gf256 type which is used to represent</span>
<span class="doccomment">//! elements of a finite field with 256 elements.</span>
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">ops</span>::{<span class="ident">Add</span>, <span class="ident">Div</span>, <span class="ident">Mul</span>, <span class="ident">Sub</span>};
<span class="macro">include</span><span class="macro">!</span>(<span class="macro">concat</span><span class="macro">!</span>(<span class="macro">env</span><span class="macro">!</span>(<span class="string">&quot;OUT_DIR&quot;</span>), <span class="string">&quot;/nothinghardcoded.rs&quot;</span>));
<span class="kw">fn</span> <span class="ident">get_tables</span>() <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">Tables</span> {
<span class="kw-2">&amp;</span><span class="ident">TABLES</span>
}
<span class="doccomment">/// Type for elements of a finite field with 256 elements</span>
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Copy</span>,<span class="ident">Clone</span>,<span class="ident">PartialEq</span>,<span class="ident">Eq</span>)]</span>
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Gf256</span> {
<span class="kw">pub</span> <span class="ident">poly</span>: <span class="ident">u8</span>,
}
<span class="kw">impl</span> <span class="ident">Gf256</span> {
<span class="doccomment">/// returns the additive neutral element of the field</span>
<span class="attribute">#[<span class="ident">inline</span>]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">zero</span>() <span class="op">-&gt;</span> <span class="ident">Gf256</span> {
<span class="ident">Gf256</span> { <span class="ident">poly</span>: <span class="number">0</span> }
}
<span class="doccomment">/// returns the multiplicative neutral element of the field</span>
<span class="attribute">#[<span class="ident">inline</span>]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">one</span>() <span class="op">-&gt;</span> <span class="ident">Gf256</span> {
<span class="ident">Gf256</span> { <span class="ident">poly</span>: <span class="number">1</span> }
}
<span class="attribute">#[<span class="ident">inline</span>]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">from_byte</span>(<span class="ident">b</span>: <span class="ident">u8</span>) <span class="op">-&gt;</span> <span class="ident">Gf256</span> {
<span class="ident">Gf256</span> { <span class="ident">poly</span>: <span class="ident">b</span> }
}
<span class="attribute">#[<span class="ident">inline</span>]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">to_byte</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">u8</span> {
<span class="self">self</span>.<span class="ident">poly</span>
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">log</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">poly</span> <span class="op">==</span> <span class="number">0</span> {
<span class="prelude-val">None</span>
} <span class="kw">else</span> {
<span class="kw">let</span> <span class="ident">tabs</span> <span class="op">=</span> <span class="ident">get_tables</span>();
<span class="prelude-val">Some</span>(<span class="ident">tabs</span>.<span class="ident">log</span>[<span class="self">self</span>.<span class="ident">poly</span> <span class="kw">as</span> <span class="ident">usize</span>])
}
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">exp</span>(<span class="ident">power</span>: <span class="ident">u8</span>) <span class="op">-&gt;</span> <span class="ident">Gf256</span> {
<span class="kw">let</span> <span class="ident">tabs</span> <span class="op">=</span> <span class="ident">get_tables</span>();
<span class="ident">Gf256</span> { <span class="ident">poly</span>: <span class="ident">tabs</span>.<span class="ident">exp</span>[<span class="ident">power</span> <span class="kw">as</span> <span class="ident">usize</span>] }
}
}
<span class="kw">impl</span> <span class="ident">Add</span><span class="op">&lt;</span><span class="ident">Gf256</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">Gf256</span> {
<span class="kw">type</span> <span class="ident">Output</span> <span class="op">=</span> <span class="ident">Gf256</span>;
<span class="attribute">#[<span class="ident">inline</span>]</span>
<span class="kw">fn</span> <span class="ident">add</span>(<span class="self">self</span>, <span class="ident">rhs</span>: <span class="ident">Gf256</span>) <span class="op">-&gt;</span> <span class="ident">Gf256</span> {
<span class="ident">Gf256</span>::<span class="ident">from_byte</span>(<span class="self">self</span>.<span class="ident">poly</span> <span class="op">^</span> <span class="ident">rhs</span>.<span class="ident">poly</span>)
}
}
<span class="kw">impl</span> <span class="ident">Sub</span><span class="op">&lt;</span><span class="ident">Gf256</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">Gf256</span> {
<span class="kw">type</span> <span class="ident">Output</span> <span class="op">=</span> <span class="ident">Gf256</span>;
<span class="attribute">#[<span class="ident">inline</span>]</span>
<span class="kw">fn</span> <span class="ident">sub</span>(<span class="self">self</span>, <span class="ident">rhs</span>: <span class="ident">Gf256</span>) <span class="op">-&gt;</span> <span class="ident">Gf256</span> {
<span class="ident">Gf256</span>::<span class="ident">from_byte</span>(<span class="self">self</span>.<span class="ident">poly</span> <span class="op">^</span> <span class="ident">rhs</span>.<span class="ident">poly</span>)
}
}
<span class="kw">impl</span> <span class="ident">Mul</span><span class="op">&lt;</span><span class="ident">Gf256</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">Gf256</span> {
<span class="kw">type</span> <span class="ident">Output</span> <span class="op">=</span> <span class="ident">Gf256</span>;
<span class="kw">fn</span> <span class="ident">mul</span>(<span class="self">self</span>, <span class="ident">rhs</span>: <span class="ident">Gf256</span>) <span class="op">-&gt;</span> <span class="ident">Gf256</span> {
<span class="kw">if</span> <span class="kw">let</span> (<span class="prelude-val">Some</span>(<span class="ident">l1</span>), <span class="prelude-val">Some</span>(<span class="ident">l2</span>)) <span class="op">=</span> (<span class="self">self</span>.<span class="ident">log</span>(), <span class="ident">rhs</span>.<span class="ident">log</span>()) {
<span class="kw">let</span> <span class="ident">tmp</span> <span class="op">=</span> ((<span class="ident">l1</span> <span class="kw">as</span> <span class="ident">u16</span>) <span class="op">+</span> (<span class="ident">l2</span> <span class="kw">as</span> <span class="ident">u16</span>)) <span class="op">%</span> <span class="number">255</span>;
<span class="ident">Gf256</span>::<span class="ident">exp</span>(<span class="ident">tmp</span> <span class="kw">as</span> <span class="ident">u8</span>)
} <span class="kw">else</span> {
<span class="ident">Gf256</span> { <span class="ident">poly</span>: <span class="number">0</span> }
}
}
}
<span class="kw">impl</span> <span class="ident">Div</span><span class="op">&lt;</span><span class="ident">Gf256</span><span class="op">&gt;</span> <span class="kw">for</span> <span class="ident">Gf256</span> {
<span class="kw">type</span> <span class="ident">Output</span> <span class="op">=</span> <span class="ident">Gf256</span>;
<span class="kw">fn</span> <span class="ident">div</span>(<span class="self">self</span>, <span class="ident">rhs</span>: <span class="ident">Gf256</span>) <span class="op">-&gt;</span> <span class="ident">Gf256</span> {
<span class="kw">let</span> <span class="ident">l2</span> <span class="op">=</span> <span class="ident">rhs</span>.<span class="ident">log</span>().<span class="ident">expect</span>(<span class="string">&quot;division by zero&quot;</span>);
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">l1</span>) <span class="op">=</span> <span class="self">self</span>.<span class="ident">log</span>() {
<span class="kw">let</span> <span class="ident">tmp</span> <span class="op">=</span> ((<span class="ident">l1</span> <span class="kw">as</span> <span class="ident">u16</span>) <span class="op">+</span> <span class="number">255</span> <span class="op">-</span> (<span class="ident">l2</span> <span class="kw">as</span> <span class="ident">u16</span>)) <span class="op">%</span> <span class="number">255</span>;
<span class="ident">Gf256</span>::<span class="ident">exp</span>(<span class="ident">tmp</span> <span class="kw">as</span> <span class="ident">u8</span>)
} <span class="kw">else</span> {
<span class="ident">Gf256</span> { <span class="ident">poly</span>: <span class="number">0</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View File

@ -0,0 +1,188 @@
<!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/interpolation.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>interpolation.rs.html -- source</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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>
</pre><pre class="rust ">
<span class="kw">use</span> <span class="ident">gf256</span>::<span class="ident">Gf256</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">io</span>::<span class="ident">prelude</span>::<span class="kw-2">*</span>;
<span class="doccomment">/// evaluates a polynomial at x=1, 2, 3, ... n (inclusive)</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">encode</span><span class="op">&lt;</span><span class="ident">W</span>: <span class="ident">Write</span><span class="op">&gt;</span>(<span class="ident">src</span>: <span class="kw-2">&amp;</span>[<span class="ident">u8</span>], <span class="ident">n</span>: <span class="ident">u8</span>, <span class="ident">w</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">W</span>) <span class="op">-&gt;</span> <span class="ident">io</span>::<span class="prelude-ty">Result</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">for</span> <span class="ident">raw_x</span> <span class="kw">in</span> <span class="number">1</span>..((<span class="ident">n</span> <span class="kw">as</span> <span class="ident">u16</span>) <span class="op">+</span> <span class="number">1</span>) {
<span class="kw">let</span> <span class="ident">x</span> <span class="op">=</span> <span class="ident">Gf256</span>::<span class="ident">from_byte</span>(<span class="ident">raw_x</span> <span class="kw">as</span> <span class="ident">u8</span>);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">fac</span> <span class="op">=</span> <span class="ident">Gf256</span>::<span class="ident">one</span>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">acc</span> <span class="op">=</span> <span class="ident">Gf256</span>::<span class="ident">zero</span>();
<span class="kw">for</span> <span class="kw-2">&amp;</span><span class="ident">coeff</span> <span class="kw">in</span> <span class="ident">src</span>.<span class="ident">iter</span>() {
<span class="ident">acc</span> <span class="op">=</span> <span class="ident">acc</span> <span class="op">+</span> <span class="ident">fac</span> <span class="op">*</span> <span class="ident">Gf256</span>::<span class="ident">from_byte</span>(<span class="ident">coeff</span>);
<span class="ident">fac</span> <span class="op">=</span> <span class="ident">fac</span> <span class="op">*</span> <span class="ident">x</span>;
}
<span class="macro">try</span><span class="macro">!</span>(<span class="ident">w</span>.<span class="ident">write</span>(<span class="kw-2">&amp;</span>[<span class="ident">acc</span>.<span class="ident">to_byte</span>()]));
}
<span class="prelude-val">Ok</span>(())
}
<span class="doccomment">/// evaluates an interpolated polynomial at `Gf256::zero()` where</span>
<span class="doccomment">/// the polynomial is determined using Lagrangian interpolation</span>
<span class="doccomment">/// based on the given x/y coordinates `src`.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">lagrange_interpolate</span>(<span class="ident">src</span>: <span class="kw-2">&amp;</span>[(<span class="ident">u8</span>, <span class="ident">u8</span>)]) <span class="op">-&gt;</span> <span class="ident">u8</span> {
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">sum</span> <span class="op">=</span> <span class="ident">Gf256</span>::<span class="ident">zero</span>();
<span class="kw">for</span> (<span class="ident">i</span>, <span class="kw-2">&amp;</span>(<span class="ident">raw_xi</span>, <span class="ident">raw_yi</span>)) <span class="kw">in</span> <span class="ident">src</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>() {
<span class="kw">let</span> <span class="ident">xi</span> <span class="op">=</span> <span class="ident">Gf256</span>::<span class="ident">from_byte</span>(<span class="ident">raw_xi</span>);
<span class="kw">let</span> <span class="ident">yi</span> <span class="op">=</span> <span class="ident">Gf256</span>::<span class="ident">from_byte</span>(<span class="ident">raw_yi</span>);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">prod</span> <span class="op">=</span> <span class="ident">Gf256</span>::<span class="ident">one</span>();
<span class="kw">for</span> (<span class="ident">j</span>, <span class="kw-2">&amp;</span>(<span class="ident">raw_xj</span>, _)) <span class="kw">in</span> <span class="ident">src</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>() {
<span class="kw">if</span> <span class="ident">i</span> <span class="op">!=</span> <span class="ident">j</span> {
<span class="kw">let</span> <span class="ident">xj</span> <span class="op">=</span> <span class="ident">Gf256</span>::<span class="ident">from_byte</span>(<span class="ident">raw_xj</span>);
<span class="kw">let</span> <span class="ident">delta</span> <span class="op">=</span> <span class="ident">xi</span> <span class="op">-</span> <span class="ident">xj</span>;
<span class="macro">assert</span><span class="macro">!</span>(<span class="ident">delta</span>.<span class="ident">poly</span> <span class="op">!=</span> <span class="number">0</span>, <span class="string">&quot;Duplicate shares&quot;</span>);
<span class="ident">prod</span> <span class="op">=</span> <span class="ident">prod</span> <span class="op">*</span> <span class="ident">xj</span> <span class="op">/</span> <span class="ident">delta</span>;
}
}
<span class="ident">sum</span> <span class="op">=</span> <span class="ident">sum</span> <span class="op">+</span> <span class="ident">prod</span> <span class="op">*</span> <span class="ident">yi</span>;
}
<span class="ident">sum</span>.<span class="ident">to_byte</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View File

@ -9,14 +9,15 @@
<title>lib.rs.html -- source</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="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc">
<body class="rustdoc source">
<!--[if lte IE 8]>
<div class="warning">
This old browser is unsupported and will most likely display funky
@ -42,7 +43,7 @@
</form>
</nav>
<section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span>
<section id='main' class="content"><pre class="line-numbers"><span id="1"> 1</span>
<span id="2"> 2</span>
<span id="3"> 3</span>
<span id="4"> 4</span>
@ -77,42 +78,46 @@
<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&#39;s secret sharing in Rust. It provides the possibility to sign shares.</span>
<span id="36">36</span>
<span id="37">37</span>
</pre><pre class="rust ">
<span class="doccomment">//! `RustySecrets` implements Shamir&#39;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>,
<span class='ident'>trivial_casts</span>, <span class='ident'>trivial_numeric_casts</span>,
<span class='ident'>unsafe_code</span>, <span class='ident'>unstable_features</span>,
<span class='ident'>unused_import_braces</span>, <span class='ident'>unused_qualifications</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>,
<span class="ident">trivial_casts</span>, <span class="ident">trivial_numeric_casts</span>,
<span class="ident">unsafe_code</span>, <span class="ident">unstable_features</span>,
<span class="ident">unused_import_braces</span>, <span class="ident">unused_qualifications</span>
)]</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>;
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>merkle_sigs</span>;
<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>ring</span>;
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">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>;
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">merkle_sigs</span>;
<span class="kw">extern</span> <span class="kw">crate</span> <span class="ident">ring</span>;
<span class='kw'>use</span> <span class='ident'>ring</span>::<span class='ident'>digest</span>::{<span class='ident'>Algorithm</span>, <span class='ident'>SHA512</span>};
<span class='attribute'>#[<span class='ident'>allow</span>(<span class='ident'>non_upper_case_globals</span>)]</span>
<span class='kw'>static</span> <span class='ident'>digest</span>: <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> <span class='ident'>Algorithm</span> <span class='op'>=</span> <span class='kw-2'>&amp;</span><span class='ident'>SHA512</span>;
<span class="kw">use</span> <span class="ident">ring</span>::<span class="ident">digest</span>::{<span class="ident">Algorithm</span>, <span class="ident">SHA512</span>};
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">non_upper_case_globals</span>)]</span>
<span class="kw">static</span> <span class="ident">digest</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">Algorithm</span> <span class="op">=</span> <span class="kw-2">&amp;</span><span class="ident">SHA512</span>;
<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'>validation</span>;
<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="attribute">#[<span class="ident">allow</span>(<span class="ident">unused_qualifications</span>)]</span>
<span class="kw">mod</span> <span class="ident">secret</span>;
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">unused_qualifications</span>)]</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">validation</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">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="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>;
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
<span class="kw">mod</span> <span class="ident">tests</span>;
</pre>
</section>
<section id='search' class="content hidden"></section>
@ -168,11 +173,10 @@
<script>
window.rootPath = "../../../";
window.rootPath = "../../";
window.currentCrate = "rusty_secrets";
</script>
<script src="../../../jquery.js"></script>
<script src="../../../main.js"></script>
<script defer src="../../../search-index.js"></script>
<script src="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View 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="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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">&lt;</span><span class="ident">RustySecretsVersions</span><span class="op">&gt;</span>,
<span class="ident">secret</span>: ::<span class="ident">protobuf</span>::<span class="ident">SingularField</span><span class="op">&lt;</span>::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span>,
<span class="ident">mime_type</span>: ::<span class="ident">protobuf</span>::<span class="ident">SingularField</span><span class="op">&lt;</span>::<span class="ident">std</span>::<span class="ident">string</span>::<span class="ident">String</span><span class="op">&gt;</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">&lt;</span><span class="ident">u32</span><span class="op">&gt;</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">-&gt;</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">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;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">&lt;</span><span class="ident">RustySecret</span><span class="op">&gt;</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="kw-2">*</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">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">bool</span> {
<span class="self">self</span>.<span class="ident">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">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">bool</span> {
<span class="self">self</span>.<span class="ident">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">&amp;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> ::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">=&gt;</span> <span class="kw-2">&amp;</span><span class="ident">v</span>,
<span class="prelude-val">None</span> <span class="op">=&gt;</span> <span class="kw-2">&amp;</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">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">bool</span> {
<span class="self">self</span>.<span class="ident">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">&amp;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">=&gt;</span> <span class="kw-2">&amp;</span><span class="ident">v</span>,
<span class="prelude-val">None</span> <span class="op">=&gt;</span> <span class="string">&quot;&quot;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">is</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> ::<span class="ident">protobuf</span>::<span class="ident">CodedInputStream</span>) <span class="op">-&gt;</span> ::<span class="ident">protobuf</span>::<span class="ident">ProtobufResult</span><span class="op">&lt;</span>()<span class="op">&gt;</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">=&gt;</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">=&gt;</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">&amp;</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">=&gt;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">mime_type</span>));
},
_ <span class="op">=&gt;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&amp;</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="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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</span><span class="self">self</span>, <span class="ident">os</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> ::<span class="ident">protobuf</span>::<span class="ident">CodedOutputStream</span>) <span class="op">-&gt;</span> ::<span class="ident">protobuf</span>::<span class="ident">ProtobufResult</span><span class="op">&lt;</span>()<span class="op">&gt;</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">&amp;</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">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span>::<span class="ident">protobuf</span>::<span class="ident">UnknownFields</span> {
<span class="kw-2">&amp;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="kw-2">mut</span> ::<span class="ident">protobuf</span>::<span class="ident">UnknownFields</span> {
<span class="kw-2">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&lt;</span><span class="ident">RustySecret</span><span class="op">&gt;</span>()
}
<span class="kw">fn</span> <span class="ident">as_any</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;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">&lt;</span><span class="self">Self</span><span class="op">&gt;</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">-&gt;</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">&lt;</span><span class="ident">RustySecret</span><span class="op">&gt;</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;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">&lt;</span>::<span class="ident">protobuf</span>::<span class="ident">reflect</span>::<span class="ident">MessageDescriptor</span><span class="op">&gt;</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="kw-2">*</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">&quot;version&quot;</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">&quot;secret&quot;</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">&quot;mime_type&quot;</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">&lt;</span><span class="ident">RustySecret</span><span class="op">&gt;</span>(
<span class="string">&quot;RustySecret&quot;</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">&amp;</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">&amp;</span><span class="self">self</span>, <span class="ident">other</span>: <span class="kw-2">&amp;</span><span class="ident">RustySecret</span>) <span class="op">-&gt;</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">&amp;&amp;</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">&amp;&amp;</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">&amp;&amp;</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">&amp;</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&amp;</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">-&gt;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">i32</span> {
<span class="kw-2">*</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">-&gt;</span> ::<span class="ident">std</span>::<span class="ident">option</span>::<span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">RustySecretsVersions</span><span class="op">&gt;</span> {
<span class="kw">match</span> <span class="ident">value</span> {
<span class="number">0</span> <span class="op">=&gt;</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">=&gt;</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">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> [<span class="self">Self</span>] {
<span class="kw">static</span> <span class="ident">values</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> [<span class="ident">RustySecretsVersions</span>] <span class="op">=</span> <span class="kw-2">&amp;</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">&lt;</span><span class="ident">RustySecretsVersions</span><span class="op">&gt;</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;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">&lt;</span>::<span class="ident">protobuf</span>::<span class="ident">reflect</span>::<span class="ident">EnumDescriptor</span><span class="op">&gt;</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="kw-2">*</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">&quot;RustySecretsVersions&quot;</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">&amp;</span><span class="lifetime">&#39;static</span> [<span class="ident">u8</span>] <span class="op">=</span> <span class="kw-2">&amp;</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">&lt;</span>::<span class="ident">protobuf</span>::<span class="ident">descriptor</span>::<span class="ident">FileDescriptorProto</span><span class="op">&gt;</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="kw-2">*</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">-&gt;</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">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View File

@ -0,0 +1,798 @@
<!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/share_data.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>share_data.rs.html -- source</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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>
</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">ShareData</span> {
<span class="comment">// message fields</span>
<span class="ident">shamir_data</span>: ::<span class="ident">protobuf</span>::<span class="ident">SingularField</span><span class="op">&lt;</span>::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span>,
<span class="ident">signature</span>: ::<span class="ident">protobuf</span>::<span class="ident">RepeatedField</span><span class="op">&lt;</span>::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span>,
<span class="ident">proof</span>: ::<span class="ident">protobuf</span>::<span class="ident">SingularField</span><span class="op">&lt;</span>::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</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">&lt;</span><span class="ident">u32</span><span class="op">&gt;</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">ShareData</span> {}
<span class="kw">impl</span> <span class="ident">ShareData</span> {
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-&gt;</span> <span class="ident">ShareData</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">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">ShareData</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">&lt;</span><span class="ident">ShareData</span><span class="op">&gt;</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="kw-2">*</span><span class="kw">const</span> <span class="ident">ShareData</span>,
};
<span class="kw">unsafe</span> {
<span class="ident">instance</span>.<span class="ident">get</span>(<span class="op">||</span> {
<span class="ident">ShareData</span> {
<span class="ident">shamir_data</span>: ::<span class="ident">protobuf</span>::<span class="ident">SingularField</span>::<span class="ident">none</span>(),
<span class="ident">signature</span>: ::<span class="ident">protobuf</span>::<span class="ident">RepeatedField</span>::<span class="ident">new</span>(),
<span class="ident">proof</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 bytes shamir_data = 1;</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">clear_shamir_data</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) {
<span class="self">self</span>.<span class="ident">shamir_data</span>.<span class="ident">clear</span>();
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">has_shamir_data</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">bool</span> {
<span class="self">self</span>.<span class="ident">shamir_data</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_shamir_data</span>(<span class="kw-2">&amp;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>) {
<span class="self">self</span>.<span class="ident">shamir_data</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_shamir_data</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">shamir_data</span>.<span class="ident">is_none</span>() {
<span class="self">self</span>.<span class="ident">shamir_data</span>.<span class="ident">set_default</span>();
};
<span class="self">self</span>.<span class="ident">shamir_data</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_shamir_data</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> ::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">shamir_data</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_shamir_data</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span>[<span class="ident">u8</span>] {
<span class="kw">match</span> <span class="self">self</span>.<span class="ident">shamir_data</span>.<span class="ident">as_ref</span>() {
<span class="prelude-val">Some</span>(<span class="ident">v</span>) <span class="op">=&gt;</span> <span class="kw-2">&amp;</span><span class="ident">v</span>,
<span class="prelude-val">None</span> <span class="op">=&gt;</span> <span class="kw-2">&amp;</span>[],
}
}
<span class="comment">// repeated bytes signature = 2;</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">clear_signature</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) {
<span class="self">self</span>.<span class="ident">signature</span>.<span class="ident">clear</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_signature</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">v</span>: ::<span class="ident">protobuf</span>::<span class="ident">RepeatedField</span><span class="op">&lt;</span>::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span>) {
<span class="self">self</span>.<span class="ident">signature</span> <span class="op">=</span> <span class="ident">v</span>;
}
<span class="comment">// Mutable pointer to the field.</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">mut_signature</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="kw-2">mut</span> ::<span class="ident">protobuf</span>::<span class="ident">RepeatedField</span><span class="op">&lt;</span>::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span> {
<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">signature</span>
}
<span class="comment">// Take field</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">take_signature</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> ::<span class="ident">protobuf</span>::<span class="ident">RepeatedField</span><span class="op">&lt;</span>::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span> {
::<span class="ident">std</span>::<span class="ident">mem</span>::<span class="ident">replace</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">signature</span>, ::<span class="ident">protobuf</span>::<span class="ident">RepeatedField</span>::<span class="ident">new</span>())
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_signature</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span>[::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>] {
<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">signature</span>
}
<span class="comment">// optional bytes proof = 3;</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">clear_proof</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) {
<span class="self">self</span>.<span class="ident">proof</span>.<span class="ident">clear</span>();
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">has_proof</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="ident">bool</span> {
<span class="self">self</span>.<span class="ident">proof</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_proof</span>(<span class="kw-2">&amp;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>) {
<span class="self">self</span>.<span class="ident">proof</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_proof</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> {
<span class="kw">if</span> <span class="self">self</span>.<span class="ident">proof</span>.<span class="ident">is_none</span>() {
<span class="self">self</span>.<span class="ident">proof</span>.<span class="ident">set_default</span>();
};
<span class="self">self</span>.<span class="ident">proof</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_proof</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> ::<span class="ident">std</span>::<span class="ident">vec</span>::<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> {
<span class="self">self</span>.<span class="ident">proof</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_proof</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span>[<span class="ident">u8</span>] {
<span class="kw">match</span> <span class="self">self</span>.<span class="ident">proof</span>.<span class="ident">as_ref</span>() {
<span class="prelude-val">Some</span>(<span class="ident">v</span>) <span class="op">=&gt;</span> <span class="kw-2">&amp;</span><span class="ident">v</span>,
<span class="prelude-val">None</span> <span class="op">=&gt;</span> <span class="kw-2">&amp;</span>[],
}
}
}
<span class="kw">impl</span> ::<span class="ident">protobuf</span>::<span class="ident">Message</span> <span class="kw">for</span> <span class="ident">ShareData</span> {
<span class="kw">fn</span> <span class="ident">is_initialized</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>, <span class="ident">is</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> ::<span class="ident">protobuf</span>::<span class="ident">CodedInputStream</span>) <span class="op">-&gt;</span> ::<span class="ident">protobuf</span>::<span class="ident">ProtobufResult</span><span class="op">&lt;</span>()<span class="op">&gt;</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">=&gt;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">shamir_data</span>));
},
<span class="number">2</span> <span class="op">=&gt;</span> {
<span class="macro">try</span><span class="macro">!</span>(::<span class="ident">protobuf</span>::<span class="ident">rt</span>::<span class="ident">read_repeated_bytes_into</span>(<span class="ident">wire_type</span>, <span class="ident">is</span>, <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">signature</span>));
},
<span class="number">3</span> <span class="op">=&gt;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>.<span class="ident">proof</span>));
},
_ <span class="op">=&gt;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&amp;</span><span class="self">self</span>.<span class="ident">shamir_data</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">1</span>, <span class="kw-2">&amp;</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">&amp;</span><span class="self">self</span>.<span class="ident">signature</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">&amp;</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">&amp;</span><span class="self">self</span>.<span class="ident">proof</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">3</span>, <span class="kw-2">&amp;</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">&amp;</span><span class="self">self</span>, <span class="ident">os</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> ::<span class="ident">protobuf</span>::<span class="ident">CodedOutputStream</span>) <span class="op">-&gt;</span> ::<span class="ident">protobuf</span>::<span class="ident">ProtobufResult</span><span class="op">&lt;</span>()<span class="op">&gt;</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">shamir_data</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">1</span>, <span class="kw-2">&amp;</span><span class="ident">v</span>));
};
<span class="kw">for</span> <span class="ident">v</span> <span class="kw">in</span> <span class="kw-2">&amp;</span><span class="self">self</span>.<span class="ident">signature</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">&amp;</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">proof</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">3</span>, <span class="kw-2">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span>::<span class="ident">protobuf</span>::<span class="ident">UnknownFields</span> {
<span class="kw-2">&amp;</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">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="kw-2">mut</span> ::<span class="ident">protobuf</span>::<span class="ident">UnknownFields</span> {
<span class="kw-2">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</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">&lt;</span><span class="ident">ShareData</span><span class="op">&gt;</span>()
}
<span class="kw">fn</span> <span class="ident">as_any</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</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">&amp;</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">&amp;</span><span class="self">self</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;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">&lt;</span><span class="self">Self</span><span class="op">&gt;</span>)
}
}
<span class="kw">impl</span> ::<span class="ident">protobuf</span>::<span class="ident">MessageStatic</span> <span class="kw">for</span> <span class="ident">ShareData</span> {
<span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-&gt;</span> <span class="ident">ShareData</span> {
<span class="ident">ShareData</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">&lt;</span><span class="ident">ShareData</span><span class="op">&gt;</span>) <span class="op">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;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">&lt;</span>::<span class="ident">protobuf</span>::<span class="ident">reflect</span>::<span class="ident">MessageDescriptor</span><span class="op">&gt;</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="kw-2">*</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_bytes_accessor</span>(
<span class="string">&quot;shamir_data&quot;</span>,
<span class="ident">ShareData</span>::<span class="ident">has_shamir_data</span>,
<span class="ident">ShareData</span>::<span class="ident">get_shamir_data</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_repeated_bytes_accessor</span>(
<span class="string">&quot;signature&quot;</span>,
<span class="ident">ShareData</span>::<span class="ident">get_signature</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">&quot;proof&quot;</span>,
<span class="ident">ShareData</span>::<span class="ident">has_proof</span>,
<span class="ident">ShareData</span>::<span class="ident">get_proof</span>,
));
::<span class="ident">protobuf</span>::<span class="ident">reflect</span>::<span class="ident">MessageDescriptor</span>::<span class="ident">new</span>::<span class="op">&lt;</span><span class="ident">ShareData</span><span class="op">&gt;</span>(
<span class="string">&quot;ShareData&quot;</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">ShareData</span> {
<span class="kw">fn</span> <span class="ident">clear</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="self">self</span>) {
<span class="self">self</span>.<span class="ident">clear_shamir_data</span>();
<span class="self">self</span>.<span class="ident">clear_signature</span>();
<span class="self">self</span>.<span class="ident">clear_proof</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">ShareData</span> {
<span class="kw">fn</span> <span class="ident">eq</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">other</span>: <span class="kw-2">&amp;</span><span class="ident">ShareData</span>) <span class="op">-&gt;</span> <span class="ident">bool</span> {
<span class="self">self</span>.<span class="ident">shamir_data</span> <span class="op">==</span> <span class="ident">other</span>.<span class="ident">shamir_data</span> <span class="op">&amp;&amp;</span>
<span class="self">self</span>.<span class="ident">signature</span> <span class="op">==</span> <span class="ident">other</span>.<span class="ident">signature</span> <span class="op">&amp;&amp;</span>
<span class="self">self</span>.<span class="ident">proof</span> <span class="op">==</span> <span class="ident">other</span>.<span class="ident">proof</span> <span class="op">&amp;&amp;</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">ShareData</span> {
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&amp;</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">-&gt;</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="kw">static</span> <span class="ident">file_descriptor_proto_data</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> [<span class="ident">u8</span>] <span class="op">=</span> <span class="kw-2">&amp;</span>[
<span class="number">0x0a</span>, <span class="number">0x18</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">0x62</span>, <span class="number">0x75</span>, <span class="number">0x66</span>, <span class="number">0x2f</span>, <span class="number">0x53</span>, <span class="number">0x68</span>, <span class="number">0x61</span>, <span class="number">0x72</span>, <span class="number">0x65</span>,
<span class="number">0x44</span>, <span class="number">0x61</span>, <span class="number">0x74</span>, <span class="number">0x61</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">0x60</span>, <span class="number">0x0a</span>, <span class="number">0x09</span>, <span class="number">0x53</span>, <span class="number">0x68</span>,
<span class="number">0x61</span>, <span class="number">0x72</span>, <span class="number">0x65</span>, <span class="number">0x44</span>, <span class="number">0x61</span>, <span class="number">0x74</span>, <span class="number">0x61</span>, <span class="number">0x12</span>, <span class="number">0x1f</span>, <span class="number">0x0a</span>, <span class="number">0x0b</span>, <span class="number">0x73</span>, <span class="number">0x68</span>, <span class="number">0x61</span>, <span class="number">0x6d</span>, <span class="number">0x69</span>,
<span class="number">0x72</span>, <span class="number">0x5f</span>, <span class="number">0x64</span>, <span class="number">0x61</span>, <span class="number">0x74</span>, <span class="number">0x61</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">0x0c</span>, <span class="number">0x52</span>, <span class="number">0x0a</span>, <span class="number">0x73</span>, <span class="number">0x68</span>,
<span class="number">0x61</span>, <span class="number">0x6d</span>, <span class="number">0x69</span>, <span class="number">0x72</span>, <span class="number">0x44</span>, <span class="number">0x61</span>, <span class="number">0x74</span>, <span class="number">0x61</span>, <span class="number">0x12</span>, <span class="number">0x1c</span>, <span class="number">0x0a</span>, <span class="number">0x09</span>, <span class="number">0x73</span>, <span class="number">0x69</span>, <span class="number">0x67</span>, <span class="number">0x6e</span>,
<span class="number">0x61</span>, <span class="number">0x74</span>, <span class="number">0x75</span>, <span class="number">0x72</span>, <span class="number">0x65</span>, <span class="number">0x18</span>, <span class="number">0x02</span>, <span class="number">0x20</span>, <span class="number">0x03</span>, <span class="number">0x28</span>, <span class="number">0x0c</span>, <span class="number">0x52</span>, <span class="number">0x09</span>, <span class="number">0x73</span>, <span class="number">0x69</span>, <span class="number">0x67</span>,
<span class="number">0x6e</span>, <span class="number">0x61</span>, <span class="number">0x74</span>, <span class="number">0x75</span>, <span class="number">0x72</span>, <span class="number">0x65</span>, <span class="number">0x12</span>, <span class="number">0x14</span>, <span class="number">0x0a</span>, <span class="number">0x05</span>, <span class="number">0x70</span>, <span class="number">0x72</span>, <span class="number">0x6f</span>, <span class="number">0x6f</span>, <span class="number">0x66</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">0x0c</span>, <span class="number">0x52</span>, <span class="number">0x05</span>, <span class="number">0x70</span>, <span class="number">0x72</span>, <span class="number">0x6f</span>, <span class="number">0x6f</span>, <span class="number">0x66</span>, <span class="number">0x4a</span>, <span class="number">0xfb</span>, <span class="number">0x01</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">0x06</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">0x04</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">0x06</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">0x02</span>, <span class="number">0x08</span>, <span class="number">0x11</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">0x03</span>, <span class="number">0x08</span>, <span class="number">0x1e</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">0x03</span>, <span class="number">0x08</span>, <span class="number">0x02</span>, <span class="number">0x13</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">0x05</span>, <span class="number">0x12</span>, <span class="number">0x03</span>,
<span class="number">0x03</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">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">0x0e</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">0x00</span>, <span class="number">0x03</span>, <span class="number">0x12</span>, <span class="number">0x03</span>, <span class="number">0x03</span>, <span class="number">0x1c</span>, <span class="number">0x1d</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">0x04</span>, <span class="number">0x08</span>, <span class="number">0x25</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">0x04</span>, <span class="number">0x12</span>, <span class="number">0x03</span>, <span class="number">0x04</span>, <span class="number">0x08</span>, <span class="number">0x10</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">0x04</span>, <span class="number">0x11</span>, <span class="number">0x16</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">0x04</span>, <span class="number">0x17</span>, <span class="number">0x20</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">0x04</span>, <span class="number">0x23</span>, <span class="number">0x24</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">0x05</span>, <span class="number">0x08</span>,
<span class="number">0x18</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">0x05</span>, <span class="number">0x08</span>, <span class="number">0x04</span>, <span class="number">0x25</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">0x05</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">0x02</span>, <span class="number">0x01</span>, <span class="number">0x12</span>, <span class="number">0x03</span>, <span class="number">0x05</span>, <span class="number">0x0e</span>, <span class="number">0x13</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">0x05</span>, <span class="number">0x16</span>, <span class="number">0x17</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">&lt;</span>::<span class="ident">protobuf</span>::<span class="ident">descriptor</span>::<span class="ident">FileDescriptorProto</span><span class="op">&gt;</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="kw-2">*</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">-&gt;</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">-&gt;</span> <span class="kw-2">&amp;</span><span class="lifetime">&#39;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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View File

@ -0,0 +1,282 @@
<!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/share_format.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>share_format.rs.html -- source</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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>
</pre><pre class="rust ">
<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">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">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">&lt;</span>(<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>, <span class="ident">u8</span>, <span class="ident">u8</span>, <span class="prelude-ty">Option</span><span class="op">&lt;</span>(<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span>, <span class="ident">Proof</span><span class="op">&lt;</span><span class="ident">MerklePublicKey</span><span class="op">&gt;</span>)<span class="op">&gt;</span>), <span class="ident">RustyError</span><span class="op">&gt;</span>;
<span class="kw">fn</span> <span class="ident">base64_config</span>() <span class="op">-&gt;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&lt;</span>(<span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span>, <span class="ident">Proof</span><span class="op">&lt;</span><span class="ident">MerklePublicKey</span><span class="op">&gt;</span>)<span class="op">&gt;</span>)
<span class="op">-&gt;</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>);
<span class="kw">if</span> <span class="ident">signature_pair</span>.<span class="ident">is_some</span>() {
<span class="kw">let</span> (<span class="ident">signature</span>, <span class="ident">proof</span>) <span class="op">=</span> <span class="ident">signature_pair</span>.<span class="ident">unwrap</span>();
<span class="ident">share_protobuf</span>.<span class="ident">set_signature</span>(<span class="ident">RepeatedField</span>::<span class="ident">from_vec</span>(<span class="ident">signature</span>));
<span class="ident">share_protobuf</span>.<span class="ident">set_proof</span>(<span class="ident">proof</span>.<span class="ident">write_to_bytes</span>().<span class="ident">unwrap</span>());
}
<span class="kw">let</span> <span class="ident">b64_share</span> <span class="op">=</span> <span class="ident">share_protobuf</span>.<span class="ident">write_to_bytes</span>().<span class="ident">unwrap</span>().<span class="ident">to_base64</span>(<span class="ident">base64_config</span>());
<span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{}-{}-{}&quot;</span>, <span class="ident">threshold</span>, <span class="ident">share_num</span>, <span class="ident">b64_share</span>)
}
<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">&amp;</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">-&gt;</span> <span class="ident">ParsedShare</span> {
<span class="kw">let</span> <span class="ident">parts</span>: <span class="ident">Vec</span><span class="op">&lt;</span>_<span class="op">&gt;</span> <span class="op">=</span> <span class="ident">s</span>.<span class="ident">trim</span>().<span class="ident">split</span>(<span class="string">&#39;-&#39;</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">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">&quot;Expected 3 parts separated by a minus sign. Found {}.&quot;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&lt;</span><span class="ident">u8</span><span class="op">&gt;</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">&lt;</span> <span class="number">1</span> <span class="op">||</span> <span class="ident">n</span> <span class="op">&lt;</span> <span class="number">1</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">&quot;Found illegal parameters K: {} N: {}.&quot;</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">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">&quot;Base64 decoding of data block failed&quot;</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">&lt;</span><span class="ident">ShareData</span><span class="op">&gt;</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="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">&quot;Protobuf decoding of data block failed with error: {} .&quot;</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_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">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>();
<span class="prelude-val">Ok</span>((<span class="ident">share</span>, <span class="ident">k</span>, <span class="ident">n</span>, <span class="prelude-val">Some</span>((<span class="ident">Vec</span>::<span class="ident">from</span>(<span class="ident">signature</span>), <span class="ident">proof</span>))))
} <span class="kw">else</span> {
<span class="prelude-val">Ok</span>((<span class="ident">share</span>, <span class="ident">k</span>, <span class="ident">n</span>, <span class="prelude-val">None</span>))
}
}
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">format_share_for_signing</span>(<span class="ident">k</span>: <span class="ident">u8</span>, <span class="ident">i</span>: <span class="ident">u8</span>, <span class="ident">data</span>: <span class="kw-2">&amp;</span>[<span class="ident">u8</span>]) <span class="op">-&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span> {
<span class="macro">format</span><span class="macro">!</span>(<span class="string">&quot;{}-{}-{}&quot;</span>, <span class="ident">k</span>, <span class="ident">i</span>, <span class="ident">data</span>.<span class="ident">to_base64</span>(<span class="ident">base64_config</span>())).<span class="ident">into_bytes</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View File

@ -1,474 +0,0 @@
<!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/custom_error.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>custom_error.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>
</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='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'>RustyError</span> {
<span class='ident'>descr</span>: <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> <span class='ident'>str</span>,
<span class='ident'>detail</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;</span>,
<span class='ident'>share_index</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>,
<span class='ident'>share_groups</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span><span class='op'>&gt;</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'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</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'>fn</span> <span class='ident'>new</span>(<span class='ident'>descr</span>: <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> <span class='ident'>str</span>, <span class='ident'>detail</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;</span>, <span class='ident'>share_index</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>, <span class='ident'>share_groups</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span><span class='op'>&gt;</span>) <span class='op'>-&gt;</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'>-&gt;</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'>&amp;</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'>&amp;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span><span class='op'>&gt;</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'>&amp;</span><span class='ident'>RustyErrorTypes</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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'>=&gt;</span> <span class='string'>&quot;No shares were provided.&quot;</span>,
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>IncompatibleSets</span>(_) <span class='op'>=&gt;</span> <span class='string'>&quot;The shares are incompatible with each other.&quot;</span>,
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>InvalidSignature</span>(_, _) <span class='op'>=&gt;</span> <span class='string'>&quot;The signature of this share is not valid.&quot;</span>,
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>MissingShares</span>(_, _) <span class='op'>=&gt;</span> <span class='string'>&quot;The number of shares provided is insufficient to recover the secret.&quot;</span>,
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>MissingSignature</span>(_) <span class='op'>=&gt;</span> <span class='string'>&quot;Signature is missing while shares are required to be signed.&quot;</span>,
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>SecretDeserializationIssue</span> <span class='op'>=&gt;</span> <span class='string'>&quot;An issue was encountered deserializing the secret.
Updating to the latest version of RustySecrets might help fix this.&quot;</span>,
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>ShareParsingError</span>(_, _) <span class='op'>=&gt;</span> <span class='string'>&quot;This share is incorrectly formatted.&quot;</span>,
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>DuplicateShareNum</span>(_) <span class='op'>=&gt;</span> <span class='string'>&quot;This share number has already been used by a previous share.&quot;</span>,
<span class='ident'>RustyErrorTypes</span>::<span class='ident'>DuplicateShareData</span>(_) <span class='op'>=&gt;</span> <span class='string'>&quot;The data encoded in this share is the same as the one found in a previous share.&quot;</span>
}
}
<span class='kw'>fn</span> <span class='ident'>detail_for_type</span>(<span class='ident'>error_type</span>: <span class='kw-2'>&amp;</span><span class='ident'>RustyErrorTypes</span>) <span class='op'>-&gt;</span> <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;</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'>=&gt;</span> <span class='prelude-val'>Some</span>(<span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>&quot;{} shares are required to recover the secret,
found only {}.&quot;</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'>=&gt;</span> <span class='prelude-val'>Some</span>(<span class='ident'>description</span>.<span class='ident'>clone</span>()),
_ <span class='op'>=&gt;</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'>-&gt;</span> <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span><span class='op'>&gt;</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'>=&gt;</span> <span class='prelude-val'>Some</span>(<span class='ident'>groups</span>),
_ <span class='op'>=&gt;</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'>&amp;</span><span class='ident'>RustyErrorTypes</span>) <span class='op'>-&gt;</span> <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</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'>=&gt;</span> <span class='prelude-val'>Some</span>(<span class='ident'>share_num</span>),
_ <span class='op'>=&gt;</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'>RustyError</span> {
<span class='kw'>fn</span> <span class='ident'>fmt</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>, <span class='ident'>f</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>fmt</span>::<span class='ident'>Formatter</span>) <span class='op'>-&gt;</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'>=&gt;</span> <span class='macro'>write</span><span class='macro'>!</span>(<span class='ident'>f</span>, <span class='string'>&quot;{}&quot;</span>, <span class='self'>self</span>.<span class='ident'>descr</span>),
<span class='prelude-val'>Some</span>(<span class='kw-2'>ref</span> <span class='ident'>detail</span>) <span class='op'>=&gt;</span> <span class='macro'>write</span><span class='macro'>!</span>(<span class='ident'>f</span>, <span class='string'>&quot;{} ({})&quot;</span>, <span class='self'>self</span>.<span class='ident'>descr</span>, <span class='ident'>detail</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='kw-2'>&amp;</span><span class='ident'>Error</span><span class='op'>&gt;</span> {
<span class='prelude-val'>None</span>
}
}
<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'>&lt;</span><span class='ident'>io</span>::<span class='ident'>Error</span><span class='op'>&gt;</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'>-&gt;</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'>&quot;from io:Error&quot;</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'>&lt;</span><span class='ident'>RustyError</span><span class='op'>&gt;</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'>-&gt;</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'>&amp;</span><span class='lifetime'>&#39;static</span> <span class='ident'>str</span>, <span class='ident'>detail</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;</span>,
<span class='ident'>share_num</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>, <span class='ident'>share_groups</span>: <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span><span class='op'>&gt;</span>) <span class='op'>-&gt;</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 `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'>-&gt;</span> <span class='ident'>RustyError</span> {
<span class='ident'>RustyError</span>::<span class='ident'>new</span>(<span class='string'>&quot;Integer parsing error&quot;</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='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'>&quot;Boring error description&quot;</span>;
<span class='kw'>let</span> <span class='ident'>detail</span> <span class='op'>=</span> <span class='string'>&quot;More of it&quot;</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'>&amp;</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'>&amp;</span><span class='ident'>ewd</span>) {
<span class='prelude-val'>Some</span>(_) <span class='op'>=&gt;</span> <span class='macro'>assert</span><span class='macro'>!</span>(<span class='bool-val'>false</span>),
<span class='prelude-val'>None</span> <span class='op'>=&gt;</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'>&quot;{}&quot;</span>, <span class='ident'>ewd</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'>&quot;{}&quot;</span>, <span class='ident'>ewod</span>);
}
}
<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'>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'>&quot;2a&quot;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>().<span class='ident'>map_err</span>(<span class='ident'>pie2error</span>) {
<span class='prelude-val'>Ok</span>(_) <span class='op'>=&gt;</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'>=&gt;</span> <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='string'>&quot;Integer parsing error&quot;</span>, <span class='ident'>x</span>.<span class='ident'>description</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -1,288 +0,0 @@
<!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/gf256.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>gf256.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>
</pre><pre class='rust '>
<span class='doccomment'>//! This module provides the Gf256 type which is used to represent</span>
<span class='doccomment'>//! elements of a finite field with 256 elements.</span>
<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>ops</span>::{<span class='ident'>Add</span>, <span class='ident'>Div</span>, <span class='ident'>Mul</span>, <span class='ident'>Sub</span>};
<span class='macro'>include</span><span class='macro'>!</span>(<span class='macro'>concat</span><span class='macro'>!</span>(<span class='macro'>env</span><span class='macro'>!</span>(<span class='string'>&quot;OUT_DIR&quot;</span>), <span class='string'>&quot;/nothinghardcoded.rs&quot;</span>));
<span class='kw'>fn</span> <span class='ident'>get_tables</span>() <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> <span class='ident'>Tables</span> {
<span class='kw-2'>&amp;</span><span class='ident'>TABLES</span>
}
<span class='doccomment'>/// Type for elements of a finite field with 256 elements</span>
<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Copy</span>,<span class='ident'>Clone</span>,<span class='ident'>PartialEq</span>,<span class='ident'>Eq</span>)]</span>
<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>Gf256</span> {
<span class='kw'>pub</span> <span class='ident'>poly</span>: <span class='ident'>u8</span>,
}
<span class='kw'>impl</span> <span class='ident'>Gf256</span> {
<span class='doccomment'>/// returns the additive neutral element of the field</span>
<span class='attribute'>#[<span class='ident'>inline</span>]</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>zero</span>() <span class='op'>-&gt;</span> <span class='ident'>Gf256</span> {
<span class='ident'>Gf256</span> { <span class='ident'>poly</span>: <span class='number'>0</span> }
}
<span class='doccomment'>/// returns the multiplicative neutral element of the field</span>
<span class='attribute'>#[<span class='ident'>inline</span>]</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>one</span>() <span class='op'>-&gt;</span> <span class='ident'>Gf256</span> {
<span class='ident'>Gf256</span> { <span class='ident'>poly</span>: <span class='number'>1</span> }
}
<span class='attribute'>#[<span class='ident'>inline</span>]</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>from_byte</span>(<span class='ident'>b</span>: <span class='ident'>u8</span>) <span class='op'>-&gt;</span> <span class='ident'>Gf256</span> {
<span class='ident'>Gf256</span> { <span class='ident'>poly</span>: <span class='ident'>b</span> }
}
<span class='attribute'>#[<span class='ident'>inline</span>]</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>to_byte</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='ident'>u8</span> {
<span class='self'>self</span>.<span class='ident'>poly</span>
}
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>log</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span> {
<span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>poly</span> <span class='op'>==</span> <span class='number'>0</span> {
<span class='prelude-val'>None</span>
} <span class='kw'>else</span> {
<span class='kw'>let</span> <span class='ident'>tabs</span> <span class='op'>=</span> <span class='ident'>get_tables</span>();
<span class='prelude-val'>Some</span>(<span class='ident'>tabs</span>.<span class='ident'>log</span>[<span class='self'>self</span>.<span class='ident'>poly</span> <span class='kw'>as</span> <span class='ident'>usize</span>])
}
}
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>exp</span>(<span class='ident'>power</span>: <span class='ident'>u8</span>) <span class='op'>-&gt;</span> <span class='ident'>Gf256</span> {
<span class='kw'>let</span> <span class='ident'>tabs</span> <span class='op'>=</span> <span class='ident'>get_tables</span>();
<span class='ident'>Gf256</span> { <span class='ident'>poly</span>: <span class='ident'>tabs</span>.<span class='ident'>exp</span>[<span class='ident'>power</span> <span class='kw'>as</span> <span class='ident'>usize</span>] }
}
}
<span class='kw'>impl</span> <span class='ident'>Add</span><span class='op'>&lt;</span><span class='ident'>Gf256</span><span class='op'>&gt;</span> <span class='kw'>for</span> <span class='ident'>Gf256</span> {
<span class='kw'>type</span> <span class='ident'>Output</span> <span class='op'>=</span> <span class='ident'>Gf256</span>;
<span class='attribute'>#[<span class='ident'>inline</span>]</span>
<span class='kw'>fn</span> <span class='ident'>add</span>(<span class='self'>self</span>, <span class='ident'>rhs</span>: <span class='ident'>Gf256</span>) <span class='op'>-&gt;</span> <span class='ident'>Gf256</span> {
<span class='ident'>Gf256</span>::<span class='ident'>from_byte</span>(<span class='self'>self</span>.<span class='ident'>poly</span> <span class='op'>^</span> <span class='ident'>rhs</span>.<span class='ident'>poly</span>)
}
}
<span class='kw'>impl</span> <span class='ident'>Sub</span><span class='op'>&lt;</span><span class='ident'>Gf256</span><span class='op'>&gt;</span> <span class='kw'>for</span> <span class='ident'>Gf256</span> {
<span class='kw'>type</span> <span class='ident'>Output</span> <span class='op'>=</span> <span class='ident'>Gf256</span>;
<span class='attribute'>#[<span class='ident'>inline</span>]</span>
<span class='kw'>fn</span> <span class='ident'>sub</span>(<span class='self'>self</span>, <span class='ident'>rhs</span>: <span class='ident'>Gf256</span>) <span class='op'>-&gt;</span> <span class='ident'>Gf256</span> {
<span class='ident'>Gf256</span>::<span class='ident'>from_byte</span>(<span class='self'>self</span>.<span class='ident'>poly</span> <span class='op'>^</span> <span class='ident'>rhs</span>.<span class='ident'>poly</span>)
}
}
<span class='kw'>impl</span> <span class='ident'>Mul</span><span class='op'>&lt;</span><span class='ident'>Gf256</span><span class='op'>&gt;</span> <span class='kw'>for</span> <span class='ident'>Gf256</span> {
<span class='kw'>type</span> <span class='ident'>Output</span> <span class='op'>=</span> <span class='ident'>Gf256</span>;
<span class='kw'>fn</span> <span class='ident'>mul</span>(<span class='self'>self</span>, <span class='ident'>rhs</span>: <span class='ident'>Gf256</span>) <span class='op'>-&gt;</span> <span class='ident'>Gf256</span> {
<span class='kw'>if</span> <span class='kw'>let</span> (<span class='prelude-val'>Some</span>(<span class='ident'>l1</span>), <span class='prelude-val'>Some</span>(<span class='ident'>l2</span>)) <span class='op'>=</span> (<span class='self'>self</span>.<span class='ident'>log</span>(), <span class='ident'>rhs</span>.<span class='ident'>log</span>()) {
<span class='kw'>let</span> <span class='ident'>tmp</span> <span class='op'>=</span> ((<span class='ident'>l1</span> <span class='kw'>as</span> <span class='ident'>u16</span>) <span class='op'>+</span> (<span class='ident'>l2</span> <span class='kw'>as</span> <span class='ident'>u16</span>)) <span class='op'>%</span> <span class='number'>255</span>;
<span class='ident'>Gf256</span>::<span class='ident'>exp</span>(<span class='ident'>tmp</span> <span class='kw'>as</span> <span class='ident'>u8</span>)
} <span class='kw'>else</span> {
<span class='ident'>Gf256</span> { <span class='ident'>poly</span>: <span class='number'>0</span> }
}
}
}
<span class='kw'>impl</span> <span class='ident'>Div</span><span class='op'>&lt;</span><span class='ident'>Gf256</span><span class='op'>&gt;</span> <span class='kw'>for</span> <span class='ident'>Gf256</span> {
<span class='kw'>type</span> <span class='ident'>Output</span> <span class='op'>=</span> <span class='ident'>Gf256</span>;
<span class='kw'>fn</span> <span class='ident'>div</span>(<span class='self'>self</span>, <span class='ident'>rhs</span>: <span class='ident'>Gf256</span>) <span class='op'>-&gt;</span> <span class='ident'>Gf256</span> {
<span class='kw'>let</span> <span class='ident'>l2</span> <span class='op'>=</span> <span class='ident'>rhs</span>.<span class='ident'>log</span>().<span class='ident'>expect</span>(<span class='string'>&quot;division by zero&quot;</span>);
<span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>l1</span>) <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>log</span>() {
<span class='kw'>let</span> <span class='ident'>tmp</span> <span class='op'>=</span> ((<span class='ident'>l1</span> <span class='kw'>as</span> <span class='ident'>u16</span>) <span class='op'>+</span> <span class='number'>255</span> <span class='op'>-</span> (<span class='ident'>l2</span> <span class='kw'>as</span> <span class='ident'>u16</span>)) <span class='op'>%</span> <span class='number'>255</span>;
<span class='ident'>Gf256</span>::<span class='ident'>exp</span>(<span class='ident'>tmp</span> <span class='kw'>as</span> <span class='ident'>u8</span>)
} <span class='kw'>else</span> {
<span class='ident'>Gf256</span> { <span class='ident'>poly</span>: <span class='number'>0</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -1,188 +0,0 @@
<!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/interpolation.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>interpolation.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>
</pre><pre class='rust '>
<span class='kw'>use</span> <span class='ident'>gf256</span>::<span class='ident'>Gf256</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'>io</span>::<span class='ident'>prelude</span>::<span class='op'>*</span>;
<span class='doccomment'>/// evaluates a polynomial at x=1, 2, 3, ... n (inclusive)</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>encode</span><span class='op'>&lt;</span><span class='ident'>W</span>: <span class='ident'>Write</span><span class='op'>&gt;</span>(<span class='ident'>src</span>: <span class='kw-2'>&amp;</span>[<span class='ident'>u8</span>], <span class='ident'>n</span>: <span class='ident'>u8</span>, <span class='ident'>w</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>W</span>) <span class='op'>-&gt;</span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'>&lt;</span>()<span class='op'>&gt;</span> {
<span class='kw'>for</span> <span class='ident'>raw_x</span> <span class='kw'>in</span> <span class='number'>1</span>..((<span class='ident'>n</span> <span class='kw'>as</span> <span class='ident'>u16</span>) <span class='op'>+</span> <span class='number'>1</span>) {
<span class='kw'>let</span> <span class='ident'>x</span> <span class='op'>=</span> <span class='ident'>Gf256</span>::<span class='ident'>from_byte</span>(<span class='ident'>raw_x</span> <span class='kw'>as</span> <span class='ident'>u8</span>);
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>fac</span> <span class='op'>=</span> <span class='ident'>Gf256</span>::<span class='ident'>one</span>();
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>acc</span> <span class='op'>=</span> <span class='ident'>Gf256</span>::<span class='ident'>zero</span>();
<span class='kw'>for</span> <span class='kw-2'>&amp;</span><span class='ident'>coeff</span> <span class='kw'>in</span> <span class='ident'>src</span>.<span class='ident'>iter</span>() {
<span class='ident'>acc</span> <span class='op'>=</span> <span class='ident'>acc</span> <span class='op'>+</span> <span class='ident'>fac</span> <span class='op'>*</span> <span class='ident'>Gf256</span>::<span class='ident'>from_byte</span>(<span class='ident'>coeff</span>);
<span class='ident'>fac</span> <span class='op'>=</span> <span class='ident'>fac</span> <span class='op'>*</span> <span class='ident'>x</span>;
}
<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>w</span>.<span class='ident'>write</span>(<span class='kw-2'>&amp;</span>[<span class='ident'>acc</span>.<span class='ident'>to_byte</span>()]));
}
<span class='prelude-val'>Ok</span>(())
}
<span class='doccomment'>/// evaluates an interpolated polynomial at `Gf256::zero()` where</span>
<span class='doccomment'>/// the polynomial is determined using Lagrangian interpolation</span>
<span class='doccomment'>/// based on the given x/y coordinates `src`.</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>lagrange_interpolate</span>(<span class='ident'>src</span>: <span class='kw-2'>&amp;</span>[(<span class='ident'>u8</span>, <span class='ident'>u8</span>)]) <span class='op'>-&gt;</span> <span class='ident'>u8</span> {
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>sum</span> <span class='op'>=</span> <span class='ident'>Gf256</span>::<span class='ident'>zero</span>();
<span class='kw'>for</span> (<span class='ident'>i</span>, <span class='kw-2'>&amp;</span>(<span class='ident'>raw_xi</span>, <span class='ident'>raw_yi</span>)) <span class='kw'>in</span> <span class='ident'>src</span>.<span class='ident'>iter</span>().<span class='ident'>enumerate</span>() {
<span class='kw'>let</span> <span class='ident'>xi</span> <span class='op'>=</span> <span class='ident'>Gf256</span>::<span class='ident'>from_byte</span>(<span class='ident'>raw_xi</span>);
<span class='kw'>let</span> <span class='ident'>yi</span> <span class='op'>=</span> <span class='ident'>Gf256</span>::<span class='ident'>from_byte</span>(<span class='ident'>raw_yi</span>);
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>prod</span> <span class='op'>=</span> <span class='ident'>Gf256</span>::<span class='ident'>one</span>();
<span class='kw'>for</span> (<span class='ident'>j</span>, <span class='kw-2'>&amp;</span>(<span class='ident'>raw_xj</span>, _)) <span class='kw'>in</span> <span class='ident'>src</span>.<span class='ident'>iter</span>().<span class='ident'>enumerate</span>() {
<span class='kw'>if</span> <span class='ident'>i</span> <span class='op'>!=</span> <span class='ident'>j</span> {
<span class='kw'>let</span> <span class='ident'>xj</span> <span class='op'>=</span> <span class='ident'>Gf256</span>::<span class='ident'>from_byte</span>(<span class='ident'>raw_xj</span>);
<span class='kw'>let</span> <span class='ident'>delta</span> <span class='op'>=</span> <span class='ident'>xi</span> <span class='op'>-</span> <span class='ident'>xj</span>;
<span class='macro'>assert</span><span class='macro'>!</span>(<span class='ident'>delta</span>.<span class='ident'>poly</span> <span class='op'>!=</span> <span class='number'>0</span>, <span class='string'>&quot;Duplicate shares&quot;</span>);
<span class='ident'>prod</span> <span class='op'>=</span> <span class='ident'>prod</span> <span class='op'>*</span> <span class='ident'>xj</span> <span class='op'>/</span> <span class='ident'>delta</span>;
}
}
<span class='ident'>sum</span> <span class='op'>=</span> <span class='ident'>sum</span> <span class='op'>+</span> <span class='ident'>prod</span> <span class='op'>*</span> <span class='ident'>yi</span>;
}
<span class='ident'>sum</span>.<span class='ident'>to_byte</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -1,890 +0,0 @@
<!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'>&lt;</span><span class='ident'>RustySecretsVersions</span><span class='op'>&gt;</span>,
<span class='ident'>secret</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span><span class='op'>&lt;</span>::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span>,
<span class='ident'>mime_type</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span><span class='op'>&lt;</span>::<span class='ident'>std</span>::<span class='ident'>string</span>::<span class='ident'>String</span><span class='op'>&gt;</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'>&lt;</span><span class='ident'>u32</span><span class='op'>&gt;</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'>-&gt;</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'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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'>&lt;</span><span class='ident'>RustySecret</span><span class='op'>&gt;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
<span class='self'>self</span>.<span class='ident'>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'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
<span class='self'>self</span>.<span class='ident'>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'>&amp;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> ::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>=&gt;</span> <span class='kw-2'>&amp;</span><span class='ident'>v</span>,
<span class='prelude-val'>None</span> <span class='op'>=&gt;</span> <span class='kw-2'>&amp;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
<span class='self'>self</span>.<span class='ident'>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'>&amp;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>=&gt;</span> <span class='kw-2'>&amp;</span><span class='ident'>v</span>,
<span class='prelude-val'>None</span> <span class='op'>=&gt;</span> <span class='string'>&quot;&quot;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>is</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>CodedInputStream</span>) <span class='op'>-&gt;</span> ::<span class='ident'>protobuf</span>::<span class='ident'>ProtobufResult</span><span class='op'>&lt;</span>()<span class='op'>&gt;</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'>=&gt;</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'>=&gt;</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'>&amp;</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'>=&gt;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>mime_type</span>));
},
_ <span class='op'>=&gt;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&amp;</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'>&amp;</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'>&amp;</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'>&amp;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>, <span class='ident'>os</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>CodedOutputStream</span>) <span class='op'>-&gt;</span> ::<span class='ident'>protobuf</span>::<span class='ident'>ProtobufResult</span><span class='op'>&lt;</span>()<span class='op'>&gt;</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'>&amp;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span>::<span class='ident'>protobuf</span>::<span class='ident'>UnknownFields</span> {
<span class='kw-2'>&amp;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>UnknownFields</span> {
<span class='kw-2'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&lt;</span><span class='ident'>RustySecret</span><span class='op'>&gt;</span>()
}
<span class='kw'>fn</span> <span class='ident'>as_any</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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'>&lt;</span><span class='self'>Self</span><span class='op'>&gt;</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'>-&gt;</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'>&lt;</span><span class='ident'>RustySecret</span><span class='op'>&gt;</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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'>&lt;</span>::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>MessageDescriptor</span><span class='op'>&gt;</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'>&quot;version&quot;</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'>&quot;secret&quot;</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'>&quot;mime_type&quot;</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'>&lt;</span><span class='ident'>RustySecret</span><span class='op'>&gt;</span>(
<span class='string'>&quot;RustySecret&quot;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>, <span class='ident'>other</span>: <span class='kw-2'>&amp;</span><span class='ident'>RustySecret</span>) <span class='op'>-&gt;</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'>&amp;&amp;</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'>&amp;&amp;</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'>&amp;&amp;</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'>&amp;</span><span class='self'>self</span>, <span class='ident'>f</span>: <span class='kw-2'>&amp;</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'>-&gt;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>-&gt;</span> ::<span class='ident'>std</span>::<span class='ident'>option</span>::<span class='prelude-ty'>Option</span><span class='op'>&lt;</span><span class='ident'>RustySecretsVersions</span><span class='op'>&gt;</span> {
<span class='kw'>match</span> <span class='ident'>value</span> {
<span class='number'>0</span> <span class='op'>=&gt;</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'>=&gt;</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'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> [<span class='self'>Self</span>] {
<span class='kw'>static</span> <span class='ident'>values</span>: <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> [<span class='ident'>RustySecretsVersions</span>] <span class='op'>=</span> <span class='kw-2'>&amp;</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'>&lt;</span><span class='ident'>RustySecretsVersions</span><span class='op'>&gt;</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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'>&lt;</span>::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>EnumDescriptor</span><span class='op'>&gt;</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'>&quot;RustySecretsVersions&quot;</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'>&amp;</span><span class='lifetime'>&#39;static</span> [<span class='ident'>u8</span>] <span class='op'>=</span> <span class='kw-2'>&amp;</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'>&lt;</span>::<span class='ident'>protobuf</span>::<span class='ident'>descriptor</span>::<span class='ident'>FileDescriptorProto</span><span class='op'>&gt;</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'>-&gt;</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'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -1,798 +0,0 @@
<!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/share_data.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>share_data.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>
</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'>ShareData</span> {
<span class='comment'>// message fields</span>
<span class='ident'>shamir_data</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span><span class='op'>&lt;</span>::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span>,
<span class='ident'>signature</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>RepeatedField</span><span class='op'>&lt;</span>::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span>,
<span class='ident'>proof</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span><span class='op'>&lt;</span>::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</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'>&lt;</span><span class='ident'>u32</span><span class='op'>&gt;</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'>ShareData</span> {}
<span class='kw'>impl</span> <span class='ident'>ShareData</span> {
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>() <span class='op'>-&gt;</span> <span class='ident'>ShareData</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'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> <span class='ident'>ShareData</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'>&lt;</span><span class='ident'>ShareData</span><span class='op'>&gt;</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'>ShareData</span>,
};
<span class='kw'>unsafe</span> {
<span class='ident'>instance</span>.<span class='ident'>get</span>(<span class='op'>||</span> {
<span class='ident'>ShareData</span> {
<span class='ident'>shamir_data</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>SingularField</span>::<span class='ident'>none</span>(),
<span class='ident'>signature</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>RepeatedField</span>::<span class='ident'>new</span>(),
<span class='ident'>proof</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 bytes shamir_data = 1;</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>clear_shamir_data</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) {
<span class='self'>self</span>.<span class='ident'>shamir_data</span>.<span class='ident'>clear</span>();
}
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>has_shamir_data</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
<span class='self'>self</span>.<span class='ident'>shamir_data</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_shamir_data</span>(<span class='kw-2'>&amp;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>) {
<span class='self'>self</span>.<span class='ident'>shamir_data</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_shamir_data</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span> {
<span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>shamir_data</span>.<span class='ident'>is_none</span>() {
<span class='self'>self</span>.<span class='ident'>shamir_data</span>.<span class='ident'>set_default</span>();
};
<span class='self'>self</span>.<span class='ident'>shamir_data</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_shamir_data</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> ::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span> {
<span class='self'>self</span>.<span class='ident'>shamir_data</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_shamir_data</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span>[<span class='ident'>u8</span>] {
<span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>shamir_data</span>.<span class='ident'>as_ref</span>() {
<span class='prelude-val'>Some</span>(<span class='ident'>v</span>) <span class='op'>=&gt;</span> <span class='kw-2'>&amp;</span><span class='ident'>v</span>,
<span class='prelude-val'>None</span> <span class='op'>=&gt;</span> <span class='kw-2'>&amp;</span>[],
}
}
<span class='comment'>// repeated bytes signature = 2;</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>clear_signature</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) {
<span class='self'>self</span>.<span class='ident'>signature</span>.<span class='ident'>clear</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_signature</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>v</span>: ::<span class='ident'>protobuf</span>::<span class='ident'>RepeatedField</span><span class='op'>&lt;</span>::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span>) {
<span class='self'>self</span>.<span class='ident'>signature</span> <span class='op'>=</span> <span class='ident'>v</span>;
}
<span class='comment'>// Mutable pointer to the field.</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>mut_signature</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>RepeatedField</span><span class='op'>&lt;</span>::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span> {
<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>signature</span>
}
<span class='comment'>// Take field</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>take_signature</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> ::<span class='ident'>protobuf</span>::<span class='ident'>RepeatedField</span><span class='op'>&lt;</span>::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span> {
::<span class='ident'>std</span>::<span class='ident'>mem</span>::<span class='ident'>replace</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>signature</span>, ::<span class='ident'>protobuf</span>::<span class='ident'>RepeatedField</span>::<span class='ident'>new</span>())
}
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>get_signature</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span>[::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>] {
<span class='kw-2'>&amp;</span><span class='self'>self</span>.<span class='ident'>signature</span>
}
<span class='comment'>// optional bytes proof = 3;</span>
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>clear_proof</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) {
<span class='self'>self</span>.<span class='ident'>proof</span>.<span class='ident'>clear</span>();
}
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>has_proof</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
<span class='self'>self</span>.<span class='ident'>proof</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_proof</span>(<span class='kw-2'>&amp;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>) {
<span class='self'>self</span>.<span class='ident'>proof</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_proof</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span> {
<span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>proof</span>.<span class='ident'>is_none</span>() {
<span class='self'>self</span>.<span class='ident'>proof</span>.<span class='ident'>set_default</span>();
};
<span class='self'>self</span>.<span class='ident'>proof</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_proof</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> ::<span class='ident'>std</span>::<span class='ident'>vec</span>::<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span> {
<span class='self'>self</span>.<span class='ident'>proof</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_proof</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span>[<span class='ident'>u8</span>] {
<span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>proof</span>.<span class='ident'>as_ref</span>() {
<span class='prelude-val'>Some</span>(<span class='ident'>v</span>) <span class='op'>=&gt;</span> <span class='kw-2'>&amp;</span><span class='ident'>v</span>,
<span class='prelude-val'>None</span> <span class='op'>=&gt;</span> <span class='kw-2'>&amp;</span>[],
}
}
}
<span class='kw'>impl</span> ::<span class='ident'>protobuf</span>::<span class='ident'>Message</span> <span class='kw'>for</span> <span class='ident'>ShareData</span> {
<span class='kw'>fn</span> <span class='ident'>is_initialized</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>is</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>CodedInputStream</span>) <span class='op'>-&gt;</span> ::<span class='ident'>protobuf</span>::<span class='ident'>ProtobufResult</span><span class='op'>&lt;</span>()<span class='op'>&gt;</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'>=&gt;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>shamir_data</span>));
},
<span class='number'>2</span> <span class='op'>=&gt;</span> {
<span class='macro'>try</span><span class='macro'>!</span>(::<span class='ident'>protobuf</span>::<span class='ident'>rt</span>::<span class='ident'>read_repeated_bytes_into</span>(<span class='ident'>wire_type</span>, <span class='ident'>is</span>, <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>signature</span>));
},
<span class='number'>3</span> <span class='op'>=&gt;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='ident'>proof</span>));
},
_ <span class='op'>=&gt;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&amp;</span><span class='self'>self</span>.<span class='ident'>shamir_data</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'>1</span>, <span class='kw-2'>&amp;</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'>&amp;</span><span class='self'>self</span>.<span class='ident'>signature</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'>&amp;</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'>&amp;</span><span class='self'>self</span>.<span class='ident'>proof</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'>3</span>, <span class='kw-2'>&amp;</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'>&amp;</span><span class='self'>self</span>, <span class='ident'>os</span>: <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>CodedOutputStream</span>) <span class='op'>-&gt;</span> ::<span class='ident'>protobuf</span>::<span class='ident'>ProtobufResult</span><span class='op'>&lt;</span>()<span class='op'>&gt;</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'>shamir_data</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'>1</span>, <span class='kw-2'>&amp;</span><span class='ident'>v</span>));
};
<span class='kw'>for</span> <span class='ident'>v</span> <span class='kw'>in</span> <span class='kw-2'>&amp;</span><span class='self'>self</span>.<span class='ident'>signature</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'>&amp;</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'>proof</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'>3</span>, <span class='kw-2'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span>::<span class='ident'>protobuf</span>::<span class='ident'>UnknownFields</span> {
<span class='kw-2'>&amp;</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'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> ::<span class='ident'>protobuf</span>::<span class='ident'>UnknownFields</span> {
<span class='kw-2'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</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'>&lt;</span><span class='ident'>ShareData</span><span class='op'>&gt;</span>()
}
<span class='kw'>fn</span> <span class='ident'>as_any</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</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'>&amp;</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'>&amp;</span><span class='self'>self</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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'>&lt;</span><span class='self'>Self</span><span class='op'>&gt;</span>)
}
}
<span class='kw'>impl</span> ::<span class='ident'>protobuf</span>::<span class='ident'>MessageStatic</span> <span class='kw'>for</span> <span class='ident'>ShareData</span> {
<span class='kw'>fn</span> <span class='ident'>new</span>() <span class='op'>-&gt;</span> <span class='ident'>ShareData</span> {
<span class='ident'>ShareData</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'>&lt;</span><span class='ident'>ShareData</span><span class='op'>&gt;</span>) <span class='op'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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'>&lt;</span>::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>MessageDescriptor</span><span class='op'>&gt;</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_bytes_accessor</span>(
<span class='string'>&quot;shamir_data&quot;</span>,
<span class='ident'>ShareData</span>::<span class='ident'>has_shamir_data</span>,
<span class='ident'>ShareData</span>::<span class='ident'>get_shamir_data</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_repeated_bytes_accessor</span>(
<span class='string'>&quot;signature&quot;</span>,
<span class='ident'>ShareData</span>::<span class='ident'>get_signature</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'>&quot;proof&quot;</span>,
<span class='ident'>ShareData</span>::<span class='ident'>has_proof</span>,
<span class='ident'>ShareData</span>::<span class='ident'>get_proof</span>,
));
::<span class='ident'>protobuf</span>::<span class='ident'>reflect</span>::<span class='ident'>MessageDescriptor</span>::<span class='ident'>new</span>::<span class='op'>&lt;</span><span class='ident'>ShareData</span><span class='op'>&gt;</span>(
<span class='string'>&quot;ShareData&quot;</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'>ShareData</span> {
<span class='kw'>fn</span> <span class='ident'>clear</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='self'>self</span>) {
<span class='self'>self</span>.<span class='ident'>clear_shamir_data</span>();
<span class='self'>self</span>.<span class='ident'>clear_signature</span>();
<span class='self'>self</span>.<span class='ident'>clear_proof</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'>ShareData</span> {
<span class='kw'>fn</span> <span class='ident'>eq</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>, <span class='ident'>other</span>: <span class='kw-2'>&amp;</span><span class='ident'>ShareData</span>) <span class='op'>-&gt;</span> <span class='ident'>bool</span> {
<span class='self'>self</span>.<span class='ident'>shamir_data</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>shamir_data</span> <span class='op'>&amp;&amp;</span>
<span class='self'>self</span>.<span class='ident'>signature</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>signature</span> <span class='op'>&amp;&amp;</span>
<span class='self'>self</span>.<span class='ident'>proof</span> <span class='op'>==</span> <span class='ident'>other</span>.<span class='ident'>proof</span> <span class='op'>&amp;&amp;</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'>ShareData</span> {
<span class='kw'>fn</span> <span class='ident'>fmt</span>(<span class='kw-2'>&amp;</span><span class='self'>self</span>, <span class='ident'>f</span>: <span class='kw-2'>&amp;</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'>-&gt;</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='kw'>static</span> <span class='ident'>file_descriptor_proto_data</span>: <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;static</span> [<span class='ident'>u8</span>] <span class='op'>=</span> <span class='kw-2'>&amp;</span>[
<span class='number'>0x0a</span>, <span class='number'>0x18</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'>0x62</span>, <span class='number'>0x75</span>, <span class='number'>0x66</span>, <span class='number'>0x2f</span>, <span class='number'>0x53</span>, <span class='number'>0x68</span>, <span class='number'>0x61</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>,
<span class='number'>0x44</span>, <span class='number'>0x61</span>, <span class='number'>0x74</span>, <span class='number'>0x61</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'>0x60</span>, <span class='number'>0x0a</span>, <span class='number'>0x09</span>, <span class='number'>0x53</span>, <span class='number'>0x68</span>,
<span class='number'>0x61</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>, <span class='number'>0x44</span>, <span class='number'>0x61</span>, <span class='number'>0x74</span>, <span class='number'>0x61</span>, <span class='number'>0x12</span>, <span class='number'>0x1f</span>, <span class='number'>0x0a</span>, <span class='number'>0x0b</span>, <span class='number'>0x73</span>, <span class='number'>0x68</span>, <span class='number'>0x61</span>, <span class='number'>0x6d</span>, <span class='number'>0x69</span>,
<span class='number'>0x72</span>, <span class='number'>0x5f</span>, <span class='number'>0x64</span>, <span class='number'>0x61</span>, <span class='number'>0x74</span>, <span class='number'>0x61</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'>0x0c</span>, <span class='number'>0x52</span>, <span class='number'>0x0a</span>, <span class='number'>0x73</span>, <span class='number'>0x68</span>,
<span class='number'>0x61</span>, <span class='number'>0x6d</span>, <span class='number'>0x69</span>, <span class='number'>0x72</span>, <span class='number'>0x44</span>, <span class='number'>0x61</span>, <span class='number'>0x74</span>, <span class='number'>0x61</span>, <span class='number'>0x12</span>, <span class='number'>0x1c</span>, <span class='number'>0x0a</span>, <span class='number'>0x09</span>, <span class='number'>0x73</span>, <span class='number'>0x69</span>, <span class='number'>0x67</span>, <span class='number'>0x6e</span>,
<span class='number'>0x61</span>, <span class='number'>0x74</span>, <span class='number'>0x75</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>, <span class='number'>0x18</span>, <span class='number'>0x02</span>, <span class='number'>0x20</span>, <span class='number'>0x03</span>, <span class='number'>0x28</span>, <span class='number'>0x0c</span>, <span class='number'>0x52</span>, <span class='number'>0x09</span>, <span class='number'>0x73</span>, <span class='number'>0x69</span>, <span class='number'>0x67</span>,
<span class='number'>0x6e</span>, <span class='number'>0x61</span>, <span class='number'>0x74</span>, <span class='number'>0x75</span>, <span class='number'>0x72</span>, <span class='number'>0x65</span>, <span class='number'>0x12</span>, <span class='number'>0x14</span>, <span class='number'>0x0a</span>, <span class='number'>0x05</span>, <span class='number'>0x70</span>, <span class='number'>0x72</span>, <span class='number'>0x6f</span>, <span class='number'>0x6f</span>, <span class='number'>0x66</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'>0x0c</span>, <span class='number'>0x52</span>, <span class='number'>0x05</span>, <span class='number'>0x70</span>, <span class='number'>0x72</span>, <span class='number'>0x6f</span>, <span class='number'>0x6f</span>, <span class='number'>0x66</span>, <span class='number'>0x4a</span>, <span class='number'>0xfb</span>, <span class='number'>0x01</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'>0x06</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'>0x04</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'>0x06</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'>0x02</span>, <span class='number'>0x08</span>, <span class='number'>0x11</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'>0x03</span>, <span class='number'>0x08</span>, <span class='number'>0x1e</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'>0x03</span>, <span class='number'>0x08</span>, <span class='number'>0x02</span>, <span class='number'>0x13</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'>0x05</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>,
<span class='number'>0x03</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'>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'>0x0e</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'>0x00</span>, <span class='number'>0x03</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x03</span>, <span class='number'>0x1c</span>, <span class='number'>0x1d</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'>0x04</span>, <span class='number'>0x08</span>, <span class='number'>0x25</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'>0x04</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x04</span>, <span class='number'>0x08</span>, <span class='number'>0x10</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'>0x04</span>, <span class='number'>0x11</span>, <span class='number'>0x16</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'>0x04</span>, <span class='number'>0x17</span>, <span class='number'>0x20</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'>0x04</span>, <span class='number'>0x23</span>, <span class='number'>0x24</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'>0x05</span>, <span class='number'>0x08</span>,
<span class='number'>0x18</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'>0x05</span>, <span class='number'>0x08</span>, <span class='number'>0x04</span>, <span class='number'>0x25</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'>0x05</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'>0x02</span>, <span class='number'>0x01</span>, <span class='number'>0x12</span>, <span class='number'>0x03</span>, <span class='number'>0x05</span>, <span class='number'>0x0e</span>, <span class='number'>0x13</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'>0x05</span>, <span class='number'>0x16</span>, <span class='number'>0x17</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'>&lt;</span>::<span class='ident'>protobuf</span>::<span class='ident'>descriptor</span>::<span class='ident'>FileDescriptorProto</span><span class='op'>&gt;</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'>-&gt;</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'>-&gt;</span> <span class='kw-2'>&amp;</span><span class='lifetime'>&#39;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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -1,282 +0,0 @@
<!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/share_format.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>share_format.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>
</pre><pre class='rust '>
<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'>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'>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'>&lt;</span>(<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>, <span class='ident'>u8</span>, <span class='ident'>u8</span>, <span class='prelude-ty'>Option</span><span class='op'>&lt;</span>(<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span>, <span class='ident'>Proof</span><span class='op'>&lt;</span><span class='ident'>MerklePublicKey</span><span class='op'>&gt;</span>)<span class='op'>&gt;</span>), <span class='ident'>RustyError</span><span class='op'>&gt;</span>;
<span class='kw'>fn</span> <span class='ident'>base64_config</span>() <span class='op'>-&gt;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</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'>&lt;</span>(<span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span>, <span class='ident'>Proof</span><span class='op'>&lt;</span><span class='ident'>MerklePublicKey</span><span class='op'>&gt;</span>)<span class='op'>&gt;</span>)
<span class='op'>-&gt;</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>);
<span class='kw'>if</span> <span class='ident'>signature_pair</span>.<span class='ident'>is_some</span>() {
<span class='kw'>let</span> (<span class='ident'>signature</span>, <span class='ident'>proof</span>) <span class='op'>=</span> <span class='ident'>signature_pair</span>.<span class='ident'>unwrap</span>();
<span class='ident'>share_protobuf</span>.<span class='ident'>set_signature</span>(<span class='ident'>RepeatedField</span>::<span class='ident'>from_vec</span>(<span class='ident'>signature</span>));
<span class='ident'>share_protobuf</span>.<span class='ident'>set_proof</span>(<span class='ident'>proof</span>.<span class='ident'>write_to_bytes</span>().<span class='ident'>unwrap</span>());
}
<span class='kw'>let</span> <span class='ident'>b64_share</span> <span class='op'>=</span> <span class='ident'>share_protobuf</span>.<span class='ident'>write_to_bytes</span>().<span class='ident'>unwrap</span>().<span class='ident'>to_base64</span>(<span class='ident'>base64_config</span>());
<span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>&quot;{}-{}-{}&quot;</span>, <span class='ident'>threshold</span>, <span class='ident'>share_num</span>, <span class='ident'>b64_share</span>)
}
<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'>&amp;</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'>-&gt;</span> <span class='ident'>ParsedShare</span> {
<span class='kw'>let</span> <span class='ident'>parts</span>: <span class='ident'>Vec</span><span class='op'>&lt;</span>_<span class='op'>&gt;</span> <span class='op'>=</span> <span class='ident'>s</span>.<span class='ident'>trim</span>().<span class='ident'>split</span>(<span class='string'>&#39;-&#39;</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'>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'>&quot;Expected 3 parts separated by a minus sign. Found {}.&quot;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</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'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</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'>&lt;</span> <span class='number'>1</span> <span class='op'>||</span> <span class='ident'>n</span> <span class='op'>&lt;</span> <span class='number'>1</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'>&quot;Found illegal parameters K: {} N: {}.&quot;</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'>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'>&quot;Base64 decoding of data block failed&quot;</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'>&lt;</span><span class='ident'>ShareData</span><span class='op'>&gt;</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='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'>&quot;Protobuf decoding of data block failed with error: {} .&quot;</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_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'>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>();
<span class='prelude-val'>Ok</span>((<span class='ident'>share</span>, <span class='ident'>k</span>, <span class='ident'>n</span>, <span class='prelude-val'>Some</span>((<span class='ident'>Vec</span>::<span class='ident'>from</span>(<span class='ident'>signature</span>), <span class='ident'>proof</span>))))
} <span class='kw'>else</span> {
<span class='prelude-val'>Ok</span>((<span class='ident'>share</span>, <span class='ident'>k</span>, <span class='ident'>n</span>, <span class='prelude-val'>None</span>))
}
}
<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>format_share_for_signing</span>(<span class='ident'>k</span>: <span class='ident'>u8</span>, <span class='ident'>i</span>: <span class='ident'>u8</span>, <span class='ident'>data</span>: <span class='kw-2'>&amp;</span>[<span class='ident'>u8</span>]) <span class='op'>-&gt;</span> <span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span> {
<span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>&quot;{}-{}-{}&quot;</span>, <span class='ident'>k</span>, <span class='ident'>i</span>, <span class='ident'>data</span>.<span class='ident'>to_base64</span>(<span class='ident'>base64_config</span>())).<span class='ident'>into_bytes</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -1,364 +0,0 @@
<!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/sss.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>sss.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>
</pre><pre class='rust '>
<span class='doccomment'>//! SSS provides Shamir&#39;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>;
<span class='kw'>use</span> <span class='ident'>rand</span>::{<span class='ident'>OsRng</span>, <span class='ident'>Rng</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'>share_format</span>::<span class='ident'>share_string_from</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'>iter</span>::<span class='ident'>repeat</span>;
<span class='kw'>use</span> <span class='ident'>validation</span>::<span class='ident'>process_and_validate_shares</span>;
<span class='kw'>fn</span> <span class='ident'>new_vec</span><span class='op'>&lt;</span><span class='ident'>T</span>: <span class='ident'>Clone</span><span class='op'>&gt;</span>(<span class='ident'>n</span>: <span class='ident'>usize</span>, <span class='ident'>x</span>: <span class='ident'>T</span>) <span class='op'>-&gt;</span> <span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>T</span><span class='op'>&gt;</span> {
<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&#39;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::sss::generate_shares;</span>
<span class='doccomment'>/// let secret = &quot;These programs were never about terrorism: theyre about economic spying,</span>
<span class='doccomment'>/// social control, and diplomatic manipulation. Theyre about power.&quot;.to_string();</span>
<span class='doccomment'>///</span>
<span class='doccomment'>/// match generate_shares(7, 10, &amp;secret.into_bytes(), true){</span>
<span class='doccomment'>/// Ok(shares) =&gt; {</span>
<span class='doccomment'>/// // Do something with the shares</span>
<span class='doccomment'>/// },</span>
<span class='doccomment'>/// Err(_) =&gt; {}// 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'>&amp;</span>[<span class='ident'>u8</span>], <span class='ident'>sign_shares</span>: <span class='ident'>bool</span>) <span class='op'>-&gt;</span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;&gt;</span> {
<span class='kw'>if</span> <span class='ident'>k</span> <span class='op'>&gt;</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'>&quot;Threshold K can not be larger than N&quot;</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='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>()
.<span class='ident'>enumerate</span>()
.<span class='ident'>map</span>(<span class='op'>|</span>(<span class='ident'>i</span>, <span class='ident'>x</span>)<span class='op'>|</span> <span class='ident'>format_share_for_signing</span>(<span class='ident'>k</span>, (<span class='ident'>i</span> <span class='op'>+</span> <span class='number'>1</span>) <span class='kw'>as</span> <span class='ident'>u8</span>, <span class='ident'>x</span>))
.<span class='ident'>collect</span>::<span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span>_<span class='op'>&gt;&gt;</span>();
<span class='kw'>let</span> <span class='ident'>sign</span> <span class='op'>=</span> <span class='ident'>sign_data_vec</span>(<span class='kw-2'>&amp;</span><span class='ident'>shares_to_sign</span>, <span class='ident'>digest</span>)
.<span class='ident'>unwrap</span>()
.<span class='ident'>into_iter</span>()
.<span class='ident'>map</span>(<span class='prelude-val'>Some</span>)
.<span class='ident'>collect</span>::<span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span>_<span class='op'>&gt;&gt;</span>();
<span class='prelude-val'>Some</span>(<span class='ident'>sign</span>)
} <span class='kw'>else</span> {
<span class='prelude-val'>None</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='ident'>index</span>, <span class='ident'>share</span>), <span class='ident'>signature_pair</span>) <span class='kw'>in</span>
<span class='ident'>shares</span>.<span class='ident'>into_iter</span>()
.<span class='ident'>enumerate</span>()
.<span class='ident'>zip</span>(<span class='ident'>signatures</span>.<span class='ident'>unwrap_or_else</span>(<span class='op'>||</span> <span class='macro'>vec</span><span class='macro'>!</span>[<span class='prelude-val'>None</span>; <span class='ident'>n</span> <span class='kw'>as</span> <span class='ident'>usize</span>]).<span class='ident'>into_iter</span>()) {
<span class='kw'>let</span> <span class='ident'>share_string</span> <span class='op'>=</span> <span class='ident'>share_string_from</span>(<span class='ident'>share</span>, <span class='ident'>k</span>, (<span class='ident'>index</span> <span class='op'>+</span> <span class='number'>1</span>) <span class='kw'>as</span> <span class='ident'>u8</span>, <span class='ident'>signature_pair</span>);
<span class='ident'>result</span>.<span class='ident'>push</span>(<span class='ident'>share_string</span>);
}
<span class='prelude-val'>Ok</span>(<span class='ident'>result</span>)
}
<span class='kw'>fn</span> <span class='ident'>secret_share</span>(<span class='ident'>src</span>: <span class='kw-2'>&amp;</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'>-&gt;</span> <span class='prelude-ty'>Result</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;&gt;</span>, <span class='ident'>RustyError</span><span class='op'>&gt;</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>));
}
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>col_in</span> <span class='op'>=</span> <span class='ident'>new_vec</span>(<span class='ident'>k</span> <span class='kw'>as</span> <span class='ident'>usize</span>, <span class='number'>0u8</span>);
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>col_out</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'>let</span> <span class='kw-2'>mut</span> <span class='ident'>osrng</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>OsRng</span>::<span class='ident'>new</span>());
<span class='kw'>for</span> (<span class='ident'>c</span>, <span class='kw-2'>&amp;</span><span class='ident'>s</span>) <span class='kw'>in</span> <span class='ident'>src</span>.<span class='ident'>iter</span>().<span class='ident'>enumerate</span>() {
<span class='ident'>col_in</span>[<span class='number'>0</span>] <span class='op'>=</span> <span class='ident'>s</span>;
<span class='ident'>osrng</span>.<span class='ident'>fill_bytes</span>(<span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>col_in</span>[<span class='number'>1</span>..]);
<span class='ident'>col_out</span>.<span class='ident'>clear</span>();
<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>encode</span>(<span class='kw-2'>&amp;</span><span class='op'>*</span><span class='ident'>col_in</span>, <span class='ident'>n</span>, <span class='kw-2'>&amp;</span><span class='kw-2'>mut</span> <span class='ident'>col_out</span>));
<span class='kw'>for</span> (<span class='kw-2'>&amp;</span><span class='ident'>y</span>, <span class='ident'>share</span>) <span class='kw'>in</span> <span class='ident'>col_out</span>.<span class='ident'>iter</span>().<span class='ident'>zip</span>(<span class='ident'>result</span>.<span class='ident'>iter_mut</span>()) {
<span class='ident'>share</span>[<span class='ident'>c</span>] <span class='op'>=</span> <span class='ident'>y</span>;
}
}
<span class='prelude-val'>Ok</span>(<span class='ident'>result</span>)
}
<span class='doccomment'>/// Recovers the secret from a k-out-of-n Shamir&#39;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::sss::recover_secret;</span>
<span class='doccomment'>/// let share1 = &quot;2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP&quot;.to_string();</span>
<span class='doccomment'>/// let share2 = &quot;2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF&quot;.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) =&gt; {</span>
<span class='doccomment'>/// // Do something with the secret</span>
<span class='doccomment'>/// },</span>
<span class='doccomment'>/// Err(e) =&gt; {</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'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;</span>, <span class='ident'>verify_signatures</span>: <span class='ident'>bool</span>) <span class='op'>-&gt;</span> <span class='prelude-ty'>Result</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>, <span class='ident'>RustyError</span><span class='op'>&gt;</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>();
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>col_in</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>with_capacity</span>(<span class='ident'>k</span> <span class='kw'>as</span> <span class='ident'>usize</span>);
<span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>secret</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>with_capacity</span>(<span class='ident'>slen</span>);
<span class='kw'>for</span> <span class='ident'>byteindex</span> <span class='kw'>in</span> <span class='number'>0</span>..<span class='ident'>slen</span> {
<span class='ident'>col_in</span>.<span class='ident'>clear</span>();
<span class='kw'>for</span> <span class='ident'>s</span> <span class='kw'>in</span> <span class='ident'>shares</span>.<span class='ident'>iter</span>().<span class='ident'>take</span>(<span class='ident'>k</span> <span class='kw'>as</span> <span class='ident'>usize</span>) {
<span class='ident'>col_in</span>.<span class='ident'>push</span>((<span class='ident'>s</span>.<span class='number'>0</span>, <span class='ident'>s</span>.<span class='number'>1</span>[<span class='ident'>byteindex</span>]));
}
<span class='ident'>secret</span>.<span class='ident'>push</span>(<span class='ident'>lagrange_interpolate</span>(<span class='kw-2'>&amp;</span><span class='op'>*</span><span class='ident'>col_in</span>));
}
<span class='prelude-val'>Ok</span>(<span class='ident'>secret</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -1,326 +0,0 @@
<!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/validation.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>validation.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>
</pre><pre class='rust '>
<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'>type</span> <span class='ident'>ProcessedShares</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'>&lt;</span>(<span class='ident'>u8</span>, <span class='ident'>Vec</span><span class='op'>&lt;</span>(<span class='ident'>u8</span>, <span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>)<span class='op'>&gt;</span>), <span class='ident'>RustyError</span><span class='op'>&gt;</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 &amp;&amp; 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'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;</span>,
<span class='ident'>verify_signatures</span>: <span class='ident'>bool</span>)
<span class='op'>-&gt;</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'>&lt;</span>(<span class='ident'>u8</span>, <span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>u8</span><span class='op'>&gt;</span>)<span class='op'>&gt;</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>new</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'>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='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'>&amp;</span><span class='ident'>share_data</span>.<span class='ident'>as_slice</span>()),
<span class='kw-2'>&amp;</span>(<span class='ident'>signature</span>.<span class='ident'>to_vec</span>(), <span class='ident'>p</span>),
<span class='kw-2'>&amp;</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'>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'>&amp;</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='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'>&amp;</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'>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'>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='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'>=&gt;</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'>=&gt;</span> { } <span class='comment'>// All shares have the same roothash.</span>
_ <span class='op'>=&gt;</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='kw'>match</span> <span class='ident'>k_sets</span> {
<span class='number'>0</span> <span class='op'>=&gt;</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'>=&gt;</span> { } <span class='comment'>// All shares have the same roothash.</span>
_ <span class='op'>=&gt;</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'>&gt;=</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>
<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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -1,230 +0,0 @@
<!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&#39;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&#39;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 = &quot;These programs were never about terrorism: theyre about economic spying,</span>
<span class='doccomment'>/// social control, and diplomatic manipulation. Theyre about power.&quot;.to_string();</span>
<span class='doccomment'>///</span>
<span class='doccomment'>/// match generate_shares(7, 10, &amp;secret.into_bytes(), &quot;text/html&quot;, true){</span>
<span class='doccomment'>/// Ok(shares) =&gt; {</span>
<span class='doccomment'>/// // Do something with the shares</span>
<span class='doccomment'>/// },</span>
<span class='doccomment'>/// Err(_) =&gt; {}// 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'>&amp;</span>[<span class='ident'>u8</span>], <span class='ident'>mime_type</span>: <span class='kw-2'>&amp;</span><span class='ident'>str</span>, <span class='ident'>sign_shares</span>: <span class='ident'>bool</span>) <span class='op'>-&gt;</span> <span class='ident'>io</span>::<span class='prelude-ty'>Result</span><span class='op'>&lt;</span><span class='ident'>Vec</span><span class='op'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;&gt;</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&#39;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 = &quot;2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP&quot;.to_string();</span>
<span class='doccomment'>/// let share2 = &quot;2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF&quot;.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) =&gt; {</span>
<span class='doccomment'>/// // Do something with the secret</span>
<span class='doccomment'>/// },</span>
<span class='doccomment'>/// Err(e) =&gt; {</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'>&lt;</span><span class='ident'>String</span><span class='op'>&gt;</span>, <span class='ident'>verify_signatures</span>: <span class='ident'>bool</span>) <span class='op'>-&gt;</span> <span class='prelude-ty'>Result</span><span class='op'>&lt;</span><span class='ident'>RustySecret</span>, <span class='ident'>RustyError</span><span class='op'>&gt;</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'>&lt;</span><span class='ident'>RustySecret</span><span class='op'>&gt;</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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>

View File

@ -0,0 +1,364 @@
<!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/sss.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>sss.rs.html -- source</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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>
</pre><pre class="rust ">
<span class="doccomment">//! SSS provides Shamir&#39;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>;
<span class="kw">use</span> <span class="ident">rand</span>::{<span class="ident">OsRng</span>, <span class="ident">Rng</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">share_format</span>::<span class="ident">share_string_from</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">iter</span>::<span class="ident">repeat</span>;
<span class="kw">use</span> <span class="ident">validation</span>::<span class="ident">process_and_validate_shares</span>;
<span class="kw">fn</span> <span class="ident">new_vec</span><span class="op">&lt;</span><span class="ident">T</span>: <span class="ident">Clone</span><span class="op">&gt;</span>(<span class="ident">n</span>: <span class="ident">usize</span>, <span class="ident">x</span>: <span class="ident">T</span>) <span class="op">-&gt;</span> <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">T</span><span class="op">&gt;</span> {
<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&#39;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::sss::generate_shares;</span>
<span class="doccomment">/// let secret = &quot;These programs were never about terrorism: theyre about economic spying,</span>
<span class="doccomment">/// social control, and diplomatic manipulation. Theyre about power.&quot;.to_string();</span>
<span class="doccomment">///</span>
<span class="doccomment">/// match generate_shares(7, 10, &amp;secret.into_bytes(), true){</span>
<span class="doccomment">/// Ok(shares) =&gt; {</span>
<span class="doccomment">/// // Do something with the shares</span>
<span class="doccomment">/// },</span>
<span class="doccomment">/// Err(_) =&gt; {}// 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">&amp;</span>[<span class="ident">u8</span>], <span class="ident">sign_shares</span>: <span class="ident">bool</span>) <span class="op">-&gt;</span> <span class="ident">io</span>::<span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;&gt;</span> {
<span class="kw">if</span> <span class="ident">k</span> <span class="op">&gt;</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">&quot;Threshold K can not be larger than N&quot;</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="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>()
.<span class="ident">enumerate</span>()
.<span class="ident">map</span>(<span class="op">|</span>(<span class="ident">i</span>, <span class="ident">x</span>)<span class="op">|</span> <span class="ident">format_share_for_signing</span>(<span class="ident">k</span>, (<span class="ident">i</span> <span class="op">+</span> <span class="number">1</span>) <span class="kw">as</span> <span class="ident">u8</span>, <span class="ident">x</span>))
.<span class="ident">collect</span>::<span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span>_<span class="op">&gt;&gt;</span>();
<span class="kw">let</span> <span class="ident">sign</span> <span class="op">=</span> <span class="ident">sign_data_vec</span>(<span class="kw-2">&amp;</span><span class="ident">shares_to_sign</span>, <span class="ident">digest</span>)
.<span class="ident">unwrap</span>()
.<span class="ident">into_iter</span>()
.<span class="ident">map</span>(<span class="prelude-val">Some</span>)
.<span class="ident">collect</span>::<span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span>_<span class="op">&gt;&gt;</span>();
<span class="prelude-val">Some</span>(<span class="ident">sign</span>)
} <span class="kw">else</span> {
<span class="prelude-val">None</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="ident">index</span>, <span class="ident">share</span>), <span class="ident">signature_pair</span>) <span class="kw">in</span>
<span class="ident">shares</span>.<span class="ident">into_iter</span>()
.<span class="ident">enumerate</span>()
.<span class="ident">zip</span>(<span class="ident">signatures</span>.<span class="ident">unwrap_or_else</span>(<span class="op">||</span> <span class="macro">vec</span><span class="macro">!</span>[<span class="prelude-val">None</span>; <span class="ident">n</span> <span class="kw">as</span> <span class="ident">usize</span>]).<span class="ident">into_iter</span>()) {
<span class="kw">let</span> <span class="ident">share_string</span> <span class="op">=</span> <span class="ident">share_string_from</span>(<span class="ident">share</span>, <span class="ident">k</span>, (<span class="ident">index</span> <span class="op">+</span> <span class="number">1</span>) <span class="kw">as</span> <span class="ident">u8</span>, <span class="ident">signature_pair</span>);
<span class="ident">result</span>.<span class="ident">push</span>(<span class="ident">share_string</span>);
}
<span class="prelude-val">Ok</span>(<span class="ident">result</span>)
}
<span class="kw">fn</span> <span class="ident">secret_share</span>(<span class="ident">src</span>: <span class="kw-2">&amp;</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">-&gt;</span> <span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;&gt;</span>, <span class="ident">RustyError</span><span class="op">&gt;</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>));
}
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">col_in</span> <span class="op">=</span> <span class="ident">new_vec</span>(<span class="ident">k</span> <span class="kw">as</span> <span class="ident">usize</span>, <span class="number">0u8</span>);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">col_out</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">let</span> <span class="kw-2">mut</span> <span class="ident">osrng</span> <span class="op">=</span> <span class="macro">try</span><span class="macro">!</span>(<span class="ident">OsRng</span>::<span class="ident">new</span>());
<span class="kw">for</span> (<span class="ident">c</span>, <span class="kw-2">&amp;</span><span class="ident">s</span>) <span class="kw">in</span> <span class="ident">src</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>() {
<span class="ident">col_in</span>[<span class="number">0</span>] <span class="op">=</span> <span class="ident">s</span>;
<span class="ident">osrng</span>.<span class="ident">fill_bytes</span>(<span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">col_in</span>[<span class="number">1</span>..]);
<span class="ident">col_out</span>.<span class="ident">clear</span>();
<span class="macro">try</span><span class="macro">!</span>(<span class="ident">encode</span>(<span class="kw-2">&amp;</span><span class="kw-2">*</span><span class="ident">col_in</span>, <span class="ident">n</span>, <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">col_out</span>));
<span class="kw">for</span> (<span class="kw-2">&amp;</span><span class="ident">y</span>, <span class="ident">share</span>) <span class="kw">in</span> <span class="ident">col_out</span>.<span class="ident">iter</span>().<span class="ident">zip</span>(<span class="ident">result</span>.<span class="ident">iter_mut</span>()) {
<span class="ident">share</span>[<span class="ident">c</span>] <span class="op">=</span> <span class="ident">y</span>;
}
}
<span class="prelude-val">Ok</span>(<span class="ident">result</span>)
}
<span class="doccomment">/// Recovers the secret from a k-out-of-n Shamir&#39;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::sss::recover_secret;</span>
<span class="doccomment">/// let share1 = &quot;2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP&quot;.to_string();</span>
<span class="doccomment">/// let share2 = &quot;2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF&quot;.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) =&gt; {</span>
<span class="doccomment">/// // Do something with the secret</span>
<span class="doccomment">/// },</span>
<span class="doccomment">/// Err(e) =&gt; {</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">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>, <span class="ident">verify_signatures</span>: <span class="ident">bool</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>, <span class="ident">RustyError</span><span class="op">&gt;</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>();
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">col_in</span> <span class="op">=</span> <span class="ident">Vec</span>::<span class="ident">with_capacity</span>(<span class="ident">k</span> <span class="kw">as</span> <span class="ident">usize</span>);
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">secret</span> <span class="op">=</span> <span class="ident">Vec</span>::<span class="ident">with_capacity</span>(<span class="ident">slen</span>);
<span class="kw">for</span> <span class="ident">byteindex</span> <span class="kw">in</span> <span class="number">0</span>..<span class="ident">slen</span> {
<span class="ident">col_in</span>.<span class="ident">clear</span>();
<span class="kw">for</span> <span class="ident">s</span> <span class="kw">in</span> <span class="ident">shares</span>.<span class="ident">iter</span>().<span class="ident">take</span>(<span class="ident">k</span> <span class="kw">as</span> <span class="ident">usize</span>) {
<span class="ident">col_in</span>.<span class="ident">push</span>((<span class="ident">s</span>.<span class="number">0</span>, <span class="ident">s</span>.<span class="number">1</span>[<span class="ident">byteindex</span>]));
}
<span class="ident">secret</span>.<span class="ident">push</span>(<span class="ident">lagrange_interpolate</span>(<span class="kw-2">&amp;</span><span class="kw-2">*</span><span class="ident">col_in</span>));
}
<span class="prelude-val">Ok</span>(<span class="ident">secret</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View File

@ -0,0 +1,312 @@
<!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/validation.rs`.">
<meta name="keywords" content="rust, rustlang, rust-lang">
<title>validation.rs.html -- source</title>
<link rel="stylesheet" type="text/css" href="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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>
</pre><pre class="rust ">
<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">type</span> <span class="ident">ProcessedShares</span> <span class="op">=</span> <span class="prelude-ty">Result</span><span class="op">&lt;</span>(<span class="ident">u8</span>, <span class="ident">Vec</span><span class="op">&lt;</span>(<span class="ident">u8</span>, <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>)<span class="op">&gt;</span>), <span class="ident">RustyError</span><span class="op">&gt;</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 &amp;&amp; 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">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
<span class="ident">verify_signatures</span>: <span class="ident">bool</span>)
<span class="op">-&gt;</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">&lt;</span>(<span class="ident">u8</span>, <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">u8</span><span class="op">&gt;</span>)<span class="op">&gt;</span> <span class="op">=</span> <span class="ident">Vec</span>::<span class="ident">new</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">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">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="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">&amp;</span><span class="ident">share_data</span>.<span class="ident">as_slice</span>()),
<span class="kw-2">&amp;</span>(<span class="ident">signature</span>.<span class="ident">to_vec</span>(), <span class="ident">p</span>),
<span class="kw-2">&amp;</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">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">&amp;</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="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">&amp;</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">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="op">&amp;&amp;</span> <span class="ident">k</span> <span class="op">!=</span> <span class="number">1</span> { <span class="comment">// When k = 1, shares data can be the same</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="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">=&gt;</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">=&gt;</span> { } <span class="comment">// All shares have the same roothash.</span>
_ <span class="op">=&gt;</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="kw">match</span> <span class="ident">k_sets</span> {
<span class="number">0</span> <span class="op">=&gt;</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">=&gt;</span> { } <span class="comment">// All shares have the same roothash.</span>
_ <span class="op">=&gt;</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="kw-2">*</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">&gt;=</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>
<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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>

View File

@ -0,0 +1,236 @@
<!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="../../normalize.css">
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
<link rel="stylesheet" type="text/css" href="../../main.css">
</head>
<body class="rustdoc source">
<!--[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"><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>
</pre><pre class="rust ">
<span class="doccomment">//! (Beta) `wrapped_secrets` provides Shamir&#39;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&#39;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 = &quot;These programs were never about terrorism: theyre about economic spying,</span>
<span class="doccomment">/// social control, and diplomatic manipulation. Theyre about power.&quot;.to_string();</span>
<span class="doccomment">///</span>
<span class="doccomment">/// match generate_shares(7, 10, &amp;secret.into_bytes(), Some(&quot;text/html&quot;.to_string()), true){</span>
<span class="doccomment">/// Ok(shares) =&gt; {</span>
<span class="doccomment">/// // Do something with the shares</span>
<span class="doccomment">/// },</span>
<span class="doccomment">/// Err(_) =&gt; {}// 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">&amp;</span>[<span class="ident">u8</span>], <span class="ident">mime_type</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>, <span class="ident">sign_shares</span>: <span class="ident">bool</span>) <span class="op">-&gt;</span> <span class="ident">io</span>::<span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;&gt;</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_secret</span>(<span class="ident">secret</span>.<span class="ident">to_owned</span>());
<span class="kw">for</span> <span class="ident">mt</span> <span class="kw">in</span> <span class="ident">mime_type</span> {
<span class="ident">rusty_secret</span>.<span class="ident">set_mime_type</span>(<span class="ident">mt</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&#39;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 = &quot;2-1-Cha7s14Q/mSwWko0ittr+/Uf79RHQMIP&quot;.to_string();</span>
<span class="doccomment">/// let share2 = &quot;2-4-ChaydsUJDypD9ZWxwvIICh/cmZvzusOF&quot;.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) =&gt; {</span>
<span class="doccomment">/// // Do something with the secret</span>
<span class="doccomment">/// },</span>
<span class="doccomment">/// Err(e) =&gt; {</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">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>, <span class="ident">verify_signatures</span>: <span class="ident">bool</span>) <span class="op">-&gt;</span> <span class="prelude-ty">Result</span><span class="op">&lt;</span><span class="ident">RustySecret</span>, <span class="ident">RustyError</span><span class="op">&gt;</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">&lt;</span><span class="ident">RustySecret</span><span class="op">&gt;</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>&larrb;</dt>
<dd>Move up in search results</dd>
<dt>&rarrb;</dt>
<dd>Move down in search results</dd>
<dt>&#9166;</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="../../main.js"></script>
<script defer src="../../search-index.js"></script>
</body>
</html>