@unirep/crypto
🛠 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 idNullifier = identity.identityNullifier
get identity trapdoor
const idTrapdoor = 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 = BigInt(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(leafKey, 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
import { stringifyBigInts, unstringifyBigInts } from '@unirep/crypto'
const values = {
input1: BigInt(1),
input2: BigInt(2),
input3: BigInt(3),
}
// stringify BigInt elements with stringifyBigInts function
const stringifiedValues = stringifyBigInts(values)
// it can be recoverd by unstringifyBigInts function
const unstringifiedValues = unstringifyBigInts(stringifiedValues)