Nano cryptocurrency C library with P2PoW/DPoW support  1.0.0
f_bitcoin.h File Reference
#include <mbedtls/bignum.h>

Go to the source code of this file.

Data Structures

struct  f_bitcoin_serialize_t
 

Macros

#define F_BITCOIN_WIF_MAINNET   (uint8_t)0x80
 
#define F_BITCOIN_WIF_TESTNET   (uint8_t)0xEF
 
#define F_BITCOIN_P2PKH   (uint8_t)0x00
 
#define F_BITCOIN_T2PKH   (uint8_t)0x6F
 
#define F_BITCOIN_BUF_SZ   (size_t)512
 
#define F_MAX_BASE58_LENGTH   (size_t)112
 
#define F_BITCOIN_SEED_GENERATOR   "Bitcoin seed"
 
#define MAINNET_PUBLIC   (size_t)0
 
#define MAINNET_PRIVATE   (size_t)1
 
#define TESTNET_PUBLIC   (size_t)2
 
#define TESTNET_PRIVATE   (size_t)3
 
#define F_VERSION_BYTES_IDX_LEN   (size_t)(sizeof(F_VERSION_BYTES)/(4*sizeof(uint8_t)))
 
#define F_XPRIV_BASE58   (int)1
 
#define F_XPUB_BASE58   (int)2
 
#define DERIVE_XPRIV_XPUB_DYN_OUT_BASE58   (int)8
 
#define DERIVE_XPRIV_XPUB_DYN_OUT_XPRIV   (int)16
 
#define DERIVE_XPRIV_XPUB_DYN_OUT_XPUB   (int)32
 
#define F_GET_XKEY_IS_BASE58   (int)0x00008000
 

Typedefs

typedef enum error_load_master_key_from_entropy_bits_e ERROR_LOAD_FROM_MASTER_KEY_FROM_ENTROPY_BITS
 
typedef enum master_key_entropy_bits_e MASTER_KEY_ENTROPY_BITS
 

Enumerations

enum  error_load_master_key_from_entropy_bits_e { ERR_INVALID_ENTROPY_BITS = 20300, ERR_INVALID_VERSION_BYTES, ERR_MASTER_KEY_FROM_ENTROPY_ALLOC }
 
enum  master_key_entropy_bits_e { MK_128 = 16, MK_256 = 32, MK_512 = 64 }
 

Functions

struct f_bitcoin_serialize_t __attribute__ ((packed)) BITCOIN_SERIALIZE
 
int f_decode_b58_util (uint8_t *, size_t, size_t *, const char *)
 
int f_encode_b58 (char *, size_t, size_t *, uint8_t *, size_t)
 
int f_private_key_to_wif (char *, size_t, size_t *, uint8_t, uint8_t *)
 
int f_wif_to_private_key (uint8_t *, unsigned char *, const char *)
 
int f_generate_master_key (BITCOIN_SERIALIZE *, size_t, uint32_t)
 
int f_bitcoin_valid_bip32 (BITCOIN_SERIALIZE *, int *, void *, int)
 
int f_uncompress_elliptic_curve (uint8_t *, size_t, size_t *, mbedtls_ecp_group_id, uint8_t *, size_t)
 
int f_bip32_to_public_key_or_private_key (uint8_t *, int *, uint8_t *, uint8_t *, uint8_t *, uint32_t, const void *, int)
 
int f_public_key_to_address (char *, size_t, size_t *, uint8_t *, uint8_t)
 
int f_xpriv2xpub (void *, size_t, size_t *, void *, int)
 
int load_master_private_key (void *, unsigned char *, size_t)
 
int f_fingerprint (uint8_t *, uint8_t *, uint8_t *)
 
int f_get_xkey_type (void *)
 
int f_derive_xpriv_or_xpub_dynamic (void **, uint8_t *, uint32_t *, void *, uint32_t, int)
 
int f_derive_xkey_dynamic (void **, void *, const char *, int)
 
int f_check_if_invalid_btc_public_key (uint8_t *)
 
ERROR_LOAD_FROM_MASTER_KEY_FROM_ENTROPY_BITS f_load_from_master_key_from_entropy_bits (BITCOIN_SERIALIZE *, size_t, const uint8_t *, MASTER_KEY_ENTROPY_BITS)
 

