https://github.com/paulmillr/bls12-381-keygen
BLS12-381 Key Generation compatible with EIP-2333.
https://github.com/paulmillr/bls12-381-keygen
bls bls12-381 eip2333 eip2334 eth keygen
Last synced: about 1 month ago
JSON representation
BLS12-381 Key Generation compatible with EIP-2333.
- Host: GitHub
- URL: https://github.com/paulmillr/bls12-381-keygen
- Owner: paulmillr
- License: mit
- Created: 2020-11-24T07:00:53.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-03-24T13:15:08.000Z (about 1 year ago)
- Last Synced: 2024-05-08T17:03:14.025Z (about 1 year ago)
- Topics: bls, bls12-381, eip2333, eip2334, eth, keygen
- Language: TypeScript
- Homepage:
- Size: 67.4 KB
- Stars: 15
- Watchers: 3
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# bls12-381-keygen
> [!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
---
Minimal BLS12-381 Key Generation compatible with [EIP-2333](https://eips.ethereum.org/EIPS/eip-2333).
Can be used to generate EIP-2334 keys for ETH beacon chain. Has only one dependency on `@noble/hashes` for SHA256 and HKDF.
If you're looking for actual implementation of the bls12-381 elliptic curve,
use module [noble-curves](https://github.com/paulmillr/noble-curves).
The bls12-381-keygen only generates private keys, by EIP-2333 specification.Check out live demo in iancoleman's [eip2333-tool](https://iancoleman.io/eip2333/)
## Usage
Node.js and browser:
> npm install bls12-381-keygen
The API is the following:
```typescript
function deriveMaster(seed: Uint8Array): Uint8Array;
function deriveChild(parentKey: Uint8Array, index: number): Uint8Array;
function deriveSeedTree(seed: Uint8Array, path: string): Uint8Array;
const EIP2334_KEY_TYPES: readonly ['withdrawal', 'signing'];
type EIP2334KeyType = (typeof EIP2334_KEY_TYPES)[number];
function deriveEIP2334Key(
seed: Uint8Array,
type: EIP2334KeyType,
index: number
): {
key: Uint8Array;
path: string;
};
```Usage example:
```ts
import { deriveEIP2334Key, deriveSeedTree } from 'bls12-381-keygen';const seed = new Uint8Array(32).fill(7); // must be random
deriveEIP2334Key(seed, 'withdrawal', 6);// Those two are equal
const signKey1a = deriveEIP2334Key(seed, 'signing', 0);
const signKey1b = deriveSeedTree(seed, 'm/12381/3600/0/0/0');// To generate mnemonics for EIP-2334 keystores
import { entropyToMnemonic, mnemonicToSeedSync } from '@scure/bip39';
import { wordlist } from '@scure/bip39/wordlists/english';
// bytes = some random sequence
const mnSeed = mnemonicToSeedSync(entropyToMnemonic(bytes, wordlist));
deriveEIP2334Key(mnSeed, 'signing', index);// To generate BLS12-381 public key, use @noble crypto
import { getPublicKey } from '@noble/bls12-381';
getPublicKey(signKey1a);
```## License
MIT (c) Paul Miller [(https://paulmillr.com)](https://paulmillr.com), see LICENSE file.