Skip to main content

Image

License: MIT PyPI Ruff CodeFactor Downloads CI Coverage

A lightweight, open-source tool for Python code obfuscation. CodeEnigma helps protect your logic from reverse engineering and unauthorized access, making it secure to distribute your Python applications.

🔒 Why CodeEnigma?

After searching extensively for a free and open-source Python obfuscation tool, I realized that most available options were either paid, closed-source, or opaque in how they worked. I wasn't comfortable letting a black-box tool obfuscate my production code without knowing exactly what it was doing — especially when it had access to sensitive logic.

So I built CodeEnigma — a transparent, self-contained solution that gives you full control over the obfuscation process, with no hidden logic and no external servers involved.

This project is inspired by PyArmor but with a different approach.

High Level Architecture

Image

The working principle of CodeEnigma is simple:

  1. The user provides the path to the Python module to obfuscate.
  2. CodeEnigma reads the module's source code.
  3. An AES-256 key is generated using a secure random number generator and set in private.py
  4. Obfuscation runs file by file running the following steps:
    • 4.1. Compile using compile(code, str(file_path), "exec")
    • 4.2. Compress the byte code using zlib.compress(compiled_code)
    • 4.3. Encode the compressed byte code using base64.b64encode(compressed_code)
    • 4.4. Encrypt the encoded byte code using AESGCM(SECRET_KEY).encrypt(NONCE, obfuscated, associated_data=None) refer for more details:
  5. CodeEnigma creates a new module with the obfuscated code.
  6. A codeenigma_runtime.pyx file is created with the deobfuscation logic to decrypt and execute the obfuscated code.
  7. The runtime is compiled to a Python extension module using Cython. Also generates a codeenigma_runtime.whl file for distribution.
  8. End of process, the obfuscated module is ready to be distributed as wheel files.

Features

  • 🔒 Strong encryption using AES-256
  • 🔄 Simple API for obfuscating any python module
  • 🔑 Secure and dynamic key generation
  • 🛠️ Command-line interface for easy integration into build processes
  • 📦 Lightweight and dependency-minimal

Installation

Using Poetry:

poetry add codeenigma

Using pip:

pip install codeenigma

Usage

CodeEnigma comes with a user-friendly command-line interface powered by Typer. The CLI provides helpful prompts and rich output.

Basic Usage

To obfuscate a Python module:

codeenigma obfuscate /path/to/your/module

Command Line Options

  • --expiration, -e: Set an expiration date for the obfuscated code (YYYY-MM-DD)
  • --output, -o, --dist: Specify output directory (default: 'dist')
  • --verbose, -v: Show detailed output

Examples

Obfuscate with an expiration date:

The following example will obfuscate the module and set the expiration date to December 31, 2025, at 23:59:59+0530 (IST).

codeenigma obfuscate /path/to/your/module -e "2025-12-31 23:59:59+0530"

Specify custom output directory:

codeenigma obfuscate /path/to/your/module -o custom_output

Version Information

To check the installed version:

codeenigma version

Contributing

Contributions are welcome! This is a complete free and open-source project. If you have any suggestions or find any bugs, please open an issue.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Built with ❤️ using Python
  • Uses cryptography for secure encryption
  • Uses Cython for compiling the runtime
  • Logo Credits, Claude 🫡

Metadata

Release files for codeenigma 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for codeenigma 1.2.0
File Size Uploaded
codeenigma-1.2.0.tar.gz 15.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for codeenigma 1.2.0
File Interpreter ABI Platform
codeenigma-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.7 kB

Release files / codeenigma-1.2.0.tar.gz

Download URL codeenigma-1.2.0.tar.gz
Size 15.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a35c705291567c0d30745f24f71524944e90091ef7f80f3dbf656f366fda74df
BLAKE2b-256 checksum
How to use checksums
a1bb99b654011cb4adc79451406a8e0d89d95809f7e033e224ff5a1685e33043
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.2 CPython/3.10.7 Darwin/24.5.0

Release files / codeenigma-1.2.0-py3-none-any.whl

Download URL codeenigma-1.2.0-py3-none-any.whl
Size 21.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
80fd07d53e3c7966e7f6b4b4b6e5eab1152840f3c66406aabdd0072c17022dfc
BLAKE2b-256 checksum
How to use checksums
b4baa21efbdd582b37b484a2b14e33a39a10a0dd3e4440a14d630ae52db27a64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.2 CPython/3.10.7 Darwin/24.5.0

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page