// Copyright (c) 2011-2016 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 #include #include #include #include "crypto/hash.h" #include "CryptoNoteCore/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::max() / 256) { uint64_t val = 0; for (int i = 31; i >= 0; i--) { val = val * 256 + 255; ((char *) &h)[i] = static_cast(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; }