Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/paulmillr/micro-ed25519-hdkey
Minimal implementation of SLIP-0010 hierarchical deterministic (HD) wallets
https://github.com/paulmillr/micro-ed25519-hdkey
Last synced: about 1 month ago
JSON representation
Minimal implementation of SLIP-0010 hierarchical deterministic (HD) wallets
- Host: GitHub
- URL: https://github.com/paulmillr/micro-ed25519-hdkey
- Owner: paulmillr
- License: mit
- Archived: true
- Created: 2022-09-25T12:33:57.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-01-28T02:48:38.000Z (almost 2 years ago)
- Last Synced: 2024-06-04T09:19:48.352Z (7 months ago)
- Language: JavaScript
- Size: 34.2 KB
- Stars: 14
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/funding.yml
- License: LICENSE
Awesome Lists containing this project
README
# micro-ed25519-hdkey
> [!WARNING]
> The repository has been merged into [micro-key-producer](https://github.com/paulmillr/micro-key-producer). Please head to the new repo for updates.npm install micro-key-producer
---
Secure, minimal implementation of SLIP-0010 hierarchical deterministic (HD) wallets.
Sponsored by the Kin Foundation for [Kinetic](https://github.com/kin-labs/kinetic).
## Usage
> npm install micro-ed25519-hdkey
Or
> yarn add micro-ed25519-hdkey
The module exports a single class `HDKey`, which should be used like this:
```ts
import { HDKey } from 'micro-ed25519-hdkey';
const hdkey1 = HDKey.fromMasterSeed(seed);// props
[hdkey1.depth, hdkey1.index, hdkey1.chainCode];
console.log(hdkey2.privateKey, hdkey2.publicKey);
console.log(hdkey3.derive("m/0/2147483647'/1'"));
const sig = hdkey3.sign(hash);
hdkey3.verify(hash, sig);
```Note: `chainCode` property is essentially a private part
of a secret "master" key, it should be guarded from unauthorized access.The full API is:
```ts
class HDKey {
public static HARDENED_OFFSET: number;
public static fromMasterSeed(seed: Uint8Array | string): HDKey;readonly depth: number = 0;
readonly index: number = 0;
readonly chainCode: Uint8Array | null = null;
readonly parentFingerprint: number = 0;
public readonly privateKey: Uint8Array;get fingerprint(): number;
get fingerprintHex(): string;
get parentFingerprintHex(): string;
get pubKeyHash(): Uint8Array;
get publicKey(): Uint8Array;
get publicKeyRaw(): Uint8Array;derive(path: string, forceHardened = false): HDKey;
deriveChild(index: number): HDKey;
sign(hash: Uint8Array): Uint8Array;
verify(hash: Uint8Array, signature: Uint8Array): boolean;
}
```## Notes
- SLIP-0010 publicKey is 33 bytes (see [this issue](https://github.com/satoshilabs/slips/issues/1251)), if you want 32-byte publicKey, use `.publicKeyRaw` getter
- SLIP-0010 vectors fingerprint is actually `parentFingerprint`
- SLIP-0010 doesn't allow deriving non-hardened keys for Ed25519, however some other libraries treat non-hardened keys (`m/0/1`) as hardened (`m/0'/1'`). If you want this behaviour, there is a flag `forceHardened` in `derive` method## License
[MIT License](./LICENSE)
Copyright (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com)