26 #ifndef CRYPTO3_PUBKEY_RERANDOMIZE_HPP
27 #define CRYPTO3_PUBKEY_RERANDOMIZE_HPP
41 template<
typename Scheme>
45 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
46 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename InputIterator,
47 typename OutputIterator>
48 OutputIterator
rerandomize(InputIterator first, InputIterator last,
57 return SchemeImpl(first, last,
std::move(out), PubkeyAccumulator(init_params));
60 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
61 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename SinglePassRange,
62 typename OutputIterator>
72 return SchemeImpl(range,
std::move(out), PubkeyAccumulator(init_params));
75 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
76 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename InputIterator,
77 typename OutputAccumulator =
typename pubkey::pubkey_accumulator_set<ProcessingMode>>
78 typename std::enable_if<boost::accumulators::detail::is_accumulator_set<OutputAccumulator>::value,
79 OutputAccumulator>::type &
80 rerandomize(InputIterator first, InputIterator last, OutputAccumulator &acc) {
85 return SchemeImpl(first, last, std::forward<OutputAccumulator>(acc));
88 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
89 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename SinglePassRange,
90 typename OutputAccumulator =
typename pubkey::pubkey_accumulator_set<ProcessingMode>>
91 typename std::enable_if<boost::accumulators::detail::is_accumulator_set<OutputAccumulator>::value,
92 OutputAccumulator>::type &
93 rerandomize(
const SinglePassRange &range, OutputAccumulator &acc) {
98 return SchemeImpl(range, std::forward<OutputAccumulator>(acc));
101 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
102 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename InputIterator,
103 typename PubkeyAccumulator =
typename pubkey::pubkey_accumulator_set<ProcessingMode>,
104 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<PubkeyAccumulator>,
105 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
109 return SchemeImpl(first, last, PubkeyAccumulator(init_params));
112 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
113 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename SinglePassRange,
114 typename PubkeyAccumulator =
typename pubkey::pubkey_accumulator_set<ProcessingMode>,
115 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<PubkeyAccumulator>,
116 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
120 return SchemeImpl(range, PubkeyAccumulator(init_params));
123 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
124 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename InputIterator1,
125 typename InputIterator2,
typename OutputIterator>
127 rerandomize(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,
135 return SchemeImpl(first1, last1, first2, last2,
std::move(out), PubkeyAccumulator(init_params));
138 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
139 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename SinglePassRange1,
140 typename SinglePassRange2,
typename OutputIterator>
141 OutputIterator
rerandomize(
const SinglePassRange1 &range1,
const SinglePassRange2 &range2,
143 OutputIterator out) {
150 return SchemeImpl(std::cbegin(range1), std::cend(range1), std::cbegin(range2), std::cend(range2),
151 std::move(out), PubkeyAccumulator(init_params));
154 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
155 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename InputIterator1,
156 typename InputIterator2,
157 typename OutputAccumulator =
typename pubkey::pubkey_accumulator_set<ProcessingMode>>
158 typename std::enable_if<boost::accumulators::detail::is_accumulator_set<OutputAccumulator>::value,
159 OutputAccumulator>::type &
160 rerandomize(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,
161 OutputAccumulator &acc) {
166 return SchemeImpl(first1, last1, first2, last2, std::forward<OutputAccumulator>(acc));
169 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
170 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename SinglePassRange1,
171 typename SinglePassRange2,
172 typename OutputAccumulator =
typename pubkey::pubkey_accumulator_set<ProcessingMode>>
173 typename std::enable_if<boost::accumulators::detail::is_accumulator_set<OutputAccumulator>::value,
174 OutputAccumulator>::type &
175 rerandomize(
const SinglePassRange1 &range1,
const SinglePassRange2 &range2, OutputAccumulator &acc) {
180 return SchemeImpl(std::cbegin(range1), std::cend(range1), std::cbegin(range2), std::cend(range2),
181 std::forward<OutputAccumulator>(acc));
184 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
185 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename InputIterator1,
186 typename InputIterator2,
187 typename PubkeyAccumulator =
typename pubkey::pubkey_accumulator_set<ProcessingMode>,
188 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<PubkeyAccumulator>,
189 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
190 SchemeImpl
rerandomize(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,
193 return SchemeImpl(first1, last1, first2, last2, PubkeyAccumulator(init_params));
196 template<
typename Scheme,
typename Mode = pubkey::modes::verifiable_encryption<Scheme>,
197 typename ProcessingMode =
typename Mode::rerandomization_policy,
typename SinglePassRange1,
198 typename SinglePassRange2,
199 typename PubkeyAccumulator =
typename pubkey::pubkey_accumulator_set<ProcessingMode>,
200 typename StreamSchemeImpl = pubkey::detail::value_pubkey_impl<PubkeyAccumulator>,
201 typename SchemeImpl = pubkey::detail::range_pubkey_impl<StreamSchemeImpl>>
202 SchemeImpl
rerandomize(
const SinglePassRange1 &range1,
const SinglePassRange2 &range2,
205 return SchemeImpl(std::cbegin(range1), std::cend(range1), std::cbegin(range2), std::cend(range2),
206 PubkeyAccumulator(init_params));
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45
typename rerandomize_op< Scheme >::init_params_type rerandomization_init_params_type
Definition: rerandomize.hpp:42
boost::accumulators::accumulator_set< typename ProcessingMode::result_type, boost::accumulators::features< accumulators::tag::pubkey< ProcessingMode > >> pubkey_accumulator_set
Definition: pubkey_state.hpp:45
OutputIterator rerandomize(InputIterator first, InputIterator last, const pubkey::rerandomization_init_params_type< Scheme > &init_params, OutputIterator out)
Definition: rerandomize.hpp:48
Definition: pubkey_value.hpp:167
Definition: pubkey_value.hpp:74
Definition: pubkey_value.hpp:49
Definition: pubkey_value.hpp:61
Definition: rerandomize_op.hpp:33