Nano cryptocurrency C library with P2PoW/DPoW support  1.0.0
f_bitcoin.h
Go to the documentation of this file.
1 #include <mbedtls/bignum.h>
2 
3 #define F_BITCOIN_WIF_MAINNET (uint8_t)0x80
4 #define F_BITCOIN_WIF_TESTNET (uint8_t)0xEF
5 #define F_BITCOIN_P2PKH (uint8_t)0x00 // P2PKH address
6 #define F_BITCOIN_T2PKH (uint8_t)0x6F // Testnet Address
7 #define F_BITCOIN_BUF_SZ (size_t)512
8 #define F_MAX_BASE58_LENGTH (size_t)112//52 // including null char
9 #define F_BITCOIN_SEED_GENERATOR "Bitcoin seed"
10 
11 #define MAINNET_PUBLIC (size_t)0
12 #define MAINNET_PRIVATE (size_t)1
13 #define TESTNET_PUBLIC (size_t)2
14 #define TESTNET_PRIVATE (size_t)3
15 
16 static const uint8_t F_VERSION_BYTES[][4] = {
17  {0x04, 0x88, 0xB2, 0x1E}, //mainnet public
18  {0x04, 0x88, 0xAD, 0xE4}, //mainnet private
19  {0x04, 0x35, 0x87, 0xCF}, //testnet public
20  {0x04, 0x35, 0x83, 0x94} // testnet private
21 };
22 #define F_VERSION_BYTES_IDX_LEN (size_t)(sizeof(F_VERSION_BYTES)/(4*sizeof(uint8_t)))
23 
24 typedef struct f_bitcoin_serialize_t {
25  uint8_t version_bytes[4];
26  uint8_t master_node;
27  uint8_t finger_print[4];
28  uint8_t child_number[4];
29  uint8_t chain_code[32];
30  uint8_t sk_or_pk_data[33];
31  uint8_t chksum[4];
32 } __attribute__((packed)) BITCOIN_SERIALIZE;
33 
34 int f_decode_b58_util(uint8_t *, size_t, size_t *, const char *);
35 int f_encode_b58(char *, size_t, size_t *, uint8_t *, size_t);
36 int f_private_key_to_wif(char *, size_t, size_t *, uint8_t, uint8_t *);
37 int f_wif_to_private_key(uint8_t *, unsigned char *, const char *);
38 int f_generate_master_key(BITCOIN_SERIALIZE *, size_t, uint32_t);
39 int f_bitcoin_valid_bip32(BITCOIN_SERIALIZE *, int *, void *, int);
40 int f_uncompress_elliptic_curve(uint8_t *, size_t, size_t *, mbedtls_ecp_group_id, uint8_t *, size_t);
42  uint8_t *,
43  int *,
44  uint8_t *,
45  uint8_t *,
46  uint8_t *,
47  uint32_t,
48  const void *,
49  int
50 );
51 int f_public_key_to_address(char *, size_t, size_t *, uint8_t *, uint8_t);
52 #define F_XPRIV_BASE58 (int)1
53 #define F_XPUB_BASE58 (int)2
54 int f_xpriv2xpub(void *, size_t, size_t *, void *, int);
55 int load_master_private_key(void *, unsigned char *, size_t);
56 int f_fingerprint(uint8_t *, uint8_t *, uint8_t *);
57 
58 #define DERIVE_XPRIV_XPUB_DYN_OUT_BASE58 (int)8
59 #define DERIVE_XPRIV_XPUB_DYN_OUT_XPRIV (int)16
60 #define DERIVE_XPRIV_XPUB_DYN_OUT_XPUB (int)32
61 
62 #define F_GET_XKEY_IS_BASE58 (int)0x00008000
63 int f_get_xkey_type(void *);
64 int f_derive_xpriv_or_xpub_dynamic(void **, uint8_t *, uint32_t *, void *, uint32_t, int);
65 int f_derive_xkey_dynamic(void **, void *, const char *, int);
67 
73 
75  MK_128 = 16,
76  MK_256 = 32,
77  MK_512 = 64
79 
80 ERROR_LOAD_FROM_MASTER_KEY_FROM_ENTROPY_BITS
82  BITCOIN_SERIALIZE *,
83  size_t,
84  const uint8_t *,
86 );
87 
int f_uncompress_elliptic_curve(uint8_t *, size_t, size_t *, mbedtls_ecp_group_id, uint8_t *, size_t)
struct f_bitcoin_serialize_t __attribute__((packed)) BITCOIN_SERIALIZE
uint8_t chksum[4]
Definition: f_bitcoin.h:31
uint8_t sk_or_pk_data[33]
Definition: f_bitcoin.h:30
int f_wif_to_private_key(uint8_t *, unsigned char *, const char *)
enum error_load_master_key_from_entropy_bits_e ERROR_LOAD_FROM_MASTER_KEY_FROM_ENTROPY_BITS
int f_bitcoin_valid_bip32(BITCOIN_SERIALIZE *, int *, void *, int)
master_key_entropy_bits_e
Definition: f_bitcoin.h:74
int f_decode_b58_util(uint8_t *, size_t, size_t *, const char *)
int f_public_key_to_address(char *, size_t, size_t *, uint8_t *, uint8_t)
int f_derive_xpriv_or_xpub_dynamic(void **, uint8_t *, uint32_t *, void *, uint32_t, int)
uint8_t chain_code[32]
Definition: f_bitcoin.h:29
int f_xpriv2xpub(void *, size_t, size_t *, void *, int)
int f_get_xkey_type(void *)
error_load_master_key_from_entropy_bits_e
Definition: f_bitcoin.h:68
uint8_t finger_print[4]
Definition: f_bitcoin.h:27
int f_private_key_to_wif(char *, size_t, size_t *, uint8_t, uint8_t *)
int f_generate_master_key(BITCOIN_SERIALIZE *, size_t, uint32_t)
int f_encode_b58(char *, size_t, size_t *, uint8_t *, size_t)
int f_fingerprint(uint8_t *, uint8_t *, uint8_t *)
int f_check_if_invalid_btc_public_key(uint8_t *)
uint8_t child_number[4]
Definition: f_bitcoin.h:28
static const uint8_t F_VERSION_BYTES[][4]
Definition: f_bitcoin.h:16
enum master_key_entropy_bits_e MASTER_KEY_ENTROPY_BITS
int load_master_private_key(void *, unsigned char *, size_t)
uint8_t version_bytes[4]
Definition: f_bitcoin.h:25
int f_derive_xkey_dynamic(void **, void *, const char *, int)
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)
int f_bip32_to_public_key_or_private_key(uint8_t *, int *, uint8_t *, uint8_t *, uint8_t *, uint32_t, const void *, int)