mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-04 06:13:10 +00:00
encapsulate proof
This commit is contained in:
parent
769e372e8f
commit
538bb72556
@ -14,13 +14,22 @@ pub mod circuit {
|
|||||||
program::{InstructionData, ProgramOutput},
|
program::{InstructionData, ProgramOutput},
|
||||||
};
|
};
|
||||||
use rand::{Rng, RngCore, rngs::OsRng};
|
use rand::{Rng, RngCore, rngs::OsRng};
|
||||||
use risc0_zkvm::{ExecutorEnv, Receipt, default_prover};
|
use risc0_zkvm::{ExecutorEnv, InnerReceipt, Receipt, default_prover};
|
||||||
|
|
||||||
use crate::{error::NssaError, program::Program};
|
use crate::{error::NssaError, program::Program};
|
||||||
|
|
||||||
use program_methods::PRIVACY_PRESERVING_CIRCUIT_ELF;
|
use program_methods::{PRIVACY_PRESERVING_CIRCUIT_ELF, PRIVACY_PRESERVING_CIRCUIT_ID};
|
||||||
|
|
||||||
pub type Proof = Vec<u8>;
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
pub struct Proof(Vec<u8>);
|
||||||
|
|
||||||
|
impl Proof {
|
||||||
|
pub(crate) fn is_valid_for(&self, circuit_output: &PrivacyPreservingCircuitOutput) -> bool {
|
||||||
|
let inner: InnerReceipt = borsh::from_slice(&self.0).unwrap();
|
||||||
|
let receipt = Receipt::new(inner, circuit_output.to_bytes());
|
||||||
|
receipt.verify(PRIVACY_PRESERVING_CIRCUIT_ID).is_ok()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Executes and proves the program `P`.
|
/// Executes and proves the program `P`.
|
||||||
/// Returns the proof
|
/// Returns the proof
|
||||||
@ -84,7 +93,7 @@ pub mod circuit {
|
|||||||
let prover = default_prover();
|
let prover = default_prover();
|
||||||
let prove_info = prover.prove(env, PRIVACY_PRESERVING_CIRCUIT_ELF).unwrap();
|
let prove_info = prover.prove(env, PRIVACY_PRESERVING_CIRCUIT_ELF).unwrap();
|
||||||
|
|
||||||
let proof = borsh::to_vec(&prove_info.receipt.inner)?;
|
let proof = Proof(borsh::to_vec(&prove_info.receipt.inner)?);
|
||||||
|
|
||||||
let circuit_output: PrivacyPreservingCircuitOutput = prove_info
|
let circuit_output: PrivacyPreservingCircuitOutput = prove_info
|
||||||
.receipt
|
.receipt
|
||||||
@ -108,7 +117,6 @@ mod tests {
|
|||||||
EncryptedAccountData,
|
EncryptedAccountData,
|
||||||
account::{Account, AccountWithMetadata, NullifierPublicKey, NullifierSecretKey},
|
account::{Account, AccountWithMetadata, NullifierPublicKey, NullifierSecretKey},
|
||||||
};
|
};
|
||||||
use program_methods::PRIVACY_PRESERVING_CIRCUIT_ID;
|
|
||||||
use risc0_zkvm::{InnerReceipt, Journal, Receipt};
|
use risc0_zkvm::{InnerReceipt, Journal, Receipt};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -159,9 +167,7 @@ mod tests {
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let inner: InnerReceipt = borsh::from_slice(&proof).unwrap();
|
assert!(proof.is_valid_for(&output));
|
||||||
let receipt = Receipt::new(inner, output.to_bytes());
|
|
||||||
receipt.verify(PRIVACY_PRESERVING_CIRCUIT_ID).unwrap();
|
|
||||||
|
|
||||||
let [sender_pre] = output.public_pre_states.try_into().unwrap();
|
let [sender_pre] = output.public_pre_states.try_into().unwrap();
|
||||||
let [sender_post] = output.public_post_states.try_into().unwrap();
|
let [sender_post] = output.public_post_states.try_into().unwrap();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user