npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mojic

v2.1.2

Published

Obfuscate C source code into encrypted, password-seeded emoji streams.

Readme

Mojic v2.1.2

Operation Ironclad: Obfuscate C source code into a randomized, password-seeded stream of emojis.

Mojic (Magic + Emoji + Logic) is a sophisticated CLI tool designed to transform readable C code into an unrecognizable chaotic stream of emojis. Unlike simple substitution ciphers, Mojic uses your password to seed a cryptographically strong Pseudo-Random Number Generator (PRNG), creating a unique "Emoji Universe" and rolling cipher for every single session.

Key Features

  • AES-256-CTR PRNG: Uses a military-grade cryptographically secure pseudorandom number generator (seeded via Scrypt) to handle shuffling and polymorphism.
  • Polymorphic Keywords: Common C keywords (int, void, return) are mapped to emojis that change every time they appear based on the PRNG state. Frequency analysis is impossible.
  • XOR Whitening: Before encoding, all raw data (whitespace, variable names) is XORed with the AES keystream. This ensures that repeating patterns—like 4 spaces of indentation—never produce the same emoji sequence twice.
  • Base-1024 Compression: Non-keyword code is compressed using a custom Base-1024 scheme (5 bytes → 4 emojis), keeping file size manageable.
  • Integrity Sealed: Every file ends with an HMAC-SHA256 signature. Any tampering with the emoji stream results in an immediate FILE_TAMPERED error.
  • Moon Header Protocol: Metadata (Salt + Auth Check) is encoded using a specific alphabet of Moon and Clock phases (🌑🌒🕐), allowing instant password verification before decryption starts.
  • Stream Architecture: Built on Node.js Transform streams to handle large files efficiently with minimal memory footprint.

Installation

Since Mojic is available on npm, you can install it globally with a single command:

npm install -g mojic

Or run it directly using npx without installing:

npx mojic encode main.c

Usage

1. Encrypting Code (encode)

Transforms a .c file into a .mojic file.

# Encrypt a single file
mojic encode main.c

# Encrypt an entire directory recursively
mojic encode ./src -r

# Flatten/Minify code structure before encryption (Removes newlines/indentation)
mojic encode main.c --flat

You will be prompted to create a password. This password is required to decrypt.

2. Decrypting Code (decode)

Restores the original C code from a .mojic file.

# Decrypt a single file
mojic decode main.mojic

# Decrypt an entire directory recursively
mojic decode ./src -r

3. Security & Rotation Tools (srt)

Manage encrypted files without ever revealing their plaintext contents.

# Rotate Password: Changes the password of an encrypted file
mojic srt --pass secret.mojic

# Re-Encrypt: Re-shuffles the entropy (New Salt) with the SAME password
# (Useful to change the visual emoji pattern without changing the password)
mojic srt --re secret.mojic

Under the Hood (Algorithm)

Mojic v2.1.0 implements a custom crypto-system dubbed "Operation Ironclad".

  1. Derivation Phase:

    • Input: User Password + 32-byte Random Salt.
    • KDF: Scrypt (N=16384, r=8, p=1).
    • Output: 80 bytes (32 bytes AES Key, 16 bytes AES IV, 32 bytes HMAC Auth Key).
  2. The Emoji Universe:

    • The engine generates a universe of ~1,100 valid unicode characters (Emoticons, Transport, Symbols).
    • This universe is shuffled using the AES-256-CTR CSPRNG initialized with the derived key.
  3. Polymorphic Encryption:

    • C Keywords: The engine detects C keywords (e.g., while). It assigns them a "Base Emoji" from the shuffled universe.
    • The Twist: It doesn't just print the Base Emoji. It calculates a random offset using the PRNG to pick a different emoji that maps back to the keyword. This means int might look like 🚀 on line 1 and 🌮 on line 5.
  4. XOR Whitening:

    • Before encoding non-keyword data (variable names, strings, whitespace), the engine generates a random mask from the AES stream.
    • The raw data is XORed with this mask. This hides repetitive patterns (like indentation or common variable names) effectively turning them into white noise before they are converted to emojis.
  5. Base-1024 Encoding:

    • The whitened data is buffered into 5-byte chunks.
    • These chunks are treated as a single large integer and converted into 4 base-1024 digits (mapped to emojis).
  6. The Header:

    • The Salt and a 4-byte Auth Check are written to the file header using the Moon/Clock Alphabet (🌑🌒🌓🌔...).
    • Benefit: This allows mojic to tell you "Incorrect Password" instantly, rather than churning out garbage data first.

License

This project is licensed under the Apache License 2.0.