"imports": {
"#dist/*": "./dist/*",
"#src/*": "./src/*",
+ "#types": "./src/types.d.ts",
"#workers": "./src/lib/workers/index.js"
},
"dependencies": {
method: 'convert'\r
}\r
const data = {\r
- privateKey: privateKey.buffer\r
+ privateKey: new Uint8Array(privateKey).buffer\r
}\r
const result = await NanoNaClWorker.add(headers, data)\r
- publicKey = bytes.toHex(new Uint8Array(result.publicKey))\r
+ publicKey = result[0]\r
} catch (err) {\r
throw new Error(`Failed to derive public key from private key`, { cause: err })\r
}\r
if (id == null || id !== this.#pub) {\r
throw null\r
}\r
+ debugger\r
this.#prv.set(obj.toBytes(privateKey))\r
} catch (err) {\r
console.error(`Failed to unlock account ${this.address}`, err)\r
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
// SPDX-License-Identifier: GPL-3.0-or-later AND ISC
+import { UnknownNumber, UnknownUint8Array } from "#types"
+
/**
* Implementation derived from blake2b@2.1.4. Copyright 2017 Emil Bay
* <github@tixz.dk> (https://github.com/emilbayes/blake2b). See LICENSES/ISC.txt
* Original source commit: https://github.com/emilbayes/blake2b/blob/1f63e02e3f226642959506cdaa67c8819ff145cd/index.js
*/
-type UnknownNumber = number | unknown
-type UnknownUint8Array = Uint8Array | unknown
-
export class Blake2b {
static get OUTBYTES_MIN (): 1 { return 1 }
static get OUTBYTES_MAX (): 64 { return 64 }
import { Account } from './account'
-type RolodexEntry = {
+
+export type RolodexEntry = {
name: string
account: Account
}
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>\r
// SPDX-License-Identifier: GPL-3.0-or-later\r
\r
-import { KeyPair, Wallet } from '.'\r
+import { Wallet } from '.'\r
import { Bip39Mnemonic } from '#src/lib/bip39-mnemonic.js'\r
import { SEED_LENGTH_BIP44 } from '#src/lib/constants.js'\r
-import { hex, utf8 } from '#src/lib/convert.js'\r
+import { bytes, hex, utf8 } from '#src/lib/convert.js'\r
import { Entropy } from '#src/lib/entropy.js'\r
+import { KeyPair } from '#types'\r
import { Bip44CkdWorker } from '#workers'\r
\r
/**\r
const data = {\r
seed: hex.toBytes(this.seed).buffer\r
}\r
- const privateKeys: KeyPair[] = await Bip44CkdWorker.add(headers, data)\r
- for (let i = 0; i < privateKeys.length; i++) {\r
- if (privateKeys[i].privateKey == null) {\r
+ const results = (await Bip44CkdWorker.add(headers, data))[0]\r
+ const privateKeys: KeyPair[] = []\r
+ for (const i of Object.keys(results)) {\r
+ if (results[i] == null || !(results[i] instanceof ArrayBuffer)) {\r
throw new Error('Failed to derive private keys')\r
}\r
+ const keyBytes = new Uint8Array(results[i])\r
+ privateKeys.push({ index: +i, privateKey: bytes.toHex(keyBytes) })\r
}\r
return privateKeys\r
}\r
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>\r
// SPDX-License-Identifier: GPL-3.0-or-later\r
\r
-import { KeyPair, Wallet } from '.'\r
+import { Wallet } from '.'\r
import { Bip39Mnemonic } from '#src/lib/bip39-mnemonic.js'\r
import { Blake2b } from '#src/lib/blake2b.js'\r
import { SEED_LENGTH_BLAKE2B } from '#src/lib/constants.js'\r
-import { bytes, hex, utf8 } from '#src/lib/convert.js'\r
+import { hex, utf8 } from '#src/lib/convert.js'\r
import { Entropy } from '#src/lib/entropy.js'\r
+import { KeyPair } from '#types'\r
\r
/**\r
* BLAKE2b wallet created by deriving a mnemonic phrase from a seed or vice\r
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>\r
// SPDX-License-Identifier: GPL-3.0-or-later\r
\r
-export type { KeyPair } from './wallet'\r
export { Wallet } from './wallet'\r
export { Bip44Wallet } from './bip44-wallet'\r
export { Blake2bWallet } from './blake2b-wallet'\r
import { default as TransportBLE } from '@ledgerhq/hw-transport-web-ble'\r
import { default as TransportUSB } from '@ledgerhq/hw-transport-webusb'\r
import { default as TransportHID } from '@ledgerhq/hw-transport-webhid'\r
-import { KeyPair, Wallet } from '.'\r
+import { Wallet } from '.'\r
import { ChangeBlock, ReceiveBlock, SendBlock } from '#src/lib/block.js'\r
import { BIP44_COIN_NANO, BIP44_PURPOSE, HARDENED_OFFSET, LEDGER_ADPU_CODES, LEDGER_STATUS_CODES } from '#src/lib/constants.js'\r
import { bytes, dec, hex } from '#src/lib/convert.js'\r
import { Entropy } from '#src/lib/entropy.js'\r
import { Rpc } from '#src/lib/rpc.js'\r
+import { KeyPair } from '#types'\r
\r
type DeviceStatus = 'DISCONNECTED' | 'BUSY' | 'LOCKED' | 'CONNECTED'\r
\r
import { bytes, utf8 } from '#src/lib/convert.js'\r
import { Entropy } from '#src/lib/entropy.js'\r
import { Rpc } from '#src/lib/rpc.js'\r
-import { Data, SafeWorker } from '#workers'\r
-\r
-export type KeyPair = {\r
- publicKey?: string,\r
- privateKey?: string,\r
- index?: number\r
-}\r
+import { Data, KeyPair } from '#types'\r
+import { SafeWorker } from '#workers'\r
\r
/**\r
* Represents a wallet containing numerous Nano accounts derived from a single\r
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { Data, Headers } from '.'
import { WorkerInterface } from './worker-interface'
+import { Data, Headers } from '#types'
type ExtendedKey = {
privateKey: DataView<ArrayBuffer>
Bip44Ckd.listen()
}
- static async work (headers: Headers, data: Data): Promise<any[]> {
+ static async work (headers: Headers, data: Data): Promise<Data> {
let { coin, indexes } = headers
let { seed } = data
if (coin != null && (typeof coin !== 'number' || !Number.isInteger(coin))) {
throw new TypeError('BIP-44 coin derivation level must be an integer')
}
if (!Array.isArray(indexes)) indexes = [indexes]
- const privateKeys: ArrayBuffer[] = []
+ const privateKeys: Data = {}
for (const i of indexes) {
if (typeof i !== 'number' || !Number.isInteger(i)) {
throw new TypeError('BIP-44 account derivation level must be an integer')
}
try {
const pk = await this.ckd(seed, coin, i)
- privateKeys.push(pk)
+ privateKeys[i] = pk
} catch (err) {
console.log(err)
}
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
// SPDX-License-Identifier: GPL-3.0-or-later
-export type Data = {
- [key: string]: ArrayBuffer
-}
-
-export type Headers = {
- [key: string]: any
-}
-
export { Bip44CkdWorker, NanoNaClWorker, SafeWorker } from './queue'
\r
'use strict'\r
\r
-import { Data, Headers } from '.'\r
import { WorkerInterface } from './worker-interface'\r
import { Blake2b } from '#src/lib/blake2b.js'\r
import { default as Convert, bytes, hex } from '#src/lib/convert.js'\r
+import { Data, Headers } from '#types'\r
\r
/**\r
* Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\r
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { Data, Headers } from '.'
import { default as bip44 } from './bip44-ckd'
import { default as nacl } from './nano-nacl'
import { default as safe } from './safe'
+import { Data, Headers } from '#types'
type Task = {
id: number
'use strict'
-import { Data, Headers } from '.'
import { WorkerInterface } from './worker-interface'
import { default as Convert, bytes } from '#src/lib/convert.js'
import { Entropy } from '#src/lib/entropy.js'
-
-type SafeRecord = {
- iv: string
- data: Data
-}
+import { Data, Headers, SafeRecord } from '#types'
/**
* Encrypts and stores data in the browser using IndexedDB.
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
// SPDX-License-Identifier: GPL-3.0-or-later
-import { Data, Headers } from '.'
+import { Data, Headers } from '#types'
+
/**
* Provides basic worker event messaging to extending classes.
*
--- /dev/null
+// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+export type Data = {
+ [key: string]: ArrayBuffer
+}
+
+export type Headers = {
+ [key: string]: any
+}
+
+export type KeyPair = {
+ publicKey?: string,
+ privateKey?: string,
+ index?: number
+}
+
+export type SafeRecord = {
+ iv: string
+ data: Data
+}
+
+export type UnknownNumber = number | unknown
+
+export type UnknownUint8Array = Uint8Array | unknown