mirror of https://github.com/GOSTSec/poolserver
Intel
11 years ago
16 changed files with 292 additions and 33 deletions
@ -0,0 +1,23 @@ |
|||||||
|
# Try to find the GMP librairies |
||||||
|
# GMP_FOUND - system has GMP lib |
||||||
|
# GMP_INCLUDE_DIR - the GMP include directory |
||||||
|
# GMP_LIBRARIES - Libraries needed to use GMP |
||||||
|
# Copyright (c) 2006, Laurent Montel, <montel@kde.org> |
||||||
|
# |
||||||
|
# Redistribution and use is allowed according to the terms of the BSD license. |
||||||
|
# For details see the accompanying COPYING-CMAKE-SCRIPTS file. |
||||||
|
|
||||||
|
if (GMP_INCLUDE_DIR AND GMP_LIBRARIES) |
||||||
|
# Already in cache, be silent |
||||||
|
set(GMP_FIND_QUIETLY TRUE) |
||||||
|
endif (GMP_INCLUDE_DIR AND GMP_LIBRARIES) |
||||||
|
|
||||||
|
find_path(GMP_INCLUDE_DIR NAMES gmp.h ) |
||||||
|
find_library(GMP_LIBRARIES NAMES gmp libgmp ) |
||||||
|
find_library(GMPXX_LIBRARIES NAMES gmpxx libgmpxx ) |
||||||
|
MESSAGE(STATUS "GMP libs: " ${GMP_LIBRARIES} " " ${GMPXX_LIBRARIES} ) |
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs) |
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMP DEFAULT_MSG GMP_INCLUDE_DIR GMP_LIBRARIES) |
||||||
|
|
||||||
|
mark_as_advanced(GMP_INCLUDE_DIR GMP_LIBRARIES) |
@ -0,0 +1,8 @@ |
|||||||
|
#ifndef BIGNUM_H_ |
||||||
|
#define BIGNUM_H_ |
||||||
|
|
||||||
|
#include <gmpxx.h> |
||||||
|
|
||||||
|
typedef mpz_class BigNum; |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,7 @@ |
|||||||
|
#ifndef BITCOIN_H_ |
||||||
|
#define BITCOIN_H_ |
||||||
|
|
||||||
|
#include "Block.h" |
||||||
|
#include "Transaction.h" |
||||||
|
|
||||||
|
#endif |
@ -1,40 +1,33 @@ |
|||||||
#ifndef BITCOIN_H_ |
#ifndef BITCOIN_BLOCK_H_ |
||||||
#define BITCOIN_H_ |
#define BITCOIN_BLOCK_H_ |
||||||
|
|
||||||
namespace Bitcoin |
#include "Common.h" |
||||||
{ |
#include "Transaction.h" |
||||||
class TxIn |
|
||||||
{ |
|
||||||
}; |
|
||||||
|
|
||||||
class TxOut |
#include <vector> |
||||||
{ |
|
||||||
}; |
|
||||||
|
|
||||||
class Transaction |
|
||||||
{ |
|
||||||
uint32 Version; |
|
||||||
std::vector<TxIn> in; |
|
||||||
std::vector<TxOut> out; |
|
||||||
uint32 LockTime; |
|
||||||
}; |
|
||||||
|
|
||||||
|
namespace Bitcoin |
||||||
|
{ |
||||||
class BlockHeader |
class BlockHeader |
||||||
{ |
{ |
||||||
uint32 Version; |
public: |
||||||
std::array<char, 32> PrevBlockHash; |
uint32 version; |
||||||
std::array<char, 32> MerkleRootHash; |
std::vector<byte> prevBlockHash; |
||||||
uint32 Time; |
std::vector<byte> merkleRootHash; |
||||||
uint32 Bits; |
uint32 time; |
||||||
uint32 Nonce; |
uint32 bits; |
||||||
|
uint32 nonce; |
||||||
}; |
}; |
||||||
|
|
||||||
class Block : public BlockHeader |
class Block : public BlockHeader |
||||||
{ |
{ |
||||||
|
public: |
||||||
std::vector<Transaction> tx; |
std::vector<Transaction> tx; |
||||||
}; |
|
||||||
|
|
||||||
class BlockTemplate |
std::vector<byte> GenerateMerkle() |
||||||
|
{ |
||||||
|
} |
||||||
|
}; |
||||||
} |
} |
||||||
|
|
||||||
#endif |
#endif |
||||||
|
@ -0,0 +1,65 @@ |
|||||||
|
#ifndef BITCOIN_SCRIPT_H_ |
||||||
|
#define BITCOIN_SCRIPT_H_ |
||||||
|
|
||||||
|
#include "Common.h" |
||||||
|
#include <boost/range/join.hpp> |
||||||
|
#include <vector> |
||||||
|
|
||||||
|
namespace Bitcoin |
||||||
|
{ |
||||||
|
enum ScriptOPCode |
||||||
|
{ |
||||||
|
OP_0 = 0x00, |
||||||
|
OP_FALSE = OP_0, |
||||||
|
OP_PUSHDATA1 = 0x4C, |
||||||
|
OP_PUSHDATA2 = 0x4D, |
||||||
|
OP_PUSHDATA4 = 0x4E, |
||||||
|
OP_CHECKSIG = 0xAC, |
||||||
|
}; |
||||||
|
|
||||||
|
class Script |
||||||
|
{ |
||||||
|
public: |
||||||
|
Script() {} |
||||||
|
Script(std::vector<byte> data) : script(data) {} |
||||||
|
|
||||||
|
std::vector<byte> script; |
||||||
|
|
||||||
|
const Script operator+(const Script& other) |
||||||
|
{ |
||||||
|
std::vector<byte> tmp = script; |
||||||
|
tmp.insert(tmp.end(), other.script.begin(), other.script.end()); |
||||||
|
return Script(tmp); |
||||||
|
} |
||||||
|
|
||||||
|
const Script operator+(const std::vector<byte> data) |
||||||
|
{ |
||||||
|
Script tmp(script); |
||||||
|
|
||||||
|
size_t size = data.size(); |
||||||
|
|
||||||
|
if (size >= 1 && size <= 75) { |
||||||
|
// We know size!
|
||||||
|
tmp.script.resize(size+1); |
||||||
|
|
||||||
|
// Push data size
|
||||||
|
tmp.script.push_back((byte)size); |
||||||
|
|
||||||
|
// We start from 1 because index 0 is size opcode
|
||||||
|
for (uint16 i = 1; i <= size; ++i) |
||||||
|
tmp.script[i] = (byte)data[i]; |
||||||
|
} |
||||||
|
|
||||||
|
return tmp; |
||||||
|
} |
||||||
|
|
||||||
|
const Script operator+(const ScriptOPCode op) |
||||||
|
{ |
||||||
|
Script tmp(script); |
||||||
|
tmp.script.push_back((byte)op); |
||||||
|
return tmp; |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,42 @@ |
|||||||
|
#ifndef BITCOIN_TRANSACTION_H_ |
||||||
|
#define BITCOIN_TRANSACTION_H_ |
||||||
|
|
||||||
|
#include "Common.h" |
||||||
|
#include "BigNum.h" |
||||||
|
#include "Script.h" |
||||||
|
|
||||||
|
namespace Bitcoin |
||||||
|
{ |
||||||
|
class OutPoint |
||||||
|
{ |
||||||
|
std::vector<byte> hash; |
||||||
|
uint32 n; |
||||||
|
}; |
||||||
|
|
||||||
|
class InPoint |
||||||
|
{ |
||||||
|
}; |
||||||
|
|
||||||
|
class TxIn |
||||||
|
{ |
||||||
|
OutPoint prevout; |
||||||
|
Script script; |
||||||
|
uint32 n; |
||||||
|
}; |
||||||
|
|
||||||
|
class TxOut |
||||||
|
{ |
||||||
|
int64 value; |
||||||
|
Script scriptPubKey; |
||||||
|
}; |
||||||
|
|
||||||
|
class Transaction |
||||||
|
{ |
||||||
|
uint32 version; |
||||||
|
std::vector<TxIn> in; |
||||||
|
std::vector<TxOut> out; |
||||||
|
uint32 lockTime; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,34 @@ |
|||||||
|
#ifndef CRYPTO_H_ |
||||||
|
#define CRYPTO_H_ |
||||||
|
|
||||||
|
#include "Common.h" |
||||||
|
#include "Util.h" |
||||||
|
#include <string> |
||||||
|
#include <vector> |
||||||
|
#include <openssl/sha.h> |
||||||
|
|
||||||
|
namespace Crypto |
||||||
|
{ |
||||||
|
std::vector<byte> SHA256(std::vector<byte> data) |
||||||
|
{ |
||||||
|
std::vector<byte> hash; |
||||||
|
hash.resize(SHA256_DIGEST_LENGTH); |
||||||
|
SHA256_CTX sha256; |
||||||
|
SHA256_Init(&sha256); |
||||||
|
SHA256_Update(&sha256, &data[0], data.size()); |
||||||
|
SHA256_Final(&hash[0], &sha256); |
||||||
|
return std::vector<byte>(hash.begin(), hash.end()); |
||||||
|
} |
||||||
|
|
||||||
|
std::vector<byte> SHA256(std::string data) |
||||||
|
{ |
||||||
|
return SHA256(std::vector<byte>(data.begin(), data.end())); |
||||||
|
} |
||||||
|
|
||||||
|
std::vector<byte> SHA256D(std::vector<byte> data) |
||||||
|
{ |
||||||
|
return SHA256(SHA256(data)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
Loading…
Reference in new issue