No project description provided
Project description
CRYPT_DIR
- Encrypt 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 crypt_dir
key_file = "key.txt"
plain_dir = "plain"
encrypted_dir = "encrypted"
restored_dir = "restored"
# Delete all files, directories in encrypted_dir that don't exist in the plain_dir
crypt_dir.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
crypt_dir.update_encrypted_dir(
key_file=key_file,
plain_dir=plain_dir,
encrypted_dir=encrypted_dir,
max_workers=12,
)
- restore
import crypt_dir
key_file = "key.txt"
plain_dir = "plain"
encrypted_dir = "encrypted"
restored_dir = "restored"
# restore all files in encrypted_dir using 12 workers
crypt_dir.restore_encrypted_dir(
key_file=key_file,
encrypted_dir=encrypted_dir,
restored_dir=restored_dir,
max_workers=12,
)
INSTALLATION
pip install --upgrade crypt-dir
DECRYPT IT YOURSELF
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 .enc
files:
-
if
key_file
does not exist,crypt_dir
will create a random key of 32 bytes usingos.urandom
encoded intohex
-
two algorithms are used in
crypt_dir
:SHA1
andAES-256
inCBC
mode -
encrypted files are updated only if file is modified (mtime changes)
-
file is decrypt-able if
signature
matcheskey
-
.enc1
file-
header
:file_sig
: little-endian encoded mtime of file in uint64key_sig
:SHA1
bytes of keyfile_size
: little-endian encoded file size in uint64init_vec
:AES256
initialization vector
-
file encrypted
:AES256
file 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_file
does not exist,crypt_dir
will create a random key of 32 bytes usingos.urandom
encoded intohex
-
two algorithms are used in
crypt_dir
:SHA1
andAES-256
inCBC
mode -
encrypted files are updated only if file_hash changes
-
file is decrypt-able if
signature
matcheskey
-
.enc
filesignature
:SHA1
bytes of keyfile_hash
:SHA1
bytes of filefile_size
: little-endian encoded file size in uint64iv
:AES256
initialization vectorfile encrypted
:AES256
file 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 crypt_dir.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.