@@ -58,48 +58,76 @@ pub fn same_ratio<G1: CurveAffine>(
58
58
/// ... with high probability.
59
59
pub fn merge_pairs < G : CurveAffine > ( v1 : & [ G ] , v2 : & [ G ] ) -> ( G , G )
60
60
{
61
- use std:: sync:: Mutex ;
62
- use rand:: { thread_rng} ;
61
+ // use std::sync::Mutex;
62
+ // use rand::{thread_rng};
63
63
64
- assert_eq ! ( v1. len( ) , v2. len( ) ) ;
64
+ // assert_eq!(v1.len(), v2.len());
65
65
66
- let chunk = ( v1. len ( ) / num_cpus:: get ( ) ) + 1 ;
66
+ // let chunk = (v1.len() / num_cpus::get()) + 1;
67
67
68
- let s = Arc :: new ( Mutex :: new ( G :: Projective :: zero ( ) ) ) ;
69
- let sx = Arc :: new ( Mutex :: new ( G :: Projective :: zero ( ) ) ) ;
68
+ // let s = Arc::new(Mutex::new(G::Projective::zero()));
69
+ // let sx = Arc::new(Mutex::new(G::Projective::zero()));
70
70
71
- crossbeam:: scope ( |scope| {
72
- for ( v1, v2) in v1. chunks ( chunk) . zip ( v2. chunks ( chunk) ) {
73
- let s = s. clone ( ) ;
74
- let sx = sx. clone ( ) ;
71
+ // crossbeam::scope(|scope| {
72
+ // for (v1, v2) in v1.chunks(chunk).zip(v2.chunks(chunk)) {
73
+ // let s = s.clone();
74
+ // let sx = sx.clone();
75
75
76
- scope. spawn ( move |_| {
77
- // We do not need to be overly cautious of the RNG
78
- // used for this check.
79
- let rng = & mut thread_rng ( ) ;
76
+ // scope.spawn(move |_| {
77
+ // // We do not need to be overly cautious of the RNG
78
+ // // used for this check.
79
+ // let rng = &mut thread_rng();
80
80
81
- let mut wnaf = Wnaf :: new ( ) ;
82
- let mut local_s = G :: Projective :: zero ( ) ;
83
- let mut local_sx = G :: Projective :: zero ( ) ;
81
+ // let mut wnaf = Wnaf::new();
82
+ // let mut local_s = G::Projective::zero();
83
+ // let mut local_sx = G::Projective::zero();
84
84
85
- for ( v1, v2) in v1. iter ( ) . zip ( v2. iter ( ) ) {
86
- let rho = G :: Scalar :: rand ( rng) ;
87
- let mut wnaf = wnaf. scalar ( rho. into_repr ( ) ) ;
88
- let v1 = wnaf. base ( v1. into_projective ( ) ) ;
89
- let v2 = wnaf. base ( v2. into_projective ( ) ) ;
85
+ // for (v1, v2) in v1.iter().zip(v2.iter()) {
86
+ // let rho = G::Scalar::rand(rng);
87
+ // let mut wnaf = wnaf.scalar(rho.into_repr());
88
+ // let v1 = wnaf.base(v1.into_projective());
89
+ // let v2 = wnaf.base(v2.into_projective());
90
90
91
- local_s. add_assign ( & v1) ;
92
- local_sx. add_assign ( & v2) ;
93
- }
91
+ // local_s.add_assign(&v1);
92
+ // local_sx.add_assign(&v2);
93
+ // }
94
94
95
- s. lock ( ) . unwrap ( ) . add_assign ( & local_s) ;
96
- sx. lock ( ) . unwrap ( ) . add_assign ( & local_sx) ;
97
- } ) ;
98
- }
99
- } ) . unwrap ( ) ;
95
+ // s.lock().unwrap().add_assign(&local_s);
96
+ // sx.lock().unwrap().add_assign(&local_sx);
97
+ // });
98
+ // }
99
+ // }).unwrap();
100
+
101
+ // let s = s.lock().unwrap().into_affine();
102
+ // let sx = sx.lock().unwrap().into_affine();
103
+
104
+ // (s, sx)
105
+
106
+ use rand:: { thread_rng} ;
107
+
108
+ assert_eq ! ( v1. len( ) , v2. len( ) ) ;
109
+
110
+ let mut local_s = G :: Projective :: zero ( ) ;
111
+ let mut local_sx = G :: Projective :: zero ( ) ;
112
+
113
+ // We do not need to be overly cautious of the RNG
114
+ // used for this check.
115
+ let rng = & mut thread_rng ( ) ;
116
+
117
+ let mut wnaf = Wnaf :: new ( ) ;
118
+
119
+ for ( v1, v2) in v1. iter ( ) . zip ( v2. iter ( ) ) {
120
+ let rho = G :: Scalar :: rand ( rng) ;
121
+ let mut wnaf = wnaf. scalar ( rho. into_repr ( ) ) ;
122
+ let v1 = wnaf. base ( v1. into_projective ( ) ) ;
123
+ let v2 = wnaf. base ( v2. into_projective ( ) ) ;
124
+
125
+ local_s. add_assign ( & v1) ;
126
+ local_sx. add_assign ( & v2) ;
127
+ }
100
128
101
- let s = s . lock ( ) . unwrap ( ) . into_affine ( ) ;
102
- let sx = sx . lock ( ) . unwrap ( ) . into_affine ( ) ;
129
+ let s = local_s . into_affine ( ) ;
130
+ let sx = local_sx . into_affine ( ) ;
103
131
104
132
( s, sx)
105
133
}
0 commit comments