|  | @@ -4,6 +4,7 @@
 | 
	
		
			
				|  |  |  #include <vector>
 | 
	
		
			
				|  |  |  #include <array>
 | 
	
		
			
				|  |  |  #include <string>
 | 
	
		
			
				|  |  | +#include <iterator>
 | 
	
		
			
				|  |  |  #include <cstdlib>
 | 
	
		
			
				|  |  |  #include <cstring>
 | 
	
		
			
				|  |  |  #include <crypt/BigInt64.hpp>
 | 
	
	
		
			
				|  | @@ -19,9 +20,11 @@ void hash_checksum(std::uint64_t* dest, const std::vector<char>& input);
 | 
	
		
			
				|  |  |  template<typename ForwardIterator>
 | 
	
		
			
				|  |  |  BigInt sha256(ForwardIterator begin, ForwardIterator end){
 | 
	
		
			
				|  |  |  	std::array<std::uint64_t, 4> ret;
 | 
	
		
			
				|  |  | +    std::vector<typename std::iterator_traits<ForwardIterator>::value_type> rcopy(end - begin);
 | 
	
		
			
				|  |  | +    std::copy(begin, end, rcopy.begin());
 | 
	
		
			
				|  |  |  	std::size_t bytes = (end - begin) * sizeof(*begin);
 | 
	
		
			
				|  |  |  	std::vector<char> kak(bytes);
 | 
	
		
			
				|  |  | -	std::memcpy(kak.data(), (char*)&(*begin), bytes);
 | 
	
		
			
				|  |  | +	std::memcpy(kak.data(), (char*)rcopy.data(), bytes);
 | 
	
		
			
				|  |  |  	sha256_(ret.data(), kak);
 | 
	
		
			
				|  |  |  	for(std::uint64_t& x : ret)x = reverse(x);
 | 
	
		
			
				|  |  |  	return BigInt(ret.begin(), ret.end());
 | 
	
	
		
			
				|  | @@ -29,9 +32,11 @@ BigInt sha256(ForwardIterator begin, ForwardIterator end){
 | 
	
		
			
				|  |  |  template<typename ForwardIterator>
 | 
	
		
			
				|  |  |  BigInt sha512(ForwardIterator begin, ForwardIterator end){
 | 
	
		
			
				|  |  |  	std::array<std::uint64_t, 8> ret;
 | 
	
		
			
				|  |  | +    std::vector<typename std::iterator_traits<ForwardIterator>::value_type> rcopy(end - begin);
 | 
	
		
			
				|  |  | +    std::copy(begin, end, rcopy.begin());
 | 
	
		
			
				|  |  |  	std::size_t bytes = (end - begin) * sizeof(*begin);
 | 
	
		
			
				|  |  |  	std::vector<char> kak(bytes);
 | 
	
		
			
				|  |  | -	std::memcpy(kak.data(), (char*)&(*begin), bytes);
 | 
	
		
			
				|  |  | +	std::memcpy(kak.data(), (char*)rcopy.data(), bytes);
 | 
	
		
			
				|  |  |  	sha512_(ret.data(), kak);
 | 
	
		
			
				|  |  |  	for(std::uint64_t& x : ret)x = reverse(x);
 | 
	
		
			
				|  |  |  	return BigInt(ret.begin(), ret.end());
 |