Selected BIPs "schematically"
bips_selected |
bips
|
AgamaPoint |
bip39 |
mm_mind |
mm_chart |
iTing |
g_m_s |
G |
+/- BIP39
graph LR;
%% left-right
bin(
randomcoins
dice
cards
...)--binary (base2)
1-6 (base6)
(base52)-->e;
t(
TrezorModel ONE, T)-.->e;
cat(
catropyHW entropy generator)-->e;
e((
entropy.: ..: :.. . ::.
128b/256b ))-->|entropy_to_
phrase|mp[mnemonic phrase
/words];
ests(external
backup)-.restore.->mp;
ests-->e;
e-.export.->ests;
mp-.->ms(master seed);
seed-.->ms;
e-.->ms;
mp-. seed_to_
entropy .->e;
mp-->|mnemo_to_seed|seed((
seedbytes/hex ));
pp( + passphrase).->seed;
mp-.->pp;
t<--init / restore-->mp;
linkStyle 4 stroke:#f00,stroke-width:3px,stroke-dasharray: 5, 5;
linkStyle 5 stroke:#00f,stroke-width:3px,stroke-dasharray: 3, 5;
linkStyle 7 stroke:#555,stroke-width:3px,stroke-dasharray: 2, 5;
linkStyle 8 stroke:#555,stroke-width:3px,stroke-dasharray: 2, 5;
linkStyle 10 stroke:#f00,stroke-width:3px,stroke-dasharray: 5, 5;
linkStyle 14 stroke:#f00,stroke-width:3px;
classDef redB stroke:#f00,stroke-width:3px;
class mp redB;
Mnemonic code for generating deterministic keys -
BIP39
... AgamaPoint Python testing lib:
entropy = entropy_normalize(entropy) # entropy bin, dec or hex // hex_to_bin(e)..
phrase = bip39f.entropy_to_phrase(entropy) # mnemonic phrase == words
binary_seed = phrase_to_key(phrase)
mnemo_seed = mnemo_to_seed(phrase)
seed_bytes = mnemo.to_seed(phrase, passphrase) # hexadecimal_str: seed_bytes.hex()
root_key = create_root_key(seed_bytes)
...
Calculate I = HMAC-SHA512(Key = "Bitcoin seed", Data = S)
Split I into two 32-byte sequences, IL and IR.
Use parse256(IL) as master secret key, and IR as master chain code.
+/- BIP32
graph LR;
seed(( seed
bytes/hex
![e Chat icon](ico/entropy_red.svg)
));
seed-->privk(private key
![sec_k Chat icon](ico/key-fill-r.svg)
);
subgraph simple_tx Alice
TX?;
privk-->|ECC|pubk[public key
![pub_k Chat icon](ico/key-fill-g.svg)
];
privk-->sig(signature
or encrypt
with shared key);
pubk-.->verif(verification);
verif-->yn(yes/no);
msg(message
or hash_msg)-.->sig;
msg-.->verif;
sig-.->verif;
end
pubk-->|SHA-256
Hierarchical
Deterministic
Wallets
|addr(address);
bob(...send BTC to:)-->addr
bob-.P2PK.->pubk
addr-.1***
P2PKH.->std(
BIP44 Standard)
addr-.3***
P2SH.->sqw(
BIP49 Segwit)
addr-.bc1p
P2WPKH.->nsq(
BIP84 New Segwit)
addr-.bc1q.->tap(Taproot)
addr-.bc1x.->etc(...)
classDef plain fill:#ddd,stroke:#fff,stroke-width:3px,color:#000;
classDef k8s fill:#326ce5,stroke:#fff,stroke-width:3px,color:#fff;
classDef cluster fill:#333,stroke:#00ff00,stroke-width:2px,color:#00ff00;
classDef redB stroke:#f00,stroke-width:3px;
classDef bluB stroke:#00f,stroke-width:3px;
classDef greB stroke:#0f0,stroke-width:3px;
class service,pod1,pod2 k8s;
class client plain;
class cluster cluster;
class privk redB;
class pubk bluB;
class addr greB;
Hierarchical Deterministic Wallets -
BIP32
m / purpose’ / coin_type’ / account’ / change / address_index
coin = Bitcoin() # Main default
# BIP39-BIP44 | Standard Wallets
# Multi-Account Hierarchy for Deterministic Wallets
wallet = coin.wallet(words)
addr0 = wallet.new_receiving_address()
# BIP39-BIP49 | Segwit Wallets
# Derivation scheme for P2WPKH-nested-in-P2SH based accounts
wallet = coin.p2wpkh_p2sh_wallet(words)
...
# BIP39-BIP84 | New Segwit Wallets
# Derivation scheme for P2WPKH based accounts
wallet = coin.p2wpkh_wallet(words)
...
mm_bips |
mm_mind |
mm_chart |
github/mermaid |
diagram gide |
live/edit |
py/agama_point_crypto