GhostRider algorithm (Raptoreum) support
This commit is contained in:
@ -10,6 +10,7 @@ option(WITH_RANDOMX "Enable RandomX algorithms family" ON)
|
|||||||
option(WITH_ARGON2 "Enable Argon2 algorithms family" ON)
|
option(WITH_ARGON2 "Enable Argon2 algorithms family" ON)
|
||||||
option(WITH_ASTROBWT "Enable AstroBWT algorithms family" ON)
|
option(WITH_ASTROBWT "Enable AstroBWT algorithms family" ON)
|
||||||
option(WITH_KAWPOW "Enable KawPow algorithms family" ON)
|
option(WITH_KAWPOW "Enable KawPow algorithms family" ON)
|
||||||
|
option(WITH_GHOSTRIDER "Enable GhostRider algorithm" ON)
|
||||||
option(WITH_HTTP "Enable HTTP protocol support (client/server)" ON)
|
option(WITH_HTTP "Enable HTTP protocol support (client/server)" ON)
|
||||||
option(WITH_DEBUG_LOG "Enable debug log output" OFF)
|
option(WITH_DEBUG_LOG "Enable debug log output" OFF)
|
||||||
option(WITH_TLS "Enable OpenSSL support" ON)
|
option(WITH_TLS "Enable OpenSSL support" ON)
|
||||||
@ -128,6 +129,10 @@ set(SOURCES_CRYPTO
|
|||||||
src/crypto/common/VirtualMemory.cpp
|
src/crypto/common/VirtualMemory.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (CMAKE_C_COMPILER_ID MATCHES GNU)
|
||||||
|
set_source_files_properties(src/crypto/cn/CnHash.cpp PROPERTIES COMPILE_FLAGS "-Ofast -fno-tree-vectorize")
|
||||||
|
endif()
|
||||||
|
|
||||||
if (WITH_HWLOC)
|
if (WITH_HWLOC)
|
||||||
list(APPEND HEADERS_CRYPTO
|
list(APPEND HEADERS_CRYPTO
|
||||||
src/crypto/common/NUMAMemoryPool.h
|
src/crypto/common/NUMAMemoryPool.h
|
||||||
@ -186,6 +191,7 @@ include(cmake/randomx.cmake)
|
|||||||
include(cmake/argon2.cmake)
|
include(cmake/argon2.cmake)
|
||||||
include(cmake/astrobwt.cmake)
|
include(cmake/astrobwt.cmake)
|
||||||
include(cmake/kawpow.cmake)
|
include(cmake/kawpow.cmake)
|
||||||
|
include(cmake/ghostrider.cmake)
|
||||||
include(cmake/OpenSSL.cmake)
|
include(cmake/OpenSSL.cmake)
|
||||||
include(cmake/asm.cmake)
|
include(cmake/asm.cmake)
|
||||||
|
|
||||||
@ -221,7 +227,7 @@ if (WITH_DEBUG_LOG)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES} ${SOURCES_OS} ${HEADERS_CRYPTO} ${SOURCES_CRYPTO} ${SOURCES_SYSLOG} ${TLS_SOURCES} ${XMRIG_ASM_SOURCES})
|
add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES} ${SOURCES_OS} ${HEADERS_CRYPTO} ${SOURCES_CRYPTO} ${SOURCES_SYSLOG} ${TLS_SOURCES} ${XMRIG_ASM_SOURCES})
|
||||||
target_link_libraries(${CMAKE_PROJECT_NAME} ${XMRIG_ASM_LIBRARY} ${OPENSSL_LIBRARIES} ${UV_LIBRARIES} ${EXTRA_LIBS} ${CPUID_LIB} ${ARGON2_LIBRARY} ${ETHASH_LIBRARY})
|
target_link_libraries(${CMAKE_PROJECT_NAME} ${XMRIG_ASM_LIBRARY} ${OPENSSL_LIBRARIES} ${UV_LIBRARIES} ${EXTRA_LIBS} ${CPUID_LIB} ${ARGON2_LIBRARY} ${ETHASH_LIBRARY} ${GHOSTRIDER_LIBRARY})
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/bin/WinRing0/WinRing0x64.sys" $<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>)
|
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/bin/WinRing0/WinRing0x64.sys" $<TARGET_FILE_DIR:${CMAKE_PROJECT_NAME}>)
|
||||||
|
8
cmake/ghostrider.cmake
Normal file
8
cmake/ghostrider.cmake
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
if (WITH_GHOSTRIDER)
|
||||||
|
add_definitions(/DXMRIG_ALGO_GHOSTRIDER)
|
||||||
|
add_subdirectory(src/crypto/ghostrider)
|
||||||
|
set(GHOSTRIDER_LIBRARY ghostrider)
|
||||||
|
else()
|
||||||
|
remove_definitions(/DXMRIG_ALGO_GHOSTRIDER)
|
||||||
|
set(GHOSTRIDER_LIBRARY "")
|
||||||
|
endif()
|
@ -239,6 +239,9 @@ xmrig::IWorker *xmrig::Workers<CpuLaunchData>::create(Thread<CpuLaunchData> *han
|
|||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
return new CpuWorker<5>(handle->id(), handle->config());
|
return new CpuWorker<5>(handle->id(), handle->config());
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
return new CpuWorker<8>(handle->id(), handle->config());
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -122,8 +122,15 @@ std::vector<xmrig::CpuLaunchData> xmrig::CpuConfig::get(const Miner *miner, cons
|
|||||||
const size_t count = threads.count();
|
const size_t count = threads.count();
|
||||||
out.reserve(count);
|
out.reserve(count);
|
||||||
|
|
||||||
|
std::vector<int64_t> affinities;
|
||||||
|
affinities.reserve(count);
|
||||||
|
|
||||||
|
for (const auto& thread : threads.data()) {
|
||||||
|
affinities.emplace_back(thread.affinity());
|
||||||
|
}
|
||||||
|
|
||||||
for (const auto &thread : threads.data()) {
|
for (const auto &thread : threads.data()) {
|
||||||
out.emplace_back(miner, algorithm, *this, thread, count);
|
out.emplace_back(miner, algorithm, *this, thread, count, affinities);
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
@ -200,6 +207,7 @@ void xmrig::CpuConfig::generate()
|
|||||||
count += xmrig::generate<Algorithm::RANDOM_X>(m_threads, m_limit);
|
count += xmrig::generate<Algorithm::RANDOM_X>(m_threads, m_limit);
|
||||||
count += xmrig::generate<Algorithm::ARGON2>(m_threads, m_limit);
|
count += xmrig::generate<Algorithm::ARGON2>(m_threads, m_limit);
|
||||||
count += xmrig::generate<Algorithm::ASTROBWT>(m_threads, m_limit);
|
count += xmrig::generate<Algorithm::ASTROBWT>(m_threads, m_limit);
|
||||||
|
count += xmrig::generate<Algorithm::GHOSTRIDER>(m_threads, m_limit);
|
||||||
|
|
||||||
m_shouldSave |= count > 0;
|
m_shouldSave |= count > 0;
|
||||||
}
|
}
|
||||||
|
@ -161,6 +161,15 @@ size_t inline generate<Algorithm::ASTROBWT>(Threads<CpuThreads>& threads, uint32
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
template<>
|
||||||
|
size_t inline generate<Algorithm::GHOSTRIDER>(Threads<CpuThreads>& threads, uint32_t limit)
|
||||||
|
{
|
||||||
|
return generate(Algorithm::kGHOSTRIDER, threads, Algorithm::GHOSTRIDER_RTM, limit);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
} /* namespace xmrig */
|
} /* namespace xmrig */
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
||||||
xmrig::CpuLaunchData::CpuLaunchData(const Miner *miner, const Algorithm &algorithm, const CpuConfig &config, const CpuThread &thread, size_t threads) :
|
xmrig::CpuLaunchData::CpuLaunchData(const Miner *miner, const Algorithm &algorithm, const CpuConfig &config, const CpuThread &thread, size_t threads, const std::vector<int64_t>& affinities) :
|
||||||
algorithm(algorithm),
|
algorithm(algorithm),
|
||||||
assembly(config.assembly()),
|
assembly(config.assembly()),
|
||||||
astrobwtAVX2(config.astrobwtAVX2()),
|
astrobwtAVX2(config.astrobwtAVX2()),
|
||||||
@ -44,7 +44,8 @@ xmrig::CpuLaunchData::CpuLaunchData(const Miner *miner, const Algorithm &algorit
|
|||||||
affinity(thread.affinity()),
|
affinity(thread.affinity()),
|
||||||
miner(miner),
|
miner(miner),
|
||||||
threads(threads),
|
threads(threads),
|
||||||
intensity(std::min<uint32_t>(thread.intensity(), algorithm.maxIntensity()))
|
intensity(std::min<uint32_t>(thread.intensity(), algorithm.maxIntensity())),
|
||||||
|
affinities(affinities)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ class Miner;
|
|||||||
class CpuLaunchData
|
class CpuLaunchData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CpuLaunchData(const Miner *miner, const Algorithm &algorithm, const CpuConfig &config, const CpuThread &thread, size_t threads);
|
CpuLaunchData(const Miner *miner, const Algorithm &algorithm, const CpuConfig &config, const CpuThread &thread, size_t threads, const std::vector<int64_t>& affinities);
|
||||||
|
|
||||||
bool isEqual(const CpuLaunchData &other) const;
|
bool isEqual(const CpuLaunchData &other) const;
|
||||||
CnHash::AlgoVariant av() const;
|
CnHash::AlgoVariant av() const;
|
||||||
@ -68,6 +68,7 @@ public:
|
|||||||
const Miner *miner;
|
const Miner *miner;
|
||||||
const size_t threads;
|
const size_t threads;
|
||||||
const uint32_t intensity;
|
const uint32_t intensity;
|
||||||
|
const std::vector<int64_t> affinities;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ public:
|
|||||||
CpuThread(const rapidjson::Value &value);
|
CpuThread(const rapidjson::Value &value);
|
||||||
|
|
||||||
inline bool isEqual(const CpuThread &other) const { return other.m_affinity == m_affinity && other.m_intensity == m_intensity; }
|
inline bool isEqual(const CpuThread &other) const { return other.m_affinity == m_affinity && other.m_intensity == m_intensity; }
|
||||||
inline bool isValid() const { return m_intensity <= 5; }
|
inline bool isValid() const { return m_intensity <= 8; }
|
||||||
inline int64_t affinity() const { return m_affinity; }
|
inline int64_t affinity() const { return m_affinity; }
|
||||||
inline uint32_t intensity() const { return m_intensity == 0 ? 1 : m_intensity; }
|
inline uint32_t intensity() const { return m_intensity == 0 ? 1 : m_intensity; }
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "crypto/rx/Rx.h"
|
#include "crypto/rx/Rx.h"
|
||||||
#include "crypto/rx/RxDataset.h"
|
#include "crypto/rx/RxDataset.h"
|
||||||
#include "crypto/rx/RxVm.h"
|
#include "crypto/rx/RxVm.h"
|
||||||
|
#include "crypto/ghostrider/ghostrider.h"
|
||||||
#include "net/JobResults.h"
|
#include "net/JobResults.h"
|
||||||
|
|
||||||
|
|
||||||
@ -97,6 +98,10 @@ xmrig::CpuWorker<N>::CpuWorker(size_t id, const CpuLaunchData &data) :
|
|||||||
{
|
{
|
||||||
m_memory = new VirtualMemory(m_algorithm.l3() * N, data.hugePages, false, true, node());
|
m_memory = new VirtualMemory(m_algorithm.l3() * N, data.hugePages, false, true, node());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
m_ghHelper = ghostrider::create_helper_thread(affinity(), data.affinities);
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -115,6 +120,10 @@ xmrig::CpuWorker<N>::~CpuWorker()
|
|||||||
{
|
{
|
||||||
delete m_memory;
|
delete m_memory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
ghostrider::destroy_helper_thread(m_ghHelper);
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -152,6 +161,12 @@ bool xmrig::CpuWorker<N>::selfTest()
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
if (m_algorithm.family() == Algorithm::GHOSTRIDER) {
|
||||||
|
return N == 8;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
allocateCnCtx();
|
allocateCnCtx();
|
||||||
|
|
||||||
if (m_algorithm.family() == Algorithm::CN) {
|
if (m_algorithm.family() == Algorithm::CN) {
|
||||||
@ -300,16 +315,30 @@ void xmrig::CpuWorker<N>::start()
|
|||||||
else
|
else
|
||||||
# endif
|
# endif
|
||||||
{
|
{
|
||||||
|
switch (job.algorithm().family()) {
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_ASTROBWT
|
# ifdef XMRIG_ALGO_ASTROBWT
|
||||||
if (job.algorithm().family() == Algorithm::ASTROBWT) {
|
case Algorithm::ASTROBWT:
|
||||||
if (!astrobwt::astrobwt_dero(m_job.blob(), job.size(), m_ctx[0]->memory, m_hash, m_astrobwtMaxSize, m_astrobwtAVX2)) {
|
if (!astrobwt::astrobwt_dero(m_job.blob(), job.size(), m_ctx[0]->memory, m_hash, m_astrobwtMaxSize, m_astrobwtAVX2)) {
|
||||||
valid = false;
|
valid = false;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
else
|
|
||||||
# endif
|
# endif
|
||||||
{
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
case Algorithm::GHOSTRIDER:
|
||||||
|
if (N == 8) {
|
||||||
|
ghostrider::hash_octa(m_job.blob(), job.size(), m_hash, m_ctx, m_ghHelper);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
default:
|
||||||
fn(job.algorithm())(m_job.blob(), job.size(), m_hash, m_ctx, job.height());
|
fn(job.algorithm())(m_job.blob(), job.size(), m_hash, m_ctx, job.height());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!nextRound()) {
|
if (!nextRound()) {
|
||||||
@ -484,6 +513,7 @@ template class CpuWorker<2>;
|
|||||||
template class CpuWorker<3>;
|
template class CpuWorker<3>;
|
||||||
template class CpuWorker<4>;
|
template class CpuWorker<4>;
|
||||||
template class CpuWorker<5>;
|
template class CpuWorker<5>;
|
||||||
|
template class CpuWorker<8>;
|
||||||
|
|
||||||
} // namespace xmrig
|
} // namespace xmrig
|
||||||
|
|
||||||
|
@ -38,6 +38,11 @@ namespace xmrig {
|
|||||||
class RxVm;
|
class RxVm;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
namespace ghostrider { struct HelperThread; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
class CpuWorker : public Worker
|
class CpuWorker : public Worker
|
||||||
{
|
{
|
||||||
@ -87,6 +92,10 @@ private:
|
|||||||
randomx_vm *m_vm = nullptr;
|
randomx_vm *m_vm = nullptr;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
ghostrider::HelperThread* m_ghHelper = nullptr;
|
||||||
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_BENCHMARK
|
# ifdef XMRIG_FEATURE_BENCHMARK
|
||||||
uint32_t m_benchSize = 0;
|
uint32_t m_benchSize = 0;
|
||||||
# endif
|
# endif
|
||||||
@ -102,6 +111,7 @@ extern template class CpuWorker<2>;
|
|||||||
extern template class CpuWorker<3>;
|
extern template class CpuWorker<3>;
|
||||||
extern template class CpuWorker<4>;
|
extern template class CpuWorker<4>;
|
||||||
extern template class CpuWorker<5>;
|
extern template class CpuWorker<5>;
|
||||||
|
extern template class CpuWorker<8>;
|
||||||
|
|
||||||
|
|
||||||
} // namespace xmrig
|
} // namespace xmrig
|
||||||
|
@ -361,6 +361,12 @@ xmrig::CpuThreads xmrig::BasicCpuInfo::threads(const Algorithm &algorithm, uint3
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
if (f == Algorithm::GHOSTRIDER) {
|
||||||
|
return CpuThreads(std::max<size_t>(count / 2, 1), 8);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
return CpuThreads(std::max<size_t>(count / 2, 1), 1);
|
return CpuThreads(std::max<size_t>(count / 2, 1), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,8 +99,14 @@ const char *xmrig::BasicCpuInfo::backend() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
xmrig::CpuThreads xmrig::BasicCpuInfo::threads(const Algorithm &, uint32_t) const
|
xmrig::CpuThreads xmrig::BasicCpuInfo::threads(const Algorithm &algorithm, uint32_t) const
|
||||||
{
|
{
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
if (algorithm.family() == Algorithm::GHOSTRIDER) {
|
||||||
|
return CpuThreads(threads(), 8);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
return CpuThreads(threads());
|
return CpuThreads(threads());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,8 +269,10 @@ xmrig::CpuThreads xmrig::HwlocCpuInfo::allThreads(const Algorithm &algorithm, ui
|
|||||||
CpuThreads threads;
|
CpuThreads threads;
|
||||||
threads.reserve(m_threads);
|
threads.reserve(m_threads);
|
||||||
|
|
||||||
|
const uint32_t intensity = (algorithm.family() == Algorithm::GHOSTRIDER) ? 8 : 0;
|
||||||
|
|
||||||
for (const int32_t pu : m_units) {
|
for (const int32_t pu : m_units) {
|
||||||
threads.add(pu, 0);
|
threads.add(pu, intensity);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (threads.isEmpty()) {
|
if (threads.isEmpty()) {
|
||||||
@ -296,6 +298,18 @@ void xmrig::HwlocCpuInfo::processTopLevelCache(hwloc_obj_t cache, const Algorith
|
|||||||
cores.reserve(m_cores);
|
cores.reserve(m_cores);
|
||||||
findByType(cache, HWLOC_OBJ_CORE, [&cores](hwloc_obj_t found) { cores.emplace_back(found); });
|
findByType(cache, HWLOC_OBJ_CORE, [&cores](hwloc_obj_t found) { cores.emplace_back(found); });
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
if ((algorithm == Algorithm::GHOSTRIDER_RTM) && (PUs > cores.size()) && (PUs < cores.size() * 2)) {
|
||||||
|
// Don't use E-cores on Alder Lake
|
||||||
|
cores.erase(std::remove_if(cores.begin(), cores.end(), [](hwloc_obj_t c) { return hwloc_bitmap_weight(c->cpuset) == 1; }), cores.end());
|
||||||
|
|
||||||
|
// This shouldn't happen, but check it anyway
|
||||||
|
if (cores.empty()) {
|
||||||
|
findByType(cache, HWLOC_OBJ_CORE, [&cores](hwloc_obj_t found) { cores.emplace_back(found); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
size_t L3 = cache->attr->cache.size;
|
size_t L3 = cache->attr->cache.size;
|
||||||
const bool L3_exclusive = isCacheExclusive(cache);
|
const bool L3_exclusive = isCacheExclusive(cache);
|
||||||
size_t L2 = 0;
|
size_t L2 = 0;
|
||||||
@ -351,6 +365,15 @@ void xmrig::HwlocCpuInfo::processTopLevelCache(hwloc_obj_t cache, const Algorith
|
|||||||
cacheHashes = std::min(cacheHashes, limit);
|
cacheHashes = std::min(cacheHashes, limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
if (algorithm == Algorithm::GHOSTRIDER_RTM) {
|
||||||
|
// GhostRider implementation runs 8 hashes at a time
|
||||||
|
intensity = 8;
|
||||||
|
// Always 1 thread per core (it uses additional helper thread when possible)
|
||||||
|
cacheHashes = std::min(cacheHashes, cores.size());
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
if (cacheHashes >= PUs) {
|
if (cacheHashes >= PUs) {
|
||||||
for (hwloc_obj_t core : cores) {
|
for (hwloc_obj_t core : cores) {
|
||||||
const std::vector<hwloc_obj_t> units = findByType(core, HWLOC_OBJ_PU);
|
const std::vector<hwloc_obj_t> units = findByType(core, HWLOC_OBJ_PU);
|
||||||
|
@ -101,6 +101,11 @@ const char *Algorithm::kKAWPOW = "kawpow";
|
|||||||
const char *Algorithm::kKAWPOW_RVN = "kawpow";
|
const char *Algorithm::kKAWPOW_RVN = "kawpow";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
const char* Algorithm::kGHOSTRIDER = "ghostrider";
|
||||||
|
const char* Algorithm::kGHOSTRIDER_RTM = "ghostrider";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define ALGO_NAME(ALGO) { Algorithm::ALGO, Algorithm::k##ALGO }
|
#define ALGO_NAME(ALGO) { Algorithm::ALGO, Algorithm::k##ALGO }
|
||||||
#define ALGO_ALIAS(ALGO, NAME) { NAME, Algorithm::ALGO }
|
#define ALGO_ALIAS(ALGO, NAME) { NAME, Algorithm::ALGO }
|
||||||
@ -163,6 +168,10 @@ static const std::map<uint32_t, const char *> kAlgorithmNames = {
|
|||||||
# ifdef XMRIG_ALGO_KAWPOW
|
# ifdef XMRIG_ALGO_KAWPOW
|
||||||
ALGO_NAME(KAWPOW_RVN),
|
ALGO_NAME(KAWPOW_RVN),
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
ALGO_NAME(GHOSTRIDER_RTM),
|
||||||
|
# endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -278,6 +287,11 @@ static const std::map<const char *, Algorithm::Id, aliasCompare> kAlgorithmAlias
|
|||||||
# ifdef XMRIG_ALGO_KAWPOW
|
# ifdef XMRIG_ALGO_KAWPOW
|
||||||
ALGO_ALIAS_AUTO(KAWPOW_RVN), ALGO_ALIAS(KAWPOW_RVN, "kawpow/rvn"),
|
ALGO_ALIAS_AUTO(KAWPOW_RVN), ALGO_ALIAS(KAWPOW_RVN, "kawpow/rvn"),
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
ALGO_ALIAS_AUTO(GHOSTRIDER_RTM), ALGO_ALIAS(GHOSTRIDER_RTM, "ghostrider/rtm"),
|
||||||
|
ALGO_ALIAS(GHOSTRIDER_RTM, "gr"),
|
||||||
|
# endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -352,7 +366,8 @@ std::vector<xmrig::Algorithm> xmrig::Algorithm::all(const std::function<bool(con
|
|||||||
RX_0, RX_WOW, RX_ARQ, RX_GRAFT, RX_SFX, RX_KEVA,
|
RX_0, RX_WOW, RX_ARQ, RX_GRAFT, RX_SFX, RX_KEVA,
|
||||||
AR2_CHUKWA, AR2_CHUKWA_V2, AR2_WRKZ,
|
AR2_CHUKWA, AR2_CHUKWA_V2, AR2_WRKZ,
|
||||||
ASTROBWT_DERO,
|
ASTROBWT_DERO,
|
||||||
KAWPOW_RVN
|
KAWPOW_RVN,
|
||||||
|
GHOSTRIDER_RTM
|
||||||
};
|
};
|
||||||
|
|
||||||
Algorithms out;
|
Algorithms out;
|
||||||
|
@ -65,6 +65,13 @@ public:
|
|||||||
CN_PICO_0 = 0x63120200, // "cn-pico" CryptoNight-Pico
|
CN_PICO_0 = 0x63120200, // "cn-pico" CryptoNight-Pico
|
||||||
CN_PICO_TLO = 0x63120274, // "cn-pico/tlo" CryptoNight-Pico (TLO)
|
CN_PICO_TLO = 0x63120274, // "cn-pico/tlo" CryptoNight-Pico (TLO)
|
||||||
CN_UPX2 = 0x63110200, // "cn/upx2" Uplexa (UPX2)
|
CN_UPX2 = 0x63110200, // "cn/upx2" Uplexa (UPX2)
|
||||||
|
CN_GR_0 = 0x63130100, // "cn/dark" GhostRider
|
||||||
|
CN_GR_1 = 0x63130101, // "cn/dark-lite" GhostRider
|
||||||
|
CN_GR_2 = 0x63150102, // "cn/fast" GhostRider
|
||||||
|
CN_GR_3 = 0x63140103, // "cn/lite" GhostRider
|
||||||
|
CN_GR_4 = 0x63120104, // "cn/turtle" GhostRider
|
||||||
|
CN_GR_5 = 0x63120105, // "cn/turtle-lite" GhostRider
|
||||||
|
GHOSTRIDER_RTM = 0x6c150000, // "ghostrider" GhostRider
|
||||||
RX_0 = 0x72151200, // "rx/0" RandomX (reference configuration).
|
RX_0 = 0x72151200, // "rx/0" RandomX (reference configuration).
|
||||||
RX_WOW = 0x72141177, // "rx/wow" RandomWOW (Wownero).
|
RX_WOW = 0x72141177, // "rx/wow" RandomWOW (Wownero).
|
||||||
RX_ARQ = 0x72121061, // "rx/arq" RandomARQ (Arqma).
|
RX_ARQ = 0x72121061, // "rx/arq" RandomARQ (Arqma).
|
||||||
@ -89,7 +96,8 @@ public:
|
|||||||
RANDOM_X = 0x72000000,
|
RANDOM_X = 0x72000000,
|
||||||
ARGON2 = 0x61000000,
|
ARGON2 = 0x61000000,
|
||||||
ASTROBWT = 0x41000000,
|
ASTROBWT = 0x41000000,
|
||||||
KAWPOW = 0x6b000000
|
KAWPOW = 0x6b000000,
|
||||||
|
GHOSTRIDER = 0x6c000000
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *kINVALID;
|
static const char *kINVALID;
|
||||||
@ -157,6 +165,11 @@ public:
|
|||||||
static const char *kKAWPOW_RVN;
|
static const char *kKAWPOW_RVN;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
static const char* kGHOSTRIDER;
|
||||||
|
static const char* kGHOSTRIDER_RTM;
|
||||||
|
# endif
|
||||||
|
|
||||||
inline Algorithm() = default;
|
inline Algorithm() = default;
|
||||||
inline Algorithm(const char *algo) : m_id(parse(algo)) {}
|
inline Algorithm(const char *algo) : m_id(parse(algo)) {}
|
||||||
inline Algorithm(Id id) : m_id(id) {}
|
inline Algorithm(Id id) : m_id(id) {}
|
||||||
@ -176,7 +189,7 @@ public:
|
|||||||
inline Id id() const { return m_id; }
|
inline Id id() const { return m_id; }
|
||||||
inline size_t l2() const { return l2(m_id); }
|
inline size_t l2() const { return l2(m_id); }
|
||||||
inline uint32_t family() const { return family(m_id); }
|
inline uint32_t family() const { return family(m_id); }
|
||||||
inline uint32_t maxIntensity() const { return isCN() ? 5 : 1; };
|
inline uint32_t maxIntensity() const { return isCN() ? 5 : ((m_id == GHOSTRIDER_RTM) ? 8 : 1); };
|
||||||
|
|
||||||
inline size_t l3() const
|
inline size_t l3() const
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -57,6 +57,12 @@ private:
|
|||||||
|
|
||||||
bool m_authorized = false;
|
bool m_authorized = false;
|
||||||
std::pair<uint64_t, String> m_extraNonce{};
|
std::pair<uint64_t, String> m_extraNonce{};
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
uint64_t m_extraNonce2Size = 0;
|
||||||
|
uint64_t m_nextDifficulty = 0;
|
||||||
|
String m_ntime;
|
||||||
|
# endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ public:
|
|||||||
inline const String &poolWallet() const { return m_poolWallet; }
|
inline const String &poolWallet() const { return m_poolWallet; }
|
||||||
inline const uint32_t *nonce() const { return reinterpret_cast<const uint32_t*>(m_blob + nonceOffset()); }
|
inline const uint32_t *nonce() const { return reinterpret_cast<const uint32_t*>(m_blob + nonceOffset()); }
|
||||||
inline const uint8_t *blob() const { return m_blob; }
|
inline const uint8_t *blob() const { return m_blob; }
|
||||||
inline int32_t nonceOffset() const { return (algorithm().family() == Algorithm::KAWPOW) ? 32 : 39; }
|
inline int32_t nonceOffset() const { auto f = algorithm().family(); return (f == Algorithm::KAWPOW) ? 32 : ((f == Algorithm::GHOSTRIDER) ? 76 : 39); }
|
||||||
inline size_t nonceSize() const { return (algorithm().family() == Algorithm::KAWPOW) ? 8 : 4; }
|
inline size_t nonceSize() const { return (algorithm().family() == Algorithm::KAWPOW) ? 8 : 4; }
|
||||||
inline size_t size() const { return m_size; }
|
inline size_t size() const { return m_size; }
|
||||||
inline uint32_t *nonce() { return reinterpret_cast<uint32_t*>(m_blob + nonceOffset()); }
|
inline uint32_t *nonce() { return reinterpret_cast<uint32_t*>(m_blob + nonceOffset()); }
|
||||||
|
@ -219,7 +219,8 @@ xmrig::IClient *xmrig::Pool::createClient(int id, IClientListener *listener) con
|
|||||||
|
|
||||||
if (m_mode == MODE_POOL) {
|
if (m_mode == MODE_POOL) {
|
||||||
# ifdef XMRIG_ALGO_KAWPOW
|
# ifdef XMRIG_ALGO_KAWPOW
|
||||||
if ((m_algorithm.family() == Algorithm::KAWPOW) || (m_coin == Coin::RAVEN)) {
|
const uint32_t f = m_algorithm.family();
|
||||||
|
if ((f == Algorithm::KAWPOW) || (f == Algorithm::GHOSTRIDER) || (m_coin == Coin::RAVEN)) {
|
||||||
client = new EthStratumClient(id, Platform::userAgent(), listener);
|
client = new EthStratumClient(id, Platform::userAgent(), listener);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -67,6 +67,11 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
# include "crypto/ghostrider/ghostrider.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
@ -334,6 +339,11 @@ public:
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
inline void initGhostRider() const { ghostrider::benchmark(); }
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
Algorithm algorithm;
|
Algorithm algorithm;
|
||||||
Algorithms algorithms;
|
Algorithms algorithms;
|
||||||
bool active = false;
|
bool active = false;
|
||||||
@ -553,6 +563,10 @@ void xmrig::Miner::setJob(const Job &job, bool donate)
|
|||||||
constexpr const bool ready = true;
|
constexpr const bool ready = true;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
d_ptr->initGhostRider();
|
||||||
|
# endif
|
||||||
|
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
|
|
||||||
d_ptr->active = true;
|
d_ptr->active = true;
|
||||||
|
@ -43,6 +43,7 @@ public:
|
|||||||
constexpr inline size_t memory() const { static_assert(Algorithm::isCN(ALGO), "invalid CRYPTONIGHT algorithm"); return Algorithm::l3(ALGO); }
|
constexpr inline size_t memory() const { static_assert(Algorithm::isCN(ALGO), "invalid CRYPTONIGHT algorithm"); return Algorithm::l3(ALGO); }
|
||||||
constexpr inline uint32_t iterations() const { static_assert(Algorithm::isCN(ALGO), "invalid CRYPTONIGHT algorithm"); return CN_ITER; }
|
constexpr inline uint32_t iterations() const { static_assert(Algorithm::isCN(ALGO), "invalid CRYPTONIGHT algorithm"); return CN_ITER; }
|
||||||
constexpr inline uint32_t mask() const { return static_cast<uint32_t>(((memory() - 1) / 16) * 16); }
|
constexpr inline uint32_t mask() const { return static_cast<uint32_t>(((memory() - 1) / 16) * 16); }
|
||||||
|
constexpr inline uint32_t half_mem() const { return mask() < memory() / 2; }
|
||||||
|
|
||||||
inline static uint32_t iterations(Algorithm::Id algo)
|
inline static uint32_t iterations(Algorithm::Id algo)
|
||||||
{
|
{
|
||||||
@ -108,6 +109,16 @@ public:
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
if (algo == Algorithm::CN_GR_1) {
|
||||||
|
return 0x3FFF0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (algo == Algorithm::CN_GR_5) {
|
||||||
|
return 0x1FFF0;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
return ((Algorithm::l3(algo) - 1) / 16) * 16;
|
return ((Algorithm::l3(algo) - 1) / 16) * 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,6 +147,18 @@ template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_UPX2>::iterations() co
|
|||||||
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_PICO_0>::mask() const { return 0x1FFF0; }
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_PICO_0>::mask() const { return 0x1FFF0; }
|
||||||
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_UPX2>::mask() const { return 0x1FFF0; }
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_UPX2>::mask() const { return 0x1FFF0; }
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_GR_0>::iterations() const { return CN_ITER / 4; }
|
||||||
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_GR_1>::iterations() const { return CN_ITER / 4; }
|
||||||
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_GR_2>::iterations() const { return CN_ITER / 2; }
|
||||||
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_GR_3>::iterations() const { return CN_ITER / 2; }
|
||||||
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_GR_4>::iterations() const { return CN_ITER / 8; }
|
||||||
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_GR_5>::iterations() const { return CN_ITER / 8; }
|
||||||
|
|
||||||
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_GR_1>::mask() const { return 0x3FFF0; }
|
||||||
|
template<> constexpr inline uint32_t CnAlgo<Algorithm::CN_GR_5>::mask() const { return 0x1FFF0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
} /* namespace xmrig */
|
} /* namespace xmrig */
|
||||||
|
|
||||||
|
@ -310,6 +310,15 @@ xmrig::CnHash::CnHash()
|
|||||||
m_map[Algorithm::ASTROBWT_DERO]->data[AV_SINGLE_SOFT][Assembly::NONE] = astrobwt::single_hash<Algorithm::ASTROBWT_DERO>;
|
m_map[Algorithm::ASTROBWT_DERO]->data[AV_SINGLE_SOFT][Assembly::NONE] = astrobwt::single_hash<Algorithm::ASTROBWT_DERO>;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifdef XMRIG_ALGO_GHOSTRIDER
|
||||||
|
ADD_FN(Algorithm::CN_GR_0);
|
||||||
|
ADD_FN(Algorithm::CN_GR_1);
|
||||||
|
ADD_FN(Algorithm::CN_GR_2);
|
||||||
|
ADD_FN(Algorithm::CN_GR_3);
|
||||||
|
ADD_FN(Algorithm::CN_GR_4);
|
||||||
|
ADD_FN(Algorithm::CN_GR_5);
|
||||||
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_FEATURE_ASM
|
# ifdef XMRIG_FEATURE_ASM
|
||||||
patchAsmVariants();
|
patchAsmVariants();
|
||||||
# endif
|
# endif
|
||||||
|
@ -58,6 +58,9 @@ struct cryptonight_ctx {
|
|||||||
|
|
||||||
cn_mainloop_fun_ms_abi generated_code;
|
cn_mainloop_fun_ms_abi generated_code;
|
||||||
cryptonight_r_data generated_code_data;
|
cryptonight_r_data generated_code_data;
|
||||||
|
|
||||||
|
alignas(16) uint8_t save_state[128];
|
||||||
|
bool first_half;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -349,6 +349,9 @@ static inline __m128i aes_round_tweak_div(const __m128i &in, const __m128i &key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
alignas(64) static const uint32_t tweak1_table[256] = { 268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,268435456,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,805306368,0,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456,805306368,268435456 };
|
||||||
|
|
||||||
|
|
||||||
namespace xmrig {
|
namespace xmrig {
|
||||||
|
|
||||||
|
|
||||||
@ -368,12 +371,7 @@ static inline void cryptonight_monero_tweak(const uint8_t* l, uint64_t idx, __m1
|
|||||||
|
|
||||||
uint64_t vh = vgetq_lane_u64(tmp, 1);
|
uint64_t vh = vgetq_lane_u64(tmp, 1);
|
||||||
|
|
||||||
uint8_t x = vh >> 24;
|
mem_out[1] = vh ^ tweak1_table[static_cast<uint8_t>(vh >> 24)];
|
||||||
static const uint16_t table = 0x7531;
|
|
||||||
const uint8_t index = (((x >> (3)) & 6) | (x & 1)) << 1;
|
|
||||||
vh ^= ((table >> index) & 0x3) << 28;
|
|
||||||
|
|
||||||
mem_out[1] = vh;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ const static uint8_t test_output_r[] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn/0"
|
// "cn/0"
|
||||||
const static uint8_t test_output_v0[160] = {
|
const static uint8_t test_output_v0[256] = {
|
||||||
0x1A, 0x3F, 0xFB, 0xEE, 0x90, 0x9B, 0x42, 0x0D, 0x91, 0xF7, 0xBE, 0x6E, 0x5F, 0xB5, 0x6D, 0xB7,
|
0x1A, 0x3F, 0xFB, 0xEE, 0x90, 0x9B, 0x42, 0x0D, 0x91, 0xF7, 0xBE, 0x6E, 0x5F, 0xB5, 0x6D, 0xB7,
|
||||||
0x1B, 0x31, 0x10, 0xD8, 0x86, 0x01, 0x1E, 0x87, 0x7E, 0xE5, 0x78, 0x6A, 0xFD, 0x08, 0x01, 0x00,
|
0x1B, 0x31, 0x10, 0xD8, 0x86, 0x01, 0x1E, 0x87, 0x7E, 0xE5, 0x78, 0x6A, 0xFD, 0x08, 0x01, 0x00,
|
||||||
0x1B, 0x60, 0x6A, 0x3F, 0x4A, 0x07, 0xD6, 0x48, 0x9A, 0x1B, 0xCD, 0x07, 0x69, 0x7B, 0xD1, 0x66,
|
0x1B, 0x60, 0x6A, 0x3F, 0x4A, 0x07, 0xD6, 0x48, 0x9A, 0x1B, 0xCD, 0x07, 0x69, 0x7B, 0xD1, 0x66,
|
||||||
@ -115,7 +115,7 @@ const static uint8_t test_output_v0[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn/1" Cryptonight variant 1 (Monero v7)
|
// "cn/1" Cryptonight variant 1 (Monero v7)
|
||||||
const static uint8_t test_output_v1[160] = {
|
const static uint8_t test_output_v1[256] = {
|
||||||
0xF2, 0x2D, 0x3D, 0x62, 0x03, 0xD2, 0xA0, 0x8B, 0x41, 0xD9, 0x02, 0x72, 0x78, 0xD8, 0xBC, 0xC9,
|
0xF2, 0x2D, 0x3D, 0x62, 0x03, 0xD2, 0xA0, 0x8B, 0x41, 0xD9, 0x02, 0x72, 0x78, 0xD8, 0xBC, 0xC9,
|
||||||
0x83, 0xAC, 0xAD, 0xA9, 0xB6, 0x8E, 0x52, 0xE3, 0xC6, 0x89, 0x69, 0x2A, 0x50, 0xE9, 0x21, 0xD9,
|
0x83, 0xAC, 0xAD, 0xA9, 0xB6, 0x8E, 0x52, 0xE3, 0xC6, 0x89, 0x69, 0x2A, 0x50, 0xE9, 0x21, 0xD9,
|
||||||
0xC9, 0xFA, 0xE8, 0x42, 0x5D, 0x86, 0x88, 0xDC, 0x23, 0x6B, 0xCD, 0xBC, 0x42, 0xFD, 0xB4, 0x2D,
|
0xC9, 0xFA, 0xE8, 0x42, 0x5D, 0x86, 0x88, 0xDC, 0x23, 0x6B, 0xCD, 0xBC, 0x42, 0xFD, 0xB4, 0x2D,
|
||||||
@ -130,7 +130,7 @@ const static uint8_t test_output_v1[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn/2" Cryptonight variant 2 (Monero v8)
|
// "cn/2" Cryptonight variant 2 (Monero v8)
|
||||||
const static uint8_t test_output_v2[160] = {
|
const static uint8_t test_output_v2[256] = {
|
||||||
0x97, 0x37, 0x82, 0x82, 0xCF, 0x10, 0xE7, 0xAD, 0x03, 0x3F, 0x7B, 0x80, 0x74, 0xC4, 0x0E, 0x14,
|
0x97, 0x37, 0x82, 0x82, 0xCF, 0x10, 0xE7, 0xAD, 0x03, 0x3F, 0x7B, 0x80, 0x74, 0xC4, 0x0E, 0x14,
|
||||||
0xD0, 0x6E, 0x7F, 0x60, 0x9D, 0xDD, 0xDA, 0x78, 0x76, 0x80, 0xB5, 0x8C, 0x05, 0xF4, 0x3D, 0x21,
|
0xD0, 0x6E, 0x7F, 0x60, 0x9D, 0xDD, 0xDA, 0x78, 0x76, 0x80, 0xB5, 0x8C, 0x05, 0xF4, 0x3D, 0x21,
|
||||||
0x87, 0x1F, 0xCD, 0x68, 0x23, 0xF6, 0xA8, 0x79, 0xBB, 0x3F, 0x33, 0x95, 0x1C, 0x8E, 0x8E, 0x89,
|
0x87, 0x1F, 0xCD, 0x68, 0x23, 0xF6, 0xA8, 0x79, 0xBB, 0x3F, 0x33, 0x95, 0x1C, 0x8E, 0x8E, 0x89,
|
||||||
@ -145,7 +145,7 @@ const static uint8_t test_output_v2[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn/half"
|
// "cn/half"
|
||||||
const static uint8_t test_output_half[160] = {
|
const static uint8_t test_output_half[256] = {
|
||||||
0x5D, 0x4F, 0xBC, 0x35, 0x60, 0x97, 0xEA, 0x64, 0x40, 0xB0, 0x88, 0x8E, 0xDE, 0xB6, 0x35, 0xDD,
|
0x5D, 0x4F, 0xBC, 0x35, 0x60, 0x97, 0xEA, 0x64, 0x40, 0xB0, 0x88, 0x8E, 0xDE, 0xB6, 0x35, 0xDD,
|
||||||
0xC8, 0x4A, 0x0E, 0x39, 0x7C, 0x86, 0x84, 0x56, 0x89, 0x5C, 0x3F, 0x29, 0xBE, 0x73, 0x12, 0xA7,
|
0xC8, 0x4A, 0x0E, 0x39, 0x7C, 0x86, 0x84, 0x56, 0x89, 0x5C, 0x3F, 0x29, 0xBE, 0x73, 0x12, 0xA7,
|
||||||
0x02, 0xE6, 0x1D, 0x2B, 0xBC, 0x84, 0xB6, 0x71, 0x96, 0x71, 0xD5, 0x0C, 0xAC, 0x76, 0x0E, 0x6B,
|
0x02, 0xE6, 0x1D, 0x2B, 0xBC, 0x84, 0xB6, 0x71, 0x96, 0x71, 0xD5, 0x0C, 0xAC, 0x76, 0x0E, 0x6B,
|
||||||
@ -160,7 +160,7 @@ const static uint8_t test_output_half[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn/msr" Masari (MSR)
|
// "cn/msr" Masari (MSR)
|
||||||
const static uint8_t test_output_msr[160] = {
|
const static uint8_t test_output_msr[256] = {
|
||||||
0x3C, 0x7A, 0x61, 0x08, 0x4C, 0x5E, 0xB8, 0x65, 0xB4, 0x98, 0xAB, 0x2F, 0x5A, 0x1A, 0xC5, 0x2C,
|
0x3C, 0x7A, 0x61, 0x08, 0x4C, 0x5E, 0xB8, 0x65, 0xB4, 0x98, 0xAB, 0x2F, 0x5A, 0x1A, 0xC5, 0x2C,
|
||||||
0x49, 0xC1, 0x77, 0xC2, 0xD0, 0x13, 0x34, 0x42, 0xD6, 0x5E, 0xD5, 0x14, 0x33, 0x5C, 0x82, 0xC5,
|
0x49, 0xC1, 0x77, 0xC2, 0xD0, 0x13, 0x34, 0x42, 0xD6, 0x5E, 0xD5, 0x14, 0x33, 0x5C, 0x82, 0xC5,
|
||||||
0x69, 0xDF, 0x38, 0x51, 0x1B, 0xB3, 0xEB, 0x7D, 0xE7, 0x6B, 0x08, 0x8E, 0xB6, 0x7E, 0xB7, 0x1C,
|
0x69, 0xDF, 0x38, 0x51, 0x1B, 0xB3, 0xEB, 0x7D, 0xE7, 0x6B, 0x08, 0x8E, 0xB6, 0x7E, 0xB7, 0x1C,
|
||||||
@ -175,7 +175,7 @@ const static uint8_t test_output_msr[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn/xao" Alloy (XAO)
|
// "cn/xao" Alloy (XAO)
|
||||||
const static uint8_t test_output_xao[160] = {
|
const static uint8_t test_output_xao[256] = {
|
||||||
0x9A, 0x29, 0xD0, 0xC4, 0xAF, 0xDC, 0x63, 0x9B, 0x65, 0x53, 0xB1, 0xC8, 0x37, 0x35, 0x11, 0x4C,
|
0x9A, 0x29, 0xD0, 0xC4, 0xAF, 0xDC, 0x63, 0x9B, 0x65, 0x53, 0xB1, 0xC8, 0x37, 0x35, 0x11, 0x4C,
|
||||||
0x5D, 0x77, 0x16, 0x21, 0x42, 0x97, 0x5C, 0xB8, 0x50, 0xC0, 0xA5, 0x1F, 0x64, 0x07, 0xBD, 0x33,
|
0x5D, 0x77, 0x16, 0x21, 0x42, 0x97, 0x5C, 0xB8, 0x50, 0xC0, 0xA5, 0x1F, 0x64, 0x07, 0xBD, 0x33,
|
||||||
0xF1, 0xC9, 0x98, 0x40, 0x42, 0xDE, 0x39, 0xD1, 0xBA, 0x2D, 0xAD, 0xEC, 0xFE, 0xEA, 0xD8, 0x46,
|
0xF1, 0xC9, 0x98, 0x40, 0x42, 0xDE, 0x39, 0xD1, 0xBA, 0x2D, 0xAD, 0xEC, 0xFE, 0xEA, 0xD8, 0x46,
|
||||||
@ -190,7 +190,7 @@ const static uint8_t test_output_xao[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn/rto" Arto (RTO)
|
// "cn/rto" Arto (RTO)
|
||||||
const static uint8_t test_output_rto[160] = {
|
const static uint8_t test_output_rto[256] = {
|
||||||
0x82, 0x66, 0x1E, 0x1C, 0x6E, 0x64, 0x36, 0x66, 0x84, 0x06, 0x32, 0x7A, 0x9B, 0xB1, 0x13, 0x19,
|
0x82, 0x66, 0x1E, 0x1C, 0x6E, 0x64, 0x36, 0x66, 0x84, 0x06, 0x32, 0x7A, 0x9B, 0xB1, 0x13, 0x19,
|
||||||
0xA5, 0x56, 0x16, 0x15, 0xDF, 0xEC, 0x1C, 0x9E, 0xE3, 0x88, 0x4A, 0x6C, 0x1C, 0xEB, 0x76, 0xA5,
|
0xA5, 0x56, 0x16, 0x15, 0xDF, 0xEC, 0x1C, 0x9E, 0xE3, 0x88, 0x4A, 0x6C, 0x1C, 0xEB, 0x76, 0xA5,
|
||||||
0xB3, 0xFB, 0xF4, 0x3F, 0x2B, 0x6A, 0x3A, 0x39, 0xA3, 0x6E, 0x08, 0x33, 0x67, 0x90, 0x31, 0xB9,
|
0xB3, 0xFB, 0xF4, 0x3F, 0x2B, 0x6A, 0x3A, 0x39, 0xA3, 0x6E, 0x08, 0x33, 0x67, 0x90, 0x31, 0xB9,
|
||||||
@ -204,7 +204,7 @@ const static uint8_t test_output_rto[160] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// "cn/rwz"
|
// "cn/rwz"
|
||||||
const static uint8_t test_output_rwz[160] = {
|
const static uint8_t test_output_rwz[256] = {
|
||||||
0x5f, 0x56, 0xc6, 0xb0, 0x99, 0x6b, 0xa2, 0x3e, 0x0b, 0xba, 0x07, 0x29, 0xc9, 0x90, 0x74, 0x85,
|
0x5f, 0x56, 0xc6, 0xb0, 0x99, 0x6b, 0xa2, 0x3e, 0x0b, 0xba, 0x07, 0x29, 0xc9, 0x90, 0x74, 0x85,
|
||||||
0x5a, 0x10, 0xe3, 0x08, 0x7f, 0xdb, 0xfe, 0x94, 0x75, 0x33, 0x54, 0x73, 0x76, 0xf0, 0x75, 0xb8,
|
0x5a, 0x10, 0xe3, 0x08, 0x7f, 0xdb, 0xfe, 0x94, 0x75, 0x33, 0x54, 0x73, 0x76, 0xf0, 0x75, 0xb8,
|
||||||
0x8b, 0x70, 0x43, 0x9a, 0xfc, 0xf5, 0xeb, 0x15, 0xbb, 0xf9, 0xad, 0x9d, 0x2a, 0xbd, 0x72, 0x52,
|
0x8b, 0x70, 0x43, 0x9a, 0xfc, 0xf5, 0xeb, 0x15, 0xbb, 0xf9, 0xad, 0x9d, 0x2a, 0xbd, 0x72, 0x52,
|
||||||
@ -218,7 +218,7 @@ const static uint8_t test_output_rwz[160] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// "cn/zls"
|
// "cn/zls"
|
||||||
const static uint8_t test_output_zls[160] = {
|
const static uint8_t test_output_zls[256] = {
|
||||||
0x51, 0x6E, 0x33, 0xC6, 0xE4, 0x46, 0xAB, 0xBC, 0xCD, 0xAD, 0x18, 0xC0, 0x4C, 0xD9, 0xA2, 0x5E,
|
0x51, 0x6E, 0x33, 0xC6, 0xE4, 0x46, 0xAB, 0xBC, 0xCD, 0xAD, 0x18, 0xC0, 0x4C, 0xD9, 0xA2, 0x5E,
|
||||||
0x64, 0x10, 0x28, 0x53, 0xB2, 0x0A, 0x42, 0xDF, 0xDE, 0xAA, 0x8B, 0x59, 0x9E, 0xCF, 0x40, 0xE2,
|
0x64, 0x10, 0x28, 0x53, 0xB2, 0x0A, 0x42, 0xDF, 0xDE, 0xAA, 0x8B, 0x59, 0x9E, 0xCF, 0x40, 0xE2,
|
||||||
0x0D, 0x62, 0x5B, 0x42, 0x18, 0xE2, 0x76, 0xAD, 0xD0, 0x74, 0x90, 0x60, 0x8D, 0xC4, 0xC7, 0x80,
|
0x0D, 0x62, 0x5B, 0x42, 0x18, 0xE2, 0x76, 0xAD, 0xD0, 0x74, 0x90, 0x60, 0x8D, 0xC4, 0xC7, 0x80,
|
||||||
@ -232,7 +232,7 @@ const static uint8_t test_output_zls[160] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// "cn/ccx"
|
// "cn/ccx"
|
||||||
const static uint8_t test_output_ccx[160] = {
|
const static uint8_t test_output_ccx[256] = {
|
||||||
0xB3, 0xA1, 0x67, 0x86, 0xD2, 0xC9, 0x85, 0xEC, 0xAD, 0xC4, 0x5F, 0x91, 0x05, 0x27, 0xC7, 0xA1,
|
0xB3, 0xA1, 0x67, 0x86, 0xD2, 0xC9, 0x85, 0xEC, 0xAD, 0xC4, 0x5F, 0x91, 0x05, 0x27, 0xC7, 0xA1,
|
||||||
0x96, 0xF0, 0xE1, 0xE9, 0x7C, 0x87, 0x09, 0x38, 0x1D, 0x7D, 0x41, 0x93, 0x35, 0xF8, 0x16, 0x72,
|
0x96, 0xF0, 0xE1, 0xE9, 0x7C, 0x87, 0x09, 0x38, 0x1D, 0x7D, 0x41, 0x93, 0x35, 0xF8, 0x16, 0x72,
|
||||||
0xC3, 0xBD, 0x8D, 0xE8, 0xD5, 0xAE, 0xB8, 0x59, 0x0A, 0x6C, 0xCB, 0x7B, 0x41, 0x30, 0xF7, 0x04,
|
0xC3, 0xBD, 0x8D, 0xE8, 0xD5, 0xAE, 0xB8, 0x59, 0x0A, 0x6C, 0xCB, 0x7B, 0x41, 0x30, 0xF7, 0x04,
|
||||||
@ -246,7 +246,7 @@ const static uint8_t test_output_ccx[160] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// "cn/double"
|
// "cn/double"
|
||||||
const static uint8_t test_output_double[160] = {
|
const static uint8_t test_output_double[256] = {
|
||||||
0xAE, 0xFB, 0xB3, 0xF0, 0xCC, 0x88, 0x04, 0x6D, 0x11, 0x9F, 0x6C, 0x54, 0xB9, 0x6D, 0x90, 0xC9,
|
0xAE, 0xFB, 0xB3, 0xF0, 0xCC, 0x88, 0x04, 0x6D, 0x11, 0x9F, 0x6C, 0x54, 0xB9, 0x6D, 0x90, 0xC9,
|
||||||
0xE8, 0x84, 0xEA, 0x3B, 0x59, 0x83, 0xA6, 0x0D, 0x50, 0xA4, 0x2D, 0x7D, 0x3E, 0xBE, 0x48, 0x21,
|
0xE8, 0x84, 0xEA, 0x3B, 0x59, 0x83, 0xA6, 0x0D, 0x50, 0xA4, 0x2D, 0x7D, 0x3E, 0xBE, 0x48, 0x21,
|
||||||
0x49, 0xCE, 0x8E, 0xF3, 0xBC, 0x8A, 0x36, 0xBF, 0x86, 0x37, 0x89, 0x55, 0x09, 0xBA, 0x22, 0xF8,
|
0x49, 0xCE, 0x8E, 0xF3, 0xBC, 0x8A, 0x36, 0xBF, 0x86, 0x37, 0x89, 0x55, 0x09, 0xBA, 0x22, 0xF8,
|
||||||
@ -261,7 +261,7 @@ const static uint8_t test_output_double[160] = {
|
|||||||
|
|
||||||
#ifdef XMRIG_ALGO_CN_LITE
|
#ifdef XMRIG_ALGO_CN_LITE
|
||||||
// "cn-lite/0"
|
// "cn-lite/0"
|
||||||
const static uint8_t test_output_v0_lite[160] = {
|
const static uint8_t test_output_v0_lite[256] = {
|
||||||
0x36, 0x95, 0xB4, 0xB5, 0x3B, 0xB0, 0x03, 0x58, 0xB0, 0xAD, 0x38, 0xDC, 0x16, 0x0F, 0xEB, 0x9E,
|
0x36, 0x95, 0xB4, 0xB5, 0x3B, 0xB0, 0x03, 0x58, 0xB0, 0xAD, 0x38, 0xDC, 0x16, 0x0F, 0xEB, 0x9E,
|
||||||
0x00, 0x4E, 0xEC, 0xE0, 0x9B, 0x83, 0xA7, 0x2E, 0xF6, 0xBA, 0x98, 0x64, 0xD3, 0x51, 0x0C, 0x88,
|
0x00, 0x4E, 0xEC, 0xE0, 0x9B, 0x83, 0xA7, 0x2E, 0xF6, 0xBA, 0x98, 0x64, 0xD3, 0x51, 0x0C, 0x88,
|
||||||
0x28, 0xA2, 0x2B, 0xAD, 0x3F, 0x93, 0xD1, 0x40, 0x8F, 0xCA, 0x47, 0x2E, 0xB5, 0xAD, 0x1C, 0xBE,
|
0x28, 0xA2, 0x2B, 0xAD, 0x3F, 0x93, 0xD1, 0x40, 0x8F, 0xCA, 0x47, 0x2E, 0xB5, 0xAD, 0x1C, 0xBE,
|
||||||
@ -276,7 +276,7 @@ const static uint8_t test_output_v0_lite[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn-lite/1" AEON v7
|
// "cn-lite/1" AEON v7
|
||||||
const static uint8_t test_output_v1_lite[160] = {
|
const static uint8_t test_output_v1_lite[256] = {
|
||||||
0x6D, 0x8C, 0xDC, 0x44, 0x4E, 0x9B, 0xBB, 0xFD, 0x68, 0xFC, 0x43, 0xFC, 0xD4, 0x85, 0x5B, 0x22,
|
0x6D, 0x8C, 0xDC, 0x44, 0x4E, 0x9B, 0xBB, 0xFD, 0x68, 0xFC, 0x43, 0xFC, 0xD4, 0x85, 0x5B, 0x22,
|
||||||
0x8C, 0x8A, 0x1B, 0xD9, 0x1D, 0x9D, 0x00, 0x28, 0x5B, 0xEC, 0x02, 0xB7, 0xCA, 0x2D, 0x67, 0x41,
|
0x8C, 0x8A, 0x1B, 0xD9, 0x1D, 0x9D, 0x00, 0x28, 0x5B, 0xEC, 0x02, 0xB7, 0xCA, 0x2D, 0x67, 0x41,
|
||||||
0x87, 0xC4, 0xE5, 0x70, 0x65, 0x3E, 0xB4, 0xC2, 0xB4, 0x2B, 0x7A, 0x0D, 0x54, 0x65, 0x59, 0x45,
|
0x87, 0xC4, 0xE5, 0x70, 0x65, 0x3E, 0xB4, 0xC2, 0xB4, 0x2B, 0x7A, 0x0D, 0x54, 0x65, 0x59, 0x45,
|
||||||
@ -293,7 +293,7 @@ const static uint8_t test_output_v1_lite[160] = {
|
|||||||
|
|
||||||
#ifdef XMRIG_ALGO_CN_HEAVY
|
#ifdef XMRIG_ALGO_CN_HEAVY
|
||||||
// "cn-heavy/0"
|
// "cn-heavy/0"
|
||||||
const static uint8_t test_output_v0_heavy[160] = {
|
const static uint8_t test_output_v0_heavy[256] = {
|
||||||
0x99, 0x83, 0xF2, 0x1B, 0xDF, 0x20, 0x10, 0xA8, 0xD7, 0x07, 0xBB, 0x2F, 0x14, 0xD7, 0x86, 0x64,
|
0x99, 0x83, 0xF2, 0x1B, 0xDF, 0x20, 0x10, 0xA8, 0xD7, 0x07, 0xBB, 0x2F, 0x14, 0xD7, 0x86, 0x64,
|
||||||
0xBB, 0xE1, 0x18, 0x7F, 0x55, 0x01, 0x4B, 0x39, 0xE5, 0xF3, 0xD6, 0x93, 0x28, 0xE4, 0x8F, 0xC2,
|
0xBB, 0xE1, 0x18, 0x7F, 0x55, 0x01, 0x4B, 0x39, 0xE5, 0xF3, 0xD6, 0x93, 0x28, 0xE4, 0x8F, 0xC2,
|
||||||
0x4D, 0x94, 0x7D, 0xD6, 0xDB, 0x6E, 0x07, 0x48, 0x26, 0x4A, 0x51, 0x2E, 0xAC, 0xF3, 0x25, 0x4A,
|
0x4D, 0x94, 0x7D, 0xD6, 0xDB, 0x6E, 0x07, 0x48, 0x26, 0x4A, 0x51, 0x2E, 0xAC, 0xF3, 0x25, 0x4A,
|
||||||
@ -308,7 +308,7 @@ const static uint8_t test_output_v0_heavy[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn-heavy/xhv"
|
// "cn-heavy/xhv"
|
||||||
const static uint8_t test_output_xhv_heavy[160] = {
|
const static uint8_t test_output_xhv_heavy[256] = {
|
||||||
0x5A, 0xC3, 0xF7, 0x85, 0xC4, 0x90, 0xC5, 0x85, 0x50, 0xEC, 0x95, 0xD2, 0x72, 0x65, 0x63, 0x57,
|
0x5A, 0xC3, 0xF7, 0x85, 0xC4, 0x90, 0xC5, 0x85, 0x50, 0xEC, 0x95, 0xD2, 0x72, 0x65, 0x63, 0x57,
|
||||||
0x7E, 0x7C, 0x1C, 0x21, 0x2D, 0x0C, 0xDE, 0x59, 0x12, 0x73, 0x20, 0x1E, 0x44, 0xFD, 0xD5, 0xB6,
|
0x7E, 0x7C, 0x1C, 0x21, 0x2D, 0x0C, 0xDE, 0x59, 0x12, 0x73, 0x20, 0x1E, 0x44, 0xFD, 0xD5, 0xB6,
|
||||||
0x1F, 0x4E, 0xB2, 0x0A, 0x36, 0x51, 0x4B, 0xF5, 0x4D, 0xC9, 0xE0, 0x90, 0x2C, 0x16, 0x47, 0x3F,
|
0x1F, 0x4E, 0xB2, 0x0A, 0x36, 0x51, 0x4B, 0xF5, 0x4D, 0xC9, 0xE0, 0x90, 0x2C, 0x16, 0x47, 0x3F,
|
||||||
@ -323,7 +323,7 @@ const static uint8_t test_output_xhv_heavy[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn-heavy/tube"
|
// "cn-heavy/tube"
|
||||||
const static uint8_t test_output_tube_heavy[160] = {
|
const static uint8_t test_output_tube_heavy[256] = {
|
||||||
0xFE, 0x53, 0x35, 0x20, 0x76, 0xEA, 0xE6, 0x89, 0xFA, 0x3B, 0x4F, 0xDA, 0x61, 0x46, 0x34, 0xCF,
|
0xFE, 0x53, 0x35, 0x20, 0x76, 0xEA, 0xE6, 0x89, 0xFA, 0x3B, 0x4F, 0xDA, 0x61, 0x46, 0x34, 0xCF,
|
||||||
0xC3, 0x12, 0xEE, 0x0C, 0x38, 0x7D, 0xF2, 0xB8, 0xB7, 0x4D, 0xA2, 0xA1, 0x59, 0x74, 0x12, 0x35,
|
0xC3, 0x12, 0xEE, 0x0C, 0x38, 0x7D, 0xF2, 0xB8, 0xB7, 0x4D, 0xA2, 0xA1, 0x59, 0x74, 0x12, 0x35,
|
||||||
0xCD, 0x3F, 0x29, 0xDF, 0x07, 0x4A, 0x14, 0xAD, 0x0B, 0x98, 0x99, 0x37, 0xCA, 0x14, 0x68, 0xA3,
|
0xCD, 0x3F, 0x29, 0xDF, 0x07, 0x4A, 0x14, 0xAD, 0x0B, 0x98, 0x99, 0x37, 0xCA, 0x14, 0x68, 0xA3,
|
||||||
@ -340,7 +340,7 @@ const static uint8_t test_output_tube_heavy[160] = {
|
|||||||
|
|
||||||
#ifdef XMRIG_ALGO_CN_PICO
|
#ifdef XMRIG_ALGO_CN_PICO
|
||||||
// "cn-pico/trtl"
|
// "cn-pico/trtl"
|
||||||
const static uint8_t test_output_pico_trtl[160] = {
|
const static uint8_t test_output_pico_trtl[256] = {
|
||||||
0x08, 0xF4, 0x21, 0xD7, 0x83, 0x31, 0x17, 0x30, 0x0E, 0xDA, 0x66, 0xE9, 0x8F, 0x4A, 0x25, 0x69,
|
0x08, 0xF4, 0x21, 0xD7, 0x83, 0x31, 0x17, 0x30, 0x0E, 0xDA, 0x66, 0xE9, 0x8F, 0x4A, 0x25, 0x69,
|
||||||
0x09, 0x3D, 0xF3, 0x00, 0x50, 0x01, 0x73, 0x94, 0x4E, 0xFC, 0x40, 0x1E, 0x9A, 0x4A, 0x17, 0xAF,
|
0x09, 0x3D, 0xF3, 0x00, 0x50, 0x01, 0x73, 0x94, 0x4E, 0xFC, 0x40, 0x1E, 0x9A, 0x4A, 0x17, 0xAF,
|
||||||
0xB2, 0x17, 0x2E, 0xC9, 0x46, 0x6E, 0x1A, 0xEE, 0x70, 0xEC, 0x85, 0x72, 0xA1, 0x4C, 0x23, 0x3E,
|
0xB2, 0x17, 0x2E, 0xC9, 0x46, 0x6E, 0x1A, 0xEE, 0x70, 0xEC, 0x85, 0x72, 0xA1, 0x4C, 0x23, 0x3E,
|
||||||
@ -355,7 +355,7 @@ const static uint8_t test_output_pico_trtl[160] = {
|
|||||||
|
|
||||||
|
|
||||||
// "cn-pico/tlo"
|
// "cn-pico/tlo"
|
||||||
const static uint8_t test_output_pico_tlo[160] = {
|
const static uint8_t test_output_pico_tlo[256] = {
|
||||||
0x99, 0x75, 0xF2, 0xC1, 0xB3, 0xB4, 0x54, 0x34, 0xA4, 0x93, 0x86, 0x21, 0x30, 0x97, 0xF3, 0x1B,
|
0x99, 0x75, 0xF2, 0xC1, 0xB3, 0xB4, 0x54, 0x34, 0xA4, 0x93, 0x86, 0x21, 0x30, 0x97, 0xF3, 0x1B,
|
||||||
0xB4, 0xB9, 0xA6, 0x58, 0x6A, 0x7E, 0x81, 0xF4, 0x42, 0x9F, 0x6D, 0x5F, 0x65, 0xC3, 0x8D, 0x1A,
|
0xB4, 0xB9, 0xA6, 0x58, 0x6A, 0x7E, 0x81, 0xF4, 0x42, 0x9F, 0x6D, 0x5F, 0x65, 0xC3, 0x8D, 0x1A,
|
||||||
0xFC, 0x67, 0xDF, 0xCC, 0xB5, 0xFC, 0x90, 0xD7, 0x85, 0x5A, 0xE9, 0x03, 0x36, 0x1E, 0xAB, 0xD7,
|
0xFC, 0x67, 0xDF, 0xCC, 0xB5, 0xFC, 0x90, 0xD7, 0x85, 0x5A, 0xE9, 0x03, 0x36, 0x1E, 0xAB, 0xD7,
|
||||||
@ -372,7 +372,7 @@ const static uint8_t test_output_pico_tlo[160] = {
|
|||||||
|
|
||||||
#ifdef XMRIG_ALGO_CN_FEMTO
|
#ifdef XMRIG_ALGO_CN_FEMTO
|
||||||
// "cn/upx2"
|
// "cn/upx2"
|
||||||
const static uint8_t test_output_femto_upx2[160] = {
|
const static uint8_t test_output_femto_upx2[256] = {
|
||||||
0xAA, 0xBB, 0xB8, 0xED, 0x14, 0xA8, 0x35, 0xFA, 0x22, 0xCF, 0xB1, 0xB5, 0xDE, 0xA8, 0x72, 0xB0,
|
0xAA, 0xBB, 0xB8, 0xED, 0x14, 0xA8, 0x35, 0xFA, 0x22, 0xCF, 0xB1, 0xB5, 0xDE, 0xA8, 0x72, 0xB0,
|
||||||
0xA1, 0xD6, 0xCB, 0xD8, 0x46, 0xF4, 0x39, 0x1C, 0x0F, 0x01, 0xF3, 0x87, 0x5E, 0x3A, 0x37, 0x61,
|
0xA1, 0xD6, 0xCB, 0xD8, 0x46, 0xF4, 0x39, 0x1C, 0x0F, 0x01, 0xF3, 0x87, 0x5E, 0x3A, 0x37, 0x61,
|
||||||
0x38, 0x59, 0x15, 0x72, 0xF8, 0x20, 0xD4, 0xDE, 0x25, 0x3C, 0xF5, 0x5A, 0x21, 0x92, 0xB6, 0x22,
|
0x38, 0x59, 0x15, 0x72, 0xF8, 0x20, 0xD4, 0xDE, 0x25, 0x3C, 0xF5, 0x5A, 0x21, 0x92, 0xB6, 0x22,
|
||||||
@ -389,7 +389,7 @@ const static uint8_t test_output_femto_upx2[160] = {
|
|||||||
|
|
||||||
#ifdef XMRIG_ALGO_ARGON2
|
#ifdef XMRIG_ALGO_ARGON2
|
||||||
// "argon2/chukwa"
|
// "argon2/chukwa"
|
||||||
const static uint8_t argon2_chukwa_test_out[160] = {
|
const static uint8_t argon2_chukwa_test_out[256] = {
|
||||||
0xC1, 0x58, 0xA1, 0x05, 0xAE, 0x75, 0xC7, 0x56, 0x1C, 0xFD, 0x02, 0x90, 0x83, 0xA4, 0x7A, 0x87,
|
0xC1, 0x58, 0xA1, 0x05, 0xAE, 0x75, 0xC7, 0x56, 0x1C, 0xFD, 0x02, 0x90, 0x83, 0xA4, 0x7A, 0x87,
|
||||||
0x65, 0x3D, 0x51, 0xF9, 0x14, 0x12, 0x8E, 0x21, 0xC1, 0x97, 0x1D, 0x8B, 0x10, 0xC4, 0x90, 0x34,
|
0x65, 0x3D, 0x51, 0xF9, 0x14, 0x12, 0x8E, 0x21, 0xC1, 0x97, 0x1D, 0x8B, 0x10, 0xC4, 0x90, 0x34,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
@ -403,7 +403,7 @@ const static uint8_t argon2_chukwa_test_out[160] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// "argon2/chukwav2"
|
// "argon2/chukwav2"
|
||||||
const static uint8_t argon2_chukwa_v2_test_out[160] = {
|
const static uint8_t argon2_chukwa_v2_test_out[256] = {
|
||||||
0x77, 0xCF, 0x69, 0x58, 0xB3, 0x53, 0x6E, 0x1F, 0x9F, 0x0D, 0x1E, 0xA1, 0x65, 0xF2, 0x28, 0x11,
|
0x77, 0xCF, 0x69, 0x58, 0xB3, 0x53, 0x6E, 0x1F, 0x9F, 0x0D, 0x1E, 0xA1, 0x65, 0xF2, 0x28, 0x11,
|
||||||
0xCA, 0x7B, 0xC4, 0x87, 0xEA, 0x9F, 0x52, 0x03, 0x0B, 0x50, 0x50, 0xC1, 0x7F, 0xCD, 0xD8, 0xF5,
|
0xCA, 0x7B, 0xC4, 0x87, 0xEA, 0x9F, 0x52, 0x03, 0x0B, 0x50, 0x50, 0xC1, 0x7F, 0xCD, 0xD8, 0xF5,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
@ -417,7 +417,7 @@ const static uint8_t argon2_chukwa_v2_test_out[160] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// "argon2/wrkz"
|
// "argon2/wrkz"
|
||||||
const static uint8_t argon2_wrkz_test_out[160] = {
|
const static uint8_t argon2_wrkz_test_out[256] = {
|
||||||
0x35, 0xE0, 0x83, 0xD4, 0xB9, 0xC6, 0x4C, 0x2A, 0x68, 0x82, 0x0A, 0x43, 0x1F, 0x61, 0x31, 0x19,
|
0x35, 0xE0, 0x83, 0xD4, 0xB9, 0xC6, 0x4C, 0x2A, 0x68, 0x82, 0x0A, 0x43, 0x1F, 0x61, 0x31, 0x19,
|
||||||
0x98, 0xA8, 0xCD, 0x18, 0x64, 0xDB, 0xA4, 0x07, 0x7E, 0x25, 0xB7, 0xF1, 0x21, 0xD5, 0x4B, 0xD1,
|
0x98, 0xA8, 0xCD, 0x18, 0x64, 0xDB, 0xA4, 0x07, 0x7E, 0x25, 0xB7, 0xF1, 0x21, 0xD5, 0x4B, 0xD1,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
@ -434,7 +434,7 @@ const static uint8_t argon2_wrkz_test_out[160] = {
|
|||||||
|
|
||||||
#ifdef XMRIG_ALGO_ASTROBWT
|
#ifdef XMRIG_ALGO_ASTROBWT
|
||||||
// "astrobwt"
|
// "astrobwt"
|
||||||
const static uint8_t astrobwt_dero_test_out[160] = {
|
const static uint8_t astrobwt_dero_test_out[256] = {
|
||||||
0x7E, 0x88, 0x44, 0xF2, 0xD6, 0xB7, 0xA4, 0x34, 0x98, 0xFE, 0x6D, 0x22, 0x65, 0x27, 0x68, 0x90,
|
0x7E, 0x88, 0x44, 0xF2, 0xD6, 0xB7, 0xA4, 0x34, 0x98, 0xFE, 0x6D, 0x22, 0x65, 0x27, 0x68, 0x90,
|
||||||
0x23, 0xDA, 0x8A, 0x52, 0xF9, 0xFC, 0x4E, 0xC6, 0x9E, 0x5A, 0xAA, 0xA6, 0x3E, 0xDC, 0xE1, 0xC1,
|
0x23, 0xDA, 0x8A, 0x52, 0xF9, 0xFC, 0x4E, 0xC6, 0x9E, 0x5A, 0xAA, 0xA6, 0x3E, 0xDC, 0xE1, 0xC1,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
File diff suppressed because it is too large
Load Diff
59
src/crypto/ghostrider/CMakeLists.txt
Normal file
59
src/crypto/ghostrider/CMakeLists.txt
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
|
project(GhostRider)
|
||||||
|
|
||||||
|
set(HEADERS
|
||||||
|
sph_types.h
|
||||||
|
sph_blake.h
|
||||||
|
sph_bmw.h
|
||||||
|
sph_cubehash.h
|
||||||
|
sph_echo.h
|
||||||
|
sph_fugue.h
|
||||||
|
sph_groestl.h
|
||||||
|
sph_hamsi.h
|
||||||
|
sph_jh.h
|
||||||
|
sph_keccak.h
|
||||||
|
sph_luffa.h
|
||||||
|
sph_sha2.h
|
||||||
|
sph_shabal.h
|
||||||
|
sph_shavite.h
|
||||||
|
sph_simd.h
|
||||||
|
sph_skein.h
|
||||||
|
sph_whirlpool.h
|
||||||
|
ghostrider.h
|
||||||
|
)
|
||||||
|
|
||||||
|
set(SOURCES
|
||||||
|
sph_blake.c
|
||||||
|
sph_bmw.c
|
||||||
|
sph_cubehash.c
|
||||||
|
sph_echo.c
|
||||||
|
sph_fugue.c
|
||||||
|
sph_groestl.c
|
||||||
|
sph_hamsi.c
|
||||||
|
sph_jh.c
|
||||||
|
sph_keccak.c
|
||||||
|
sph_luffa.c
|
||||||
|
sph_shabal.c
|
||||||
|
sph_shavite.c
|
||||||
|
sph_simd.c
|
||||||
|
sph_sha2.c
|
||||||
|
sph_skein.c
|
||||||
|
sph_whirlpool.c
|
||||||
|
ghostrider.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
if (CMAKE_C_COMPILER_ID MATCHES GNU)
|
||||||
|
# gcc 11.2.0 crashes with -ftree-vrp
|
||||||
|
set_source_files_properties(sph_jh.c PROPERTIES COMPILE_FLAGS "-Ofast -fno-tree-vrp")
|
||||||
|
|
||||||
|
# gcc 11.2.0 creates incorrect code with -O3
|
||||||
|
set_source_files_properties(sph_sha2.c PROPERTIES COMPILE_FLAGS "-O2")
|
||||||
|
|
||||||
|
set_source_files_properties(sph_luffa.c PROPERTIES COMPILE_FLAGS "-Ofast -Wno-unused-const-variable")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(.)
|
||||||
|
include_directories(../..)
|
||||||
|
include_directories(${UV_INCLUDE_DIR})
|
||||||
|
|
||||||
|
add_library(ghostrider STATIC ${HEADERS} ${SOURCES})
|
392
src/crypto/ghostrider/aes_helper.c
Normal file
392
src/crypto/ghostrider/aes_helper.c
Normal file
File diff suppressed because it is too large
Load Diff
836
src/crypto/ghostrider/ghostrider.cpp
Normal file
836
src/crypto/ghostrider/ghostrider.cpp
Normal file
File diff suppressed because it is too large
Load Diff
52
src/crypto/ghostrider/ghostrider.h
Normal file
52
src/crypto/ghostrider/ghostrider.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/* XMRig
|
||||||
|
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh>
|
||||||
|
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XMRIG_GR_HASH_H
|
||||||
|
#define XMRIG_GR_HASH_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
struct cryptonight_ctx;
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmrig
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
namespace ghostrider
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
struct HelperThread;
|
||||||
|
|
||||||
|
void benchmark();
|
||||||
|
HelperThread* create_helper_thread(int64_t cpu_index, const std::vector<int64_t>& affinities);
|
||||||
|
void destroy_helper_thread(HelperThread* t);
|
||||||
|
void hash_octa(const uint8_t* data, size_t size, uint8_t* output, cryptonight_ctx** ctx, HelperThread* helper);
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace ghostrider
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace xmrig
|
||||||
|
|
||||||
|
#endif // XMRIG_GR_HASH_H
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user