diff options
author | Antonio Juarez <antonio.maria.juarez@live.com> | 2014-03-03 22:07:58 +0000 |
---|---|---|
committer | Antonio Juarez <antonio.maria.juarez@live.com> | 2014-03-03 22:07:58 +0000 |
commit | 296ae46ed8f8f6e5f986f978febad302e3df231a (patch) | |
tree | 1629164454a239308f33c9e12afb22e7f3cd8eeb /tests/hash-target.cpp | |
parent | changed name (diff) | |
download | monero-296ae46ed8f8f6e5f986f978febad302e3df231a.tar.xz |
moved all stuff to github
Diffstat (limited to 'tests/hash-target.cpp')
-rw-r--r-- | tests/hash-target.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/hash-target.cpp b/tests/hash-target.cpp new file mode 100644 index 000000000..208bb04a8 --- /dev/null +++ b/tests/hash-target.cpp @@ -0,0 +1,60 @@ +// Copyright (c) 2012-2013 The Cryptonote developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include <cstdint> +#include <cstdlib> +#include <cstring> +#include <limits> +#include "crypto/hash.h" +#include "cryptonote_core/difficulty.h" + +using namespace std; +using cryptonote::check_hash; + +int main(int argc, char *argv[]) { + crypto::hash h; + for (uint64_t diff = 1;; diff += 1 + (diff >> 8)) { + for (int b = 0; b < 256; b++) { + memset(&h, b, sizeof(crypto::hash)); + if (check_hash(h, diff) != (b == 0 || diff <= 255 / b)) { + return 1; + } + if (b > 0) { + memset(&h, 0, sizeof(crypto::hash)); + ((char *) &h)[31] = b; + if (check_hash(h, diff) != (diff <= 255 / b)) { + return 1; + } + } + } + if (diff < numeric_limits<uint64_t>::max() / 256) { + uint64_t val = 0; + for (int i = 31; i >= 0; i--) { + val = val * 256 + 255; + ((char *) &h)[i] = static_cast<char>(val / diff); + val %= diff; + } + if (check_hash(h, diff) != true) { + return 1; + } + if (diff > 1) { + for (int i = 0;; i++) { + if (i >= 32) { + abort(); + } + if (++((char *) &h)[i] != 0) { + break; + } + } + if (check_hash(h, diff) != false) { + return 1; + } + } + } + if (diff + 1 + (diff >> 8) < diff) { + break; + } + } + return 0; +} |