← Back

Module lib

<p>Joule Standard Library - Fully Homomorphic Encryption Privacy-preserving computation on encrypted data Compute without ever decrypting</p>

enum SecurityLevel

Security level for FHE operations

Source: lib.joule:15

fn bits(&self) -> usize

Get the security level in bits

Source: lib.joule:26

struct SecretKey

FHE secret key (NEVER share this) Used for decryption only

Source: lib.joule:41

fn zeroize(&mut self)

Securely zeroize key on drop

Source: lib.joule:47

struct PublicKey

FHE public key (safe to share) Used for encryption only

Source: lib.joule:54

fn to_bytes(&self) -> Vec<u8>

Serialize to bytes for transmission

Source: lib.joule:60

fn from_bytes(bytes: &[u8]) -> Result<Self, FheError>

Deserialize from bytes

Source: lib.joule:65

struct ServerKey

FHE server key (for computation) Contains bootstrapping keys for homomorphic operations

Source: lib.joule:73

fn to_bytes(&self) -> Vec<u8>

Serialize to bytes

Source: lib.joule:79

fn from_bytes(bytes: &[u8]) -> Result<Self, FheError>

Deserialize from bytes

Source: lib.joule:84

fn size(&self) -> usize

Get the size in bytes (can be large, ~50MB for 128-bit security)

Source: lib.joule:90

struct KeySet

Complete key set

Source: lib.joule:96

struct FheContext

FHE Context for managing encryption operations

Source: lib.joule:107

fn new(security_level: SecurityLevel) -> Self

Create a new FHE context with specified security level

Source: lib.joule:113

fn default() -> Self

Create with 128-bit security (recommended default)

Source: lib.joule:118

fn generate_keys(&self) -> KeySet

Source: lib.joule:125

fn security_level(&self) -> &SecurityLevel

Get the security level

Source: lib.joule:135

struct EncryptedBool

Encrypted boolean value

Source: lib.joule:145

fn encrypt(value: bool, pk: &PublicKey) -> Self

Source: lib.joule:152

fn decrypt(&self, sk: &SecretKey) -> bool

Source: lib.joule:159

fn not(&self, server_key: &ServerKey) -> Self

Source: lib.joule:165

fn and(&self, other: &EncryptedBool, server_key: &ServerKey) -> Self

Source: lib.joule:172

fn or(&self, other: &EncryptedBool, server_key: &ServerKey) -> Self

Source: lib.joule:179

fn xor(&self, other: &EncryptedBool, server_key: &ServerKey) -> Self

Source: lib.joule:186

fn nand(&self, other: &EncryptedBool, server_key: &ServerKey) -> Self

Source: lib.joule:193

fn nor(&self, other: &EncryptedBool, server_key: &ServerKey) -> Self

Source: lib.joule:200

fn mux(&self, a: &EncryptedBool, b: &EncryptedBool, server_key: &ServerKey) -> Self

Source: lib.joule:207

struct EncryptedU8

Encrypted unsigned 8-bit integer

Source: lib.joule:214

fn encrypt(value: u8, pk: &PublicKey) -> Self

Source: lib.joule:220

fn decrypt(&self, sk: &SecretKey) -> u8

Source: lib.joule:226

fn add(&self, other: &EncryptedU8, server_key: &ServerKey) -> Self

Source: lib.joule:231

fn sub(&self, other: &EncryptedU8, server_key: &ServerKey) -> Self

Source: lib.joule:237

fn mul(&self, other: &EncryptedU8, server_key: &ServerKey) -> Self

Source: lib.joule:243

fn add_scalar(&self, scalar: u8, server_key: &ServerKey) -> Self

Source: lib.joule:250

fn mul_scalar(&self, scalar: u8, server_key: &ServerKey) -> Self

Source: lib.joule:257

struct EncryptedU32

Encrypted unsigned 32-bit integer

Source: lib.joule:264

fn encrypt(value: u32, pk: &PublicKey) -> Self

