Use htole32 and htobe32 for endian conversions
This commit is contained in:
parent
a6dcf2ee6f
commit
933cb4cd9f
|
@ -24,16 +24,12 @@
|
||||||
template<unsigned int N, unsigned int K>
|
template<unsigned int N, unsigned int K>
|
||||||
int Equihash<N,K>::InitialiseState(eh_HashState& base_state)
|
int Equihash<N,K>::InitialiseState(eh_HashState& base_state)
|
||||||
{
|
{
|
||||||
|
uint32_t n = htole32(N);
|
||||||
|
uint32_t k = htole32(K);
|
||||||
unsigned char personalization[crypto_generichash_blake2b_PERSONALBYTES] = {};
|
unsigned char personalization[crypto_generichash_blake2b_PERSONALBYTES] = {};
|
||||||
memcpy(personalization, "ZcashPoW", 8);
|
memcpy(personalization, "ZcashPoW", 8);
|
||||||
personalization[8] = N & 0xFF;
|
memcpy(personalization+8, &n, 4);
|
||||||
personalization[9] = (N >> 8) & 0xFF;
|
memcpy(personalization+12, &k, 4);
|
||||||
personalization[10] = (N >> 16) & 0xFF;
|
|
||||||
personalization[11] = (N >> 24) & 0xFF;
|
|
||||||
personalization[12] = K & 0xFF;
|
|
||||||
personalization[13] = (K >> 8) & 0xFF;
|
|
||||||
personalization[14] = (K >> 16) & 0xFF;
|
|
||||||
personalization[15] = (K >> 24) & 0xFF;
|
|
||||||
return crypto_generichash_blake2b_init_salt_personal(&base_state,
|
return crypto_generichash_blake2b_init_salt_personal(&base_state,
|
||||||
NULL, 0, // No key.
|
NULL, 0, // No key.
|
||||||
N/8,
|
N/8,
|
||||||
|
@ -45,24 +41,17 @@ int Equihash<N,K>::InitialiseState(eh_HashState& base_state)
|
||||||
void EhIndexToArray(const eh_index i, unsigned char* array)
|
void EhIndexToArray(const eh_index i, unsigned char* array)
|
||||||
{
|
{
|
||||||
assert(sizeof(eh_index) == 4);
|
assert(sizeof(eh_index) == 4);
|
||||||
array[0] = (i >> 24) & 0xFF;
|
eh_index bei = htobe32(i);
|
||||||
array[1] = (i >> 16) & 0xFF;
|
memcpy(array, &bei, sizeof(eh_index));
|
||||||
array[2] = (i >> 8) & 0xFF;
|
|
||||||
array[3] = i & 0xFF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Big-endian so that array comparison is equivalent to integer comparison
|
// Big-endian so that array comparison is equivalent to integer comparison
|
||||||
eh_index ArrayToEhIndex(const unsigned char* array)
|
eh_index ArrayToEhIndex(const unsigned char* array)
|
||||||
{
|
{
|
||||||
assert(sizeof(eh_index) == 4);
|
assert(sizeof(eh_index) == 4);
|
||||||
eh_index ret {array[0]};
|
eh_index bei;
|
||||||
ret <<= 8;
|
memcpy(&bei, array, sizeof(eh_index));
|
||||||
ret |= array[1];
|
return be32toh(bei);
|
||||||
ret <<= 8;
|
|
||||||
ret |= array[2];
|
|
||||||
ret <<= 8;
|
|
||||||
ret |= array[3];
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
eh_trunc TruncateIndex(const eh_index i, const unsigned int ilen)
|
eh_trunc TruncateIndex(const eh_index i, const unsigned int ilen)
|
||||||
|
@ -84,10 +73,8 @@ StepRow<WIDTH>::StepRow(unsigned int n, const eh_HashState& base_state, eh_index
|
||||||
eh_HashState state;
|
eh_HashState state;
|
||||||
state = base_state;
|
state = base_state;
|
||||||
unsigned char array[sizeof(eh_index)];
|
unsigned char array[sizeof(eh_index)];
|
||||||
array[0] = i & 0xFF;
|
eh_index lei = htole32(i);
|
||||||
array[1] = (i >> 8) & 0xFF;
|
memcpy(array, &lei, sizeof(eh_index));
|
||||||
array[2] = (i >> 16) & 0xFF;
|
|
||||||
array[3] = (i >> 24) & 0xFF;
|
|
||||||
crypto_generichash_blake2b_update(&state, array, sizeof(eh_index));
|
crypto_generichash_blake2b_update(&state, array, sizeof(eh_index));
|
||||||
crypto_generichash_blake2b_final(&state, hash, n/8);
|
crypto_generichash_blake2b_final(&state, hash, n/8);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue