MCPcopy Create free account
hub / github.com/docknetwork/crypto / timing_comparison

Function timing_comparison

utils/src/randomized_mult_checker.rs:278–383  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

276
277 #[test]
278 fn timing_comparison() {
279 let mut rng = OsRng::default();
280
281 for i in [40, 60, 80, 100] {
282 let g = (0..i).map(|_| G1Affine::rand(&mut rng)).collect::<Vec<_>>();
283 let h = (0..i).map(|_| G1Affine::rand(&mut rng)).collect::<Vec<_>>();
284 let k = (0..i).map(|_| G1Affine::rand(&mut rng)).collect::<Vec<_>>();
285 let a = (0..i).map(|_| Fr::rand(&mut rng)).collect::<Vec<_>>();
286 let b = (0..i).map(|_| Fr::rand(&mut rng)).collect::<Vec<_>>();
287 let c = (0..i).map(|_| Fr::rand(&mut rng)).collect::<Vec<_>>();
288
289 let r = (0..i)
290 .map(|j| (g[0] * a[j] + h[0] * b[j]).into_affine())
291 .collect::<Vec<_>>();
292
293 let start = Instant::now();
294 for j in 0..i {
295 assert_eq!((g[0] * a[j] + h[0] * b[j]).into_affine(), r[j]);
296 }
297 println!("For {} items, naive check took {:?}", i, start.elapsed());
298
299 let start = Instant::now();
300 let mut checker = RandomizedMultChecker::new_using_rng(&mut rng);
301 for j in 0..i {
302 checker.add_2(g[0], &a[j], h[0], &b[j], r[j]);
303 }
304 assert!(checker.verify());
305 println!(
306 "For {} items, RandomizedMultChecker took {:?}",
307 i,
308 start.elapsed()
309 );
310
311 let r = (0..i)
312 .map(|j| (g[j] * a[j] + h[j] * b[j]).into_affine())
313 .collect::<Vec<_>>();
314
315 let start = Instant::now();
316 for j in 0..i {
317 assert_eq!((g[j] * a[j] + h[j] * b[j]).into_affine(), r[j]);
318 }
319 println!("For {} items, naive check took {:?}", i, start.elapsed());
320
321 let start = Instant::now();
322 let mut checker = RandomizedMultChecker::new_using_rng(&mut rng);
323 for j in 0..i {
324 checker.add_2(g[j], &a[j], h[j], &b[j], r[j]);
325 }
326 assert!(checker.verify());
327 println!(
328 "For {} items, RandomizedMultChecker took {:?}",
329 i,
330 start.elapsed()
331 );
332
333 let r = (0..i)
334 .map(|j| (g[0] * a[j] + h[0] * b[j] + k[0] * c[j]).into_affine())
335 .collect::<Vec<_>>();

Callers

nothing calls this directly

Calls 4

randFunction · 0.85
mapMethod · 0.80
add_2Method · 0.80
add_3Method · 0.80

Tested by

no test coverage detected