@unirep/crypto
TypeScript icon, indicating that this package has built-in type declarations

2.0.0-alpha-0 • Public • Published

Unirep crypto package

Client library for cryptography related functions which are used in unirep protocol.

Github license NPM version Downloads Linter eslint Code style prettier


🛠 Install

npm or yarn

Install the @unirep/crypto package with npm:

npm i @unirep/crypto

or yarn:

yarn add @unirep/crypto

📔 Usage

ZkIdentity

Generate a random ZkIdentity

import { ZkIdentity } from '@unirep/crypto'
const identity = new ZkIdentity()

Generate identity commitment

const commitment = identity.genIdentityCommitment()

Get identity nullifier

const commitment = identity.identityNullifier

get identity trapdoor

const commitment = identity.trapdoor

Serialize/ unserialize identity

import { Strategy } from '@unirep/crypto'
// serialize identity
const serializedIdentity = identity.serializeIdentity()
// unserialize identity
const unserializedIdentity = new ZkIdentity(
    Strategy.SERIALIZED,
    serializedIdentity
)

IncrementalMerkleTree

Create a IncrementalMerkleTree

import { IncrementalMerkleTree } from '@unirep/crypto'

const depth = 4
// initialize incremental merkle tree with depth 4
const tree = new IncrementalMerkleTree(depth)

Get tree root

const root = tree.root

Insert leaf

const leaf = 1
tree.insert(leaf)

Generate merkle proof

const index = 0
const proof = tree.createProof(index)

Verify merkle proof

const isValid = tree.verifyProof(proof)

SparseMerkleTree

Create a SparseMerkleTree

import { SparseMerkleTree } from '@unirep/crypto'

const depth = 4
// initialize incremental merkle tree with depth 4
const zeroHash = 0
// initialize sparse merkle tree with depth 4 and zeroHash 0
const tree = new SparseMerkleTree(
    depth, 
    zeroHash
)

Get tree root

const root = tree.root

Update leaf

const leafKey = BigInt(3)
const leafValue = BigInt(4)
tree.update(leafKey, leafValue)

Generate merkle proof

const leafKey = Bigint(1)
const proof = tree.createProof(leafKey)

Verify merkle proof

const isValid = tree.verifyProof(proof)

Crypto utils

genRandomSalt

import { genRandomSalt } from '@unirep/crypto'

// generate random BigInt
const salt = genRandomSalt()

hash5

import { hash5 } from '@unirep/crypto'

// poseidon hash 5 BigInt elements
const values = [
    genRandomSalt(),
    genRandomSalt(),
    genRandomSalt(),
    genRandomSalt(),
    genRandomSalt(),
]
const hash5Value = hash5(values)

hashOne

import { hashOne } from '@unirep/crypto'

// poseidon hash 1 BigInt elements
const value = genRandomSalt()
const hashOneValue = hashOne(value)

hashLeftRight

import { hashLeftRight } from '@unirep/crypto'

// poseidon hash 2 BigInt elements
const leftValue = genRandomSalt()
const rightValue = genRandomSalt()
const hash = hashLeftRight(leftValue, rightValue)

stringifyBigInts/unstringifyBigInts

const values = {
    input1: genRandomSalt(),
    input2: genRandomSalt(),
    input3: genRandomSalt(),
}
// stringify BigInt elements with stringifyBigInts function
const stringifiedValues = stringifyBigInts(values)
// it can be recoverd by unstringifyBigInts function
const unstringifiedValues = unstringifyBigInts(stringifiedValues)

Package Sidebar

Install

npm i @unirep/crypto

Weekly Downloads

10

Version

2.0.0-alpha-0

License

MIT

Unpacked Size

28.1 kB

Total Files

12

Last publish

Collaborators

  • vivianjeng
  • jchancehud