Skip to main content


Confy CLI

A command-line client for the Confy encrypted communication system.

Test PyPI - Version AUR Version PyPI - Python Version GitHub License Visitors


A secure command-line interface for peer-to-peer encrypted messaging using the Confy communication system. This CLI enables users to establish encrypted connections with other peers, exchange cryptographic keys, and communicate with end-to-end encryption using industry-standard algorithms.

Learn more about the project at github.com/confy-security

Made with dedication by students from Brazil 🇧🇷.

⚡ Features

  • End-to-End Encryption - Messages are encrypted using AES-256 in CFB mode
  • Digital Signatures - Messages are signed using RSA with PSS padding for authenticity
  • Secure Key Exchange - RSA-4096 key exchange with OAEP padding
  • Interactive Terminal - User-friendly command-line interface using prompt-toolkit and Typer
  • Debug Mode - Detailed logging for troubleshooting and development
  • Cross-Platform - Works on Windows, macOS, and Linux
  • WebSocket Support - Secure peer-to-peer communication over WebSocket (WSS)

⚙️ Requirements

  • Python: 3.13 or higher
  • OS: Windows, macOS, or Linux

📦 Installation

Install the CLI globally with your Python package manager of choice.

pipx install confy-cli

With AUR (Arch Linux)

You can install the CLI from the AUR using an AUR helper like yay:

yay -S confy-cli

🐳 Using Docker

Alternatively, you can use the CLI via a Docker container:

docker run -it ghcr.io/confy-security/cli:latest

Once inside the container, you can use the CLI normally:

confy start your-user-id recipient-user-id

To build the Docker image locally:

docker build -t confy-cli .
docker run -it confy-cli

🚀 Quick Start

Basic Usage

Start a secure conversation with another peer:

confy start your-user-id recipient-user-id

When prompted, enter the server address:

Server address: wss://secure-server.example.com

[!TIP] To learn how to deploy your own self-hosted Confy server, see github.com/confy-security/server.

Interactive Commands

Once connected, you can:

  • Send messages - Type your message and press Enter
  • Receive messages - Messages from peers appear in real-time
  • Exit - Type exit to end the session

Example Session

$ confy start alice bob
Server address: wss://secure-server.example.com
[SYSTEM] Waiting for recipient to connect...
[SYSTEM] The recipient is now connected.
> Hello Bob, this is Alice!
[RECEIVED] Hi Alice! I received your message.
> exit

🔒 Security Architecture

Key Exchange Process

  1. RSA Key Generation - Each client generates a 4096-bit RSA key pair
  2. Public Key Exchange - Public keys are exchanged securely over WebSocket
  3. AES Key Generation - A random 256-bit AES key is generated
  4. Encrypted Key Distribution - AES key is encrypted with peer's RSA public key
  5. Secure Communication - All messages are encrypted with the shared AES key and signed

Encryption Details

  • Message Encryption - AES-256 in CFB mode
  • Key Encryption - RSA-4096 with OAEP padding
  • Signatures - RSA-4096 with PSS padding and SHA-256
  • Cryptography Library - Uses the cryptography library (actively maintained)

📚 Environment Variables

Configure the CLI using environment variables:

# Enable debug mode
export DEBUG=true

# Or set it in .env file
DEBUG=false

Create a .env file in your project directory:

DEBUG=false

🔧 Configuration

Server Address Format

The server address can be specified as:

  • Secure WebSocket - wss://example.com (recommended)
  • WebSocket - ws://example.com (use only for testing)
  • HTTPS - https://example.com (automatically converts to WSS)
  • HTTP - http://example.com (automatically converts to WS)

Connection History

The CLI stores your connection history in:

~/.confy_address_history

This allows you to quickly access previously used server addresses using arrow keys.

🛠️ Troubleshooting

Connection Issues

"Error connecting to server"

  • Verify the server address is correct
  • Ensure the server is running and accessible
  • Check your network connectivity
  • For WSS connections, verify the SSL certificate is valid

"Connection refused"

  • Confirm the server is listening on the specified address and port
  • Check if a firewall is blocking the connection

Message Issues

"AES key has not been established yet"

  • Wait a moment for the key exchange to complete
  • Ensure both peers are connected
  • Check if the server is properly relaying messages

"Failed to encrypt/verify message"

  • This indicates an issue with the encryption layer
  • Try reconnecting to the server
  • Check if both peers are running compatible CLI versions

Performance Issues

Slow response times

  • Check your network latency to the server
  • Consider using a server closer to your location
  • Reduce the frequency of large messages

📖 Usage Guide

Connecting to a Server

confy start alice bob

You'll be prompted to enter the server address. For the first time, you can enter:

Server address: wss://secure-server.example.com

Sending Messages

Simply type your message and press Enter:

> Your encrypted message here

Security Considerations

  1. Verify Recipients - Ensure you're communicating with the intended person
  2. Secure Connections - Always use WSS (WebSocket Secure) in production
  3. Key Management - Store your user ID securely
  4. Session Management - End sessions with exit when finished

Advanced Usage

Debug Mode

Enable debug mode to see detailed information:

DEBUG=true confy start alice bob

This will display:

  • Key exchange details
  • Message encryption/decryption info
  • Connection status changes
  • Signature verification steps

Custom Server

Connect to a custom server:

confy start your-id recipient-id
Server address: wss://your-custom-server.com:8080

🤝 Dependencies

Confy CLI relies on:

All dependencies are installed automatically with pip.

🐛 Bug Reports

If you encounter any issues, please report them:

  1. Check if the issue already exists on GitHub Issues
  2. Provide clear reproduction steps
  3. Include your Python version and OS
  4. Attach relevant logs with DEBUG=true

See CONTRIBUTING.md for more information.

🔐 Security Policy

For security vulnerabilities, please follow responsible disclosure:

DO NOT open a public GitHub issue.

Instead, email: confy@henriquesebastiao.com

See SECURITY.md for detailed information.

📝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines on:

  • Setting up the development environment
  • Code standards and style guidelines
  • Testing requirements
  • Pull request process

📄 License

Confy CLI is open source software licensed under the GPL-3.0 license.

📚 Additional Resources

🙋 Support

For questions and support:

Acknowledgments

This project was created with dedication by Brazilian students 🇧🇷 as part of the Confy Security initiative.

Built with ❤️ by the Confy Security Team

Metadata

Release files for confy-cli 0.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 confy-cli 0.2.0
File Size Uploaded
confy_cli-0.2.0.tar.gz 27.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for confy-cli 0.2.0
File Interpreter ABI Platform
confy_cli-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 53.0 kB

Release files / confy_cli-0.2.0.tar.gz

Download URL confy_cli-0.2.0.tar.gz
Size 27.2 kB
Tags Source
SHA-256 checksum
How to use checksums
61f3829a745a55c7ce09526e0df3f1ed779a804b7c8c3cf44b9c788a08c0b67a
BLAKE2b-256 checksum
How to use checksums
7b45a18279358f7527d85f1a382d36f5f9acfc0073f38e602cb1e515486dd4ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2025.

Transparency log

Release files / confy_cli-0.2.0-py3-none-any.whl

Download URL confy_cli-0.2.0-py3-none-any.whl
Size 25.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
510c3410e1e7db744cb4fbc3105c1c0efcf3831c1169fb946ce81cbfd29e7b15
BLAKE2b-256 checksum
How to use checksums
313e7f549e6a6ddf76d3fceef1555c4fa302d95d9105bc50715de479ea6c8219
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.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