Variables

static const uint8_t F_VERSION_BYTES [][4]
 
uint8_t version_bytes [4]
 
uint8_t master_node
 
uint8_t finger_print [4]
 
uint8_t child_number [4]
 
uint8_t chain_code [32]
 
uint8_t sk_or_pk_data [33]
 
uint8_t chksum [4]
 

Macro Definition Documentation

◆ DERIVE_XPRIV_XPUB_DYN_OUT_BASE58

#define DERIVE_XPRIV_XPUB_DYN_OUT_BASE58   (int)8

Definition at line 58 of file f_bitcoin.h.

◆ DERIVE_XPRIV_XPUB_DYN_OUT_XPRIV

#define DERIVE_XPRIV_XPUB_DYN_OUT_XPRIV   (int)16

Definition at line 59 of file f_bitcoin.h.

◆ DERIVE_XPRIV_XPUB_DYN_OUT_XPUB

#define DERIVE_XPRIV_XPUB_DYN_OUT_XPUB   (int)32

Definition at line 60 of file f_bitcoin.h.

◆ F_BITCOIN_BUF_SZ

#define F_BITCOIN_BUF_SZ   (size_t)512

Definition at line 7 of file f_bitcoin.h.

◆ F_BITCOIN_P2PKH

#define F_BITCOIN_P2PKH   (uint8_t)0x00

Definition at line 5 of file f_bitcoin.h.

◆ F_BITCOIN_SEED_GENERATOR

#define F_BITCOIN_SEED_GENERATOR   "Bitcoin seed"

Definition at line 9 of file f_bitcoin.h.

◆ F_BITCOIN_T2PKH

#define F_BITCOIN_T2PKH   (uint8_t)0x6F

Definition at line 6 of file f_bitcoin.h.

◆ F_BITCOIN_WIF_MAINNET

#define F_BITCOIN_WIF_MAINNET   (uint8_t)0x80

Definition at line 3 of file f_bitcoin.h.

◆ F_BITCOIN_WIF_TESTNET

#define F_BITCOIN_WIF_TESTNET   (uint8_t)0xEF

Definition at line 4 of file f_bitcoin.h.

◆ F_GET_XKEY_IS_BASE58

#define F_GET_XKEY_IS_BASE58   (int)0x00008000

Definition at line 62 of file f_bitcoin.h.

◆ F_MAX_BASE58_LENGTH

#define F_MAX_BASE58_LENGTH   (size_t)112

Definition at line 8 of file f_bitcoin.h.

◆ F_VERSION_BYTES_IDX_LEN

#define F_VERSION_BYTES_IDX_LEN   (size_t)(sizeof(F_VERSION_BYTES)/(4*sizeof(uint8_t)))

Definition at line 22 of file f_bitcoin.h.

◆ F_XPRIV_BASE58

#define F_XPRIV_BASE58   (int)1

Definition at line 52 of file f_bitcoin.h.

◆ F_XPUB_BASE58

#define F_XPUB_BASE58   (int)2

Definition at line 53 of file f_bitcoin.h.

◆ MAINNET_PRIVATE

#define MAINNET_PRIVATE   (size_t)1

Definition at line 12 of file f_bitcoin.h.

◆ MAINNET_PUBLIC

#define MAINNET_PUBLIC   (size_t)0

Definition at line 11 of file f_bitcoin.h.

◆ TESTNET_PRIVATE

#define TESTNET_PRIVATE   (size_t)3

Definition at line 14 of file f_bitcoin.h.

◆ TESTNET_PUBLIC

#define TESTNET_PUBLIC   (size_t)2

Definition at line 13 of file f_bitcoin.h.

Typedef Documentation

◆ ERROR_LOAD_FROM_MASTER_KEY_FROM_ENTROPY_BITS

◆ MASTER_KEY_ENTROPY_BITS

Enumeration Type Documentation

◆ error_load_master_key_from_entropy_bits_e

Enumerator
ERR_INVALID_ENTROPY_BITS 
ERR_INVALID_VERSION_BYTES 
ERR_MASTER_KEY_FROM_ENTROPY_ALLOC 

Definition at line 68 of file f_bitcoin.h.

◆ master_key_entropy_bits_e

Enumerator
MK_128 
MK_256 
MK_512 