Source: lib.joule:270

fn decrypt(&self, sk: &SecretKey) -> u32

Source: lib.joule:276

fn add(&self, other: &EncryptedU32, server_key: &ServerKey) -> Self

Source: lib.joule:281

fn sub(&self, other: &EncryptedU32, server_key: &ServerKey) -> Self

Source: lib.joule:287

fn mul(&self, other: &EncryptedU32, server_key: &ServerKey) -> Self

Source: lib.joule:293

fn add_scalar(&self, scalar: u32, server_key: &ServerKey) -> Self

Source: lib.joule:299

fn mul_scalar(&self, scalar: u32, server_key: &ServerKey) -> Self

Source: lib.joule:305

fn lt(&self, other: &EncryptedU32, server_key: &ServerKey) -> EncryptedBool

Source: lib.joule:312

fn eq(&self, other: &EncryptedU32, server_key: &ServerKey) -> EncryptedBool

Source: lib.joule:319

fn select(&self, other: &EncryptedU32, condition: &EncryptedBool, server_key: &ServerKey) -> Self

Source: lib.joule:326

fn bitand(&self, other: &EncryptedU32, server_key: &ServerKey) -> Self

Source: lib.joule:333

fn bitor(&self, other: &EncryptedU32, server_key: &ServerKey) -> Self

Source: lib.joule:340

fn bitxor(&self, other: &EncryptedU32, server_key: &ServerKey) -> Self

Source: lib.joule:347

fn shl(&self, amount: u32, server_key: &ServerKey) -> Self

Source: lib.joule:354

fn shr(&self, amount: u32, server_key: &ServerKey) -> Self

Source: lib.joule:361

struct EncryptedU64

Encrypted unsigned 64-bit integer

Source: lib.joule:368

fn encrypt(value: u64, pk: &PublicKey) -> Self

Source: lib.joule:374

fn decrypt(&self, sk: &SecretKey) -> u64

Source: lib.joule:380

fn add(&self, other: &EncryptedU64, server_key: &ServerKey) -> Self

Source: lib.joule:385

fn sub(&self, other: &EncryptedU64, server_key: &ServerKey) -> Self

Source: lib.joule:391

fn mul(&self, other: &EncryptedU64, server_key: &ServerKey) -> Self

Source: lib.joule:397

struct EncryptedI32

Encrypted signed 32-bit integer

Source: lib.joule:404

fn encrypt(value: i32, pk: &PublicKey) -> Self

Source: lib.joule:410

fn decrypt(&self, sk: &SecretKey) -> i32

Source: lib.joule:416

fn add(&self, other: &EncryptedI32, server_key: &ServerKey) -> Self

Source: lib.joule:421

fn sub(&self, other: &EncryptedI32, server_key: &ServerKey) -> Self

Source: lib.joule:427

fn mul(&self, other: &EncryptedI32, server_key: &ServerKey) -> Self

Source: lib.joule:433

fn neg(&self, server_key: &ServerKey) -> Self

Source: lib.joule:439

enum FheError

Errors from FHE operations

Source: lib.joule:450

struct EncryptedArray

Encrypted array of u32 values

Source: lib.joule:466

fn encrypt(values: &[u32], pk: &PublicKey) -> Self

Source: lib.joule:473

fn decrypt(&self, sk: &SecretKey) -> Vec<u32>

Source: lib.joule:482

fn len(&self) -> usize

Get length

Source: lib.joule:489

fn get(&self, index: usize) -> Option<&EncryptedU32>

Get element at index

Source: lib.joule:494

fn sum(&self, server_key: &ServerKey) -> EncryptedU32

Source: lib.joule:500

fn add(&self, other: &EncryptedArray, server_key: &ServerKey) -> EncryptedArray

Source: lib.joule:510

fn dot(&self, other: &EncryptedArray, server_key: &ServerKey) -> EncryptedU32

Source: lib.joule:521