Skip to content

Instantly share code, notes, and snippets.

@askaaqib
Created December 15, 2020 11:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save askaaqib/8dc58d575d552b96c30c46f4496b6225 to your computer and use it in GitHub Desktop.
Save askaaqib/8dc58d575d552b96c30c46f4496b6225 to your computer and use it in GitHub Desktop.
BIP32 - Complete Implementation
<?php
declare(strict_types=1);
require "../vendor/autoload.php";
echo "<pre>";
$seed = "000102030405060708090a0b0c0d0e0f";
/** @var $mskobj */
$mskobj = \FurqanSiddiqui\BIP32\BIP32::MasterKey($seed, "256");
echo "<h2>Master Key </h2>";
/** @var $mskBinary */
$mskBinary = $mskobj->raw();
echo "<h4>Binary Object</h4>";
print_r($mskBinary);
/** @var $prvb16 */
$prvb16 = $mskobj->privateKey()->base16();
echo "<h4>Private Key Base16</h4>";
print_r($prvb16);
/** @var $masterCurves */
$masterCurves = $mskobj->curves();
echo "<h4>Curves Object</h4>";
print_r($masterCurves);
/** @var $curveID */
$mskobj->set("curve", 8);
$curveID = $mskobj->privateKey()->getEllipticCurveId();
echo "<h4>Curve ID</h4>";
print_r($curveID);
/** @var $masterDepth */
$masterDepth = $mskobj->depth();
echo "<h4>Depth</h4>";
print_r($masterDepth);
/** @var $derive */
$derive = $mskobj->derive(0x80000000);
echo "<h4>Derive</h4>";
print_r($derive);
/** @var $privateEkd */
echo "<h4>PrivateKey EKD</h4>";
$privateEkd = $mskobj->privateKey()->ekd();
print_r($privateEkd->privateKey()->publicKey());
// DERIVE KEY 1
/** @var $derivedKey1 */
$derivedKey1 = $mskobj->derivePath("m");
echo "<h4>Serialized Public Key (m)</h4>";
print_r($derivedKey1->serializePublicKey(1565));
$srl = $mskobj->serializePrivateKey(0x0488B21E)->base64();
echo "<h4>First Serialize Private Key (m)</h4>";
print_r($srl);
/** @var $serializedPrivateKey1 */
$serializedPrivateKey1 = $derivedKey1->serializePrivateKey(0x0488B21E)->base16();
echo "<h4>Serialized Private Key (m)</h4>";
print_r($serializedPrivateKey1);
/** @var $srlzdPrvtKey1 */
$srlzdPrvtKey1 = $derivedKey1->serializePrivateKey(1);
echo "<h4>Serialized Private Key (m)</h4>";
print_r($srlzdPrvtKey1);
/** @var $chainCode1 */
$chainCode1 = $derivedKey1->chainCode();
echo "<h4>Chain Code (m)</h4>";
print_r($chainCode1);
/** @var $drv1 */
$drv1 = $derivedKey1->derive(1);
echo "<h4>Drive1 (m)</h4>";
print_r($drv1->privateKey()->base16());
/** @var $drv1Parent */
$drv1Parent = $drv1->parent();
echo "<h4>Drive Parent1 (m)</h4>";
print_r($drv1Parent->privateKey()->base16());
die();
// DERIVE KEY 2
/** @var $derivedKey2 */
$derivedKey2 = $mskobj->derivePath("m/0");
echo "<h4>Serialized Public Key2 (m/0)</h4>";
print_r($derivedKey2->serializePublicKey(1565));
/** @var $derivePrivateKey2 */
$derivePrivateKey2 = $derivedKey2->privateKey()->base16();
echo "<h4>Derive Private Key2 (m/0)</h4>";
print_r($derivePrivateKey2);
/** @var $srlzdPrvtKey2 */
$srlzdPrvtKey2 = $derivedKey2->serializePrivateKey(1);
echo "<h4>Serialized Private Key2 (m/0)</h4>";
print_r($srlzdPrvtKey2);
/** @var $chainCode2 */
$chainCode2 = $derivedKey2->chainCode();
echo "<h4>Chain Code2 (m/0)</h4>";
print_r($chainCode2);
/** @var $drv2 */
$drv2 = $derivedKey2->derive(2);
echo "<h4>Drive2 (m/0)</h4>";
print_r($drv2->privateKey()->base16());
/** @var $drv2Parent */
$drv2Parent = $drv2->parent();
echo "<h4>Drive Parent2 (m/0)</h4>";
print_r($drv2Parent->privateKey()->base16());
/** @var $drv2Depth */
$drv2Depth = $drv2->depth();
echo "<h4>Depth Derive2</h4>";
print_r($drv2Depth);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment