expose signature public

This commit is contained in:
narodnik
2021-05-04 15:09:55 +02:00
parent dffcf1e77b
commit b7716b8015
2 changed files with 26 additions and 2 deletions

View File

@@ -178,6 +178,7 @@ fn main() {
let serial: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
let randomness_coin: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
let secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
let signature_secret: jubjub::Fr = jubjub::Fr::random(&mut OsRng);
let merkle_path = [
(bls12_381::Scalar::random(&mut OsRng), true),
@@ -192,6 +193,8 @@ fn main() {
}
let (params, pvk) = load_params("spend.params").expect("params should load");
let signature_public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * signature_secret;
let (proof, revealed) = create_spend_proof(
&params,
value,
@@ -200,7 +203,9 @@ fn main() {
randomness_coin,
secret,
merkle_path,
signature_secret
);
assert!(verify_spend_proof(&pvk, &proof, &revealed));
assert_eq!(revealed.signature_public, signature_public);
}

View File

@@ -54,6 +54,7 @@ pub struct SpendRevealedValues {
// This should not be here, we just have it for debugging
//coin: [u8; 32],
pub merkle_root: bls12_381::Scalar,
pub signature_public: jubjub::SubgroupPoint
}
impl SpendRevealedValues {
@@ -64,6 +65,7 @@ impl SpendRevealedValues {
randomness_coin: &jubjub::Fr,
secret: &jubjub::Fr,
merkle_path: &[(bls12_381::Scalar, bool)],
signature_secret: &jubjub::Fr,
) -> Self {
let value_commit = (zcash_primitives::constants::VALUE_COMMITMENT_VALUE_GENERATOR
* jubjub::Fr::from(value))
@@ -83,6 +85,7 @@ impl SpendRevealedValues {
);
let public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * secret;
let signature_public = zcash_primitives::constants::SPENDING_KEY_GENERATOR * signature_secret;
let mut coin = [0; 32];
coin.copy_from_slice(
@@ -118,11 +121,12 @@ impl SpendRevealedValues {
value_commit,
nullifier,
merkle_root,
signature_public
}
}
fn make_outputs(&self) -> [bls12_381::Scalar; 5] {
let mut public_input = [bls12_381::Scalar::zero(); 5];
fn make_outputs(&self) -> [bls12_381::Scalar; 7] {
let mut public_input = [bls12_381::Scalar::zero(); 7];
// CV
{
@@ -164,6 +168,16 @@ impl SpendRevealedValues {
public_input[4] = self.merkle_root;
{
let result = jubjub::ExtendedPoint::from(self.signature_public);
let affine = result.to_affine();
//let (u, v) = (affine.get_u(), affine.get_v());
let u = affine.get_u();
let v = affine.get_v();
public_input[5] = u;
public_input[6] = v;
}
public_input
}
}
@@ -187,6 +201,8 @@ pub fn setup_spend_prover() -> groth16::Parameters<Bls12> {
is_right_2: None,
branch_3: None,
is_right_3: None,
signature_secret: None,
};
groth16::generate_random_parameters::<Bls12, _, _>(c, &mut OsRng).unwrap()
};
@@ -202,6 +218,7 @@ pub fn create_spend_proof(
randomness_coin: jubjub::Fr,
secret: jubjub::Fr,
merkle_path: [(bls12_381::Scalar, bool); 4],
signature_secret: jubjub::Fr,
) -> (groth16::Proof<Bls12>, SpendRevealedValues) {
let c = SpendContract {
value: Some(value),
@@ -218,6 +235,7 @@ pub fn create_spend_proof(
is_right_2: Some(merkle_path[2].1),
branch_3: Some(merkle_path[3].0),
is_right_3: Some(merkle_path[3].1),
signature_secret: Some(signature_secret),
};
let start = Instant::now();
@@ -231,6 +249,7 @@ pub fn create_spend_proof(
&randomness_coin,
&secret,
&merkle_path,
&signature_secret
);
(proof, revealed)