identity-based-encryption-bn254
v0.0.6
Published

Readme
identity-based-encryption-bn254
A typescript library for encrypting messages to a specific identity in a threshold setting.
Quickstart
Install
Install the javascript and the types like so:
npm install identity-based-encryption-bn254
Instantiate
Create an instance of the IBE class, optionally configuring your options (which is only necessary when using custom DSTs).
// import
import { IBE } from "identity-based-encryption-bn254"
const ibe = new IBE()Encrypt a message
// get the public key for your signer (the lib also provides some convenience functions for creating from a secret key)
const publicKey = IBE.parsePublicKey(<some-bytes-here>)
// define the message your signer should sign in order to create an encryption key
const identity = ibe.createIdentity("[email protected]")
// encode your plaintext message
const message = new TextEncoder().encode("hello world") // or you can use a Buffer in node
// huzzah - you have a ciphertext!
const ciphertext = ibe.encrypt(message, identity, publicKey)Decrypt a message
// get a signature over the identity from somewhere - this will act as the decryption key
const signature = ..
// you should now have a plaintext! if the signature wasn't valid or for the correct identity, this will throw an error
const plaintext = ibe.decrypt(ciphertext, signature)
Serialization and deserialization
You can also serialize ciphertexts to bytes by using the functions in serde.ts
Usage with blocklock
For usage with blocklock set the IBE opts depending on the chain you're using, e.g. for chainId of 1:
const IBE_OPTS = {
hash: keccak_256,
k: 128,
expand_fn: "xmd",
dsts: {
H1_G1: Buffer.from(`BLOCKLOCK_BN254G1_XMD:KECCAK-256_SVDW_RO_H1_0x0000000000000000000000000000000000000000000000000000000000000001_`),
H2: Buffer.from(`BLOCKLOCK_BN254_XMD:KECCAK-256_H2_0x0000000000000000000000000000000000000000000000000000000000000001_`),
H3: Buffer.from(`BLOCKLOCK_BN254_XMD:KECCAK-256_H3_0x0000000000000000000000000000000000000000000000000000000000000001_`),
H4: Buffer.from(`BLOCKLOCK_BN254_XMD:KECCAK-256_H4_0x0000000000000000000000000000000000000000000000000000000000000001_`),
},
}Acknowledgements
Thanks to @azixus, @kevincharm and @paulmillr for building the libs this was built on top of. Thanks to the Filecoin Foundation and Scroll for funding this work in part.
