Metadata-Version: 2.4
Name: openssl_encrypt
Version: 0.9.2
Summary: A package for secure file encryption and decryption based on modern ciphers using heavy-compute-load chaining of hashing and KDF to generate strong encryption password based on users provided password to ensure secure encryption of files
Home-page: https://gitlab.rm-rf.ch/world/openssl_encrypt
Author: Tobi
Author-email: jahlives@gmx.ch
Project-URL: Bug Tracker, https://gitlab.rm-rf.ch/world/openssl_encrypt/-/issues
Project-URL: Documentation, https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs
Project-URL: Source Code, https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt
Keywords: encryption,decryption,random-password,secure shredding,security
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Security
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Utilities
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: argon2-cffi==23.1.0
Requires-Dist: argon2-cffi-bindings==21.2.0
Requires-Dist: cffi==1.17.1
Requires-Dist: cryptography==44.0.3
Requires-Dist: pycparser==2.22
Requires-Dist: pyyaml==6.0.2
Requires-Dist: whirlpool-py311==1; python_version >= "3.11"
Provides-Extra: dev
Requires-Dist: annotated-types==0.7.0; extra == "dev"
Requires-Dist: anyio==4.9.0; extra == "dev"
Requires-Dist: astroid==3.3.10; extra == "dev"
Requires-Dist: authlib==1.5.2; extra == "dev"
Requires-Dist: bandit==1.7.10; extra == "dev"
Requires-Dist: black==24.10.0; extra == "dev"
Requires-Dist: build==1.2.2.post1; extra == "dev"
Requires-Dist: certifi==2025.4.26; extra == "dev"
Requires-Dist: cfgv==3.4.0; extra == "dev"
Requires-Dist: charset-normalizer==3.4.2; extra == "dev"
Requires-Dist: click==8.2.1; extra == "dev"
Requires-Dist: coverage[toml]==7.8.1; extra == "dev"
Requires-Dist: dill==0.4.0; extra == "dev"
Requires-Dist: distlib==0.3.9; extra == "dev"
Requires-Dist: dparse==0.6.4; extra == "dev"
Requires-Dist: filelock==3.16.1; extra == "dev"
Requires-Dist: h11==0.16.0; extra == "dev"
Requires-Dist: httpcore==1.0.9; extra == "dev"
Requires-Dist: httpx==0.28.1; extra == "dev"
Requires-Dist: identify==2.6.10; extra == "dev"
Requires-Dist: idna==3.10; extra == "dev"
Requires-Dist: iniconfig==2.1.0; extra == "dev"
Requires-Dist: isort==6.0.1; extra == "dev"
Requires-Dist: jinja2==3.1.6; extra == "dev"
Requires-Dist: joblib==1.5.0; extra == "dev"
Requires-Dist: markdown-it-py==3.0.0; extra == "dev"
Requires-Dist: markupsafe==3.0.2; extra == "dev"
Requires-Dist: marshmallow==4.0.0; extra == "dev"
Requires-Dist: mccabe==0.7.0; extra == "dev"
Requires-Dist: mdurl==0.1.2; extra == "dev"
Requires-Dist: mypy-extensions==1.1.0; extra == "dev"
Requires-Dist: nltk==3.9.1; extra == "dev"
Requires-Dist: nodeenv==1.9.1; extra == "dev"
Requires-Dist: packaging==25.0; extra == "dev"
Requires-Dist: pathspec==0.12.1; extra == "dev"
Requires-Dist: pbr==6.1.1; extra == "dev"
Requires-Dist: pip-tools==7.4.1; extra == "dev"
Requires-Dist: platformdirs==4.3.8; extra == "dev"
Requires-Dist: pluggy==1.6.0; extra == "dev"
Requires-Dist: pre-commit==3.8.0; extra == "dev"
Requires-Dist: psutil==6.1.1; extra == "dev"
Requires-Dist: pydantic==2.9.2; extra == "dev"
Requires-Dist: pydantic-core==2.23.4; extra == "dev"
Requires-Dist: pygments==2.19.1; extra == "dev"
Requires-Dist: pylint==3.3.7; extra == "dev"
Requires-Dist: pyproject-hooks==1.2.0; extra == "dev"
Requires-Dist: pytest==8.3.5; extra == "dev"
Requires-Dist: pytest-cov==4.1.0; extra == "dev"
Requires-Dist: regex==2024.11.6; extra == "dev"
Requires-Dist: requests==2.32.3; extra == "dev"
Requires-Dist: rich==14.0.0; extra == "dev"
Requires-Dist: ruamel-yaml==0.18.10; extra == "dev"
Requires-Dist: safety==3.5.0; extra == "dev"
Requires-Dist: safety-schemas==0.0.14; extra == "dev"
Requires-Dist: shellingham==1.5.4; extra == "dev"
Requires-Dist: sniffio==1.3.1; extra == "dev"
Requires-Dist: stevedore==5.4.1; extra == "dev"
Requires-Dist: tenacity==9.1.2; extra == "dev"
Requires-Dist: tomlkit==0.13.2; extra == "dev"
Requires-Dist: tqdm==4.67.1; extra == "dev"
Requires-Dist: typer==0.15.3; extra == "dev"
Requires-Dist: typing-extensions==4.13.2; extra == "dev"
Requires-Dist: urllib3==2.4.0; extra == "dev"
Requires-Dist: virtualenv==20.31.2; extra == "dev"
Requires-Dist: wheel==0.45.1; extra == "dev"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# Version 0.9.2 - GUI Enhancements and PQC Workflow Completion
  Version 0.9.2 brings significant GUI improvements and completes the post-quantum cryptography workflow. The GUI now features force password checkboxes on both encrypt and decrypt tabs, allowing users to bypass password
   validation with informed consent while maintaining security by default. Enhanced error handling replaces generic "command failed" messages with specific password validation feedback and helpful guidance including
  character requirements and suggestions to use the password generator.

  Post-quantum cryptography support is now seamless - the application automatically adds necessary key storage flags when PQC algorithms are selected, enabling complete encrypt-to-decrypt workflows for ML-KEM and HQC
  hybrid algorithms without user intervention. The CLI gained environment variable password support (CRYPT_PASSWORD) with secure multi-pass clearing to prevent password exposure in process lists.

  Subprocess handling was improved with better buffering and error capture, ensuring password validation errors and other failures are properly displayed to users. A comprehensive test suite with 11 specialized tests was
   added to verify environment variable password handling, secure clearing functionality, and edge cases. These improvements transform the user experience from technical command-line complexity to professional-grade GUI
  usability while maintaining the strong security foundation and expanding post-quantum cryptography readiness.
