ab_proof_of_space/
chiapos.rs1mod constants;
4mod table;
5mod tables;
6mod utils;
7
8pub use crate::chiapos::table::TablesCache;
9use crate::chiapos::table::{metadata_size_bytes, num_buckets};
10use crate::chiapos::tables::TablesGeneric;
11use crate::chiapos::utils::EvaluatableUsize;
12
13type Seed = [u8; 32];
14type Challenge = [u8; 32];
15#[cfg(not(any(feature = "full-chiapos", test)))]
16type Quality = ();
17#[cfg(any(feature = "full-chiapos", test))]
18type Quality = [u8; 32];
19
20#[derive(Debug)]
22pub struct Tables<const K: u8>(TablesGeneric<K>)
23where
24 EvaluatableUsize<{ metadata_size_bytes(K, 1) }>: Sized,
25 EvaluatableUsize<{ metadata_size_bytes(K, 2) }>: Sized,
26 EvaluatableUsize<{ metadata_size_bytes(K, 3) }>: Sized,
27 EvaluatableUsize<{ metadata_size_bytes(K, 4) }>: Sized,
28 EvaluatableUsize<{ metadata_size_bytes(K, 5) }>: Sized,
29 EvaluatableUsize<{ metadata_size_bytes(K, 6) }>: Sized,
30 EvaluatableUsize<{ metadata_size_bytes(K, 7) }>: Sized,
31 [(); 1 << K]:,
32 [(); num_buckets(K)]:;
33
34macro_rules! impl_any {
35 ($($k: expr$(,)? )*) => {
36 $(
37impl Tables<$k> {
38 pub fn create(seed: Seed, cache: &mut TablesCache<$k>) -> Self {
43 Self(TablesGeneric::<$k>::create(
44 seed, cache,
45 ))
46 }
47
48 #[cfg(any(feature = "parallel", test))]
52 pub fn create_parallel(seed: Seed, cache: &mut TablesCache<$k>) -> Self {
53 Self(TablesGeneric::<$k>::create_parallel(
54 seed, cache,
55 ))
56 }
57
58 pub fn create_simple(seed: Seed) -> Self {
62 Self::create(seed, &mut TablesCache::default())
63 }
64
65 #[cfg(any(feature = "full-chiapos", test))]
67 pub fn find_quality<'a>(
68 &'a self,
69 challenge: &'a Challenge,
70 ) -> impl Iterator<Item = Quality> + 'a {
71 self.0.find_quality(challenge)
72 }
73
74 pub fn find_proof<'a>(
76 &'a self,
77 first_challenge_bytes: [u8; 4],
78 ) -> impl Iterator<Item = [u8; 64 * $k / 8]> + 'a {
79 self.0.find_proof(first_challenge_bytes)
80 }
81
82 pub fn verify(
84 seed: &Seed,
85 challenge: &Challenge,
86 proof_of_space: &[u8; 64 * $k as usize / 8],
87 ) -> Option<Quality> {
88 TablesGeneric::<$k>::verify(seed, challenge, proof_of_space)
89 }
90}
91 )*
92 }
93}
94
95#[cfg(feature = "full-chiapos")]
97impl_any!(15, 16, 18, 19, 21, 22, 23, 24, 25);
98#[cfg(any(feature = "full-chiapos", test))]
99impl_any!(17);
100impl_any!(20);