use core::fmt;
pub const SINCERITY_BIT_MASK: u32 = 0x80000000;
const MANAGED_SPACE_MAX: u32 = 0x7FFFFFFF;
#[allow(dead_code)]
const COMMUNITY_SPACE_MAX: u32 = 0xFFFFFFFF;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[repr(u8)]
pub enum TrustLevel {
Managed = 0,
Community = 1,
}
impl fmt::Display for TrustLevel {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TrustLevel::Managed => write!(f, "Managed (Sincere)"),
TrustLevel::Community => write!(f, "Community (Unverified)"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ValidationResult {
Trusted,
Unverified,
InvalidSignature,
InvalidId,
}
impl fmt::Display for ValidationResult {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ValidationResult::Trusted => write!(f, "Trusted"),
ValidationResult::Unverified => write!(f, "Warning: Unverified"),
ValidationResult::InvalidSignature => write!(f, "Error: Invalid PQC Signature"),
ValidationResult::InvalidId => write!(f, "Error: Invalid ID Range"),
}
}
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct Atom {
pub global_id: u32,
pub payload: [u8; 28], }
impl Atom {
#[inline]
pub fn new(global_id: u32, payload: [u8; 28]) -> Self {
Self { global_id, payload }
}
#[inline]
pub fn with_id(global_id: u32) -> Self {
Self {
global_id,
payload: [0; 28],
}
}
}
#[inline]
pub fn get_trust_level(id: u32) -> TrustLevel {
if (id & SINCERITY_BIT_MASK) == 0 {
TrustLevel::Managed
} else {
TrustLevel::Community
}
}
#[inline]
pub fn is_managed_id(id: u32) -> bool {
id <= MANAGED_SPACE_MAX
}
#[inline]
pub fn is_community_id(id: u32) -> bool {
id > MANAGED_SPACE_MAX
}
pub fn verify_pqc_signature(_atom: &Atom) -> bool {
false }
pub fn validate_atom(atom: &Atom) -> ValidationResult {
let trust_level = get_trust_level(atom.global_id);
match trust_level {
TrustLevel::Managed => {
if verify_pqc_signature(atom) {
ValidationResult::Trusted
} else {
ValidationResult::InvalidSignature
}
}
TrustLevel::Community => {
ValidationResult::Unverified
}
}
}
pub struct SparseIdGenerator {
state: u64,
counter: u64,
}
impl SparseIdGenerator {
pub fn new(seed: Option<u64>) -> Self {
Self {
state: seed.unwrap_or({
0x123456789ABCDEF0 }),
counter: 0,
}
}
pub fn generate_sparse_id(&mut self) -> u32 {
self.state ^= self.state << 13;
self.state ^= self.state >> 7;
self.state ^= self.state << 17;
self.counter += 1;
let combined = self.state.wrapping_add(self.counter);
let sparse_value =
((combined & 0x7FFFFFFF) | ((combined & 0x0000FFFF) << 16) & 0x7FFFFFFF) as u32;
sparse_value & MANAGED_SPACE_MAX
}
pub fn generate_sparse_batch(&mut self, count: usize) -> Vec<u32> {
let mut ids = Vec::with_capacity(count);
for _ in 0..count {
ids.push(self.generate_sparse_id());
}
ids
}
}
impl Default for SparseIdGenerator {
fn default() -> Self {
Self::new(None)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_trust_level_determination() {
assert_eq!(get_trust_level(0x00000000), TrustLevel::Managed);
assert_eq!(get_trust_level(0x12345678), TrustLevel::Managed);
assert_eq!(get_trust_level(0x7FFFFFFF), TrustLevel::Managed);
assert_eq!(get_trust_level(0x80000000), TrustLevel::Community);
assert_eq!(get_trust_level(0x80000001), TrustLevel::Community);
assert_eq!(get_trust_level(0xFFFFFFFF), TrustLevel::Community);
}
#[test]
fn test_space_validation() {
assert!(is_managed_id(0x00000000));
assert!(is_managed_id(0x12345678));
assert!(is_managed_id(0x7FFFFFFF));
assert!(!is_managed_id(0x80000000));
assert!(!is_community_id(0x7FFFFFFF));
assert!(is_community_id(0x80000000));
assert!(is_community_id(0xFFFFFFFF));
}
#[test]
fn test_atom_validation() {
let managed_atom = Atom::with_id(0x12345678);
let community_atom = Atom::with_id(0x80000001);
assert_eq!(validate_atom(&community_atom), ValidationResult::Unverified);
assert_eq!(
validate_atom(&managed_atom),
ValidationResult::InvalidSignature
);
}
#[test]
fn test_sparse_id_generation() {
let mut generator = SparseIdGenerator::new(Some(12345));
let id1 = generator.generate_sparse_id();
let id2 = generator.generate_sparse_id();
let id3 = generator.generate_sparse_id();
assert!(is_managed_id(id1));
assert!(is_managed_id(id2));
assert!(is_managed_id(id3));
assert_ne!(id1, id2);
assert_ne!(id2, id3);
assert_ne!(id1, id3);
assert!(id2.abs_diff(id1) > 1);
assert!(id3.abs_diff(id2) > 1);
}
#[test]
fn test_batch_generation() {
let mut generator = SparseIdGenerator::new(Some(54321));
let batch = generator.generate_sparse_batch(100);
assert_eq!(batch.len(), 100);
for id in &batch {
assert!(is_managed_id(*id));
}
let mut unique_ids = batch.clone();
unique_ids.sort();
unique_ids.dedup();
assert_eq!(unique_ids.len(), 100);
}
}