pyrite
Hardware-Bound & Cloud-Gated Binary Execution and Anti-Tamper Envelope Sealing for Crystal.
What is Pyrite?
Pyrite ensures that your compiled Crystal binary only executes on your authorized infrastructure. If an adversary extracts, leaks, steals, or modifies the binary, execution halts immediately before any application logic or secrets are exposed.
Core Security Guarantees
- Hardware & Cloud Execution Binding: The binary is incomplete at rest. Core operational configuration and keys are sealed inside an envelope that can only be decrypted by the physical motherboard's TPM 2.0 chip (
systemd-creds) or Google Cloud Run IAM / Cloud KMS. - Real-Time Self-Integrity (Anti-Tamper): At boot, Pyrite calculates the SHA-256 digest of
/proc/self/exeand compares it against the authorized hash decrypted from the envelope. Any 1-byte alteration halts the process instantly. - Anti-Reverse Engineering: Stripped native LLVM machine code (
strip -s) contains zero symbol tables, reflection metadata, or plaintext configuration. Decompilation yields only a dead decryption wrapper. - Zero Runtime Overhead: The cryptographic gate runs once during startup (~15–25ms) and adds 0.00% overhead to ongoing request handling. Zero external shard dependencies.
Quickstart
1. Add to shard.yml
dependencies:
pyrite:
github: renich/pyrite
version: ~> 0.1.0
2. Bootstrap in Application Code
require "pyrite"
require "kemal"
# Define strongly-typed application configuration
struct AppConfig
include JSON::Serializable
getter database_url : String
getter session_secret : String
getter api_token : String
end
# 1-line verification & bootstrap:
config = Pyrite.bootstrap!(AppConfig)
puts "Pyrite verified binary integrity. Starting application..."
get "/" do
"Secure service running on authorized hardware."
end
Kemal.run
3. Zero-Trust Fail-Closed Architecture
Pyrite enforces an absolute zero-trust, fail-closed policy:
- Binaries strictly require an authorized hardware TPM 2.0 or Cloud KMS anchor to unseal their configuration envelope.
- If executed outside an authorized environment (e.g. on an attacker's workstation without the TPM or Cloud IAM role), Pyrite aborts immediately with
Pyrite::HardwareAuthErrorand exits with code 1. - Secrets and business logic are never exposed to memory outside the designated hardware/cloud trust boundary.
Build & Sealing CLI (bin/pyrite)
When installed, Pyrite provides a compiled CLI tool to automate LLVM compilation, ELF symbol stripping, SHA-256 digest hashing, and envelope sealing.
# Build & Seal for Google Cloud Run (KMS):
bin/pyrite build \
--input=src/main.cr \
--output=bin/app \
--target=gcp \
--kms-key="projects/my-p/locations/global/keyRings/my-r/cryptoKeys/app-key" \
--config=config/production.json
# Build & Seal for Bare-Metal Fedora (TPM 2.0 / systemd-creds):
bin/pyrite build \
--input=src/main.cr \
--output=bin/app \
--target=baremetal \
--pcr=0,7 \
--config=config/production.json
# Build & Seal for AWS (ECS / Lambda / KMS):
bin/pyrite build \
--input=src/main.cr \
--output=bin/app \
--target=aws \
--kms-key="arn:aws:kms:us-east-1:123456789012:key/..." \
--config=config/production.json
Supported Trust Anchors
| Environment | Provider | Root of Trust | Protection |
|---|---|---|---|
| Google Cloud Run | Pyrite::Providers::GCPKMS |
Google Cloud IAM + Cloud KMS | BinAuthz + Instance Metadata OIDC |
| Fedora / Bare-Metal | Pyrite::Providers::SystemdCreds |
Host TPM 2.0 (PCR 0,7) | systemd-creds + Linux Kernel IMA |
| Bare-Metal Direct | Pyrite::Providers::TPM2Direct |
/dev/tpmrm0 chip |
Direct TPM2 PCR unseal (tpm2-tools) |
| AWS (ECS / Lambda) | Pyrite::Providers::AWSKMS |
IMDSv2 + AWS KMS | AWS IAM Task Role Decrypt |
Documentation
Exhaustive technical documentation, specifications, and architecture decision records are maintained in reStructuredText under docs/:
| Guide | Scope & Highlights | Direct Link |
|---|---|---|
| Business Context & Strategy | Problem statement, threat landscape, stakeholder personas (Devon, Rénich, Sam), and quantifiable ROI goals. | Business Specs • Personas • Problem Statement |
| Functional Specifications | Requirements [FUNC-001]–[FUNC-005]: execution gating, real-time self-integrity, envelope sealing, developer experience, and CLI orchestration. | Functional Specs • Execution Gating • Self-Integrity |
| Technical Architecture | Specifications [TECH-001]–[TECH-005]: core deserialization engine, streaming 16KB SHA-256 hasher, provider drivers, and formal STRIDE threat model. | Technical Specs • Core Engine • Threat Model |
| Architecture Decision Records | Immutable ADRs documenting envelope encryption versus client-side DRM, and zero-dependency standard library design. | ADR Index • ADR 001 (Envelope Encryption) • ADR 002 (Stdlib Only) |
| Project Roadmap & Tracking | Sequenced 3-phase delivery tracking, verification criteria, and milestone deliverables across core engine, providers, and CLI. | Roadmap • Phase 1 • Phase 2 • Phase 3 |
| Crystal API Reference | Complete interactive type hierarchy, method signatures, and compiler-generated reference. | API Reference |
Contributing & Code of Honor
All contributions must adhere to the Universal Code of Honor and Contributing Guidelines.
License
- Software: GNU General Public License v3.0 or later (LICENSE).
- Documentation: GNU Free Documentation License v1.3 or later (LICENSE-DOCS).
Copyleft © 2026 Rénich Bon Ćirić <renich@evalinux.com>.
Support & Donations
If you find Pyrite useful and wish to support its ongoing development, please consider donating:
pyrite
- 1
- 0
- 0
- 0
- 2
- about 1 hour ago
- August 28, 2026
GNU General Public License v3.0 or later
Fri, 28 Aug 2026 09:11:14 GMT