Skip to content

Commit 8f97a99

Browse files
authored
mastic: Simplify onehot check (#1197)
1 parent 96e4759 commit 8f97a99

File tree

10 files changed

+120
-139
lines changed

10 files changed

+120
-139
lines changed

src/vdaf/mastic.rs

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@ use crate::{
1919
PrepareTransition, Vdaf, VdafError,
2020
},
2121
vidpf::{
22-
xor_proof, Vidpf, VidpfError, VidpfInput, VidpfKey, VidpfProof, VidpfPublicShare,
23-
VidpfServerId, VidpfWeight, VIDPF_PROOF_SIZE,
22+
Vidpf, VidpfError, VidpfInput, VidpfKey, VidpfPublicShare, VidpfServerId, VidpfWeight,
23+
VIDPF_PROOF_SIZE,
2424
},
2525
};
2626

27-
use rand::prelude::*;
2827
use std::io::{Cursor, Read};
2928
use std::ops::BitAnd;
3029
use std::slice::from_ref;
@@ -35,27 +34,18 @@ use super::xof::XofTurboShake128;
3534

3635
const NONCE_SIZE: usize = 16;
3736

38-
// draft-jimouris-cfrg-mastic:
39-
//
40-
// ONEHOT_PROOF_INIT = XofTurboShake128(
41-
// b'', dst(b'', USAGE_ONEHOT_PROOF_INIT), b'').next(PROOF_SIZE)
42-
pub(crate) const ONEHOT_PROOF_INIT: [u8; 32] = [
43-
97, 188, 153, 213, 116, 162, 25, 70, 98, 231, 255, 255, 1, 207, 231, 225, 13, 187, 182, 1, 16,
44-
90, 161, 104, 201, 152, 149, 153, 35, 92, 254, 149,
45-
];
46-
4737
pub(crate) const USAGE_PROVE_RAND: u8 = 0;
4838
pub(crate) const USAGE_PROOF_SHARE: u8 = 1;
4939
pub(crate) const USAGE_QUERY_RAND: u8 = 2;
5040
pub(crate) const USAGE_JOINT_RAND_SEED: u8 = 3;
5141
pub(crate) const USAGE_JOINT_RAND_PART: u8 = 4;
5242
pub(crate) const USAGE_JOINT_RAND: u8 = 5;
53-
pub(crate) const USAGE_ONEHOT_PROOF_HASH: u8 = 7;
54-
pub(crate) const USAGE_NODE_PROOF: u8 = 8;
55-
pub(crate) const USAGE_EVAL_PROOF: u8 = 9;
43+
pub(crate) const USAGE_ONEHOT_CHECK: u8 = 6;
44+
pub(crate) const USAGE_PAYLOAD_CHECK: u8 = 7;
45+
pub(crate) const USAGE_EVAL_PROOF: u8 = 8;
46+
pub(crate) const USAGE_NODE_PROOF: u8 = 9;
5647
pub(crate) const USAGE_EXTEND: u8 = 10;
5748
pub(crate) const USAGE_CONVERT: u8 = 11;
58-
pub(crate) const USAGE_PAYLOAD_CHECK: u8 = 12;
5949

6050
pub(crate) fn dst_usage(usage: u8) -> [u8; 8] {
6151
const VERSION: u8 = 0;
@@ -324,16 +314,6 @@ impl<T: Type> Mastic<T> {
324314
};
325315
Ok((public_share, vec![leader_share, helper_share]))
326316
}
327-
328-
fn hash_proof(&self, mut proof: VidpfProof, ctx: &[u8]) -> VidpfProof {
329-
let mut xof = XofTurboShake128::from_seed_slice(
330-
&[],
331-
&[&dst_usage(USAGE_ONEHOT_PROOF_HASH), &self.id, ctx],
332-
);
333-
xof.update(&proof);
334-
xof.into_seed_stream().fill_bytes(&mut proof);
335-
proof
336-
}
337317
}
338318

