26 #ifndef CRYPTO3_PUBKEY_DEAL_SHARES_HPP
27 #define CRYPTO3_PUBKEY_DEAL_SHARES_HPP
39 template<
typename Scheme>
42 template<
typename Scheme>
66 template<
typename Scheme,
typename InputIterator,
typename OutputIterator,
68 OutputIterator
deal_shares(InputIterator first, InputIterator last, std::size_t n, OutputIterator out) {
77 DealingAccumulator(n, nil::crypto3::accumulators::threshold_value = std::distance(first, last)));
98 template<
typename Scheme,
typename SinglePassRange,
typename OutputIterator,
99 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>>
100 OutputIterator
deal_shares(
const SinglePassRange &range, std::size_t n, OutputIterator out) {
108 DealingAccumulator(n, nil::crypto3::accumulators::threshold_value = range.size()));
131 template<
typename Scheme,
typename InputIterator,
typename OutputIterator,
132 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>>
133 OutputIterator
deal_shares(InputIterator first, InputIterator last, std::size_t n,
134 const typename Scheme::weights_type &weights, OutputIterator out) {
143 DealingAccumulator(n, nil::crypto3::accumulators::threshold_value = std::distance(first, last),
144 nil::crypto3::accumulators::weights = weights));
166 template<
typename Scheme,
typename SinglePassRange,
typename OutputIterator,
167 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>>
168 OutputIterator
deal_shares(
const SinglePassRange &range, std::size_t n,
169 const typename Scheme::weights_type &weights, OutputIterator out) {
177 DealingAccumulator(n, nil::crypto3::accumulators::threshold_value = range.size(),
178 nil::crypto3::accumulators::weights = weights));
199 template<
typename Scheme,
typename InputIterator,
200 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>,
201 typename OutputAccumulator =
typename pubkey::shares_dealing_accumulator_set<ProcessingMode>>
202 typename std::enable_if<boost::accumulators::detail::is_accumulator_set<OutputAccumulator>::value,
203 OutputAccumulator>::type &
204 deal_shares(InputIterator first, InputIterator last, OutputAccumulator &acc) {
209 return SchemeImpl(first, last, std::forward<OutputAccumulator>(acc));
229 template<
typename Scheme,
typename SinglePassRange,
230 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>,
231 typename OutputAccumulator =
typename pubkey::shares_dealing_accumulator_set<ProcessingMode>>
232 typename std::enable_if<boost::accumulators::detail::is_accumulator_set<OutputAccumulator>::value,
233 OutputAccumulator>::type &
234 deal_shares(
const SinglePassRange &range, OutputAccumulator &acc) {
239 return SchemeImpl(range, std::forward<OutputAccumulator>(acc));
263 template<
typename Scheme,
typename InputIterator,
264 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>,
265 typename DealingAccumulator =
typename pubkey::shares_dealing_accumulator_set<ProcessingMode>,
266 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<DealingAccumulator>,
267 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
268 SchemeImpl
deal_shares(InputIterator first, InputIterator last, std::size_t n) {
272 DealingAccumulator(n, nil::crypto3::accumulators::threshold_value = std::distance(first, last)));
295 template<
typename Scheme,
typename SinglePassRange,
296 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>,
297 typename DealingAccumulator =
typename pubkey::shares_dealing_accumulator_set<ProcessingMode>,
298 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<DealingAccumulator>,
299 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
300 SchemeImpl
deal_shares(
const SinglePassRange &range, std::size_t n) {
302 return SchemeImpl(range, DealingAccumulator(n, nil::crypto3::accumulators::threshold_value = range.size()));
327 template<
typename Scheme,
typename InputIterator,
328 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>,
329 typename DealingAccumulator =
typename pubkey::shares_dealing_accumulator_set<ProcessingMode>,
330 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<DealingAccumulator>,
331 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
332 SchemeImpl
deal_shares(InputIterator first, InputIterator last, std::size_t n,
333 const typename Scheme::weights_type &weights) {
337 DealingAccumulator(n, nil::crypto3::accumulators::threshold_value = std::distance(first, last),
338 nil::crypto3::accumulators::weights = weights));
362 template<
typename Scheme,
typename SinglePassRange,
363 typename ProcessingMode = pubkey::shares_dealing_processing_mode_default<Scheme>,
364 typename DealingAccumulator =
typename pubkey::shares_dealing_accumulator_set<ProcessingMode>,
365 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<DealingAccumulator>,
366 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
367 SchemeImpl
deal_shares(
const SinglePassRange &range, std::size_t n,
368 const typename Scheme::weights_type &weights) {
370 return SchemeImpl(range, DealingAccumulator(n, nil::crypto3::accumulators::threshold_value = range.size(),
371 nil::crypto3::accumulators::weights = weights));
OutputIterator deal_shares(InputIterator first, InputIterator last, std::size_t n, OutputIterator out)
Deal shares using passed polynomial coefficients, threshold number of participants required to recons...
Definition: algorithm/deal_shares.hpp:68
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45
boost::accumulators::accumulator_set< typename ProcessingMode::result_type, boost::accumulators::features< accumulators::tag::deal_shares< ProcessingMode > >> shares_dealing_accumulator_set
Definition: secret_sharing_state.hpp:46
typename modes::isomorphic< Scheme >::template bind< shares_dealing_policy< Scheme > >::type shares_dealing_processing_mode_default
Definition: algorithm/deal_shares.hpp:44
typename modes::isomorphic< Scheme >::shares_dealing_policy shares_dealing_policy
Definition: algorithm/deal_shares.hpp:40
Definition: isomorphic.hpp:104
Definition: pubkey_value.hpp:167
Definition: pubkey_value.hpp:74
Definition: pubkey_value.hpp:49
Definition: pubkey_value.hpp:61
Definition: isomorphic.hpp:219