Skip to content

shibme/xipher

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

Xipher Logo

Xipher

Key/password-based asymmetric encryption with optional post-quantum security

Go Reference Go Report Card Test Status Release Status License

Overview

Xipher is a collection of cryptographic primitives for key/password-based asymmetric encryption, with optional post-quantum security. It lets you share encrypted data between parties over insecure channels using public keys derived from passwords.

Features

  • Asymmetric encryption using key/password-derived public keys
  • Stream processing with built-in compression
  • Quantum-safe security (optional hybrid X25519 + ML-KEM-1024 support)
  • Available as CLI tool, Go library, WebAssembly module, and web interface
  • Optimized for both small and large data

Quick Start

Installation

# CLI (Homebrew, macOS)
brew install --cask shibme/tap/xipher

# CLI (Linux/macOS install script)
curl -fsSL https://xipher.org/install/install.sh | sh

# Go package
go get -u xipher.org/xipher

See the installation guide for Windows, Docker, binary downloads, and version pinning.

Basic Usage

CLI Example

Demo

Go Package Example

See the Go library guide for derive-key/encrypt/decrypt and streaming examples, and the API reference for the full surface.

Usage

Web Interface

Try it out at xipher.org. Keys are generated and stored in your browser, and all encryption happens locally. See the web app guide for the full send/receive flow.

CLI, GitHub Action, WebAssembly & self-hosting

Full command reference, flags, and copy-paste examples for the CLI, GitHub Action, WebAssembly module, and self-hosting the web app live in the documentation.

Public key references (URLs & domains)

Anywhere a public key is accepted, you can instead point Xipher at an HTTPS URL (or bare domain) that serves the key, giving recipients a friendly, memorable reference instead of a long XPK_… string.

xipher encrypt text --fetch -k "alice.example.com" -t "Secret message"

A bare domain resolves to /.well-known/xipher. See key references for resolution rules, the published key format, and hosting (including the CORS requirement for the web app).

Technical Details

Argon2id key derivation, Curve25519 / X25519 (with an optional quantum-safe hybrid that combines X25519 and ML-KEM-1024), and XChaCha20-Poly1305. See the cryptographic primitives for parameters, security levels, and the data format.

Note: v1.19+ uses Go's native ML-KEM package for post-quantum crypto (FIPS 203 compliant). This breaks compatibility with previous Kyber implementations. Standard ECC encryption is unaffected.

Note: Quantum-safe mode now defaults to a hybrid of X25519 and ML-KEM-1024 instead of pure ML-KEM, so security holds as long as either primitive is unbroken. Ciphertexts and public keys self-describe their algorithm, so data produced with the earlier pure ML-KEM mode still decrypts.

Documentation

Contributing

Contributions are welcome. Fork the repo, make your changes, and submit a pull request. For bugs or feature requests, open an issue.

Security

This project is experimental - use with caution in production. If you find security issues, please report them.

A few things to keep in mind:

  • Password strength matters
  • Post-quantum algorithms are still evolving
  • Keep your dependencies updated

See the architecture & security analysis for cryptographic details.

License

This project is licensed under the terms specified in the LICENSE file.

About

Xipher is a collection of cryptographic primitives for key/password-based asymmetric encryption, with optional post-quantum security. It lets you share encrypted data between parties over insecure channels using public keys derived from passwords.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors