|
|
@ -34,8 +34,6 @@ |
|
|
|
#include <stdint.h> |
|
|
|
#include <stdint.h> |
|
|
|
#include <string.h> |
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
|
|
#define byteswap(x) ((((x) << 24) & 0xff000000u) | (((x) << 8) & 0x00ff0000u) | (((x) >> 8) & 0x0000ff00u) | (((x) >> 24) & 0x000000ffu)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct SHA256Context { |
|
|
|
typedef struct SHA256Context { |
|
|
|
uint32_t state[8]; |
|
|
|
uint32_t state[8]; |
|
|
|
uint32_t buf[16]; |
|
|
|
uint32_t buf[16]; |
|
|
@ -51,7 +49,7 @@ be32enc_vect(uint32_t *dst, const uint32_t *src, uint32_t len) |
|
|
|
uint32_t i; |
|
|
|
uint32_t i; |
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < len; i++) |
|
|
|
for (i = 0; i < len; i++) |
|
|
|
dst[i] = byteswap(src[i]); |
|
|
|
dst[i] = htobe32(src[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* Elementary functions used by SHA256 */ |
|
|
|
/* Elementary functions used by SHA256 */ |
|
|
@ -94,7 +92,7 @@ SHA256_Transform(uint32_t * state, const uint32_t block[16], int swap) |
|
|
|
/* 1. Prepare message schedule W. */ |
|
|
|
/* 1. Prepare message schedule W. */ |
|
|
|
if(swap) |
|
|
|
if(swap) |
|
|
|
for (i = 0; i < 16; i++) |
|
|
|
for (i = 0; i < 16; i++) |
|
|
|
W[i] = byteswap(block[i]); |
|
|
|
W[i] = htobe32(block[i]); |
|
|
|
else |
|
|
|
else |
|
|
|
memcpy(W, block, 64); |
|
|
|
memcpy(W, block, 64); |
|
|
|
for (i = 16; i < 64; i += 2) { |
|
|
|
for (i = 16; i < 64; i += 2) { |
|
|
@ -295,7 +293,7 @@ PBKDF2_SHA256_80_128_32(const uint32_t * passwd, const uint32_t * salt) |
|
|
|
/* Feed the inner hash to the outer SHA256 operation. */ |
|
|
|
/* Feed the inner hash to the outer SHA256 operation. */ |
|
|
|
SHA256_Transform(ostate, pad, 0); |
|
|
|
SHA256_Transform(ostate, pad, 0); |
|
|
|
/* Finish the outer SHA256 operation. */ |
|
|
|
/* Finish the outer SHA256 operation. */ |
|
|
|
return byteswap(ostate[7]); |
|
|
|
return be32toh(ostate[7]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -415,7 +413,7 @@ bool scrypt_test(unsigned char *pdata, const unsigned char *ptarget, uint32_t no |
|
|
|
uint32_t data[20]; |
|
|
|
uint32_t data[20]; |
|
|
|
|
|
|
|
|
|
|
|
be32enc_vect(data, (const uint32_t *)pdata, 19); |
|
|
|
be32enc_vect(data, (const uint32_t *)pdata, 19); |
|
|
|
data[19] = byteswap(nonce); |
|
|
|
data[19] = htobe32(nonce); |
|
|
|
scratchbuf = alloca(131584); |
|
|
|
scratchbuf = alloca(131584); |
|
|
|
tmp_hash7 = scrypt_1024_1_1_256_sp(data, scratchbuf); |
|
|
|
tmp_hash7 = scrypt_1024_1_1_256_sp(data, scratchbuf); |
|
|
|
|
|
|
|
|
|
|
@ -448,7 +446,7 @@ bool scanhash_scrypt(struct thr_info *thr, const unsigned char __maybe_unused *p |
|
|
|
tmp_hash7 = scrypt_1024_1_1_256_sp(data, scratchbuf); |
|
|
|
tmp_hash7 = scrypt_1024_1_1_256_sp(data, scratchbuf); |
|
|
|
|
|
|
|
|
|
|
|
if (unlikely(tmp_hash7 <= Htarg)) { |
|
|
|
if (unlikely(tmp_hash7 <= Htarg)) { |
|
|
|
((uint32_t *)pdata)[19] = byteswap(n); |
|
|
|
((uint32_t *)pdata)[19] = htobe32(n); |
|
|
|
*last_nonce = n; |
|
|
|
*last_nonce = n; |
|
|
|
ret = true; |
|
|
|
ret = true; |
|
|
|
break; |
|
|
|
break; |
|
|
|