File tree Expand file tree Collapse file tree 5 files changed +44
-8
lines changed Expand file tree Collapse file tree 5 files changed +44
-8
lines changed Original file line number Diff line number Diff line change @@ -117,10 +117,13 @@ impl AuthenticatedScalarResult {
117
117
values : BatchScalarResult ,
118
118
n : usize ,
119
119
) -> Vec < AuthenticatedScalarResult > {
120
- // Convert to a set of scalar results, the identity gate does this when set to `n` output arity
120
+ // Convert to a set of scalar results
121
121
let scalar_results = values
122
122
. fabric ( )
123
- . new_batch_gate_op ( vec ! [ values. id( ) ] , n, |args| args) ;
123
+ . new_batch_gate_op ( vec ! [ values. id( ) ] , n, |mut args| {
124
+ let scalars: Vec < Scalar > = args. pop ( ) . unwrap ( ) . into ( ) ;
125
+ scalars. into_iter ( ) . map ( ResultValue :: Scalar ) . collect ( )
126
+ } ) ;
124
127
125
128
Self :: new_shared_batch ( & scalar_results)
126
129
}
Original file line number Diff line number Diff line change @@ -115,10 +115,13 @@ impl AuthenticatedStarkPointResult {
115
115
values : BatchStarkPointResult ,
116
116
n : usize ,
117
117
) -> Vec < AuthenticatedStarkPointResult > {
118
- // Convert to a set of scalar results, the identity gate does this when set to `n` output arity
118
+ // Convert to a set of scalar results
119
119
let scalar_results = values
120
120
. fabric ( )
121
- . new_batch_gate_op ( vec ! [ values. id( ) ] , n, |args| args) ;
121
+ . new_batch_gate_op ( vec ! [ values. id( ) ] , n, |mut args| {
122
+ let args: Vec < StarkPoint > = args. pop ( ) . unwrap ( ) . into ( ) ;
123
+ args. into_iter ( ) . map ( ResultValue :: Point ) . collect_vec ( )
124
+ } ) ;
122
125
123
126
Self :: new_shared_batch ( & scalar_results)
124
127
}
Original file line number Diff line number Diff line change @@ -529,8 +529,10 @@ impl StarkPointResult {
529
529
. chain ( a. iter ( ) . flat_map ( |a| a. ids ( ) ) )
530
530
. collect_vec ( ) ;
531
531
532
- let results =
533
- fabric. new_batch_gate_op ( all_ids, n /* output_arity */ , move |mut args| {
532
+ let results = fabric. new_batch_gate_op (
533
+ all_ids,
534
+ AUTHENTICATED_STARK_POINT_RESULT_LEN * n, /* output_arity */
535
+ move |mut args| {
534
536
let points: Vec < StarkPoint > = args. drain ( ..n) . map ( StarkPoint :: from) . collect_vec ( ) ;
535
537
536
538
let mut results = Vec :: with_capacity ( AUTHENTICATED_STARK_POINT_RESULT_LEN * n) ;
@@ -549,7 +551,8 @@ impl StarkPointResult {
549
551
}
550
552
551
553
results
552
- } ) ;
554
+ } ,
555
+ ) ;
553
556
554
557
AuthenticatedStarkPointResult :: from_flattened_iterator ( results. into_iter ( ) )
555
558
}
Original file line number Diff line number Diff line change @@ -1064,4 +1064,30 @@ impl MpcFabric {
1064
1064
let ( left, right) = authenticated_left_right. split_at ( n) ;
1065
1065
( left. to_vec ( ) , right. to_vec ( ) )
1066
1066
}
1067
+
1068
+ /// Sample a random shared bit from the beaver source
1069
+ pub fn random_shared_bit ( & self ) -> AuthenticatedScalarResult {
1070
+ let bit = self
1071
+ . inner
1072
+ . beaver_source
1073
+ . lock ( )
1074
+ . expect ( "beaver source poisoned" )
1075
+ . next_shared_bit ( ) ;
1076
+
1077
+ let bit = self . allocate_scalar ( bit) ;
1078
+ AuthenticatedScalarResult :: new_shared ( bit)
1079
+ }
1080
+
1081
+ /// Sample a batch of random shared bits from the beaver source
1082
+ pub fn random_shared_bits ( & self , n : usize ) -> Vec < AuthenticatedScalarResult > {
1083
+ let bits = self
1084
+ . inner
1085
+ . beaver_source
1086
+ . lock ( )
1087
+ . expect ( "beaver source poisoned" )
1088
+ . next_shared_bit_batch ( n) ;
1089
+
1090
+ let bits = self . allocate_scalars ( bits) ;
1091
+ AuthenticatedScalarResult :: new_shared_batch ( & bits)
1092
+ }
1067
1093
}
Original file line number Diff line number Diff line change @@ -65,8 +65,9 @@ impl From<ResultValue> for NetworkPayload {
65
65
match value {
66
66
ResultValue :: Bytes ( bytes) => NetworkPayload :: Bytes ( bytes) ,
67
67
ResultValue :: Scalar ( scalar) => NetworkPayload :: Scalar ( scalar) ,
68
+ ResultValue :: ScalarBatch ( scalars) => NetworkPayload :: ScalarBatch ( scalars) ,
68
69
ResultValue :: Point ( point) => NetworkPayload :: Point ( point) ,
69
- _ => panic ! ( "not a valid network payload type" ) ,
70
+ ResultValue :: PointBatch ( points ) => NetworkPayload :: PointBatch ( points ) ,
70
71
}
71
72
}
72
73
}
You can’t perform that action at this time.
0 commit comments