Data versioning
Data versioning and backward compatibility
Saving and loading versioned data
# Cargo.toml
[dependencies]
# ...
tfhe = { version = "~1.5.3", features = ["integer"] }
tfhe-versionable = "0.6.0"
bincode = "1.3.3"// main.rs
use std::io::Cursor;
use tfhe::prelude::{FheDecrypt, FheEncrypt};
use tfhe::{ClientKey, ConfigBuilder, FheUint8};
use tfhe_versionable::{Unversionize, Versionize};
fn main() {
let config = ConfigBuilder::default().build();
let client_key = ClientKey::generate(config);
let msg = 1;
let ct = FheUint8::encrypt(msg, &client_key);
// Versionize the data and store it
let mut serialized_data = Vec::new();
let versioned_client_key = client_key.versionize();
let versioned_ct = ct.versionize();
bincode::serialize_into(&mut serialized_data, &versioned_client_key).unwrap();
bincode::serialize_into(&mut serialized_data, &versioned_ct).unwrap();
// Load the data. This can be done in the future with a more recent version of tfhe-rs
let mut serialized_data = Cursor::new(serialized_data);
let versioned_client_key = bincode::deserialize_from(&mut serialized_data).unwrap();
let versioned_ct = bincode::deserialize_from(&mut serialized_data).unwrap();
let loaded_client_key =
ClientKey::unversionize(versioned_client_key).unwrap();
let loaded_ct =
FheUint8::unversionize(versioned_ct).unwrap();
let output: u8 = loaded_ct.decrypt(&loaded_client_key);
assert_eq!(msg, output);
}Versionize
Unversionize
Breaking changes
Last updated
Was this helpful?