Definition at line 74 of file f_bitcoin.h.

Function Documentation

◆ __attribute__()

struct f_nano_wallet_info_t __attribute__ ( (packed)  )

◆ f_bip32_to_public_key_or_private_key()

int f_bip32_to_public_key_or_private_key ( uint8_t *  ,
int *  ,
uint8_t *  ,
uint8_t *  ,
uint8_t *  ,
uint32_t  ,
const void *  ,
int   
)

◆ f_bitcoin_valid_bip32()

int f_bitcoin_valid_bip32 ( BITCOIN_SERIALIZE *  ,
int *  ,
void *  ,
int   
)

◆ f_check_if_invalid_btc_public_key()

int f_check_if_invalid_btc_public_key ( uint8_t *  )

◆ f_decode_b58_util()

int f_decode_b58_util ( uint8_t *  ,
size_t  ,
size_t *  ,
const char *   
)

◆ f_derive_xkey_dynamic()

int f_derive_xkey_dynamic ( void **  ,
void *  ,
const char *  ,
int   
)

◆ f_derive_xpriv_or_xpub_dynamic()

int f_derive_xpriv_or_xpub_dynamic ( void **  ,
uint8_t *  ,
uint32_t *  ,
void *  ,
uint32_t  ,
int   
)

◆ f_encode_b58()

int f_encode_b58 ( char *  ,
size_t  ,
size_t *  ,
uint8_t *  ,
size_t   
)

◆ f_fingerprint()

int f_fingerprint ( uint8_t *  ,
uint8_t *  ,
uint8_t *   
)

◆ f_generate_master_key()

int f_generate_master_key ( BITCOIN_SERIALIZE *  ,
size_t  ,
uint32_t   
)

◆ f_get_xkey_type()

int f_get_xkey_type ( void *  )

◆ f_load_from_master_key_from_entropy_bits()

ERROR_LOAD_FROM_MASTER_KEY_FROM_ENTROPY_BITS f_load_from_master_key_from_entropy_bits ( BITCOIN_SERIALIZE *  ,
size_t  ,
const uint8_t *  ,
MASTER_KEY_ENTROPY_BITS   
)

◆ f_private_key_to_wif()

int f_private_key_to_wif ( char *  ,
size_t  ,
size_t *  ,
uint8_t  ,
uint8_t *   
)

◆ f_public_key_to_address()

int f_public_key_to_address ( char *  ,
size_t  ,
size_t *  ,
uint8_t *  ,
uint8_t   
)

◆ f_uncompress_elliptic_curve()

int f_uncompress_elliptic_curve ( uint8_t *  ,
size_t  ,
size_t *  ,
mbedtls_ecp_group_id  ,
uint8_t *  ,
size_t   
)

◆ f_wif_to_private_key()

int f_wif_to_private_key ( uint8_t *  ,
unsigned char *  ,
const char *   
)

◆ f_xpriv2xpub()

int f_xpriv2xpub ( void *  ,
size_t  ,
size_t *  ,
void *  ,
int   
)

◆ load_master_private_key()

int load_master_private_key ( void *  ,
unsigned char *  ,
size_t   
)

Variable Documentation

◆ chain_code

uint8_t chain_code[32]

Definition at line 21 of file f_bitcoin.h.

◆ child_number

uint8_t child_number[4]

Definition at line 20 of file f_bitcoin.h.

◆ chksum

uint8_t chksum[4]

Definition at line 23 of file f_bitcoin.h.

◆ F_VERSION_BYTES

const uint8_t F_VERSION_BYTES[][4]
static
Initial value:
= {
{0x04, 0x88, 0xB2, 0x1E},
{0x04, 0x88, 0xAD, 0xE4},
{0x04, 0x35, 0x87, 0xCF},
{0x04, 0x35, 0x83, 0x94}
}

Definition at line 16 of file f_bitcoin.h.

◆ finger_print

uint8_t finger_print[4]

Definition at line 19 of file f_bitcoin.h.

◆ master_node

uint8_t master_node

Definition at line 18 of file f_bitcoin.h.

◆ sk_or_pk_data

uint8_t sk_or_pk_data[33]

Definition at line 22 of file f_bitcoin.h.

◆ version_bytes

uint8_t version_bytes[4]

Definition at line 17 of file f_bitcoin.h.