Skip to content

keycard-tech/shelljs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ShellJS

Keycard Shell Library based on @ledgerhq/hw-app-eth and @ledgerhq/hw-transport.


Who should use ShellJS?

ShellJS permits you to communicate with Keycard Shell through websites and through nodejs-based native applications.


API

Table of Contents

Commands

Ethereum API

Parameters

  • transport Transport

Examples

import ShellJS from "Shelljs";
const cmd = new ShellJS.Commands(transport);

getPublicKey

get public key for a given BIP 32 path.

Parameters
Examples
const resp = await cmd.getPublicKey("44'/60'/0'/0/0");
console.log(resp.address);

Returns Promise<{publicKey: string, address: string, chainCode: string?}> an object with a publicKey, address and (optionally) chainCode

signEthTransaction

sign a transaction and retrieve v, r, s given the raw transaction and the BIP 32 path of the account to sign.

Parameters
  • path string : the BIP32 path to sign the transaction on
  • rawTxHex string : the raw ethereum transaction in hexadecimal to sign
Examples
const tx = "e8018504e3b292008252089428ee52a8f3d6e5d15f8b131996950d7f296c7952872bd72a2487400080"; // raw tx to sign
const resp = cmd.signEthTransaction("44'/60'/0'/0/0", tx);
console.log(resp);

Returns Promise<{s: string, v: string, r: string}>

getAppConfiguration

get firmware and database version installed on device, Keycard Shell serial number and public key.

Examples
const {fwVersion, dbVersion, serialNumber, publicKey} = await cmd.getAppConfiguration();
console.log(fwVersion);
console.log(dbVersion);
console.log(serialNumber);
console.log(publicKey);

Returns Promise<{fwVersion: string, dbVersion: number, serialNumber: string, publicKey: string}>

signPSBT

sign a PSBT and return signed PSBT.

Parameters
  • psbt ArrayBuffer : partially signed bitcoin transaction
Examples
const resp = await cmd.signPSBT(psbt);
console.log(resp);

Returns Promise<ArrayBuffer>

signEthPersonalMessage

sign an Eth personal message and retrieve v, r, s given the message and the BIP 32 path of the account to sign.

Parameters
  • path string
  • pMessage string
  • enc string? : buffer encoding, optional parameter, default: "utf-8"
Examples
const resp = await cmd.signEthPersonalMessage("44'/60'/0'/0/0", "Hello world!");
let v = resp['v'] - 27;
v = v.toString(16);
if (v.length < 2) {
  v = "0" + v;
}
console.log("Signature 0x" + resp['r'] + resp['s'] + v);

Returns Promise<{v: number, s: string, r: string}>

signEIP712Message

sign an EIP-712 formatted message

Parameters
  • path String derivationPath
  • jsonMessage Object message to sign
Examples
const resp = await cmd.signEIP712Message("44'/60'/0'/0/0", {
domain: {
chainId: 69,
name: "Da Domain",
verifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC",
version: "1"
},
types: {
"EIP712Domain": [
{ name: "name", type: "string" },
{ name: "version", type: "string" },
{ name: "chainId", type: "uint256" },
{ name: "verifyingContract", type: "address" }
],
"Test": [
{ name: "contents", type: "string" }
]
},
primaryType: "Test",
message: {contents: "Hello, Bob!"},
});

Returns Promise<{v: number, s: string, r: string}>

loadFirmware

load Keycard Shell firmware

Parameters
Examples
const fs = require('fs'),
let f = fs.readFileSync('./firmware.bin');
let fw = new Uint8Array(f);
await cmd.loadFirmware(fw);

Returns Promise<number>

loadDatabase

load Keycard Shell database

Parameters
Examples
const fs = require('fs'),
let f = fs.readFileSync('./db.bin');
let db = new Uint8Array(f);
await cmd.loadDatabase(db);

Returns Promise<number>

Live Demo

You can check a demo at Shell Web HID Example Page.

About

Keycard Shell Communication Layer

Resources

Stars

Watchers

Forks

Packages

No packages published