# Secure File Encryption Tool
A powerful tool for securely encrypting, decrypting, and shredding files with military-grade cryptography and multi-layer password hashing.
## History
The project is historically named `openssl-encrypt` because it once was a python script wrapper around openssl. But that did not work anymore with recent python versions.
Therefore I decided to do a complete rewrite in pure python also using modern cipher and hashes. So the projectname is a "homage" to the root of all :-)

**Whirlpool support**: The `whirlpool` hash algorithm is now supported on all Python versions, including Python 3.11, 3.12, and 3.13. The package will automatically detect your Python version and install the appropriate Whirlpool implementation. If you encounter any issues with Whirlpool, please see the [Whirlpool Installation Guide](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/whirlpool_installation.md) for manual setup instructions.
## Issues
you can create issues by [sending mail](mailto:issue+world-openssl-encrypt-2-issue-+gitlab@rm-rf.ch) to the linked address

## Features
- **Strong Encryption**: Uses Fernet symmetric encryption (AES-128-CBC) as default with secure key derivation. Also supports `AES-GCM`, `AES-SIV`, `CAMLELIA`, `POLY1305-CHACHA20`, `AES-GCM-SIV`, `AES-OCB3` ans `XCHACHA20_POLY1305` as ecnryption algorithm
- **Multi-hash Password Protection**: Optional layered hashing with SHA-256, SHA-512, SHA3-256, SHA3-512, Whirlpool, BLAKE2b and SHAKE-256 they all can be chained with different rounds to create key-stretching
- **Multi-KDF Password Protection**: Optional layered KFD with PBKDF2, Scrypt, Argon2 and Ballon they all can be chained with different rounds to create key-stretching and very strong brute-force prevention
- **Postquantum Resistance**: Using a hybrid approach to implement postquantum resistance. Still using symetrical encryption but with a key derived with `Kyber KEM` for postquantum resistance
- **Keystore for PQC keys**: a local keystore can be used to maintain and manage the PQC keys used for encrypting your files
- **Password Management**: Password confirmation to prevent typos, random password generation, and standalone password generator
- **File Integrity Verification**: Built-in hash verification to detect corrupted or tampered files
- **Secure File Shredding**: Military-grade secure deletion with multi-pass overwriting
- **Directory Support**: Recursive processing of directories
- **Memory-Secure Processing**: Protection against memory-based attacks and data leakage
- **Glob Pattern Support**: Batch operations using wildcard patterns
- **Safe Overwriting**: Secure in-place file replacement with atomic operations
- **Progress Visualization**: Real-time progress bars for lengthy operations
- **Graphical User Interface**: User-friendly GUI for all operations (beta)
- **Built-in and custom Templates**: built in templates like `--quick` `--standard` and `--paranoid` can be used. You can also define your own customized templates in `./templates`
## Files Included
- [crypt.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/crypt.py) - Main command-line utility
- [crypt_gui.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/crypt_gui.py) - Graphical user interface
- [modules/crypt_cli.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/crypt_cli.py) - Command-line interface
- [modules/crypt_core.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/crypt_core.py) - Provides the core functionality
- [modules/crypt_utils.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/crypt_utils.py) - Provides utility functions
- [modules/crypt_errors.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/crypt_errors.py) - Custom exception classes
- [modules/crypt_settings.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/crypt_settings.py) - Configuration settings
- [modules/balloon.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/balloon.py) - Password hashing implementation
- [modules/secure_memory.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/secure_memory.py) - Provides functions for secure memory handling
- [modules/password_policy.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/password_policy.py) - Password validation
- [modules/pqc.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/pqc.py) - Post-quantum cryptography implementation
- [modules/keystore_cli.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/keystore_cli.py) - Keystore CLI functionality
- [modules/keystore_utils.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/keystore_utils.py) - Keystore utility functions
- [modules/keystore_wrapper.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/modules/keystore_wrapper.py) - Keystore wrapper module
- [keystore_cli_main.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/keystore_cli_main.py) - Keystore CLI entry point
- [docs/install.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/install.md) - Installation notes
- [docs/usage.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/usage.md) - Usage notes
- [docs/examples.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/examples.md) - Some examples
- [docs/pqc.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/pqc.md) - Post-quantum notes
- [docs/password-handling.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/password-handling.md) - Notes about password handling
- [docs/security-notes.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/security-notes.md) - Notes about security
- [docs/buffer_overflow_prevention.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/buffer_overflow_prevention.md) - Security implementation
- [docs/security_improvements.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/security_improvements.md) - Security enhancement details
- [docs/whirlpool_installation.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/whirlpool_installation.md) - Whirlpool installation guide
- [docs/keystore_cli_guide.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/keystore_cli_guide.md) - Keystore CLI documentation
- [docs/DUAL_ENCRYPTION_TESTS.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/DUAL_ENCRYPTION_TESTS.md) - Dual encryption test details
- [docs/PQC_DUAL_ENCRYPTION.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/docs/PQC_DUAL_ENCRYPTION.md) - PQC dual encryption documentation
- [unittests/unittests.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/unittests/unittests.py) - Unit tests for the utility
- [unittests/test_gui.py](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/unittests/test_gui.py) - Simple test for `tkinter`
- [unittests/testfiles](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/unittests/testfiles) - Testfiles for `unittests` encryption
- [tests/](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/tests) - Contains all test modules for dual encryption and keystore functionality
- [requirements.txt](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/requirements.txt) - Required Python packages
- [README.md](https://gitlab.rm-rf.ch/world/openssl_encrypt/-/tree/main/openssl_encrypt/README.md) - This documentation file

all testfile files are encrypted with password `1234` for your testing
## License

[MIT License](LICENSE)

