halo2curves_axiom/bn256/
mod.rs
1mod curve;
2mod engine;
3mod fq;
4mod fq12;
5mod fq2;
6mod fq6;
7mod fr;
8
9#[cfg(feature = "asm")]
10mod assembly;
11
12pub use curve::*;
13pub use engine::*;
14pub use fq::*;
15pub use fq12::*;
16pub use fq2::*;
17pub use fq6::*;
18pub use fr::*;
19
20#[cfg(test)]
21mod test {
22 use super::G1 as Bn256Point;
23 use group::GroupEncoding;
24 use pasta_curves::arithmetic::CurveExt;
25 use rand_core::{RngCore, SeedableRng};
26
27 #[test]
28 fn test_consistent_hash_to_curve() {
29 let num_vecs = 10;
32
33 let expected_results = [
35 "e0c5a6834e0329b4f8bdc91144b3e687ac9d810a8e899415267db9cfbf61e91e",
36 "7052a20bee99cbe054fdd8b2e336db3ed3e9a265229e44ab8197c5eabdef2b0b",
37 "2f058acc133957074ac79e9b9b1867a0cf3d13df7aa7de7f48e9a6be7d96aa6d",
38 "b2ff44a25693b811f35e33feb3e99ad9ba0d06425a3ffd5e79cef63d20143314",
39 "ab2f6d71d2fde51546d8a5782aa9f707e585b84644470f0c876784dbebd30c55",
40 "6a4e0e30f37a8d1b92b8cf08df3735a36b4937ee455a9dc5f9283a13530db144",
41 "f1c69be8c5f5f9e28b0e9f76ab77651a7dcaaae371fbba66450cbcee0ed5b16b",
42 "e86267c2e3355d7a6f664a0ea71374406337d452a3f9a294a0594df53c08df21",
43 "03cf55ca983ecd8a2e2baae18d979d97d688a978d829701c66a14d7c4da58e62",
44 "5302c2cfe3c909e9378d08c951bb33d0813818a1baf734379aac8aaa47f38f0d",
45 ];
46
47 let mut seeded_rng = rand_chacha::ChaChaRng::seed_from_u64(0u64);
48 let uniform_bytes = std::iter::from_fn(|| {
49 let mut bytes = [0u8; 32];
50 seeded_rng.fill_bytes(&mut bytes);
51 Some(bytes)
52 })
53 .take(num_vecs)
54 .collect::<Vec<_>>();
55 let hash = Bn256Point::hash_to_curve("from_uniform_bytes");
56 for i in 0..num_vecs {
57 let p = hash(&uniform_bytes[i]);
58 let expected_result = hex::decode(expected_results[i]).unwrap();
59 assert_eq!(
60 p.to_bytes().as_ref(),
61 &expected_result[..],
62 "hash_to_curve_print failed, expected: {}, got: {}",
63 expected_results[i],
64 hex::encode(p.to_bytes().as_ref())
65 );
66 }
67 }
68}