lossy_bootstrap
Engine.lossy_bootstrap(ciphertext, relinearization_key, conjugation_key, lossy_bootstrap_key)
- Restores the level, which is the remaining number of multiplications you can do with a ciphertext, of a ciphertext. Using the lossy bootstrap key is faster but requires more memory than using the small bootstrap key. This function can only be used if the engine is initialized for bootstrapping.
- Input:
- Ciphertext: The ciphertext to be bootstrapped. The values must be within the range [−1,1]. The level of the ciphertext must be at least the stage_count of the lossy bootstrap key
- RelinearizationKey
- ConjugationKey
- LossyBootstrapKey
- Output:
- Ciphertext: restored to a level of 16 - stage_count.
from desilofhe import Engine
engine = Engine(use_bootstrap=True)
secret_key = engine.create_secret_key()
public_key = engine.create_public_key(secret_key)
relinearization_key = engine.create_relinearization_key(secret_key)
conjugation_key = engine.create_conjugation_key(secret_key)
lossy_bootstrap_key = engine.create_lossy_bootstrap_key(
secret_key, stage_count=3
)
message = [-1, 0, 1]
ciphertext = engine.encrypt(message, public_key, level=0)
bootstrapped = engine.lossy_bootstrap(
ciphertext, relinearization_key, conjugation_key, lossy_bootstrap_key
)
Engine.lossy_bootstrap(ciphertext, relinearization_key, conjugation_key, rotation_key, small_bootstrap_key, stage_count=3)
- Restores the level, which is the remaining number of multiplications you can do with a ciphertext, of a ciphertext. Using the small bootstrap key requires less memory than using the lossy bootstrap key, but is slower. This function can only be used if the engine is initialized for bootstrapping.
- Input:
- Ciphertext: The ciphertext to be bootstrapped. The values must be within the range [−1,1]. The level of the ciphertext must be at least the stage_count input value.
- ConjugationKey
- RotationKey
- SmallBootstrapKey
- stage_count: optional
- Specifies the number of levels used in coefficient to the slot function and the slot to coefficient function of bootstrapping algorithm. The default value is 3, and values from 3 to 5 are supported. The larger the stage count, the faster the bootstrapping, but the lower level of the final result.
- Output:
- Ciphertext: restored to a level of 16 - stage_count.
from desilofhe import Engine
engine = Engine(use_bootstrap=True)
secret_key = engine.create_secret_key()
public_key = engine.create_public_key(secret_key)
relinearization_key = engine.create_relinearization_key(secret_key)
conjugation_key = engine.create_conjugation_key(secret_key)
rotation_key = engine.create_rotation_key(secret_key)
small_bootstrap_key = engine.create_small_bootstrap_key(secret_key)
message = [-1, 0, 1]
ciphertext = engine.encrypt(message, public_key, level=0)
bootstrapped = engine.lossy_bootstrap(
ciphertext,
relinearization_key,
conjugation_key,
rotation_key,
small_bootstrap_key,
)
bootstrapped_stage_count_5 = engine.lossy_bootstrap(
ciphertext,
relinearization_key,
conjugation_key,
rotation_key,
small_bootstrap_key,
stage_count=5,
)
Stage Count
Stage counts of 3, 4, and 5 are supported by default. For sparse bootstrapping, the following values are supported.
key_size | slot_count | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
medium | 1 | ✅ | ||||
medium | 2 | ✅ | ||||
medium | 3 | ✅ | ||||
medium | 4 | ✅ | ✅ | |||
medium | 5 | ✅ | ✅ | |||
medium | 6 | ✅ | ||||
medium | 7 | ✅ | ✅ | |||
medium | 8 | ✅ | ✅ | |||
medium | 9 | ✅ | ✅ | |||
medium | 10 | ✅ | ✅ | ✅ | ||
medium | 11 | ✅ | ✅ | |||
medium | 12 | ✅ | ✅ | |||
medium | 13 | ✅ | ✅ | ✅ | ||
medium | 14 | ✅ | ✅ | ✅ | ||
large | 3 | ✅ | ||||
large | 4 | ✅ | ||||
large | 5 | ✅ | ||||
large | 6 | ✅ | ||||
large | 7 | ✅ | ||||
large | 8 | ✅ | ||||
large | 9 | ✅ | ✅ | |||
large | 10 | ✅ | ✅ | |||
large | 11 | ✅ | ||||
large | 12 | ✅ | ✅ | |||
large | 13 | ✅ | ✅ | |||
large | 14 | ✅ | ✅ |