adding rshift
This commit is contained in:
parent
4438c8aa80
commit
7840ef16e9
4 changed files with 32 additions and 1 deletions
|
|
@ -60,6 +60,7 @@ class sha256
|
|||
return ds;
|
||||
}
|
||||
friend sha256 operator << ( const sha256& h1, uint32_t i );
|
||||
friend sha256 operator >> ( const sha256& h1, uint32_t i );
|
||||
friend bool operator == ( const sha256& h1, const sha256& h2 );
|
||||
friend bool operator != ( const sha256& h1, const sha256& h2 );
|
||||
friend sha256 operator ^ ( const sha256& h1, const sha256& h2 );
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace fc { namespace detail {
|
|||
uint8_t* out8 = (uint8_t*) out;
|
||||
|
||||
if (i >= 8) {
|
||||
shift_l( in8, out8, n, i >> 3 );
|
||||
shift_l( in8, out8, n, i / 8 );
|
||||
i &= 7;
|
||||
in8 = out8;
|
||||
}
|
||||
|
|
@ -26,4 +26,28 @@ namespace fc { namespace detail {
|
|||
out8[p] = (in8[p] << i) | (in8[p+1]>>(8-i));
|
||||
out8[p] = in8[p] << i;
|
||||
}
|
||||
static void shift_r( const uint8_t* in, uint8_t* out, std::size_t n, unsigned int i) {
|
||||
if (i < n) {
|
||||
memcpy( out+i, in, n-i );
|
||||
} else {
|
||||
i = n;
|
||||
}
|
||||
memset( out, 0, i );
|
||||
}
|
||||
|
||||
void shift_r( const char* in, char* out, std::size_t n, unsigned int i) {
|
||||
const uint8_t* in8 = (uint8_t*) in;
|
||||
uint8_t* out8 = (uint8_t*) out;
|
||||
|
||||
if (i >= 8) {
|
||||
shift_r( in8, out8, n, i / 8 );
|
||||
i &= 7;
|
||||
in8 = out8;
|
||||
}
|
||||
|
||||
std::size_t p;
|
||||
for( p = n-1; p > 0; --p )
|
||||
out8[p] = (in8[p] >> i) | (in8[p-1]<<(8-i));
|
||||
out8[p] = in8[p] >> i;
|
||||
}
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -4,4 +4,5 @@
|
|||
*/
|
||||
namespace fc { namespace detail {
|
||||
void shift_l( const char* in, char* out, std::size_t n, unsigned int i);
|
||||
void shift_r( const char* in, char* out, std::size_t n, unsigned int i);
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,11 @@ namespace fc {
|
|||
fc::detail::shift_l( h1.data(), result.data(), result.data_size(), i );
|
||||
return result;
|
||||
}
|
||||
sha256 operator >> ( const sha256& h1, uint32_t i ) {
|
||||
sha256 result;
|
||||
fc::detail::shift_r( h1.data(), result.data(), result.data_size(), i );
|
||||
return result;
|
||||
}
|
||||
sha256 operator ^ ( const sha256& h1, const sha256& h2 ) {
|
||||
sha256 result;
|
||||
result._hash[0] = h1._hash[0] ^ h2._hash[0];
|
||||
|
|
|
|||
Loading…
Reference in a new issue