Created
February 5, 2022 19:44
-
-
Save drewhaines/594666b1ffea198f6bb4eb18e7aee5c2 to your computer and use it in GitHub Desktop.
This is a Node.js script to convert a bech32 Bip32PrivateKey into the cborHex values required by cardanocli-js. Note the types must be set correctly for the corresponding keys (PaymentExtendedSigningKeyShelley_ed25519_bip32 vs PaymentVerificationKeyShelley_ed25519)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var S = require("@emurgo/cardano-serialization-lib-nodejs") | |
require("dotenv").config() | |
var cbor = require("cbor") | |
walletKey = process.env.TEST_WALLET_KEY | |
// example | |
// xprv1jrxh123412341234123412341234123412341234123412341234123412341234123412341234123412341234123412341234123412341234123412341234123412341234123412341234123412342kzx | |
function harden(num) { | |
return 0x80000000 + num | |
} | |
rootKey = S.Bip32PrivateKey.from_bech32(walletKey) | |
privateKey = rootKey.derive(harden(1852)).derive(harden(1815)).derive(harden(0)) | |
publicKey = privateKey.to_public() | |
paymentKey = privateKey.derive(0).derive(0) | |
pubPaymentKey = publicKey.derive(0).derive(0) | |
stakeKey = privateKey.derive(2).derive(0) | |
pubStakeKey = publicKey.derive(2).derive(0) | |
paymentSKeyRaw = paymentKey.to_raw_key() | |
paymentVKeyRaw = pubPaymentKey.to_raw_key() | |
stakeSKeyRaw = stakeKey.to_raw_key() | |
stakeVKeyRaw = pubStakeKey.to_raw_key() | |
paymentVKeyHashRaw = paymentVKeyRaw.hash() | |
stakeVKeyHashRaw = stakeVKeyRaw.hash() | |
baseAddr = S.BaseAddress.new( | |
1, | |
S.StakeCredential.from_keyhash(paymentVKeyHashRaw), | |
S.StakeCredential.from_keyhash(stakeVKeyHashRaw) | |
) | |
address = baseAddr.to_address() | |
addy = address.to_bech32() | |
// payment.skey | |
// type: PaymentExtendedSigningKeyShelley_ed25519_bip32 | |
sKeyPay = cbor.encode(paymentKey.to_128_xprv()).toString("hex").slice(4) | |
// payment.vkey | |
// type: PaymentVerificationKeyShelley_ed25519 | |
vKeyPay = cbor.encode(paymentVKeyRaw.as_bytes()).toString("hex").slice(4) | |
// stake.skey | |
// type: StakeExtendedSigningKeyShelley_ed25519_bip32 | |
sKeyStake = cbor.encode(stakeKey.to_128_xprv()).toString("hex").slice(4) | |
// payment.vkey | |
// type: PaymentVerificationKeyShelley_ed25519 | |
vKeyStake = cbor.encode(stakeVKeyRaw.as_bytes()).toString("hex").slice(4) | |
// entries for cardanocli-js wallets in /priv/wallet/WalletName | |
console.log(`addy - ${addy}`) | |
console.log(`payment.skey - ${sKeyPay}`) | |
console.log(`payment.vkey - ${vKeyPay}`) | |
console.log(`stake.skey - ${sKeyStake}`) | |
console.log(`stake.vkey - ${vKeyStake}`) | |
// Cardano address keys explained here | |
// https://github.com/Emurgo/cardano-serialization-lib/blob/master/doc/getting-started/generating-keys.md | |
// Notes on PaymentExtendedSigningKeyShelley_ed25519_bip32 | |
// Create extended signing key using cardano-cli | |
// cardano-cli key convert-cardano-address-key --shelley-payment-key --signing-key-file key.xsk --out-file key.skey | |
// { | |
// "type": "PaymentExtendedSigningKeyShelley_ed25519_bip32", | |
// "description": "", | |
// "cborHex": "5880b0bf46232c7f0f58ad333030e43ffbea7c2bb6f8135bd05fb0d343ade8453c5eacc7ac09f77e16b635832522107eaa9f56db88c615f537aa6025e6c23da98ae8fbbbf6410e24532f35e9279febb085d2cc05b3b2ada1df77ea1951eb694f3834b0be1868d1c36ef9089b3b094f5fe1d783e4d5fea14e2034c0397bee50e65a1a" | |
// } | |
// The cborhex here contains of 4 parts: | |
// 1. prefix 5880 - bytestring of 128 bytes | |
// 2. signing key (64 bytes) - b0bf46232c7f0f58ad333030e43ffbea7c2bb6f8135bd05fb0d343ade8453c5eacc7ac09f77e16b635832522107eaa9f56db88c615f537aa6025e6c23da98ae8 | |
// 3. verification key (32 bytes) - fbbbf6410e24532f35e9279febb085d2cc05b3b2ada1df77ea1951eb694f3834 | |
// 4. chain code (32 bytes) - b0be1868d1c36ef9089b3b094f5fe1d783e4d5fea14e2034c0397bee50e65a1a |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment