2.0.0-alpha-0 • Published 3 years ago
@unirep/crypto v2.0.0-alpha-0
Unirep crypto package
Client library for cryptography related functions which are used in unirep protocol.
🛠 Install
npm or yarn
Install the @unirep/crypto package with npm:
npm i @unirep/cryptoor 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.identityNullifierget identity trapdoor
const commitment = identity.trapdoorSerialize/ 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.rootInsert 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.rootUpdate 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)1.0.1
3 years ago
2.0.0-alpha-0
3 years ago
1.0.0
3 years ago
1.0.0-alpha-5
3 years ago
1.0.0-alpha-4
3 years ago
1.0.0-alpha-3
3 years ago
1.0.0-alpha-2
3 years ago
1.0.0-alpha-1
3 years ago