25 #ifndef CRYPTO3_PASSHASH_CHECK_HPP
26 #define CRYPTO3_PASSHASH_CHECK_HPP
51 template<
typename Hasher,
typename InputIterator,
typename OutputIterator>
52 OutputIterator
check(InputIterator first, InputIterator last, OutputIterator out) {
54 typedef detail::value_hash_impl<Passhash> PasshashImpl;
55 typedef detail::itr_hash_impl<Hasher, PasshashImpl, OutputIterator> HashImpl;
57 return HashImpl(first, last,
std::move(out), Passhash());
76 template<
typename Hasher,
typename InputIterator,
typename PasshashAccumulator =
78 OutputIterator
check(InputIterator first, InputIterator last, PasshashAccumulator &sh) {
80 typedef detail::ref_hash_impl<Passhash> PasshashImpl;
81 typedef detail::itr_hash_impl<Hasher, PasshashImpl, OutputIterator> HashImpl;
83 return HashImpl(first, last, sh);
98 template<
typename Hasher,
99 typename InputIterator,
100 typename Passhash =
typename itr_stream_hash_traits<Hasher, InputIterator>::type,
101 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
102 detail::range_hash_impl<Hasher, detail::value_hash_impl<Passhash>>
check(InputIterator first,
103 InputIterator last) {
104 typedef detail::value_hash_impl<Passhash> PasshashImpl;
105 typedef detail::range_hash_impl<Hasher, PasshashImpl> HashImpl;
107 return HashImpl(first, last, Passhash());
123 template<
typename Hasher,
124 typename InputIterator,
125 typename Passhash =
typename itr_stream_hash_traits<Hasher, InputIterator>::type,
126 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
127 detail::range_hash_impl<Hasher, detail::ref_hash_impl<Passhash>>
128 check(InputIterator first, InputIterator last, Passhash &sh) {
129 typedef detail::ref_hash_impl<Passhash> PasshashImpl;
130 typedef detail::range_hash_impl<Hasher, PasshashImpl> HashImpl;
132 return HashImpl(first, last, sh);
148 template<
typename Hasher,
149 typename SinglePassRange,
150 typename OutputIterator,
151 typename Passhash =
typename range_stream_hash_traits<Hasher, SinglePassRange>::type,
152 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
153 OutputIterator
check(
const SinglePassRange &rng, OutputIterator out) {
155 typedef detail::value_hash_impl<Passhash> PasshashImpl;
156 typedef detail::itr_hash_impl<Hasher, PasshashImpl, OutputIterator> HashImpl;
158 return HashImpl(rng,
std::move(out), Passhash());
175 template<
typename Hasher,
176 typename SinglePassRange,
177 typename OutputIterator,
178 typename Passhash =
typename range_stream_hash_traits<Hasher, SinglePassRange>::type,
179 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
180 OutputIterator
check(
const SinglePassRange &rng, OutputIterator out, Passhash &sh) {
182 typedef detail::ref_hash_impl<Passhash> PasshashImpl;
183 typedef detail::itr_hash_impl<Hasher, PasshashImpl, OutputIterator> HashImpl;
185 return HashImpl(rng,
std::move(out), sh);
199 template<
typename Hasher,
200 typename SinglePassRange,
201 typename Passhash =
typename range_stream_hash_traits<Hasher, SinglePassRange>::type,
202 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
203 detail::range_hash_impl<Hasher, detail::value_hash_impl<Passhash>>
check(
const SinglePassRange &r) {
205 typedef detail::value_hash_impl<Passhash> PasshashImpl;
206 typedef detail::range_hash_impl<Hasher, PasshashImpl> HashImpl;
208 return HashImpl(r, Passhash());
223 template<
typename Hasher,
224 typename SinglePassRange,
225 typename Passhash =
typename range_stream_hash_traits<Hasher, SinglePassRange>::type,
226 typename =
typename std::enable_if<detail::is_stream_hash<Passhash>::value>::type>
227 detail::range_hash_impl<Hasher, detail::ref_hash_impl<Passhash>>
check(
const SinglePassRange &rng,
229 typedef detail::ref_hash_impl<Passhash> PasshashImpl;
230 typedef detail::range_hash_impl<Hasher, PasshashImpl> HashImpl;
232 return HashImpl(rng, sh);
OutputIterator check(InputIterator first, InputIterator last, OutputIterator out)
Definition: check.hpp:52
boost::accumulators::accumulator_set< static_digest< Passhash::input_block_bits >, boost::accumulators::features< accumulators::tag::passhash< Passhash > >> accumulator_set
Definition: passhash_state.hpp:44
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45