<?php use BitWasp\BitcoinLib\BitcoinLib; use BitWasp\BitcoinLib\Electrum; require_once __DIR__ . '/../vendor/autoload.php'; $magic_byte = '00'; $string = trim('teach start paradise collect blade chill gay childhood creek picture creator branch'); $seed = Electrum::decode_mnemonic($string); echo "Words: {$string}\n"; echo "Seed: {$seed}\n"; $secexp = Electrum::stretch_seed($seed); $secexp = $secexp['seed']; echo "Secret Exponent: {$secexp}\n"; $mpk = Electrum::generate_mpk($seed); echo "MPK: {$mpk}\n"; for ($i = 0; $i < 5; $i++) { $privkey = Electrum::generate_private_key($secexp, $i, 0); echo "Private key: {$privkey}\n"; echo "Private WIF: " . BitcoinLib::private_key_to_WIF($privkey, FALSE, $magic_byte) . "\n"; $public_key = Electrum::public_key_from_mpk($mpk, $i); echo "Public Key: {$public_key}\n"; $address = BitcoinLib::public_key_to_address($public_key, $magic_byte); echo "Public derivation: {$address}.\n"; $address = BitcoinLib::private_key_to_address($privkey, $magic_byte); echo "Private derivation: {$address}.\n"; echo "-----------\n"; }
public function testGetPrivKeyWif() { $cnt = (getenv('BITCOINLIB_EXTENSIVE_TESTING') ?: 1) * 5; for ($i = 0; $i < $cnt; $i++) { $hex = (string) str_pad(bin2hex(mcrypt_create_iv(32, \MCRYPT_DEV_URANDOM)), 64, '0', STR_PAD_LEFT); // create private key and WIF $wif = BitcoinLib::private_key_to_WIF($hex, FALSE, $this->addressVersion); $key = BitcoinLib::WIF_to_private_key($wif); $this->assertTrue($key['key'] == $hex); // create private key and WIF, without specifying address version $wif = BitcoinLib::private_key_to_WIF($hex, FALSE); $key = BitcoinLib::WIF_to_private_key($wif); $this->assertTrue($key['key'] == $hex); } }
$seed = $seed['seed']; $master_public_key = Electrum::generate_mpk($seed); $private_keys = array(); $have_keys = 0; $done = FALSE; // Loop until the user is satisfied they have found all keys. $j = 0; $offset = 30; while ($done == FALSE) { $start = $offset * $j; echo "Trying keys {$start} to " . ($start + $offset) . "\n"; // Do public derivation to learn which private keys to derive. for ($i = $start; $i < $start + $offset; $i++) { $pubkey = Electrum::public_key_from_mpk($master_public_key, $i); if (in_array($pubkey, $decode_redeem_script['keys'])) { $private_keys[] = BitcoinLib::private_key_to_WIF(Electrum::generate_private_key($seed, $i), FALSE, '00'); $have_keys++; } if ($have_keys == $decode_redeem_script['m']) { $done = TRUE; break; } } $j++; // See if we should continue searching. $ask = FALSE; if ($done == FALSE) { echo "Have " . count($private_keys) . " private keys we can sign with. Look for more? (y/n) "; while ($ask == FALSE) { switch (trim(fgets(STDIN))) { case 'y':