Skip to content

Instantly share code, notes, and snippets.

@drewhaines
Created February 5, 2022 19:44
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 drewhaines/594666b1ffea198f6bb4eb18e7aee5c2 to your computer and use it in GitHub Desktop.
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)
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