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

Function basic

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

Source from the content-addressed store, hash-verified

135
136 #[test]
137 fn basic() {
138 let mut rng = OsRng::default();
139 let g1 = G1Affine::rand(&mut rng);
140 let g2 = G1Affine::rand(&mut rng);
141 let g3 = G1Affine::rand(&mut rng);
142 let h1 = G1Affine::rand(&mut rng);
143 let h2 = G1Affine::rand(&mut rng);
144 let h3 = G1Affine::rand(&mut rng);
145
146 let a1 = Fr::rand(&mut rng);
147 let a2 = Fr::rand(&mut rng);
148 let a3 = Fr::rand(&mut rng);
149 let a4 = Fr::rand(&mut rng);
150 let a5 = Fr::rand(&mut rng);
151 let a6 = Fr::rand(&mut rng);
152
153 let c1 = (g1 * a1).into_affine();
154 let c2 = (g1 * a2).into_affine();
155 let c3 = (g1 * a3).into_affine();
156
157 let mut checker = RandomizedMultChecker::new_using_rng(&mut rng);
158 checker.add_1(g1, &a1, c1);
159 checker.add_1(g1, &a2, c2);
160 checker.add_1(g1, &a3, c3);
161 assert!(checker.verify());
162
163 // Checking if g1 * a2 == c3 fails
164 let mut checker = RandomizedMultChecker::new_using_rng(&mut rng);
165 checker.add_1(g1, &a1, c1);
166 checker.add_1(g1, &a2, c2); // this is invalid
167 checker.add_1(g1, &a2, c3);
168 assert!(!checker.verify());
169
170 let c1 = (g1 * a1).into_affine();
171 let c2 = (g2 * a2).into_affine();
172 let c3 = (g3 * a3).into_affine();
173
174 let mut checker = RandomizedMultChecker::new_using_rng(&mut rng);
175 checker.add_1(g1, &a1, c1);
176 checker.add_1(g2, &a2, c2);
177 checker.add_1(g3, &a3, c3);
178 assert!(checker.verify());
179
180 // Checking if g2 * a3 == c3 fails
181 let mut checker = RandomizedMultChecker::new_using_rng(&mut rng);
182 checker.add_1(g1, &a1, c1);
183 checker.add_1(g2, &a2, c2); // this is invalid
184 checker.add_1(g2, &a3, c3);
185 assert!(!checker.verify());
186
187 let c1 = (g1 * a1 + h1 * a4).into_affine();
188 let c2 = (g1 * a2 + h1 * a5).into_affine();
189 let c3 = (g1 * a3 + h1 * a6).into_affine();
190
191 let mut checker = RandomizedMultChecker::new_using_rng(&mut rng);
192 checker.add_2(g1, &a1, h1, &a4, c1);
193 checker.add_2(g1, &a2, h1, &a5, c2);
194 checker.add_2(g1, &a3, h1, &a6, c3);

Callers

nothing calls this directly

Calls 5

randFunction · 0.85
add_1Method · 0.80
add_2Method · 0.80
add_3Method · 0.80
add_manyMethod · 0.80

Tested by

no test coverage detected