-
Notifications
You must be signed in to change notification settings - Fork 338
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
30 changed files
with
1,095 additions
and
120 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,8 +6,8 @@ | |
* Copyright 2016 Jay D Dee <[email protected]> | ||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> | ||
* Copyright 2019 jtgrassie <https://github.com/jtgrassie> | ||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh> | ||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <[email protected]> | ||
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh> | ||
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <[email protected]> | ||
* | ||
* 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 | ||
|
@@ -225,6 +225,10 @@ int64_t xmrig::Client::submit(const JobResult &result) | |
if (result.minerSignature()) { | ||
params.AddMember("sig", StringRef(signature), allocator); | ||
} | ||
# else | ||
if (result.sig) { | ||
params.AddMember("sig", StringRef(result.sig), allocator); | ||
} | ||
# endif | ||
|
||
if (has<EXT_ALGO>() && result.algorithm.isValid()) { | ||
|
@@ -440,12 +444,7 @@ bool xmrig::Client::parseJob(const rapidjson::Value ¶ms, int *code) | |
return false; | ||
} | ||
|
||
# ifndef XMRIG_PROXY_PROJECT | ||
uint8_t signatureKeyBuf[32 * 2]; | ||
if (Cvt::fromHex(signatureKeyBuf, sizeof(signatureKeyBuf), Json::getValue(params, "sig_key"))) { | ||
job.setEphemeralKeys(signatureKeyBuf, signatureKeyBuf + 32); | ||
} | ||
# endif | ||
job.setSigKey(Json::getString(params, "sig_key")); | ||
|
||
m_job.setClientId(m_rpcId); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,8 +6,8 @@ | |
* Copyright 2016 Jay D Dee <[email protected]> | ||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> | ||
* Copyright 2019 jtgrassie <https://github.com/jtgrassie> | ||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh> | ||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <[email protected]> | ||
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh> | ||
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <[email protected]> | ||
* | ||
* 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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,8 +7,8 @@ | |
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> | ||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd> | ||
* Copyright 2019 Howard Chu <https://github.com/hyc> | ||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh> | ||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <[email protected]> | ||
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh> | ||
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <[email protected]> | ||
* | ||
* 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 | ||
|
@@ -144,6 +144,25 @@ void xmrig::Job::setDiff(uint64_t diff) | |
} | ||
|
||
|
||
void xmrig::Job::setSigKey(const char *sig_key) | ||
{ | ||
constexpr const size_t size = 64; | ||
|
||
if (!sig_key || strlen(sig_key) != size * 2) { | ||
return; | ||
} | ||
|
||
# ifndef XMRIG_PROXY_PROJECT | ||
const auto buf = Cvt::fromHex(sig_key, size * 2); | ||
if (buf.size() == size) { | ||
setEphemeralKeys(buf.data(), buf.data() + 32); | ||
} | ||
# else | ||
m_rawSigKey = sig_key; | ||
# endif | ||
} | ||
|
||
|
||
void xmrig::Job::copy(const Job &other) | ||
{ | ||
m_algorithm = other.m_algorithm; | ||
|
@@ -164,6 +183,7 @@ void xmrig::Job::copy(const Job &other) | |
|
||
# ifdef XMRIG_PROXY_PROJECT | ||
m_rawSeedHash = other.m_rawSeedHash; | ||
m_rawSigKey = other.m_rawSigKey; | ||
|
||
memcpy(m_rawBlob, other.m_rawBlob, sizeof(m_rawBlob)); | ||
memcpy(m_rawTarget, other.m_rawTarget, sizeof(m_rawTarget)); | ||
|
@@ -181,6 +201,8 @@ void xmrig::Job::copy(const Job &other) | |
m_minerTxPrefix = other.m_minerTxPrefix; | ||
m_minerTxEphPubKeyOffset = other.m_minerTxEphPubKeyOffset; | ||
m_minerTxPubKeyOffset = other.m_minerTxPubKeyOffset; | ||
m_minerTxExtraNonceOffset = other.m_minerTxExtraNonceOffset; | ||
m_minerTxExtraNonceSize = other.m_minerTxExtraNonceSize; | ||
m_minerTxMerkleTreeBranch = other.m_minerTxMerkleTreeBranch; | ||
# else | ||
memcpy(m_ephPublicKey, other.m_ephPublicKey, sizeof(m_ephPublicKey)); | ||
|
@@ -215,6 +237,7 @@ void xmrig::Job::move(Job &&other) | |
|
||
# ifdef XMRIG_PROXY_PROJECT | ||
m_rawSeedHash = std::move(other.m_rawSeedHash); | ||
m_rawSigKey = std::move(other.m_rawSigKey); | ||
|
||
memcpy(m_rawBlob, other.m_rawBlob, sizeof(m_rawBlob)); | ||
memcpy(m_rawTarget, other.m_rawTarget, sizeof(m_rawTarget)); | ||
|
@@ -229,10 +252,13 @@ void xmrig::Job::move(Job &&other) | |
memcpy(m_viewSecretKey, other.m_viewSecretKey, sizeof(m_viewSecretKey)); | ||
memcpy(m_spendPublicKey, other.m_spendPublicKey, sizeof(m_spendPublicKey)); | ||
memcpy(m_viewPublicKey, other.m_viewPublicKey, sizeof(m_viewPublicKey)); | ||
m_minerTxPrefix = std::move(other.m_minerTxPrefix); | ||
m_minerTxEphPubKeyOffset = other.m_minerTxEphPubKeyOffset; | ||
m_minerTxPubKeyOffset = other.m_minerTxPubKeyOffset; | ||
m_minerTxMerkleTreeBranch = std::move(other.m_minerTxMerkleTreeBranch); | ||
|
||
m_minerTxPrefix = std::move(other.m_minerTxPrefix); | ||
m_minerTxEphPubKeyOffset = other.m_minerTxEphPubKeyOffset; | ||
m_minerTxPubKeyOffset = other.m_minerTxPubKeyOffset; | ||
m_minerTxExtraNonceOffset = other.m_minerTxExtraNonceOffset; | ||
m_minerTxExtraNonceSize = other.m_minerTxExtraNonceSize; | ||
m_minerTxMerkleTreeBranch = std::move(other.m_minerTxMerkleTreeBranch); | ||
# else | ||
memcpy(m_ephPublicKey, other.m_ephPublicKey, sizeof(m_ephPublicKey)); | ||
memcpy(m_ephSecretKey, other.m_ephSecretKey, sizeof(m_ephSecretKey)); | ||
|
@@ -245,26 +271,35 @@ void xmrig::Job::move(Job &&other) | |
#ifdef XMRIG_PROXY_PROJECT | ||
|
||
|
||
void xmrig::Job::setSpendSecretKey(uint8_t* key) | ||
void xmrig::Job::setSpendSecretKey(const uint8_t *key) | ||
{ | ||
m_hasMinerSignature = true; | ||
memcpy(m_spendSecretKey, key, sizeof(m_spendSecretKey)); | ||
xmrig::derive_view_secret_key(m_spendSecretKey, m_viewSecretKey); | ||
xmrig::secret_key_to_public_key(m_spendSecretKey, m_spendPublicKey); | ||
xmrig::secret_key_to_public_key(m_viewSecretKey, m_viewPublicKey); | ||
|
||
derive_view_secret_key(m_spendSecretKey, m_viewSecretKey); | ||
secret_key_to_public_key(m_spendSecretKey, m_spendPublicKey); | ||
secret_key_to_public_key(m_viewSecretKey, m_viewPublicKey); | ||
} | ||
|
||
|
||
void xmrig::Job::setMinerTx(const uint8_t* begin, const uint8_t* end, size_t minerTxEphPubKeyOffset, size_t minerTxPubKeyOffset, const Buffer& minerTxMerkleTreeBranch) | ||
void xmrig::Job::setMinerTx(const uint8_t *begin, const uint8_t *end, size_t minerTxEphPubKeyOffset, size_t minerTxPubKeyOffset, size_t minerTxExtraNonceOffset, size_t minerTxExtraNonceSize, const Buffer &minerTxMerkleTreeBranch) | ||
{ | ||
m_minerTxPrefix.assign(begin, end); | ||
m_minerTxEphPubKeyOffset = minerTxEphPubKeyOffset; | ||
m_minerTxPubKeyOffset = minerTxPubKeyOffset; | ||
m_minerTxMerkleTreeBranch = minerTxMerkleTreeBranch; | ||
m_minerTxEphPubKeyOffset = minerTxEphPubKeyOffset; | ||
m_minerTxPubKeyOffset = minerTxPubKeyOffset; | ||
m_minerTxExtraNonceOffset = minerTxExtraNonceOffset; | ||
m_minerTxExtraNonceSize = minerTxExtraNonceSize; | ||
m_minerTxMerkleTreeBranch = minerTxMerkleTreeBranch; | ||
} | ||
|
||
|
||
void xmrig::Job::setExtraNonceInMinerTx(uint32_t extra_nonce) | ||
{ | ||
memcpy(m_minerTxPrefix.data() + m_minerTxExtraNonceOffset, &extra_nonce, std::min(m_minerTxExtraNonceSize, sizeof(uint32_t))); | ||
} | ||
|
||
|
||
void xmrig::Job::generateHashingBlob(String& blob, String& signatureData) const | ||
void xmrig::Job::generateSignatureData(String &signatureData) const | ||
{ | ||
uint8_t* eph_public_key = m_minerTxPrefix.data() + m_minerTxEphPubKeyOffset; | ||
uint8_t* txkey_pub = m_minerTxPrefix.data() + m_minerTxPubKeyOffset; | ||
|
@@ -285,15 +320,23 @@ void xmrig::Job::generateHashingBlob(String& blob, String& signatureData) const | |
generate_key_derivation(txkey_pub, m_viewSecretKey, derivation); | ||
derive_secret_key(derivation, 0, m_spendSecretKey, buf + 64); | ||
|
||
signatureData = xmrig::Cvt::toHex(buf, sizeof(buf)); | ||
signatureData = Cvt::toHex(buf, sizeof(buf)); | ||
} | ||
|
||
void xmrig::Job::generateHashingBlob(String &blob) const | ||
{ | ||
uint8_t root_hash[32]; | ||
const uint8_t* p = m_minerTxPrefix.data(); | ||
xmrig::BlockTemplate::CalculateRootHash(p, p + m_minerTxPrefix.size(), m_minerTxMerkleTreeBranch, root_hash); | ||
BlockTemplate::CalculateRootHash(p, p + m_minerTxPrefix.size(), m_minerTxMerkleTreeBranch, root_hash); | ||
|
||
uint64_t root_hash_offset = nonceOffset() + nonceSize(); | ||
|
||
if (m_hasMinerSignature) { | ||
root_hash_offset += BlockTemplate::SIGNATURE_SIZE + 2 /* vote */; | ||
} | ||
|
||
blob = rawBlob(); | ||
const uint64_t offset = nonceOffset() + nonceSize() + BlockTemplate::SIGNATURE_SIZE + 2 /* vote */; | ||
xmrig::Cvt::toHex(blob.data() + offset * 2, 64, root_hash, 32); | ||
Cvt::toHex(blob.data() + root_hash_offset * 2, 64, root_hash, BlockTemplate::HASH_SIZE); | ||
} | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,8 +7,8 @@ | |
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt> | ||
* Copyright 2018 Lee Clagett <https://github.com/vtnerd> | ||
* Copyright 2019 Howard Chu <https://github.com/hyc> | ||
* Copyright 2018-2020 SChernykh <https://github.com/SChernykh> | ||
* Copyright 2016-2020 XMRig <https://github.com/xmrig>, <[email protected]> | ||
* Copyright 2018-2021 SChernykh <https://github.com/SChernykh> | ||
* Copyright 2016-2021 XMRig <https://github.com/xmrig>, <[email protected]> | ||
* | ||
* 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 | ||
|
@@ -63,6 +63,7 @@ class Job | |
bool setSeedHash(const char *hash); | ||
bool setTarget(const char *target); | ||
void setDiff(uint64_t diff); | ||
void setSigKey(const char *sig_key); | ||
|
||
inline bool isNicehash() const { return m_nicehash; } | ||
inline bool isValid() const { return (m_size > 0 && m_diff > 0) || !m_poolWallet.isEmpty(); } | ||
|
@@ -102,6 +103,7 @@ class Job | |
inline const char *rawBlob() const { return m_rawBlob; } | ||
inline const char *rawTarget() const { return m_rawTarget; } | ||
inline const String &rawSeedHash() const { return m_rawSeedHash; } | ||
inline const String &rawSigKey() const { return m_rawSigKey; } | ||
# endif | ||
|
||
static inline uint64_t toDiff(uint64_t target) { return target ? (0xFFFFFFFFFFFFFFFFULL / target) : 0; } | ||
|
@@ -117,13 +119,15 @@ class Job | |
# endif | ||
|
||
# ifdef XMRIG_PROXY_PROJECT | ||
void setSpendSecretKey(uint8_t* key); | ||
void setMinerTx(const uint8_t* begin, const uint8_t* end, size_t minerTxEphPubKeyOffset, size_t minerTxPubKeyOffset, const Buffer& minerTxMerkleTreeBranch); | ||
void generateHashingBlob(String& blob, String& signatureData) const; | ||
void setSpendSecretKey(const uint8_t* key); | ||
void setMinerTx(const uint8_t* begin, const uint8_t* end, size_t minerTxEphPubKeyOffset, size_t minerTxPubKeyOffset, size_t minerTxExtraNonceOffset, size_t minerTxExtraNonceSize, const Buffer& minerTxMerkleTreeBranch); | ||
void setExtraNonceInMinerTx(uint32_t extra_nonce); | ||
void generateSignatureData(String& signatureData) const; | ||
void generateHashingBlob(String& blob) const; | ||
# else | ||
inline const uint8_t* ephSecretKey() const { return m_hasMinerSignature ? m_ephSecretKey : nullptr; } | ||
|
||
inline void setEphemeralKeys(uint8_t* pub_key, uint8_t* sec_key) | ||
inline void setEphemeralKeys(const uint8_t *pub_key, const uint8_t *sec_key) | ||
{ | ||
m_hasMinerSignature = true; | ||
memcpy(m_ephPublicKey, pub_key, sizeof(m_ephSecretKey)); | ||
|
@@ -158,15 +162,18 @@ class Job | |
char m_rawBlob[kMaxBlobSize * 2 + 8]{}; | ||
char m_rawTarget[24]{}; | ||
String m_rawSeedHash; | ||
String m_rawSigKey; | ||
|
||
// Miner signatures | ||
uint8_t m_spendSecretKey[32]; | ||
uint8_t m_viewSecretKey[32]; | ||
uint8_t m_spendPublicKey[32]; | ||
uint8_t m_viewPublicKey[32]; | ||
uint8_t m_spendSecretKey[32]{}; | ||
uint8_t m_viewSecretKey[32]{}; | ||
uint8_t m_spendPublicKey[32]{}; | ||
uint8_t m_viewPublicKey[32]{}; | ||
mutable Buffer m_minerTxPrefix; | ||
size_t m_minerTxEphPubKeyOffset = 0; | ||
size_t m_minerTxPubKeyOffset = 0; | ||
size_t m_minerTxExtraNonceOffset = 0; | ||
size_t m_minerTxExtraNonceSize = 0; | ||
Buffer m_minerTxMerkleTreeBranch; | ||
# else | ||
// Miner signatures | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.