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;
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
32macro_rules! impl_any {
33 ($($k: expr$(,)? )*) => {
34 $(
35impl Tables<$k> {
36 pub fn create(seed: Seed, cache: &mut TablesCache<$k>) -> Self {
41 Self(TablesGeneric::<$k>::create(
42 seed, cache,
43 ))
44 }
45
46 #[cfg(any(feature = "parallel", test))]
50 pub fn create_parallel(seed: Seed, cache: &mut TablesCache<$k>) -> Self {
51 Self(TablesGeneric::<$k>::create_parallel(
52 seed, cache,
53 ))
54 }
55
56 pub fn create_simple(seed: Seed) -> Self {
60 Self::create(seed, &mut TablesCache::default())
61 }
62
63 #[cfg(any(feature = "full-chiapos", test))]
65 pub fn find_quality<'a>(
66 &'a self,
67 challenge: &'a Challenge,
68 ) -> impl Iterator<Item = Quality> + 'a {
69 self.0.find_quality(challenge)
70 }
71
72 pub fn find_proof<'a>(
74 &'a self,
75 challenge: &'a Challenge,
76 ) -> impl Iterator<Item = [u8; 64 * $k / 8]> + 'a {
77 self.0.find_proof(challenge)
78 }
79
80 pub fn verify(
82 seed: Seed,
83 challenge: &Challenge,
84 proof_of_space: &[u8; 64 * $k as usize / 8],
85 ) -> Option<Quality> {
86 TablesGeneric::<$k>::verify(seed, challenge, proof_of_space)
87 }
88}
89 )*
90 }
91}
92
93#[cfg(feature = "full-chiapos")]
95impl_any!(15, 16, 18, 19, 21, 22, 23, 24, 25);
96#[cfg(any(feature = "full-chiapos", test))]
97impl_any!(17);
98impl_any!(20);