@@ -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:: * ;
2827use std:: io:: { Cursor , Read } ;
2928use std:: ops:: BitAnd ;
3029use std:: slice:: from_ref;
@@ -35,27 +34,18 @@ use super::xof::XofTurboShake128;
3534
3635const 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-
4737pub ( crate ) const USAGE_PROVE_RAND : u8 = 0 ;
4838pub ( crate ) const USAGE_PROOF_SHARE : u8 = 1 ;
4939pub ( crate ) const USAGE_QUERY_RAND : u8 = 2 ;
5040pub ( crate ) const USAGE_JOINT_RAND_SEED : u8 = 3 ;
5141pub ( crate ) const USAGE_JOINT_RAND_PART : u8 = 4 ;
5242pub ( 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 ;
5647pub ( crate ) const USAGE_EXTEND : u8 = 10 ;
5748pub ( crate ) const USAGE_CONVERT : u8 = 11 ;
58- pub ( crate ) const USAGE_PAYLOAD_CHECK : u8 = 12 ;
5949
6050pub ( 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
339319impl < 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
0 commit comments