1pub mod checksum;
7mod infinity_format;
8mod memory_map;
9mod rule_schema;
10mod simd_tokenizer;
11mod string_table;
12
13pub use checksum::{Blake3Checksum, Blake3Hasher, compute_blake3, verify_blake3};
14pub use infinity_format::{INFINITY_MAGIC, InfinityHeader, InfinityRule};
15pub use memory_map::{MappedRule, RuleMapping};
16pub use rule_schema::{BinaryRule, BinaryStep, RuleFlags, SectionOffsets};
17pub use simd_tokenizer::{SimdTokenizer, Token, TokenType};
18pub use string_table::{StringId, StringTable, StringTableBuilder};
19
20use crate::Result;
21
22pub const INFINITY_VERSION: u16 = 1;
24
25pub const MAX_RULE_SIZE: usize = 10 * 1024 * 1024;
27
28pub fn load_zero_copy(path: &std::path::Path) -> Result<MappedRule> {
30 MappedRule::open(path)
31}
32
33pub fn verify_integrity(data: &[u8]) -> Result<bool> {
35 if data.len() < std::mem::size_of::<InfinityHeader>() {
36 return Ok(false);
37 }
38
39 let header = InfinityHeader::from_bytes(data)?;
40
41 if &header.magic != INFINITY_MAGIC {
43 return Ok(false);
44 }
45
46 let payload = &data[std::mem::size_of::<InfinityHeader>()..];
48 Ok(verify_blake3(payload, &header.checksum))
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn test_infinity_version() {
57 assert_eq!(INFINITY_VERSION, 1);
58 }
59
60 #[test]
61 fn test_max_rule_size() {
62 assert_eq!(MAX_RULE_SIZE, 10 * 1024 * 1024);
63 }
64}