-
Notifications
You must be signed in to change notification settings - Fork 97
Open
Labels
DocumentationImprovements or additions to documentation. Excludes from changelogImprovements or additions to documentation. Excludes from changelog
Description
Description
By somewhat popular demand, we should consider adding an example that creates an identity from a BIP39 mnemonic seed.
In the example, we might want to describe the trade-off between using a mnemonic seed vs. storing the key in a Storage / stronghold.
Reference material
A while back I posted such an example on Discord, but only in JS, and it has some problems that need fixing, in particular how to go from the 64 byte seed to a 32 byte ed25519 private key. Truncating is maybe a bad idea, applying a key derivation or hash function might be safer. If the example is used, it needs to be updated (still uses the base58 functions that we removed). Posting it for reference:
import { Document, KeyPair, KeyType, Storage } from '@iota/identity-wasm';
import base58 from 'bs58';
import * as bip39 from 'bip39';
import * as ed from '@noble/ed25519';
async function createIdentity() {
const mnemonic = bip39.generateMnemonic();
console.log(mnemonic);
// Truncate the 64 byte seed, because ed25519 private keys are 32 bytes.
const seed = (await bip39.mnemonicToSeed(mnemonic)).slice(0, 32);
const publicKey = await ed.getPublicKey(seed)
const keypair = KeyPair.fromBase58(KeyType.Ed25519, base58.encode(publicKey), base58.encode(seed));
const doc = new Document(keypair);
doc.signSelf(keypair, doc.defaultSigningMethod().id());
console.log(doc)
}To-do List
Create a task-specific to-do list
- Add an mnemonic seed identity creation example
- Determine how to safely use the 64 byte seed as input for an ed25519 key
Metadata
Metadata
Assignees
Labels
DocumentationImprovements or additions to documentation. Excludes from changelogImprovements or additions to documentation. Excludes from changelog
Type
Projects
Status
Product Backlog