Compute on encrypted data at microsecond latency. Four FHE engines — BFV, CKKS, BFV-32, and FHE-IQ — for biometrics, search, ML inference, and general encrypted computation. SIMD batching packs 32 users per ciphertext.
Each engine is optimized for different security margins, arithmetic types, and performance profiles.
| Property | H33-128 (BFV) | H33-256 (BFV) | H33-CKKS | H33-BFV32 | H33-FHE-IQ |
|---|---|---|---|---|---|
| Polynomial Degree (N) | 4,096 | 8,192 | 8,192–16,384 | 2,048 | Auto-selected |
| Arithmetic Type | Exact integer | Exact integer | Approximate (float) | Exact integer | Adaptive |
| Security Level | 128-bit | 256-bit | 128–256 bit | 80-bit | 128–256 bit |
| Best For | Biometrics, auth | High-assurance | ML inference | Fast lightweight auth | Unknown workloads |
| Batch Size | 32 users/CT | 64 users/CT | Varies by precision | 16 users/CT | Auto-optimized |
| Batch Latency | ~939µs | ~3.2ms | ~5–12ms | ~420µs | Varies |
| Plaintext Modulus (t) | 65,537 | 65,537 | N/A (float) | 65,537 | Adaptive |
| PQ-Secure | Yes (lattice) | Yes (lattice) | Yes (lattice) | Yes (lattice) | Yes (lattice) |
The server computes on your data without ever decrypting it. Three primary application domains.
Enroll and verify biometric templates entirely in FHE ciphertext space. The server performs inner-product matching on encrypted vectors. Biometrics are never decrypted — not during enrollment, not during verification. 32 users matched per ciphertext in under 1ms.
Run keyword matching and similarity searches on encrypted datasets. The query is encrypted, the database is encrypted, and the results are encrypted. Only the querying client can decrypt the results. No data exposure at the search server.
Run classification and regression models on encrypted inputs using H33-CKKS. The model processes encrypted feature vectors and returns encrypted predictions. The model provider never sees the input data; the data provider never sees the model weights.
CRT-based SIMD packing exploits the polynomial structure of BFV to process multiple users in parallel within a single ciphertext.
H33-128 uses N=4096, providing 4,096 plaintext slots per ciphertext. With 128 biometric dimensions per user, this packs exactly 32 users (4096 ÷ 128 = 32). One FHE operation processes all 32 simultaneously.
Without SIMD batching, each encrypted biometric template requires ~32MB. With 32 users per ciphertext, per-user storage drops to ~256KB — a 128x reduction. This makes FHE-encrypted biometric databases practical at scale.
Whether you batch 1 user or 32, the FHE computation cost is identical (~939µs). Batching amortizes the expensive NTT and key-switching operations across all users in the ciphertext. Maximum efficiency at full batch.
SIMD batching works because t=65537 satisfies t ≡ 1 (mod 2N). This enables CRT decomposition of the plaintext space into N independent slots. Each slot holds one coefficient of one user’s biometric vector. The math is exact — no approximation error.
Client-side encryption, server-side computation on ciphertexts, client-side decryption.
// 1. Generate FHE keys (client-side) const { publicKey, secretKey } = await h33.fhe.generateKeys({ engine: 'h33-128', // BFV, N=4096, t=65537 batchSize: 32 // 32 users per ciphertext }); // 2. Encrypt biometric templates (client-side) const ciphertext = await h33.fhe.encrypt({ data: biometricVectors, // 32 x 128-dim vectors publicKey: publicKey }); // 3. Compute on encrypted data (server-side) const result = await h33.fhe.compute({ operation: 'inner_product', // Biometric matching ciphertext: ciphertext, enrolledTemplate: enrolledCT // Pre-encrypted template }); // Server NEVER sees plaintext — computation on ciphertexts only // 4. Decrypt result (client-side) const scores = await h33.fhe.decrypt({ ciphertext: result, secretKey: secretKey }); // scores → [0.97, 0.12, 0.89, ...] (32 match scores) // ~939µs total for 32-user batch