mirror of https://github.com/vacp2p/zerokit.git
feat(rln): add few serialization APIs to ease user interaction (#75)
* feat(rln): add few serialization APIs to ease user interaction * fix(rln): cargo fmt
This commit is contained in:
parent
6a7808d911
commit
bc69e25359
|
@ -52,6 +52,23 @@ pub struct RLNProofValues {
|
||||||
pub rln_identifier: Fr,
|
pub rln_identifier: Fr,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn serialize_field_element(element: Fr) -> Vec<u8> {
|
||||||
|
return fr_to_bytes_le(&element);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize_field_element(serialized: Vec<u8>) -> Fr {
|
||||||
|
let (element, _) = bytes_le_to_fr(&serialized);
|
||||||
|
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize_identity_pair(serialized: Vec<u8>) -> (Fr, Fr) {
|
||||||
|
let (identity_secret, read) = bytes_le_to_fr(&serialized);
|
||||||
|
let (id_commitment, _) = bytes_le_to_fr(&serialized[read..].to_vec());
|
||||||
|
|
||||||
|
return (identity_secret, id_commitment);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn serialize_witness(rln_witness: &RLNWitnessInput) -> Vec<u8> {
|
pub fn serialize_witness(rln_witness: &RLNWitnessInput) -> Vec<u8> {
|
||||||
let mut serialized: Vec<u8> = Vec::new();
|
let mut serialized: Vec<u8> = Vec::new();
|
||||||
|
|
||||||
|
@ -147,53 +164,6 @@ pub fn proof_inputs_to_rln_witness(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn serialize_proof_values(rln_proof_values: &RLNProofValues) -> Vec<u8> {
|
|
||||||
let mut serialized: Vec<u8> = Vec::new();
|
|
||||||
|
|
||||||
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.root));
|
|
||||||
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.epoch));
|
|
||||||
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.x));
|
|
||||||
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.y));
|
|
||||||
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.nullifier));
|
|
||||||
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.rln_identifier));
|
|
||||||
|
|
||||||
serialized
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn deserialize_proof_values(serialized: &[u8]) -> (RLNProofValues, usize) {
|
|
||||||
let mut all_read: usize = 0;
|
|
||||||
|
|
||||||
let (root, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
|
||||||
all_read += read;
|
|
||||||
|
|
||||||
let (epoch, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
|
||||||
all_read += read;
|
|
||||||
|
|
||||||
let (x, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
|
||||||
all_read += read;
|
|
||||||
|
|
||||||
let (y, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
|
||||||
all_read += read;
|
|
||||||
|
|
||||||
let (nullifier, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
|
||||||
all_read += read;
|
|
||||||
|
|
||||||
let (rln_identifier, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
|
||||||
all_read += read;
|
|
||||||
|
|
||||||
(
|
|
||||||
RLNProofValues {
|
|
||||||
y,
|
|
||||||
nullifier,
|
|
||||||
root,
|
|
||||||
x,
|
|
||||||
epoch,
|
|
||||||
rln_identifier,
|
|
||||||
},
|
|
||||||
all_read,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn rln_witness_from_json(input_json_str: &str) -> RLNWitnessInput {
|
pub fn rln_witness_from_json(input_json_str: &str) -> RLNWitnessInput {
|
||||||
let input_json: serde_json::Value =
|
let input_json: serde_json::Value =
|
||||||
serde_json::from_str(input_json_str).expect("JSON was not well-formatted");
|
serde_json::from_str(input_json_str).expect("JSON was not well-formatted");
|
||||||
|
@ -307,6 +277,84 @@ pub fn proof_values_from_witness(rln_witness: &RLNWitnessInput) -> RLNProofValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn serialize_proof_values(rln_proof_values: &RLNProofValues) -> Vec<u8> {
|
||||||
|
let mut serialized: Vec<u8> = Vec::new();
|
||||||
|
|
||||||
|
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.root));
|
||||||
|
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.epoch));
|
||||||
|
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.x));
|
||||||
|
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.y));
|
||||||
|
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.nullifier));
|
||||||
|
serialized.append(&mut fr_to_bytes_le(&rln_proof_values.rln_identifier));
|
||||||
|
|
||||||
|
serialized
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deserialize_proof_values(serialized: &[u8]) -> (RLNProofValues, usize) {
|
||||||
|
let mut all_read: usize = 0;
|
||||||
|
|
||||||
|
let (root, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
||||||
|
all_read += read;
|
||||||
|
|
||||||
|
let (epoch, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
||||||
|
all_read += read;
|
||||||
|
|
||||||
|
let (x, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
||||||
|
all_read += read;
|
||||||
|
|
||||||
|
let (y, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
||||||
|
all_read += read;
|
||||||
|
|
||||||
|
let (nullifier, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
||||||
|
all_read += read;
|
||||||
|
|
||||||
|
let (rln_identifier, read) = bytes_le_to_fr(&serialized[all_read..].to_vec());
|
||||||
|
all_read += read;
|
||||||
|
|
||||||
|
(
|
||||||
|
RLNProofValues {
|
||||||
|
y,
|
||||||
|
nullifier,
|
||||||
|
root,
|
||||||
|
x,
|
||||||
|
epoch,
|
||||||
|
rln_identifier,
|
||||||
|
},
|
||||||
|
all_read,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn prepare_prove_input(
|
||||||
|
identity_secret: Fr,
|
||||||
|
id_index: usize,
|
||||||
|
epoch: Fr,
|
||||||
|
signal: &[u8],
|
||||||
|
) -> Vec<u8> {
|
||||||
|
let signal_len = u64::try_from(signal.len()).unwrap();
|
||||||
|
|
||||||
|
let mut serialized: Vec<u8> = Vec::new();
|
||||||
|
|
||||||
|
serialized.append(&mut fr_to_bytes_le(&identity_secret));
|
||||||
|
serialized.append(&mut id_index.to_le_bytes().to_vec());
|
||||||
|
serialized.append(&mut fr_to_bytes_le(&epoch));
|
||||||
|
serialized.append(&mut signal_len.to_le_bytes().to_vec());
|
||||||
|
serialized.append(&mut signal.to_vec());
|
||||||
|
|
||||||
|
return serialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn prepare_verify_input(proof_data: Vec<u8>, signal: &[u8]) -> Vec<u8> {
|
||||||
|
let signal_len = u64::try_from(signal.len()).unwrap();
|
||||||
|
|
||||||
|
let mut serialized: Vec<u8> = Vec::new();
|
||||||
|
|
||||||
|
serialized.append(&mut proof_data.clone());
|
||||||
|
serialized.append(&mut signal_len.to_le_bytes().to_vec());
|
||||||
|
serialized.append(&mut signal.to_vec());
|
||||||
|
|
||||||
|
return serialized;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
// Merkle tree utility functions
|
// Merkle tree utility functions
|
||||||
///////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue