This repository contains Go example implementations related to several cryptographic constructs used in various DLTs.
It contains the following general packages:
slip10
implements the SLIP-10 private key derivation with full BIP-32 compatibility.bip32path
provides utilities for BIP-32 chains.bip39
implements the BIP-39 specification and mnemonic word lists.bech32
implements Bech32 addresses based on the format described in BIP-173.ed25519
implements Ed25519 signatures with particular validation rules around edge cases as described in ZIP-215.curl
implements the Curl ternary hash function in its batched mode. It relies onavo
to generate high-performance x86 assembly.merkle
implements a simple Merkle tree hash.pow
implements the Curl-based proof of work for arbitrary binary data as mentioned in TIP-12.encoding/b1t6
implements the binary-to-ternary encoding which uses 6 trits to represent each byte.encoding/b1t8
implements the binary-to-ternary encoding which uses 8 trits to represent each byte.migration
implements the migration address computation as described in this document: https://hackmd.io/@wollac/H1tZoCK0w
All these packages are tested against the full test vectors provided in the corresponding specifications.
bech32
encode and decode addresses using the bech32 address scheme.
Run the example withgo run examples/bech32/main.go
and use-help
to see the available commands.kdf
shows the private and public key derivation using SLIP-10 and BIP-39 mnemonics + passphrase.
It performs the legacy IOTA seed derivation (as implemented in the Ledger App) based on BIP-32 and the Ed25519 key derivation following SLIP-10.
Run withgo run examples/kdf/main.go
and use-help
to see the available command-line flags.merkle
prints the Merkle tree of several random transaction hashes on the console.
Run withgo run examples/merkle/main.go
and use-help
to see the available command-line flags.mnemseed
presents the extension of BIP-0039 to decode and encode 81-tryte legacy IOTA seeds using mnemonics.
Run withgo run examples/mnemseed/main.go
and use-help
to see the available command-line flags.