Skip to content

lattice-based-cryptography/ring-lwe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ring-LWE

example workflow License: MIT Crates.io

Implmentation of lattice-based encryption method ring-LWE in pure Rust.

Description

This provides the basic PKE (keygen, encryption, and decryption) operations for the ring learning-with-errors scheme.

Disclaimer

This is not secure. It is not written in constant-time nor resistant to other side-channel attacks. This is intended for educational use and not for real-world applications.

Build and test

In the src directory,

cargo build

To build the binary.

cargo test

  • Performs keygen/encrypt/decrypt for a test message.
  • Checks homomorphic addition and multiplcation hold for small values.

Keygen

Note: Parameters optional.

  • cargo run -- keygen --n 512 --q 12289 --t 2

where n is the polynomial degree, q is the ciphertext modulus, t is the plaintext modulus.

If ommitted, the default parameters will be used.

cargo run -- keygen

This will generate a public/secret keypair printed to the console.

To save the key files to public.key and secret.key, use the --save-keys flag:

cargo run -- keygen --save-keys

Encryption

To encrypt a message using the public key using command line arguments:

cargo run -- encrypt <public_key> <message>

To encrypt a message using a public key file:

cargo run -- encrypt --pubkey-file public.key "Hello, world!"

To encrypt a message and save the ciphertext to file:

cargo run -- encrypt --pubkey-file public.key 'Hello, world!' --ciphertext-file ciphertext.txt

Decryption

To decrypt an encrypted message using the secret key using command line arguments:

cargo run -- decrypt <secret_key> <ciphertext>

To decrypt an encrypted message using the secret key file:

cargo run -- decrypt --secret-file secret.key <ciphertext> --n 512 --q 12289 --t 2

To decrypt an encrypted message from a file ciphertext.txt:

cargo run -- decrypt --secret-file secret.key --ciphertext-file ciphertext.txt

Benchmarks:

n q t keygen encrypt decrypt keygen_string encrypt_string decrypt_string
256 12289 2 41.565 µs 70.024 µs 29.741 µs 69.703 µs 99.181 µs 43.751 µs
512 12289 2 84.940 µs 150.17 µs 65.439 µs 141.31 µs 210.94 µs 95.640 µs
1024 12289 2 183.50 µs 326.54 µs 145.40 µs 293.69 µs 445.11 µs 200.24 µs

About

Implementation of ring-LWE encryption method in Rust.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages