Skip to main content
Complete reference of supported FHE operations.

Arithmetic Operations

OperationMethodOperatorReturns
Additiona.add(&b)?&a + &bEncrypted<T>
Subtractiona.sub(&b)?&a - &bEncrypted<T>
Multiplicationa.mul(&b)?&a * &bEncrypted<T>

Comparison Operations

OperationMethodReturns
Greater or Equala.ge(&b)?EncryptedBool
Greater Thana.gt(&b)?EncryptedBool
Less or Equala.le(&b)?EncryptedBool
Less Thana.lt(&b)?EncryptedBool
Equala.eq_enc(&b)?EncryptedBool

Min/Max Operations

OperationMethodReturns
Minimuma.min(&b)?Encrypted<T>
Maximuma.max(&b)?Encrypted<T>

Conditional Operations

OperationMethodReturns
Selectcond.select(&true_val, &false_val)?Encrypted<T>

Supported Types

TypeRustRange
u8Encrypted<u8>0-255
u32Encrypted<u32>0-4,294,967,295
u64Encrypted<u64>0-18,446,744,073,709,551,615

Operation Costs

OperationRelative Cost
Addition1x
Subtraction1x
Multiplication2-3x
Comparison5-10x
Min/Max5-10x
Select5-10x

Syscalls

Low-level syscall functions:
use privora_sdk_program::ops::syscalls::*;

fn fhe_add(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_sub(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_mul(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_ge(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_gt(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_le(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_lt(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_eq(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_min(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;
fn fhe_max(a: &[u8], b: &[u8]) -> Result<Vec<u8>, ProgramError>;