Privacy-preserving tokens where servers embed metadata invisible to clients.
ATHM lets servers embed categorical data (like risk scores or user tiers) in tokens without clients knowing. Useful for anonymous authentication with hidden authorization levels.
Add to your Cargo.toml:
[dependencies] athm = "0.1.0"
use athm::*; // Setup with 4 metadata buckets (e.g., risk levels 0-3) let params = Params::new(4, b"deployment_id".to_vec()).unwrap(); let mut rng = rand::thread_rng(); let (private_key, public_key, proof) = key_gen(¶ms, &mut rng); // Client creates blinded request let (context, request) = token_request(&public_key, &proof, ¶ms, &mut rng).unwrap(); // Server responds with hidden metadata let hidden_metadata = 2; let response = token_response( &private_key, &public_key, &request, hidden_metadata, ¶ms, &mut rng ).unwrap(); // Client unblinds token let token = finalize_token( &context, &public_key, &request, &response, ¶ms, &mut rng ).unwrap(); // Server verifies and recovers metadata let metadata = verify_token(&private_key, &token, ¶ms).unwrap(); assert_eq!(metadata, hidden_metadata);
To update the test vectors, run: cargo run --bin generate-test-vectors --features="test-vectors" > test_vectors.json
To check the test vectors, run: cargo run --bin check-test-vectors --features="test-vectors"
This is not an officially supported Google product. The software is provided as-is without any guarantees or warranties, express or implied.