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

Function timing_ark_ops

utils/src/msm.rs:117–308  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

115
116 #[test]
117 fn timing_ark_ops() {
118 let mut rng = StdRng::seed_from_u64(0u64);
119 let context = WnafContext::new(4);
120 let mut group_elem = G1::rand(&mut rng);
121 let group_elem_affine = group_elem.into_affine();
122 let table = context.table(group_elem);
123
124 let mut g1 = G1::rand(&mut rng).into_affine();
125 let mut g2 = G2::rand(&mut rng).into_affine();
126 let e = Fr::rand(&mut rng);
127
128 let start = Instant::now();
129 g1 = (g1 * e).into_affine();
130 println!("G1 scalar multiplication time {:?}", start.elapsed());
131
132 let start = Instant::now();
133 g2 = (g2 * e).into_affine();
134 println!("G2 scalar multiplication time {:?}", start.elapsed());
135
136 let start = Instant::now();
137 let mut _gt = <Bls12_381 as Pairing>::pairing(g1, g2);
138 println!("pairing time {:?}", start.elapsed());
139
140 let start = Instant::now();
141 _gt = _gt * e;
142 println!("GT multiplication time {:?}", start.elapsed());
143
144 let mut d0 = Duration::default();
145 let mut d1 = Duration::default();
146 let mut d2 = Duration::default();
147 let mut d3 = Duration::default();
148
149 for _ in 0..100 {
150 let e = Fr::rand(&mut rng);
151
152 let start = Instant::now();
153 let mut temp = group_elem_affine.into_group();
154 temp *= e;
155 d0 += start.elapsed();
156
157 let start = Instant::now();
158 let temp1 = context.mul_with_table(&table, &e).unwrap();
159 d1 += start.elapsed();
160
161 assert_eq!(temp, temp1);
162
163 let start = Instant::now();
164 group_elem *= e;
165 d2 += start.elapsed();
166
167 let start = Instant::now();
168 let _ = group_elem_affine.mul_bigint(e.into_bigint());
169 d3 += start.elapsed();
170 }
171
172 println!("d0={:?}", d0);
173 println!("d1={:?}", d1);
174 println!("d2={:?}", d2);

Callers

nothing calls this directly

Calls 4

randFunction · 0.85
mapMethod · 0.80
multiplyMethod · 0.80

Tested by

no test coverage detected