identity-based-encryption-bn254
Version:

68 lines (51 loc) • 2.68 kB
Markdown
# 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).
```typescript
// import
import { IBE } from "identity-based-encryption-bn254"
const ibe = new IBE()
```
### Encrypt a message
```typescript
// 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("alice@example.com")
// 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
```typescript
// 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](./src/serde.ts)
## Usage with blocklock
For usage with [blocklock](https://github.com/randa-mu/blocklock-solidity) set the IBE opts depending on the chain you're using, e.g. for chainId of 1:
```javascript
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](https://fil.org/) and [Scroll](https://scroll.io/) for funding this work in part.