fhel 0.0.5 fhel: ^0.0.5 copied to clipboard
Natively supports Fully Homomorphic Encryption operations on sensitive data without revealing it. Supports Key Derivation, Encryption, Decryption, and Mathematical operations.
FHEL #
A Fully Homomorphic Encryption Library (FHEL) interface that exposes the basic functionalities of Microsoft SEAL. Supports Android and Linux.
Usage #
To use this plugin, add fhel
as a dependency in your pubspec.yaml
For Linux #
⚠️ Binary is not packaged for Linux distribution. The underlying C/C++ library must be compiled and stored in bin/libfhel.so
. This only has to be done once.
$ dart pub get
$ cd ~/.pub-cache/hosted/pub.dev/fhel-{VERSION}
$ make dist
$ cp dart/bin /path/to/working/directory
import 'package:fhel/seal.dart';
// Generate context w/ parameters
Map<String, int> ctx = {
'polyModDegree': 4096,
'ptMod': 1024,
'secLevel': 128
};
// SEALContext with BFV Scheme
final bfv = Seal('bfv');
// Initialize context and verify
String status = bfv.genContext(ctx);
assert(status == 'success: valid', status);
// Generate public/private keys
bfv.genKeys();
// Create Plaintext obj, contains pointer C obj in memory
final plainOne = bfv.plain(2.toRadixString(16));
final plainTwo = bfv.plain(2.toRadixString(16));
// Create Ciphertext obj, contain pointer to SEALCiphertext
final cipherOne = bfv.encrypt(plainOne);
// Add Ciphertexts, enc(1) + 2 = enc(3)
final cipherAdd = bfv.addPlain(cipherOne, plainTwo);
final plainAdd = bfv.decrypt(cipherAdd);
// Decode Plaintext to int
final result = int.parse(plainAdd.text, radix: 16);
assert(result == 4, result);