339319
impl<T: Type> Client<16> for Mastic<T> {
@@ -546,24 +526,24 @@ impl<T: Type> Aggregator<32, NONCE_SIZE> for Mastic<T> {
546526
let root = prefix_tree.root.as_ref().unwrap();
547527

548528
// Onehot and payload checks
549-
let (payload_check, onehot_proof) = {
529+
let (onehot_check, payload_check) = {
530+
let mut onehot_check_xof = XofTurboShake128::from_seed_slice(
531+
&[],
532+
&[&dst_usage(USAGE_ONEHOT_CHECK), &self.id, ctx],
533+
);
550534
let mut payload_check_xof = XofTurboShake128::from_seed_slice(
551535
&[],
552536
&[&dst_usage(USAGE_PAYLOAD_CHECK), &self.id, ctx],
553537
);
554538
let mut payload_check_buf = Vec::with_capacity(T::Field::ENCODED_SIZE);
555-
let mut onehot_proof = ONEHOT_PROOF_INIT;
556539

557540
// Traverse the prefix tree breadth-first.
558541
let mut q = VecDeque::with_capacity(100);
559542
q.push_back(root.left.as_ref().unwrap());
560543
q.push_back(root.right.as_ref().unwrap());
561544
while let Some(node) = q.pop_front() {
562545
// Update onehot proof.
563-
onehot_proof = xor_proof(
564-
onehot_proof,
565-
&self.hash_proof(xor_proof(onehot_proof, &node.value.state.node_proof), ctx),
566-
);
546+
onehot_check_xof.update(&node.value.state.node_proof);
567547

568548
// Update payload check.
569549
if let (Some(left), Some(right)) = (node.left.as_ref(), node.right.as_ref()) {
@@ -586,9 +566,10 @@ impl<T: Type> Aggregator<32, NONCE_SIZE> for Mastic<T> {
586566
}
587567
}
588568

569+
let onehot_check = onehot_check_xof.into_seed().0;
589570
let payload_check = payload_check_xof.into_seed().0;
590571

591-
(payload_check, onehot_proof)
572+
(onehot_check, payload_check)
592573
};
593574

594575
// Counter check.
@@ -607,7 +588,7 @@ impl<T: Type> Aggregator<32, NONCE_SIZE> for Mastic<T> {
607588
&[],
608589
&[&dst_usage(USAGE_EVAL_PROOF), &self.id, ctx],
609590
);
610-
eval_proof_xof.update(&onehot_proof);
591+
eval_proof_xof.update(&onehot_check);
611592
eval_proof_xof.update(&counter_check);
612593
eval_proof_xof.update(&payload_check);
613594
eval_proof_xof.into_seed().0

src/vdaf/test_vec/mastic/04/MasticCount_0.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@
4242
],
4343
"prep_shares": [
4444
[
45-
"7e721d28bd48370b6a16ea503791be940d88fa776d7bb59945b5c8eff6973e8d82518600b8bd84150c9df3154968eb00fd6949610bbaa838f528e845e9b134bf",
46-
"7e721d28bd48370b6a16ea503791be940d88fa776d7bb59945b5c8eff6973e8d7fae79ff46427bea6814d366e7d3bd95781ac4b7ab90e6a99f6399ebb8914e6d"
45+
"2f82f72d65d285b4d41551667bc8d1832ed2212b211bec5bf0e228302bbcd23282518600b8bd84150c9df3154968eb00fd6949610bbaa838f528e845e9b134bf",
46+
"2f82f72d65d285b4d41551667bc8d1832ed2212b211bec5bf0e228302bbcd2327fae79ff46427bea6814d366e7d3bd95781ac4b7ab90e6a99f6399ebb8914e6d"
4747
]
4848
],
49-
"public_share": "0e30118b55bf77ff34817d80025c5c736b1ee2188425350e71cc1dc5a779de3e6ff0676312c362381937b2713cf2d65c6bfd5e3a8400fe1b3f71da0726d672f55f796f086f2d82ba5c736f5c7854b6fbe6605a571bdabcacce7acd94b9c87b314bead370e09dc18618bd5cc3c8825338a085d4790108cbeb9ecdb914466664cfa0",
49+
"public_share": "0e30118b55bf77ff34817d80025c5c736b1ee2188425350e71cc1dc5a779de3e6ff0676312c362381937b2713cf2d65c6bfd5e3a8400fe1b3f71da0726d672f55f893f521233758b42d37212b7a0c5d64e450af652ace0e50986026a123de440e13432801b02eeda044017d8cc739b4f93ea6360a4887c1b1f4e688c4a6b02a111",
5050
"rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f"
5151
}
5252
],

src/vdaf/test_vec/mastic/04/MasticCount_1.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@
4242
],
4343
"prep_shares": [
4444
[
45-
"bfdffd964fe8b1d7804cc7bb1197c5b1c6f08094599a8021986e517e923f43a282518600b8bd8415522695511228b9228a6b0a9d88a7f97af0b1b62107f08c47",
46-
"bfdffd964fe8b1d7804cc7bb1197c5b1c6f08094599a8021986e517e923f43a27fae79ff46427beaf79ffb3f48d217d30f4b40b400becf0407f72fed209095f2"
45+
"ca98c5aa7a21e337c3feb5e936676af3169f0b4e524da401bc107bb92447b98382518600b8bd8415522695511228b9228a6b0a9d88a7f97af0b1b62107f08c47",
46+
"ca98c5aa7a21e337c3feb5e936676af3169f0b4e524da401bc107bb92447b9837fae79ff46427beaf79ffb3f48d217d30f4b40b400becf0407f72fed209095f2"
4747
]
4848
],
49-
"public_share": "0e30118b55bf77ff34817d80025c5c736b1ee2188425350e71cc1dc5a779de3e6ff0676312c362381937b2713cf2d65c6bfd5e3a8400fe1b3f71da0726d672f55f796f086f2d82ba5c736f5c7854b6fbe6605a571bdabcacce7acd94b9c87b314bead370e09dc18618bd5cc3c8825338a085d4790108cbeb9ecdb914466664cfa0",
49+
"public_share": "0e30118b55bf77ff34817d80025c5c736b1ee2188425350e71cc1dc5a779de3e6ff0676312c362381937b2713cf2d65c6bfd5e3a8400fe1b3f71da0726d672f55f893f521233758b42d37212b7a0c5d64e450af652ace0e50986026a123de440e13432801b02eeda044017d8cc739b4f93ea6360a4887c1b1f4e688c4a6b02a111",
5050
"rand": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f"
5151
}
5252
],

0 commit comments

Comments
 (0)