csha
    • CSha
    • Building and installation
    • Commands and examples
    • Architecture
    • Changelog
    • AI usage
    • License
    • Quick start
    • Blob Streams
    • Docker images as PNGs
    • Formats and keys
    • C++ API
    • Troubleshooting
    • Encryption algorithms
    • Testing

    Changelog

    Notable changes to CSha are recorded here, newest first, using the
    Keep a Changelog categories.
    Versions 1.2.0–1.5.0 organize the recent implemented changes into version
    milestones; release tags and packaged binaries are tracked separately. Dates
    on older entries come from the existing Git tags.

    [Unreleased]#

    No additional changes recorded.

    [1.5.0] — Shared cipher interface and expanded documentation#

    Added#

    A shared C++20 csha.encoder module with whole-message and streaming encoder
    interfaces, used by AES and the additional cipher implementations.
    Ten authenticated cipher choices: ChaCha20-Poly1305, XChaCha20-Poly1305,
    Camellia-EAX, ARIA-EAX, Twofish-EAX, Serpent-EAX, CAST-256-EAX, RC6-EAX,
    MARS-EAX, and SM4-EAX.
    --cipher NAME and --list-ciphers for stored image, file, ZIP, map,
    image-pair, and Docker PNG workflows. Decoders detect the stored algorithm.
    Password envelopes for the new ciphers with a fresh 16-byte salt,
    PBKDF2-HMAC-SHA256 at 600,000 iterations, and authenticated format metadata.
    Coverage for all 21 image/map CLI modes, cipher known-answer vectors, binary
    boundaries, tampering, stream lifecycle, relay rejection, and Docker failures.
    A 15-page Apidog documentation set, including quick start, formats and keys,
    C++ API, encryption algorithms, testing, and troubleshooting guides.

    Changed#

    Raised the build requirements to C++20, CMake 3.28+, Ninja 1.11+, upstream
    Clang 16+ with clang-scan-deps, and Crypto++ 8.9+. Fresh macOS builds discover
    Homebrew LLVM; AppleClang is not supported for the named-module build.
    Kept the default AES formats and legacy reads compatible. New cipher outputs
    use distinct envelopes, including version-2 Docker PNGs, and need a current decoder.
    Expanded CTest to 12 groups, including process-level and deterministic Docker
    fixture checks. A real Docker daemon remains an optional integration check.
    Expanded command examples and documented key semantics, payload limits,
    recovery procedures, and C++ module integration while preserving the site's
    existing GitBook-style appearance.

    Fixed#

    Restored fdz recovery from indexed master maps and their .chunks
    directories, including rejection of missing or undecodable chunks.
    Corrected shared validation so mfi and mfz can generate maps from derived
    seeds using -G without a separate -S; ZIP seed derivation no longer needs
    an unrelated image input.

    [1.4.0] — Blob Streams and Docker archive PNGs#

    Added#

    Authenticated, bidirectional Blob Streams using TLS 1.3, local device
    identities, and verified peer certificates.
    Direct TCP listen/connect commands and a paired HTTP CONNECT relay that
    forwards encrypted bytes between an initiator and responder.
    A transport-independent C++ session API with bounded queues, backpressure,
    independent send/receive completion, and authenticated shutdown checks.
    Docker keygen, pack, inspect, restore, load, and run commands.
    Packing resolves a tag to its image ID and stores its Docker-save archive in a PNG.
    Bounded-memory Docker archive encryption with a separate 32-byte key file,
    authenticated metadata, archive SHA-256 verification, and private temporary files.
    Verification before publishing restored archives or invoking Docker, plus
    output-overwrite protection and Docker argument/exit-code forwarding.

    Changed#

    Kept network transport and Docker archive code in separate C++ libraries and
    CLI adapters alongside the existing image/map application.
    Added dedicated guides and tests for peer communication and Docker PNG
    recovery. Docker archive storage is separate from the removed server deployment.

    [1.3.0] — Image formats, data URLs, and image credentials#

    Added#

    Lossless PNG data URL export with --data-url-output and import with
    --image-data-url, including @file input for large encoded images.
    Image-password maps using two --key-image credentials. Either original
    image can independently unlock the payload, including exact file recovery.
    Explicit ciphertext lengths in the binary pixel format, preserving arbitrary
    bytes and trailing zeros in newly encoded images.

    Changed#

    Replaced per-pixel hexadecimal conversions and intermediate PNG file work
    with direct in-memory binary conversions while retaining legacy image reads.
    Kept generated seed metadata in a single row. Maps widen when needed instead
    of dropping seed entries, and the reader still accepts older multi-row layouts.
    Used a random AES-GCM payload key with independently wrapped image-key slots
    for the original image-pair format.

    Fixed#

    Corrected environment-map capacity calculations and rejected oversize
    payloads instead of truncating them or returning raw ciphertext pixels.
    Added malformed data URL rejection and incompatible input/output checks.
    Verified binary round trips across AES modes, PNG reloads, non-contiguous
    matrices, legacy formats, and either-image recovery.

    [1.2.0] — One CMake application#

    Changed#

    Consolidated the project into one C++ csha executable built by the root
    CMakeLists.txt, initially using C++17 before the later C++20 migration.
    Organized application code under src/ and bundled Cubiomes under
    third_party/, with explicit library targets and source lists.
    Moved CLI parsing and dispatch into src/heler.cpp and src/heler.h;
    main.cpp now forwards arguments and returns the helper's exit code.
    Replaced container-based CI with a CMake build, CTest run, and install check.
    Migrated documentation from GitBook to Apidog, preserving the light theme,
    blue accents, original illustrations, and versioned documentation sources.

    Fixed#

    Added Homebrew OpenSSL discovery for macOS and GUI-launched CLion builds,
    while respecting explicit OPENSSL_ROOT_DIR settings.

    Removed#

    Kubernetes manifests, the Python/web server, legacy service containers, and
    deployment scripts.
    Handwritten Makefiles, standalone component builds, duplicate CLI entry points,
    unused helper code, the bundled Catch2 v2 header, and release-specific Ruby packaging.

    [1.1.9] - 2025-11-29#

    Added#

    Large fz exports split into numbered chunk PNGs and a master seed map.
    A legacy mosaic decoding path alongside single-map ZIP recovery.

    Fixed#

    Included sys/stat.h so directory creation with mkdir compiles on macOS.
    The original master-map export and mosaic decoder did not share a complete
    companion-directory recovery path. That mismatch is corrected in 1.5.0 above.

    [1.1.5] - 2025-11-29#

    Added#

    Full-ZIP modes fz and fdz for encoding ZIP archives into Minecraft
    environment maps and restoring archive bytes.
    Mode aliases, help text, and CLI dispatch for the ZIP map workflow.

    [1.1.0] - 2025-11-29#

    Added#

    Full environment-map encode/decode with encrypted data embedded in the low
    bits of Minecraft map pixels.
    A workflow deriving a seed from an encrypted image, rendering a biome map,
    and embedding the encrypted payload for later recovery.

    Changed#

    Updated CLI and Homebrew version metadata for the environment-map release.
    Improved deployment version handling and added deployment retries.

    [1.0.4] - 2025-11-29#

    Added#

    A Homebrew formula for package distribution and deployment pipeline support.
    ZIP tooling in the container build for archive-related tests.

    Fixed#

    ZIP fixture creation and reliability in tests.
    The copied table binary name in its Dockerfile.
    Hardcoded local paths and Homebrew CMake paths in the component Makefile.

    [1.0.2] - 2025-11-28#

    Fixed#

    Replaced the Cubiomes submodule reference with source files committed directly
    to the repository, ensuring release tarballs include the dependency needed by
    Homebrew builds.

    [1.0.1] - 2025#

    Added#

    Automated deployment stage for Homebrew package builds

    Fixed#

    Improved zip file creation reliability in tests
    Corrected binary name in table Dockerfile
    Replaced hardcoded absolute paths with relative paths in Makefile
    Removed hardcoded Homebrew cmake paths in Makefile

    [1.0.0] - 2025#

    Initial Stable Release - Core cryptography features and Minecraft map generation

    Added#

    Initial stable release
    Core AES encryption/decryption functionality
    SHA-256 hashing with one-way verification
    Minecraft map generation from seeds using Cubiomes library
    Steganographic metadata embedding in image pixels
    Multiple operation modes:
    Full encode/decode with environment maps
    Encode/decode with/without seed maps
    String, file, and zip encoding
    Map generation from various sources
    Pure AES encode/decode
    Docker support with multi-service architecture:
    csha (main encryption tool)
    map-sha (Minecraft map generation)
    table (data encoding/decoding)
    server (FastAPI Python server)
    FastAPI server with web interface for encryption operations
    Comprehensive test suite using Catch2 v3
    CI/CD pipeline with GitLab CI
    Coverage reporting and badges
    Install target for Homebrew distribution

    Core Features#

    Encryption Methods
    AES-256 encryption in CBC, CTR, and GCM modes
    Three key derivation strategies (DIRECT/SHA-256, PBKDF2, FIXED)
    Configurable salt and padding
    Map Generation
    64-bit seed generation from passwords, images, or strings
    Minecraft world generation using Cubiomes C library
    Support for multiple Minecraft versions (1.7, 1.8+)
    128x128 PNG map output
    Metadata System
    Pixel-based steganographic data embedding
    BGR value encoding for encryption parameters
    Seed, spawn coordinates, and version information storage
    Visually imperceptible modifications
    Data Encoding
    Text string encoding
    File and environment file encoding
    Zip archive encoding with Base64 support
    Multi-chunk mosaic generation for large data

    Security#

    Security Features: One-way SHA-256 hashing is non-reversible. Always keep your encryption keys secure.
    One-way SHA-256 hashing (non-reversible)
    AES-256 encryption with multiple modes
    Configurable key derivation for enhanced security
    Salt support for improved password security

    Platform Support#

    macOS#

    Apple Silicon (ARM64)
    Intel x86_64
    Homebrew package manager support

    Linux#

    AMD64 (x86_64)
    ARM64
    Docker containerized deployment

    Docker#

    Multi-platform support (linux/amd64, linux/arm64)
    Pre-built images available on GitLab Container Registry

    Documentation#

    Comprehensive README with flowcharts
    Command reference tables
    Docker deployment instructions
    Homebrew installation guide
    AI usage transparency statement

    Historical project structure (1.0.0)#

    For the current architecture, see the Project Structure page.

    Components#

    table/: Core AES encryption/decryption engine
    AES implementation with multiple modes
    Encode/decode operations
    Metadata handling
    Helper utilities
    map-sha/: Minecraft map generation
    Java Random seed compatibility
    Seed metadata management
    Spawn point calculation
    Map rendering
    cubiomes/: Minecraft biome generation library
    Biome calculation
    World generation algorithms
    Multi-version support
    server/: Python FastAPI web server
    REST API endpoints
    Static frontend serving
    Image processing interface

    Build System#

    CMake configuration for C++ components
    Makefiles for individual components
    Docker multi-stage builds
    GitLab CI/CD pipeline

    Testing#

    Catch2 v3 test framework
    Functional tests for CSha class
    Integration tests for encoding/decoding
    Coverage reporting with gcovr

    License#

    This project is licensed under the Mozilla Public License 2.0 (MPL-2.0). See LICENSE for details.

    Credits#

    Third-Party Libraries#

    Cubiomes: Minecraft biome generation (included in repository)
    OpenCV: Image processing and manipulation
    OpenSSL: Cryptographic operations
    Catch2: C++ testing framework
    FastAPI: Python web framework

    AI Assistance#

    This project was developed with assistance from AI tools for code refactoring, build configuration, and documentation. See the AI Usage Statement for detailed information.
    AI was used for:
    Code refactoring and optimization
    Makefile and build configuration
    Docker containerization
    Homebrew formula creation
    Documentation and README generation
    Bit-level mathematical operations
    Modified at 2026-10-17 15:06:55
    Previous
    Architecture
    Next
    AI usage
    Built with