Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/Bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ size_t SchnorrSignature::to_stream(SerializeStream *stream, size_t offset) const

// ---------------------------------------------------------------- PublicKey class

int PublicKey::legacyAddress(char * address, size_t len, const Network * network) const{
int PublicKey::legacyAddress(char * address, size_t len, const BitcoinNetwork * network) const{
memzero(address, len);

uint8_t buffer[20];
Expand All @@ -384,13 +384,13 @@ int PublicKey::legacyAddress(char * address, size_t len, const Network * network
return toBase58Check(addr, 21, address, len);
}
#if USE_ARDUINO_STRING || USE_STD_STRING
String PublicKey::legacyAddress(const Network * network) const{
String PublicKey::legacyAddress(const BitcoinNetwork * network) const{
char addr[40] = { 0 };
legacyAddress(addr, sizeof(addr), network);
return String(addr);
}
#endif
int PublicKey::segwitAddress(char address[], size_t len, const Network * network) const{
int PublicKey::segwitAddress(char address[], size_t len, const BitcoinNetwork * network) const{
memzero(address, len);
if(len < 76){ // TODO: 76 is too much for native segwit
return 0;
Expand All @@ -403,13 +403,13 @@ int PublicKey::segwitAddress(char address[], size_t len, const Network * network
return 76;
}
#if USE_ARDUINO_STRING || USE_STD_STRING
String PublicKey::segwitAddress(const Network * network) const{
String PublicKey::segwitAddress(const BitcoinNetwork * network) const{
char addr[76] = { 0 };
segwitAddress(addr, sizeof(addr), network);
return String(addr);
}
#endif
int PublicKey::nestedSegwitAddress(char address[], size_t len, const Network * network) const{
int PublicKey::nestedSegwitAddress(char address[], size_t len, const BitcoinNetwork * network) const{
memzero(address, len);
uint8_t script[22] = { 0 };
// script[0] = 0x00; // no need to set - already zero
Expand All @@ -425,7 +425,7 @@ int PublicKey::nestedSegwitAddress(char address[], size_t len, const Network * n
return toBase58Check(addr, 21, address, len);
}
#if USE_ARDUINO_STRING || USE_STD_STRING
String PublicKey::nestedSegwitAddress(const Network * network) const{
String PublicKey::nestedSegwitAddress(const BitcoinNetwork * network) const{
char addr[40] = { 0 };
nestedSegwitAddress(addr, sizeof(addr), network);
return String(addr);
Expand Down Expand Up @@ -505,7 +505,7 @@ PrivateKey::PrivateKey(void){
memzero(num, 32); // empty key
network = &DEFAULT_NETWORK;
}
PrivateKey::PrivateKey(const uint8_t * secret_arr, bool use_compressed, const Network * net){
PrivateKey::PrivateKey(const uint8_t * secret_arr, bool use_compressed, const BitcoinNetwork * net){
reset();
memcpy(num, secret_arr, 32);
network = net;
Expand Down
64 changes: 32 additions & 32 deletions src/Bitcoin.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,30 +114,30 @@ class PublicKey : public ECPoint{
/**
* \brief Fills `addr` with legacy Pay-To-Pubkey-Hash address (P2PKH, `1...` for mainnet)
*/
int legacyAddress(char * addr, size_t len, const Network * network = &DEFAULT_NETWORK) const;
int legacyAddress(char * addr, size_t len, const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
/**
* \brief Fills `addr` with native segwit address (P2WPKH, `bc1...` for mainnet)
*/
int segwitAddress(char * addr, size_t len, const Network * network = &DEFAULT_NETWORK) const;
int segwitAddress(char * addr, size_t len, const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
/**
* \brief Fills `addr` with nested segwit address (P2SH-P2WPKH, `3...` for mainnet)
*/
int nestedSegwitAddress(char * addr, size_t len, const Network * network = &DEFAULT_NETWORK) const;
int nestedSegwitAddress(char * addr, size_t len, const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
/**
* \brief Alias for `legacyAddress`
*/
int address(char * address, size_t len, const Network * network = &DEFAULT_NETWORK) const{ return legacyAddress(address, len, network); };
int address(char * address, size_t len, const BitcoinNetwork * network = &DEFAULT_NETWORK) const{ return legacyAddress(address, len, network); };
#if USE_ARDUINO_STRING
String legacyAddress(const Network * network = &DEFAULT_NETWORK) const;
String segwitAddress(const Network * network = &DEFAULT_NETWORK) const;
String nestedSegwitAddress(const Network * network = &DEFAULT_NETWORK) const;
String address(const Network * network = &DEFAULT_NETWORK) const{ return legacyAddress(network); };
String legacyAddress(const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
String segwitAddress(const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
String nestedSegwitAddress(const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
String address(const BitcoinNetwork * network = &DEFAULT_NETWORK) const{ return legacyAddress(network); };
#endif
#if USE_STD_STRING
std::string legacyAddress(const Network * network = &DEFAULT_NETWORK) const;
std::string segwitAddress(const Network * network = &DEFAULT_NETWORK) const;
std::string nestedSegwitAddress(const Network * network = &DEFAULT_NETWORK) const;
std::string address(const Network * network = &DEFAULT_NETWORK) const{ return legacyAddress(network); };
std::string legacyAddress(const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
std::string segwitAddress(const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
std::string nestedSegwitAddress(const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
std::string address(const BitcoinNetwork * network = &DEFAULT_NETWORK) const{ return legacyAddress(network); };
#endif
/**
* \brief verifies the ECDSA signature of the hash of the message
Expand Down Expand Up @@ -167,7 +167,7 @@ class PrivateKey : public ECScalar{
virtual size_t from_stream(ParseStream *s);
public:
PrivateKey();
PrivateKey(const uint8_t secret_arr[32], bool use_compressed = true, const Network * net = &DEFAULT_NETWORK);
PrivateKey(const uint8_t secret_arr[32], bool use_compressed = true, const BitcoinNetwork * net = &DEFAULT_NETWORK);
PrivateKey(const ECScalar sc);
#if USE_ARDUINO_STRING
PrivateKey(const String wifString);
Expand All @@ -183,7 +183,7 @@ class PrivateKey : public ECScalar{
void setSecret(const uint8_t secret_arr[32]){ memcpy(num, secret_arr, 32); pubKey = *this * GeneratorPoint; };

/** \brief Pointer to the network to use. Mainnet or Testnet */
const Network * network;
const BitcoinNetwork * network;

/** \brief Writes the private key in Wallet Import Format */
int wif(char * wifArr, size_t len) const;
Expand Down Expand Up @@ -255,15 +255,15 @@ class HDPrivateKey : public PrivateKey{
uint8_t key_depth = 0,
const uint8_t parent_fingerprint_arr[4] = NULL,
uint32_t childnumber = 0,
const Network * network = &DEFAULT_NETWORK,
const BitcoinNetwork * network = &DEFAULT_NETWORK,
ScriptType key_type = UNKNOWN_TYPE);
HDPrivateKey(const char xprvArr[]);
HDPrivateKey(const char * mnemonic, size_t mnemonicSize, const char * password, size_t passwordSize, const Network * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
HDPrivateKey(const char * mnemonic, size_t mnemonicSize, const char * password, size_t passwordSize, const BitcoinNetwork * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
#if USE_STD_STRING
HDPrivateKey(std::string mnemonic, std::string password, const Network * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
HDPrivateKey(std::string mnemonic, std::string password, const BitcoinNetwork * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
#endif
#if USE_ARDUINO_STRING
HDPrivateKey(String mnemonic, String password, const Network * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
HDPrivateKey(String mnemonic, String password, const BitcoinNetwork * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
#endif
/* HDPrivateKey(const HDPrivateKey &other):HDPrivateKey( // copy
other.num, other.chainCode, other.depth,
Expand All @@ -280,17 +280,17 @@ class HDPrivateKey : public PrivateKey{
uint32_t childNumber;
ScriptType type;

int fromSeed(const uint8_t * seed, size_t seedSize, const Network * network = &DEFAULT_NETWORK);
// int fromSeed(const uint8_t seed[64], const Network * network = &DEFAULT_NETWORK);
int fromMnemonic(const char * mnemonic, size_t mnemonicSize, const char * password, size_t passwordSize, const Network * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
int fromMnemonic(const char * mnemonic, const char * password, const Network * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL){
int fromSeed(const uint8_t * seed, size_t seedSize, const BitcoinNetwork * network = &DEFAULT_NETWORK);
// int fromSeed(const uint8_t seed[64], const BitcoinNetwork * network = &DEFAULT_NETWORK);
int fromMnemonic(const char * mnemonic, size_t mnemonicSize, const char * password, size_t passwordSize, const BitcoinNetwork * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
int fromMnemonic(const char * mnemonic, const char * password, const BitcoinNetwork * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL){
return fromMnemonic(mnemonic, strlen(mnemonic), password, strlen(password), network, progress_callback);
}
#if USE_STD_STRING
int fromMnemonic(std::string mnemonic, std::string password, const Network * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
int fromMnemonic(std::string mnemonic, std::string password, const BitcoinNetwork * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
#endif
#if USE_ARDUINO_STRING
int fromMnemonic(String mnemonic, String password, const Network * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
int fromMnemonic(String mnemonic, String password, const BitcoinNetwork * network = &DEFAULT_NETWORK, void (*progress_callback)(float) = NULL);
#endif
int xprv(char * arr, size_t len) const;
int xpub(char * arr, size_t len) const;
Expand Down Expand Up @@ -349,7 +349,7 @@ class HDPublicKey : public PublicKey{
uint8_t key_depth = 0,
const uint8_t parent_fingerprint_arr[4] = NULL,
uint32_t childnumber = 0,
const Network * net = &DEFAULT_NETWORK,
const BitcoinNetwork * net = &DEFAULT_NETWORK,
ScriptType key_type = UNKNOWN_TYPE);
HDPublicKey(const char * xpubArr);
/* HDPublicKey(const HDPublicKey &other):HDPublicKey( // copy
Expand All @@ -370,7 +370,7 @@ class HDPublicKey : public PublicKey{
uint8_t parentFingerprint[4];
uint32_t childNumber;
ScriptType type;
const Network * network;
const BitcoinNetwork * network;

int xpub(char * arr, size_t len) const;
int address(char * arr, size_t len) const;
Expand Down Expand Up @@ -505,12 +505,12 @@ class Script : public Streamable{
/** \brief tries to determine the script type */
ScriptType type() const;
/** \brief returns address corresponding to the script */
size_t address(char * buffer, size_t len, const Network * network = &DEFAULT_NETWORK) const;
size_t address(char * buffer, size_t len, const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
#if USE_ARDUINO_STRING
String address(const Network * network = &DEFAULT_NETWORK) const;
String address(const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
#endif
#if USE_STD_STRING
std::string address(const Network * network = &DEFAULT_NETWORK) const;
std::string address(const BitcoinNetwork * network = &DEFAULT_NETWORK) const;
#endif

/** \brief length of the script with varint */
Expand Down Expand Up @@ -642,12 +642,12 @@ class TxOut : public Streamable{
/** \brief returns the output amount in BTC */
float btcAmount(){ return (float)amount/1e8; };
/** \brief returns the address corresponding to the output script */
size_t address(char * addr, size_t len, const Network * network = &DEFAULT_NETWORK) const{ return scriptPubkey.address(addr, len, network); };
size_t address(char * addr, size_t len, const BitcoinNetwork * network = &DEFAULT_NETWORK) const{ return scriptPubkey.address(addr, len, network); };
#if USE_ARDUINO_STRING
String address(const Network * network = &DEFAULT_NETWORK) const{ return scriptPubkey.address(network); };
String address(const BitcoinNetwork * network = &DEFAULT_NETWORK) const{ return scriptPubkey.address(network); };
#endif
#if USE_STD_STRING
std::string address(const Network * network = &DEFAULT_NETWORK) const{ return scriptPubkey.address(network); };
std::string address(const BitcoinNetwork * network = &DEFAULT_NETWORK) const{ return scriptPubkey.address(network); };
#endif

bool isValid() const{ return status==PARSING_DONE; };
Expand Down
16 changes: 8 additions & 8 deletions src/HDWallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ HDPrivateKey::HDPrivateKey(const uint8_t secret[32],
uint8_t key_depth,
const uint8_t parent_fingerprint_arr[4],
uint32_t child_number,
const Network * net,
const BitcoinNetwork * net,
ScriptType key_type){
init();
memcpy(num, secret, 32);
Expand Down Expand Up @@ -73,12 +73,12 @@ HDPrivateKey::HDPrivateKey(const char * xprvArr){
init();
from_str(xprvArr, strlen(xprvArr));
}
HDPrivateKey::HDPrivateKey(const char * mnemonic, size_t mnemonicSize, const char * password, size_t passwordSize, const Network * net, void (*progress_callback)(float)){
HDPrivateKey::HDPrivateKey(const char * mnemonic, size_t mnemonicSize, const char * password, size_t passwordSize, const BitcoinNetwork * net, void (*progress_callback)(float)){
init();
fromMnemonic(mnemonic, mnemonicSize, password, passwordSize, net, progress_callback);
}
#if USE_ARDUINO_STRING || USE_STD_STRING
HDPrivateKey::HDPrivateKey(String mnemonic, String password, const Network * net, void (*progress_callback)(float)){
HDPrivateKey::HDPrivateKey(String mnemonic, String password, const BitcoinNetwork * net, void (*progress_callback)(float)){
init();
fromMnemonic(mnemonic, password, net, progress_callback);
}
Expand Down Expand Up @@ -239,7 +239,7 @@ size_t HDPrivateKey::from_str(const char * xprvArr, size_t xprvLen){
HDPrivateKey::from_stream(&s);
return xprvLen;
}
int HDPrivateKey::fromSeed(const uint8_t * seed, size_t seedSize, const Network * net){
int HDPrivateKey::fromSeed(const uint8_t * seed, size_t seedSize, const BitcoinNetwork * net){
init();
uint8_t raw[64] = { 0 };
SHA512 sha;
Expand All @@ -255,10 +255,10 @@ int HDPrivateKey::fromSeed(const uint8_t * seed, size_t seedSize, const Network
pubKey.compressed = true;
return 1;
}
// int HDPrivateKey::fromSeed(const uint8_t seed[64], const Network * net){
// int HDPrivateKey::fromSeed(const uint8_t seed[64], const BitcoinNetwork * net){
// fromSeed(seed, 64);
// }
int HDPrivateKey::fromMnemonic(const char * mnemonic, size_t mnemonicSize, const char * password, size_t passwordSize, const Network * net, void (*progress_callback)(float)){
int HDPrivateKey::fromMnemonic(const char * mnemonic, size_t mnemonicSize, const char * password, size_t passwordSize, const BitcoinNetwork * net, void (*progress_callback)(float)){
init();
uint8_t seed[64] = { 0 };
uint8_t ind[4] = { 0, 0, 0, 1 };
Expand Down Expand Up @@ -289,7 +289,7 @@ int HDPrivateKey::fromMnemonic(const char * mnemonic, size_t mnemonicSize, const
return 1;
}
#if USE_ARDUINO_STRING || USE_STD_STRING
int HDPrivateKey::fromMnemonic(String mnemonic, String password, const Network * net, void (*progress_callback)(float)){
int HDPrivateKey::fromMnemonic(String mnemonic, String password, const BitcoinNetwork * net, void (*progress_callback)(float)){
return fromMnemonic(mnemonic.c_str(), mnemonic.length(), password.c_str(), password.length(), net, progress_callback);
}
#endif
Expand Down Expand Up @@ -681,7 +681,7 @@ HDPublicKey::HDPublicKey(const uint8_t p[64],
uint8_t key_depth,
const uint8_t parent_fingerprint_arr[4],
uint32_t child_number,
const Network * net,
const BitcoinNetwork * net,
ScriptType key_type){
reset();
memcpy(point, p, 64);
Expand Down
10 changes: 5 additions & 5 deletions src/Networks.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// all known networks
#include "Networks.h"

const Network Mainnet = {
const BitcoinNetwork Mainnet = {
0x00, // p2pkh
0x05, // p2sh
"bc", // bech32
Expand All @@ -19,7 +19,7 @@ const Network Mainnet = {
0 // bip32 coin type
};

const Network Testnet = {
const BitcoinNetwork Testnet = {
0x6F, // p2pkh
0xC4, // p2sh
"tb", // bech32
Expand All @@ -37,7 +37,7 @@ const Network Testnet = {
1 // bip32 coin type
};

const Network Regtest = {
const BitcoinNetwork Regtest = {
0x6F, // p2pkh
0xC4, // p2sh
"bcrt", // bech32
Expand All @@ -56,7 +56,7 @@ const Network Regtest = {
};

// signet is the same as testnet
const Network Signet = Testnet;
const BitcoinNetwork Signet = Testnet;

const Network * networks[4] = { &Mainnet, &Testnet, &Regtest, &Signet };
const BitcoinNetwork * networks[4] = { &Mainnet, &Testnet, &Regtest, &Signet };
const uint8_t networks_len = 4;
12 changes: 6 additions & 6 deletions src/Networks.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ typedef struct {
uint8_t Zpub[4];
/** \brief bip32 coin index */
uint32_t bip32;
} Network;
} BitcoinNetwork;

extern const Network Mainnet;
extern const Network Testnet;
extern const Network Regtest;
extern const Network Signet;
extern const BitcoinNetwork Mainnet;
extern const BitcoinNetwork Testnet;
extern const BitcoinNetwork Regtest;
extern const BitcoinNetwork Signet;

extern const Network * networks[];
extern const BitcoinNetwork * networks[];
extern const uint8_t networks_len;

#endif // __UBTC_NETWORKS_H__
6 changes: 3 additions & 3 deletions src/Script.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ void Script::fromAddress(const char * address){
return;
}
ScriptType type = UNKNOWN_TYPE;
const Network * network;
const BitcoinNetwork * network;
for(int i=0; i<networks_len; i++){
if(memcmp(address, networks[i]->bech32, strlen(networks[i]->bech32))==0){
type = P2WPKH;
Expand Down Expand Up @@ -364,7 +364,7 @@ ScriptType Script::type() const{
}
return UNKNOWN_TYPE;
}
size_t Script::address(char * buffer, size_t len, const Network * network) const{
size_t Script::address(char * buffer, size_t len, const BitcoinNetwork * network) const{
memset(buffer, 0, len);
if(type() == P2PKH){
uint8_t addr[21];
Expand Down Expand Up @@ -405,7 +405,7 @@ size_t Script::address(char * buffer, size_t len, const Network * network) const
return 0;
}
#if USE_ARDUINO_STRING || USE_STD_STRING
String Script::address(const Network * network) const{
String Script::address(const BitcoinNetwork * network) const{
char buffer[100] = { 0 };
size_t l = address(buffer, sizeof(buffer), network);
if(l == 0){
Expand Down