From 5013963e2119da4c743a818231864810c98bc213 Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Fri, 7 May 2021 11:59:53 -0500 Subject: [PATCH 1/4] reset testnet --- src/currency_core/blockchain_storage.cpp | 2 +- src/currency_core/checkpoints_create.h | 2 +- src/currency_core/currency_config.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/currency_core/blockchain_storage.cpp b/src/currency_core/blockchain_storage.cpp index e422a446..34e26385 100644 --- a/src/currency_core/blockchain_storage.cpp +++ b/src/currency_core/blockchain_storage.cpp @@ -5627,7 +5627,7 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt set_lost_tx_unmixable_for_height(bei.height); - LOG_PRINT_L1("+++++ BLOCK SUCCESSFULLY ADDED " << (is_pos_bl ? "[PoS]" : "[PoW]") << " Sq: " << sequence_factor + LOG_PRINT_L1("+++++ BLOCK SUCCESSFULLY ADDED " << (is_pos_bl ? "[PoS]" : "[PoW]") << "["<< static_cast(bei.bl.major_version) << "." << static_cast(bei.bl.minor_version) << "] "<< " Sq: " << sequence_factor << ENDL << "id:\t" << id << timestamp_str_entry.str() << ENDL << powpos_str_entry.str() << ENDL << "HEIGHT " << bei.height << ", difficulty: " << current_diffic << ", cumul_diff_precise: " << bei.cumulative_diff_precise << ", cumul_diff_adj: " << bei.cumulative_diff_adjusted << " (+" << cumulative_diff_delta << ")" diff --git a/src/currency_core/checkpoints_create.h b/src/currency_core/checkpoints_create.h index 9a14c2f8..ea87d78c 100644 --- a/src/currency_core/checkpoints_create.h +++ b/src/currency_core/checkpoints_create.h @@ -17,7 +17,7 @@ namespace currency inline bool create_checkpoints(currency::checkpoints& checkpoints) { #ifdef TESTNET - ADD_CHECKPOINT(50000, "492ef71f5d722a8a182d65eb0ff731b740e023a2d64881f43db9af7b39ba7988"); + //ADD_CHECKPOINT(50000, "492ef71f5d722a8a182d65eb0ff731b740e023a2d64881f43db9af7b39ba7988"); #else // MAINNET ADD_CHECKPOINT(425000, "46a6c36d5dec2d484d5e4845a8525ca322aafc06915ed9c8da2a241b51b7d1e8"); diff --git a/src/currency_core/currency_config.h b/src/currency_core/currency_config.h index 0c43cc88..4f39e718 100644 --- a/src/currency_core/currency_config.h +++ b/src/currency_core/currency_config.h @@ -10,7 +10,7 @@ #ifndef TESTNET #define CURRENCY_FORMATION_VERSION 84 #else -#define CURRENCY_FORMATION_VERSION 87 +#define CURRENCY_FORMATION_VERSION 88 #endif #define CURRENCY_GENESIS_NONCE (CURRENCY_FORMATION_VERSION + 101011010121) //bender's nightmare From 182a0c59bb9d597c48c15e316846e400c4e536e1 Mon Sep 17 00:00:00 2001 From: sowle Date: Tue, 11 May 2021 04:32:03 +0300 Subject: [PATCH 2/4] crypto sugar: scalar_t::reduce(), hs_t::assign_calc_hash() --- src/crypto/crypto-sugar.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/crypto/crypto-sugar.h b/src/crypto/crypto-sugar.h index fa5aaafd..43e69c42 100644 --- a/src/crypto/crypto-sugar.h +++ b/src/crypto/crypto-sugar.h @@ -271,6 +271,11 @@ namespace crypto return sc_check(&m_s[0]) == 0; } + void reduce() + { + sc_reduce32(&m_s[0]); + } + scalar_t operator+(const scalar_t& v) const { scalar_t result; @@ -825,6 +830,16 @@ namespace crypto this->clear(); return scalar_t(hash); // this will reduce to L } + + void assign_calc_hash(scalar_t& result, bool clear = true) + { + static_assert(sizeof result == sizeof(crypto::hash), "size missmatch"); + size_t data_size_bytes = m_elements.size() * sizeof(item_t); + crypto::cn_fast_hash(m_elements.data(), data_size_bytes, (crypto::hash&)result); + result.reduce(); + if (clear) + this->clear(); + } union item_t { From e24be09046a3ec2720f72be439bcbb77f61106ae Mon Sep 17 00:00:00 2001 From: sowle Date: Tue, 11 May 2021 06:42:06 +0300 Subject: [PATCH 3/4] crypto: faster sc_invert from libsodium (my old naive one moved to the crypto_tests) --- src/crypto/crypto-ops.c | 261 ++++++------------------ tests/functional_tests/crypto_tests.cpp | 250 ++++++++++++++++++----- 2 files changed, 260 insertions(+), 251 deletions(-) diff --git a/src/crypto/crypto-ops.c b/src/crypto/crypto-ops.c index 2ab08dc2..caf20a07 100644 --- a/src/crypto/crypto-ops.c +++ b/src/crypto/crypto-ops.c @@ -4110,209 +4110,66 @@ void sc_muladd(unsigned char* s, const unsigned char* a, s[31] = s11 >> 17; } - -// out = z ^ -1 (= z ^ (L - 2) according to Fermat little theorem) -void sc_invert(unsigned char* out, const unsigned char* z) +/* libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c */ +void sc_sqmul(unsigned char s[32], const int n, const unsigned char a[32]) { - memcpy(out, z, 32); - for (size_t i = 0; i < 128; ++i) - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, out); - sc_mul(out, out, z); - sc_mul(out, out, out); - sc_mul(out, out, z); + int i; + for (i = 0; i < n; ++i) + sc_mul(s, s, s); + sc_mul(s, s, a); +} + +/* libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c */ +void sc_invert(unsigned char* recip, const unsigned char* s) +{ + unsigned char _10[32], _100[32], _1000[32], _10000[32], _100000[32], + _1000000[32], _10010011[32], _10010111[32], _100110[32], _1010[32], + _1010000[32], _1010011[32], _1011[32], _10110[32], _10111101[32], + _11[32], _1100011[32], _1100111[32], _11010011[32], _1101011[32], + _11100111[32], _11101011[32], _11110101[32]; + + sc_mul(_10, s, s); + sc_mul(_11, s, _10); + sc_mul(_100, s, _11); + sc_mul(_1000, _100, _100); + sc_mul(_1010, _10, _1000); + sc_mul(_1011, s, _1010); + sc_mul(_10000, _1000, _1000); + sc_mul(_10110, _1011, _1011); + sc_mul(_100000, _1010, _10110); + sc_mul(_100110, _10000, _10110); + sc_mul(_1000000, _100000, _100000); + sc_mul(_1010000, _10000, _1000000); + sc_mul(_1010011, _11, _1010000); + sc_mul(_1100011, _10000, _1010011); + sc_mul(_1100111, _100, _1100011); + sc_mul(_1101011, _100, _1100111); + sc_mul(_10010011, _1000000, _1010011); + sc_mul(_10010111, _100, _10010011); + sc_mul(_10111101, _100110, _10010111); + sc_mul(_11010011, _10110, _10111101); + sc_mul(_11100111, _1010000, _10010111); + sc_mul(_11101011, _100, _11100111); + sc_mul(_11110101, _1010, _11101011); + + sc_mul(recip, _1011, _11110101); + + sc_sqmul(recip, 126, _1010011); + + sc_sqmul(recip, 9, _10); + sc_mul(recip, recip, _11110101); + sc_sqmul(recip, 7, _1100111); + sc_sqmul(recip, 9, _11110101); + sc_sqmul(recip, 11, _10111101); + sc_sqmul(recip, 8, _11100111); + sc_sqmul(recip, 9, _1101011); + sc_sqmul(recip, 6, _1011); + sc_sqmul(recip, 14, _10010011); + sc_sqmul(recip, 10, _1100011); + sc_sqmul(recip, 9, _10010111); + sc_sqmul(recip, 10, _11110101); + sc_sqmul(recip, 8, _11010011); + sc_sqmul(recip, 8, _11101011); } /* diff --git a/tests/functional_tests/crypto_tests.cpp b/tests/functional_tests/crypto_tests.cpp index 775e9b93..ba4313fd 100644 --- a/tests/functional_tests/crypto_tests.cpp +++ b/tests/functional_tests/crypto_tests.cpp @@ -80,56 +80,208 @@ sc_sqmul(unsigned char s[32], const int n, const unsigned char a[32]) sc_mul(s, s, a); } -void sc_invert2(unsigned char* recip, const unsigned char* s) +// out = z ^ -1 (= z ^ (L - 2) according to Fermat little theorem) +void sc_invert2(unsigned char* out, const unsigned char* z) { - unsigned char _10[32], _100[32], _1000[32], _10000[32], _100000[32], - _1000000[32], _10010011[32], _10010111[32], _100110[32], _1010[32], - _1010000[32], _1010011[32], _1011[32], _10110[32], _10111101[32], - _11[32], _1100011[32], _1100111[32], _11010011[32], _1101011[32], - _11100111[32], _11101011[32], _11110101[32]; - - sc_mul(_10, s, s); - sc_mul(_11, s, _10); - sc_mul(_100, s, _11); - sc_mul(_1000, _100, _100); - sc_mul(_1010, _10, _1000); - sc_mul(_1011, s, _1010); - sc_mul(_10000, _1000, _1000); - sc_mul(_10110, _1011, _1011); - sc_mul(_100000, _1010, _10110); - sc_mul(_100110, _10000, _10110); - sc_mul(_1000000, _100000, _100000); - sc_mul(_1010000, _10000, _1000000); - sc_mul(_1010011, _11, _1010000); - sc_mul(_1100011, _10000, _1010011); - sc_mul(_1100111, _100, _1100011); - sc_mul(_1101011, _100, _1100111); - sc_mul(_10010011, _1000000, _1010011); - sc_mul(_10010111, _100, _10010011); - sc_mul(_10111101, _100110, _10010111); - sc_mul(_11010011, _10110, _10111101); - sc_mul(_11100111, _1010000, _10010111); - sc_mul(_11101011, _100, _11100111); - sc_mul(_11110101, _1010, _11101011); - - sc_mul(recip, _1011, _11110101); - - sc_sqmul(recip, 126, _1010011); - - sc_sqmul(recip, 9, _10); - sc_mul(recip, recip, _11110101); - sc_sqmul(recip, 7, _1100111); - sc_sqmul(recip, 9, _11110101); - sc_sqmul(recip, 11, _10111101); - sc_sqmul(recip, 8, _11100111); - sc_sqmul(recip, 9, _1101011); - sc_sqmul(recip, 6, _1011); - sc_sqmul(recip, 14, _10010011); - sc_sqmul(recip, 10, _1100011); - sc_sqmul(recip, 9, _10010111); - sc_sqmul(recip, 10, _11110101); - sc_sqmul(recip, 8, _11010011); - sc_sqmul(recip, 8, _11101011); + memcpy(out, z, 32); + for (size_t i = 0; i < 128; ++i) + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, out); + sc_mul(out, out, z); + sc_mul(out, out, out); + sc_mul(out, out, z); } extern void *sha3(const void *in, size_t inlen, void *md, int mdlen); From bd9e57c6d8d82a78db26863731d8d292954ab61c Mon Sep 17 00:00:00 2001 From: cryptozoidberg Date: Tue, 25 May 2021 16:51:16 +0200 Subject: [PATCH 4/4] fixed subrepo(again) --- src/gui/qt-daemon/layout | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qt-daemon/layout b/src/gui/qt-daemon/layout index e19aa811..0d3831a3 160000 --- a/src/gui/qt-daemon/layout +++ b/src/gui/qt-daemon/layout @@ -1 +1 @@ -Subproject commit e19aa811be78b8ff3a0b622bd889b11a2685bc0c +Subproject commit 0d3831a3e4c13ab3016aca26d40d01f9e87c7282