Skip to Content

Decryption of Provably Encrypted Data

With mishtiwasm

Install.

npm i @holonym-foundation/mishtiwasm

Import, fetch parameters, and decrypt.

import wasm from '@holonym-foundation/mishtiwasm' // -------- Fetch parameters -------- // To decrypt, Mishti needs to verify the user's signature of the // access conditions contract address. We retrieve the ciphertext // as well as the signature and conditions contract from the observer. const user = '0x123' // This example uses Holonym's default observer to store ciphertext and assist in decryption const observerUrl = 'https://observer.holonym.io' const resp = await fetch(`${observerUrl}/observations?user_address=${user}`) const data = await resp.json() const { user_address, signature, access_contract, zkp_public_values, } = data[0] // C1 and C2 are the two points in the ElGamal Ciphertext: the ephemeral public key and the masked plaintext, respectively const ciphertext = { c1: { x: BigInt('0x' + zkp_public_values[7]).toString(), y: BigInt('0x' + zkp_public_values[8]).toString() }, c2: { x: BigInt('0x' + zkp_public_values[9]).toString(), y: BigInt('0x' + zkp_public_values[10]).toString() } } // -------- Decrypt -------- // privateKey should be the private key to your wallet with Mishti credits. // It is used to sign the request to Mishti Network. const privateKey = '0x123' const result = await wasm.decrypt( privateKey, JSON.stringify(ciphertext), access_contract, signature ); // If the decrypted value is a UTF-8 encoded string, we need to decode // by doing something like this: const decoded = Buffer.from(BigInt(result).toString(16), 'hex').toString()
Last updated on