1pub mod checksum;
6pub mod decode;
7pub mod encode;
8pub mod gf32;
9pub mod hrp;
10pub mod iter;
11pub mod segwit;
12
13use checksum::{Checksum, PackedNull};
14
15#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
17pub enum NoChecksum {}
18
19#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
23pub enum Bech32 {}
24
25#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
29pub enum Bech32m {}
30
31impl Checksum for NoChecksum {
32 type MidstateRepr = PackedNull;
33 const CODE_LENGTH: usize = usize::MAX;
34 const CHECKSUM_LENGTH: usize = 0;
35 const GENERATOR_SH: [PackedNull; 5] = [PackedNull; 5];
36 const TARGET_RESIDUE: PackedNull = PackedNull;
37}
38
39const GEN: [u32; 5] = [0x3b6a_57b2, 0x2650_8e6d, 0x1ea1_19fa, 0x3d42_33dd, 0x2a14_62b3];
41
42impl Checksum for Bech32 {
43 type MidstateRepr = u32;
44 const CODE_LENGTH: usize = 1023;
45 const CHECKSUM_LENGTH: usize = 6;
46 const GENERATOR_SH: [u32; 5] = GEN;
47 const TARGET_RESIDUE: u32 = 1;
48}
49impl Checksum for Bech32m {
51 type MidstateRepr = u32;
52 const CODE_LENGTH: usize = 1023;
53 const CHECKSUM_LENGTH: usize = 6;
54 const GENERATOR_SH: [u32; 5] = GEN;
55 const TARGET_RESIDUE: u32 = 0x2bc830a3;
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61
62 #[test]
63 fn bech32_sanity() { Bech32::sanity_check(); }
64
65 #[test]
66 fn bech32m_sanity() { Bech32m::sanity_check(); }
67}