From bb1fba37a68fd3b6db7427195ce0b85b7a8c1208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ben=20Gr=C3=A4f?= Date: Mon, 18 Jun 2018 22:36:06 +0200 Subject: [PATCH] Add Arto (RTO) support --- src/Options.cpp | 8 +++++++- src/PowVariant.h | 5 +++++ src/crypto/CryptoNight.cpp | 6 +++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Options.cpp b/src/Options.cpp index e65ed1e1..2d6682ab 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -283,7 +283,8 @@ constexpr static const char *pow_variant_names[] = { "alloy", "xtl", "msr", - "xhv" + "xhv", + "rto" }; Options *Options::parse(int argc, char **argv) @@ -1034,6 +1035,11 @@ bool Options::parsePowVariant(const char *powVariant) break; } + if (i == ARRAY_SIZE(pow_variant_names) - 1 && !strcmp(powVariant, "arto")) { + m_powVariant = POW_RTO; + break; + } + if (i == ARRAY_SIZE(pow_variant_names) - 1) { showUsage(1); return false; diff --git a/src/PowVariant.h b/src/PowVariant.h index ecb0da9e..59c8813a 100644 --- a/src/PowVariant.h +++ b/src/PowVariant.h @@ -32,6 +32,7 @@ enum PowVariant POW_XTL, POW_MSR, POW_XHV, + POW_RTO, LAST_ITEM }; @@ -53,6 +54,8 @@ inline std::string getPowVariantName(PowVariant powVariant) return "msr"; case POW_XHV: return "xhv"; + case POW_RTO: + return "rto"; case POW_AUTODETECT: default: return "-1"; @@ -111,6 +114,8 @@ inline PowVariant parseVariant(const std::string variant) powVariant = PowVariant::POW_MSR; } else if (variant == "xhv" || variant == "haven") { powVariant = PowVariant::POW_XHV; + } else if (variant == "rto" || variant == "arto") { + powVariant = PowVariant::POW_RTO; } return powVariant; diff --git a/src/crypto/CryptoNight.cpp b/src/crypto/CryptoNight.cpp index 65b18b2e..e0f90361 100644 --- a/src/crypto/CryptoNight.cpp +++ b/src/crypto/CryptoNight.cpp @@ -44,7 +44,9 @@ static void cryptonight_aesni(PowVariant powVersion, const uint8_t* input, size_ CryptoNightMultiHash<0x80000, POW_XLT_V4_INDEX_SHIFT, MEMORY, 0x1FFFF0, false, NUM_HASH_BLOCKS>::hashPowV2(input, size, output, ctx); } else if (powVersion == PowVariant::POW_MSR) { CryptoNightMultiHash<0x40000, POW_DEFAULT_INDEX_SHIFT, MEMORY, 0x1FFFF0, false, NUM_HASH_BLOCKS>::hashPowV2(input, size, output, ctx); - } else { + } else if (powVersion == PowVariant::POW_RTO) { + CryptoNightMultiHash<0x80000, POW_DEFAULT_INDEX_SHIFT, MEMORY, 0x1FFFF0, false, NUM_HASH_BLOCKS>::hashLiteIpbc(input, size, output, ctx); + }else { CryptoNightMultiHash<0x80000, POW_DEFAULT_INDEX_SHIFT, MEMORY, 0x1FFFF0, false, NUM_HASH_BLOCKS>::hash(input, size, output, ctx); } # endif @@ -60,6 +62,8 @@ static void cryptonight_softaes(PowVariant powVersion, const uint8_t* input, siz CryptoNightMultiHash<0x80000, POW_XLT_V4_INDEX_SHIFT, MEMORY, 0x1FFFF0, true, NUM_HASH_BLOCKS>::hashPowV2(input, size, output, ctx); } else if (powVersion == PowVariant::POW_MSR) { CryptoNightMultiHash<0x40000, POW_DEFAULT_INDEX_SHIFT, MEMORY, 0x1FFFF0, true, NUM_HASH_BLOCKS>::hashPowV2(input, size, output, ctx); + } else if (powVersion == PowVariant::POW_RTO) { + CryptoNightMultiHash<0x80000, POW_DEFAULT_INDEX_SHIFT, MEMORY, 0x1FFFF0, true, NUM_HASH_BLOCKS>::hashLiteIpbc(input, size, output, ctx); } else { CryptoNightMultiHash<0x80000, POW_DEFAULT_INDEX_SHIFT, MEMORY, 0x1FFFF0, true, NUM_HASH_BLOCKS>::hash(input, size, output, ctx); }