aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpu-miner.c10
-rw-r--r--miner.h7
-rw-r--r--sha256_4way.c11
-rw-r--r--sha256_cryptopp.c10
-rw-r--r--sha256_generic.c5
-rw-r--r--sha256_via.c5
-rw-r--r--util.c45
7 files changed, 65 insertions, 28 deletions
diff --git a/cpu-miner.c b/cpu-miner.c
index f9be60c..c3924a9 100644
--- a/cpu-miner.c
+++ b/cpu-miner.c
@@ -308,7 +308,7 @@ static void *miner_thread(void *thr_id_int)
switch (opt_algo) {
case ALGO_C:
rc = scanhash_c(work.midstate, work.data + 64,
- work.hash1, work.hash,
+ work.hash1, work.hash, work.target,
max_nonce, &hashes_done);
break;
@@ -317,6 +317,7 @@ static void *miner_thread(void *thr_id_int)
unsigned int rc4 =
ScanHash_4WaySSE2(work.midstate, work.data + 64,
work.hash1, work.hash,
+ work.target,
max_nonce, &hashes_done);
rc = (rc4 == -1) ? false : true;
}
@@ -325,19 +326,20 @@ static void *miner_thread(void *thr_id_int)
#ifdef WANT_VIA_PADLOCK
case ALGO_VIA:
- rc = scanhash_via(work.data, max_nonce, &hashes_done);
+ rc = scanhash_via(work.data, work.target,
+ max_nonce, &hashes_done);
break;
#endif
case ALGO_CRYPTOPP:
rc = scanhash_cryptopp(work.midstate, work.data + 64,
- work.hash1, work.hash,
+ work.hash1, work.hash, work.target,
max_nonce, &hashes_done);
break;
#ifdef WANT_CRYPTOPP_ASM32
case ALGO_CRYPTOPP_ASM32:
rc = scanhash_asm32(work.midstate, work.data + 64,
- work.hash1, work.hash,
+ work.hash1, work.hash, work.target,
max_nonce, &hashes_done);
break;
#endif
diff --git a/miner.h b/miner.h
index 49bc07d..539b5d6 100644
--- a/miner.h
+++ b/miner.h
@@ -52,24 +52,29 @@ extern bool hex2bin(unsigned char *p, const char *hexstr, size_t len);
extern unsigned int ScanHash_4WaySSE2(const unsigned char *pmidstate,
unsigned char *pdata, unsigned char *phash1, unsigned char *phash,
+ const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone);
extern bool scanhash_via(unsigned char *data_inout,
+ const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done);
extern bool scanhash_c(const unsigned char *midstate, unsigned char *data,
unsigned char *hash1, unsigned char *hash,
+ const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done);
extern bool scanhash_cryptopp(const unsigned char *midstate,unsigned char *data,
unsigned char *hash1, unsigned char *hash,
+ const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done);
extern bool scanhash_asm32(const unsigned char *midstate,unsigned char *data,
unsigned char *hash1, unsigned char *hash,
+ const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done);
extern int
timeval_subtract (struct timeval *result, struct timeval *x, struct timeval *y);
-extern void print_pow(const unsigned char *hash);
+extern bool fulltest(const unsigned char *hash, const unsigned char *target);
#endif /* __MINER_H__ */
diff --git a/sha256_4way.c b/sha256_4way.c
index 556a07a..fe9642b 100644
--- a/sha256_4way.c
+++ b/sha256_4way.c
@@ -100,6 +100,7 @@ static const unsigned int pSHA256InitState[8] =
unsigned int ScanHash_4WaySSE2(const unsigned char *pmidstate, unsigned char *pdata,
unsigned char *phash1, unsigned char *phash,
+ const unsigned char *ptarget,
uint32_t max_nonce, unsigned long *nHashesDone)
{
unsigned int *nNonce_p = (unsigned int*)(pdata + 12);
@@ -124,11 +125,11 @@ unsigned int ScanHash_4WaySSE2(const unsigned char *pmidstate, unsigned char *pd
for (i = 0; i < 32/4; i++)
((unsigned int*)phash)[i] = thash[i][j];
- print_pow(phash);
-
- *nHashesDone = nonce;
- *nNonce_p = nonce + j;
- return nonce + j;
+ if (fulltest(phash, ptarget)) {
+ *nHashesDone = nonce;
+ *nNonce_p = nonce + j;
+ return nonce + j;
+ }
}
}
diff --git a/sha256_cryptopp.c b/sha256_cryptopp.c
index 4ada480..47d4921 100644
--- a/sha256_cryptopp.c
+++ b/sha256_cryptopp.c
@@ -93,6 +93,7 @@ static void runhash(void *state, const void *input, const void *init)
/* suspiciously similar to ScanHash* from bitcoin */
bool scanhash_cryptopp(const unsigned char *midstate, unsigned char *data,
unsigned char *hash1, unsigned char *hash,
+ const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done)
{
uint32_t *hash32 = (uint32_t *) hash;
@@ -109,9 +110,7 @@ bool scanhash_cryptopp(const unsigned char *midstate, unsigned char *data,
stat_ctr++;
- if (hash32[7] == 0) {
- print_pow(hash);
-
+ if ((hash32[7] == 0) && fulltest(hash, target)) {
*hashes_done = stat_ctr;
return true;
}
@@ -578,6 +577,7 @@ static void runhash32(void *state, const void *input, const void *init)
/* suspiciously similar to ScanHash* from bitcoin */
bool scanhash_asm32(const unsigned char *midstate, unsigned char *data,
unsigned char *hash1, unsigned char *hash,
+ const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done)
{
uint32_t *hash32 = (uint32_t *) hash;
@@ -594,8 +594,8 @@ bool scanhash_asm32(const unsigned char *midstate, unsigned char *data,
stat_ctr++;
- if (hash32[7] == 0) {
- print_pow(hash);
+ if ((hash32[7] == 0) && fulltest(hash, target)) {
+ fulltest(hash, target);
*hashes_done = stat_ctr;
return true;
diff --git a/sha256_generic.c b/sha256_generic.c
index 91fbbcf..cc23fc1 100644
--- a/sha256_generic.c
+++ b/sha256_generic.c
@@ -239,6 +239,7 @@ const uint32_t sha256_init_state[8] = {
/* suspiciously similar to ScanHash* from bitcoin */
bool scanhash_c(const unsigned char *midstate, unsigned char *data,
unsigned char *hash1, unsigned char *hash,
+ const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done)
{
uint32_t *hash32 = (uint32_t *) hash;
@@ -255,9 +256,7 @@ bool scanhash_c(const unsigned char *midstate, unsigned char *data,
stat_ctr++;
- if (hash32[7] == 0) {
- print_pow(hash);
-
+ if ((hash32[7] == 0) && fulltest(hash, target)) {
*hashes_done = stat_ctr;
return true;
}
diff --git a/sha256_via.c b/sha256_via.c
index 011d854..a15c664 100644
--- a/sha256_via.c
+++ b/sha256_via.c
@@ -18,6 +18,7 @@ static void via_sha256(void *hash, void *buf, unsigned len)
}
bool scanhash_via(unsigned char *data_inout,
+ const unsigned char *target,
uint32_t max_nonce, unsigned long *hashes_done)
{
unsigned char data[128] __attribute__((aligned(128)));
@@ -56,9 +57,7 @@ bool scanhash_via(unsigned char *data_inout,
stat_ctr++;
- if (hash32[7] == 0) {
- print_pow(tmp_hash);
-
+ if ((hash32[7] == 0) && fulltest(tmp_hash, target)) {
/* swap nonce'd data back into original storage area;
* TODO: only swap back the nonce, rather than all data
*/
diff --git a/util.c b/util.c
index 2a52a04..e37c0a0 100644
--- a/util.c
+++ b/util.c
@@ -255,14 +255,45 @@ timeval_subtract (
return x->tv_sec < y->tv_sec;
}
-void print_pow(const unsigned char *hash)
+bool fulltest(const unsigned char *hash, const unsigned char *target)
{
- char *hexstr;
- unsigned char hash_swap[32];
+ unsigned char hash_swap[32], target_swap[32];
+ uint32_t *hash32 = (uint32_t *) hash_swap;
+ uint32_t *target32 = (uint32_t *) target_swap;
+ int i;
+ bool rc = true;
+ char *hash_str, *target_str;
swap256(hash_swap, hash);
- hexstr = bin2hex(hash_swap, 32);
- fprintf(stderr, "PoW found: %s\n", hexstr);
- free(hexstr);
-}
+ swap256(target_swap, target);
+
+ for (i = 0; i < 32/4; i++) {
+ uint32_t h32tmp = swab32(hash32[i]);
+ uint32_t t32tmp = target32[i];
+
+ target32[i] = swab32(target32[i]); /* for printing */
+
+ if (h32tmp > t32tmp) {
+ rc = false;
+ break;
+ }
+ if (h32tmp < t32tmp) {
+ rc = true;
+ break;
+ }
+ }
+
+ hash_str = bin2hex(hash_swap, 32);
+ target_str = bin2hex(target_swap, 32);
+ fprintf(stderr, " Proof: %s\nTarget: %s\nTrgVal? %s\n",
+ hash_str,
+ target_str,
+ rc ? "YES (hash < target)" :
+ "no (false positive; hash > target)");
+
+ free(hash_str);
+ free(target_str);
+
+ return rc;
+}