OPRF To Derive Keys From Low-Entropy Data
You will make a standard request to the relay node with the state (see Making Requests) using the Secp256k1 method.
Here is an example request using the OPRFSecp256k1 method:
{
"method": "OPRFSecp256k1",
"point": [2,58,211,253,26,34,132,83,157,111,80,144,179,1,88,82,243,119,99,104,156,248,158,115,87,30,114,39,90,142,78,236,28],
"epoch": 123,
"request_per_user": 69,
"signature": {
"r": "0xe3fbde1404800f5ac238b30f2118b69a1cdb604d0b4227056f18f87beb83abf2",
"s": "0x9132d353ef806f526ef5e48cbee6872a11fcf688c2d92023a384d0f02082466",
"v": 28
},
"extra_data": null
}
However, you will need to get the point to send for the OPRF:
Getting the point
With mishtiwasm
Install:
npm i @holonym-foundation/mishtiwasm
Import:
import init, { oprf_client_step1_secp256k1, unmask_secp256k1 } from "@holonym-foundation/mishtiwasm"
// important to call init -- wasm is initialized asynchronously.
// without it, the other functions won't work
await init();
Use:
// Salt and secret input are arrays of uint8s
const { encoded_masked_point, secret_mask } = oprf_client_step1_secp256k1(salt, secret);
encoded_masked_point
can be the value for point
in the RequestToNetwork
Unmasking the point
After querying the network and receiving the point response_from_network
, unmask the response via
// Salt and secret input are arrays of uint8s
const result = unmask_secp256k1(response_from_network, secret_mask);
This is the output of the OPRF!
Last updated