Here is an example for a Human Key creation with oprf secp256k1
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();
To create a masked point from your input, 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!
Form a query to Human Network
Querying the epoch and their request number via the POST /user-state/ endpoint to find the user
Requests to the network are of the following format
pub struct RequestToNetwork {
/// The method of the request
pub method: Method,
/// Encoded point to be multiplied
pub point: Vec<u8>,
/// Which epoch this request is from
pub epoch: u32,
/// Which request number this is from this user in this epoch. Starts at 1 not 0 to ensure the first request is paid for.
pub request_per_user: u32,
/// Signature of the request, from an address with credits.
pub signature: Option<ethers_core::types::signature::Signature>,
/// Extra optional data
pub extra_data: Option<Vec<u8>>,
}
Use the point obtained above as pub point: Vec<u8>