# Precrypt: Rust CLI for proxy-based re-encryption. This is a CLI wrapper for the [umbral-pre](https://github.com/nucypher/rust-umbral/blob/master/umbral-pre/README.md) proxy-based re-encryption library. It adds parallel processing for encryption and decryption making it possible to process large files. ## Usage ### 1) Encrypt your file Generate a keypair that will be used to encrypt the file. **Keep this key private**, anyone who has access to it can decrypt your file. ``` precrypt keygen key.json ``` Encrypt your target file with your keypair and generate a re-encryption key.. ``` precrypt encrypt secret.txt key.json recrypt.json out.txt ``` > `encrypt` uses 10 threads by default, you can adjust this with the `-t` argument. **Note:** We did not need a recipients public key when encrypting the file. This is the magic of proxy re-encryption, you can *re-encrypt* the file to a new public key at any point using a re-encryption key! This saves compute resources because you only need to encrypt the file once. ### 2) Recrypt your file to a public key To give someone access to a file you will need their public key (they can generate one using the `keygen` command). ``` precrypt recrypt recrypt.json decrypt.json ``` This will create a decryption key that they can combine with their secret key to decrypt the file. ### 3) Decrypt the file The recipient can now decrypt the file using their private key and the decryption key. ``` precrypt decrypt out.txt decrypt.json recipient_key.json decrypted_secret.txt ```