No project description provided
Project description
CZLIB
- Encrypt and Compress all your files and write into another directory if there is update
- Clean the encrypted directory if files or directories have been deleted
- Restore
- Minimize writing to SSDs
USAGE
- encrypt
# User maintains two directories plain_dir and encrypted_dir
import czlib
plain_dir = "plain"
encrypted_dir = "encrypted"
restored_dir = "restored"
key = czlib.make_key_from_passphrase(b"passphrase1234")
# Delete all files, directories in encrypted_dir that don't exist in the plain_dir
czlib.clean_encrypted_dir(
plain_dir=plain_dir,
encrypted_dir=encrypted_dir,
)
# read files in plain_dir, encrypt and write files into encrypted_dir if needed using 12 workers
czlib.update_encrypted_dir(
key=key,
plain_dir=plain_dir,
encrypted_dir=encrypted_dir,
max_workers=12,
)
- restore
import czlib
plain_dir = "plain"
encrypted_dir = "encrypted"
restored_dir = "restored"
key = czlib.make_key_from_passphrase(b"passphrase1234")
# restore all files in encrypted_dir using 12 workers
czlib.restore_encrypted_dir(
key=key,
encrypted_dir=encrypted_dir,
restored_dir=restored_dir,
max_workers=12,
)
- certificate
import czlib
correct_passphrase = b"passphrase123"
cert = czlib.make_certificate(correct_passphrase)
print("cert", cert)
try:
wrong_passphrase = b"passphrase456"
_ = czlib.verify_certificate(cert, wrong_passphrase)
except AssertionError as e:
print("expected assertion error: ", e)
key = czlib.verify_certificate(cert, correct_passphrase)
print("generated key from correct passphrase", key)
INSTALLATION
pip install --upgrade czlib
DECRYPT IT YOURSELF
SPECIFICATION 2.*
You don't need to know the specification. For some folks who want to know exactly what happened with their files, here
is the specification for key_file and .gz.enc files:
-
three algorithms are used in
czlib:SHA1,AES-256,DEFLATE -
encrypted files are updated only if either file is modified (mtime changes) or key is changed
-
file is decrypt-able if
signaturematcheskey -
.gz.encfile-
header:file_sig: little-endian encoded mtime of file in uint64key_sig:SHA1bytes of keyfile_size: little-endian encoded file size in uint64init_vec:AES256initialization vector
-
file encrypted:AES256encryptedDEFLATEcompressed bytes with chunk size of2^27
-
__________________________________________________________________________________
| header | encrypted_data |
|___________________________________________________________|____________________|
| file_sig | key_sig | file_size | init_vec | encrypted_data |
| 8 bytes | 20 bytes | 8 bytes | 16 bytes | n bytes |
|___________________________________________________________|____________________|
SPECIFICATION 1.*
You don't need to know the specification. For some folks who want to know exactly what happened with their files, here
is the specification for key_file and .enc1 files:
-
two algorithms are used in
czlib:SHA1andAES-256inCBCmode -
encrypted files are updated only if either file is modified (mtime changes) or key is changed
-
file is decrypt-able if
signaturematcheskey -
.enc1file-
header:file_sig: little-endian encoded mtime of file in uint64key_sig:SHA1bytes of keyfile_size: little-endian encoded file size in uint64init_vec:AES256initialization vector
-
file encrypted:AES256file encrypted bytes with chunk size of2^30
-
__________________________________________________________________________________
| header | encrypted_data |
|___________________________________________________________|____________________|
| file_sig | key_sig | file_size | init_vec | encrypted_data |
| 8 bytes | 20 bytes | 8 bytes | 16 bytes | n bytes |
|___________________________________________________________|____________________|
SPECIFICATION 0.*
You don't need to know the specification. For some folks who want to know exactly what happened with their files, here
is the specification for key_file and .enc files:
-
if
key_filedoes not exist,czlibwill create a random key of 32 bytes usingos.urandomencoded intohex -
two algorithms are used in
czlib:SHA1andAES-256inCBCmode -
encrypted files are updated only if file_hash changes
-
file is decrypt-able if
signaturematcheskey -
.encfilesignature:SHA1bytes of keyfile_hash:SHA1bytes of filefile_size: little-endian encoded file size in uint64iv:AES256initialization vectorfile encrypted:AES256file encrypted bytes with chunk size of2^30
| signature | file_hash | file_size | iv | encrypted_data |
| 20 bytes | 20 bytes | 8 bytes | 16 bytes | n bytes |
UPLOAD
rm -rf dist czlib.egg-info
python setup.py sdist
twine upload dist/*
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file czlib-2.1.2.tar.gz.
File metadata
- Download URL: czlib-2.1.2.tar.gz
- Upload date:
- Size: 8.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d0e4cac00d5c854ddd8a27f9c05a506dd9ed63459f511cccf4fbebc4ca00c96
|
|
| MD5 |
5f301b030ef75bbc7b566112993b8751
|
|
| BLAKE2b-256 |
e7407c747376f94c06e32920afaaaf548c66969b946c39bd03cec194b52ce798
|