How crypto-starlab/thor works
THOR is a library for evaluating BERT-style models over CKKS homomorphic encryption, using Liberate as its cryptographic backend. The principal workflow is to encode model inputs and weights, run encrypted transformer operations and approximated nonlinear functions, then rely on CKKS encryption and evaluation primitives (including bootstrapping) to preserve computation on ciphertexts. The README identifies running the HE model as the product task but its notebook and downloaded data are absent. Relationships below follow shown imports, excerpts, and README statements; unsampled internals are not inferred beyond those references.
Main entry points: bert.py BERT layers · ckks_engine.py CKKS engine · ckks_context.py CKKS parameters · ckks.py THOR CKKS adapter
Components 21
Model preparation
- Model encoder
src/thor/model_encoder.py - Model data
src/thor/data.py
Encrypted inference
- BERT layers
src/thor/bert.py - Linear evaluator
src/thor/linear.py - Polynomial evaluator
src/thor/nonlinear/polynomial.py - Encrypted softmax
src/thor/nonlinear/softmax.py - Encrypted GELU
src/thor/nonlinear/gelu.py - Encrypted layer norm
src/thor/nonlinear/layernorm.py - Encrypted tanh
src/thor/nonlinear/tanh.py - THOR CKKS adapter
src/thor/ckks.py
CKKS runtime
- CKKS engine
liberate/src/liberate/fhe/ckks_engine.py - Bootstrapping
liberate/src/liberate/fhe/bootstrapping/ckks_bootstrapping.py - Encoding and encryption
liberate/src/liberate/fhe/encdec/encdec.py - Ciphertext structures
liberate/src/liberate/fhe/data_struct.py
Crypto foundations
- CKKS parameters
liberate/src/liberate/fhe/context/ckks_context.py - Prime generation
liberate/src/liberate/fhe/context/generate_primes.py - Prime cache
liberate/src/liberate/fhe/cache/cache.py - Security parameters
liberate/src/liberate/fhe/context/security_parameters.py - NTT context
liberate/src/liberate/ntt/ntt_context.py - Secure randomness
liberate/src/liberate/csprng/csprng.py
Other components
- Model user
Connections 23
- Model user → Model encoder: prepares model
- Model user → BERT layers: runs HE model
- Model encoder → THOR CKKS adapter: uses engine
src/thor/model_encoder.py - BERT layers → Linear evaluator: uses layers
src/thor/bert.py - BERT layers → Encrypted GELU: applies GELU
src/thor/bert.py - BERT layers → Encrypted softmax: applies softmax
src/thor/bert.py - BERT layers → Encrypted layer norm: applies normalization
src/thor/bert.py - BERT layers → Encrypted tanh: applies tanh
src/thor/bert.py - Encrypted GELU → Polynomial evaluator: evaluates polynomial
src/thor/nonlinear/gelu.py - Encrypted softmax → Polynomial evaluator: evaluates polynomial
src/thor/nonlinear/softmax.py - Encrypted tanh → Polynomial evaluator: evaluates polynomial
src/thor/nonlinear/tanh.py - Linear evaluator → THOR CKKS adapter: uses operations
src/thor/linear.py - THOR CKKS adapter → CKKS engine: extends engine
src/thor/ckks.py - THOR CKKS adapter → Bootstrapping: invokes bootstrapping
src/thor/ckks.py - CKKS engine → CKKS parameters: constructs context
liberate/src/liberate/fhe/ckks_engine.py - CKKS engine → NTT context: uses transforms
liberate/src/liberate/fhe/ckks_engine.py - CKKS engine → Encoding and encryption: uses encoding
liberate/src/liberate/fhe/ckks_engine.py - CKKS engine → Ciphertext structures: operates on
liberate/src/liberate/fhe/ckks_engine.py - CKKS engine → Secure randomness: uses randomness
liberate/src/liberate/fhe/ckks_engine.py - CKKS parameters → Prime generation: loads primes
liberate/src/liberate/fhe/context/ckks_context.py - CKKS parameters → Security parameters: checks security
liberate/src/liberate/fhe/context/ckks_context.py - CKKS parameters → Prime cache: uses cache
liberate/src/liberate/fhe/context/ckks_context.py - Prime cache → Prime generation: generates cache
liberate/src/liberate/fhe/cache/cache.py