Metadata-Version: 2.4
Name: cyphra
Version: 0.1.1
Summary: Zero-knowledge hybrid E2EE messaging reference platform
Maintainer: Anupam1707, asmitbaldi
Project-URL: Homepage, https://github.com/Anupam1707/PostQ
Project-URL: Repository, https://github.com/Anupam1707/PostQ
Project-URL: Issues, https://github.com/Anupam1707/PostQ/issues
Keywords: messaging,end-to-end-encryption,post-quantum,ml-kem,sqlcipher
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Communications :: Chat
Classifier: Topic :: Security :: Cryptography
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: argon2-cffi>=23.1.0
Requires-Dist: cryptography>=42.0.0
Requires-Dist: pqcrypto>=1.0.0
Requires-Dist: sqlcipher3>=0.6.2
Requires-Dist: websockets<17.0,>=14.0
Provides-Extra: dev
Requires-Dist: build>=1.2.0; extra == "dev"
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: twine>=5.0; extra == "dev"

# Cyphra

Cyphra is a Python package for client-side encrypted messaging with two modes:

- A standalone terminal client: `cyphra chat --name Alice`
- An importable developer SDK: `from cyphra import CyphraClient`

## Features

- X25519 and ML-KEM-768 hybrid key agreement
- HKDF-SHA384 and AES-256-GCM encryption
- Ed25519 identity and message signatures
- Local SQLCipher storage with Argon2id key derivation
- Fingerprint-based contact approval
- Fixed HTTPS relay transport
- Opaque relay packets with no plaintext access

## Install

```bash
python3 -m pip install cyphra
```

## SDK Example

```python
from cyphra import CyphraClient, CryptoEngine, DatabaseManager
from cyphra.network.http_client import HttpBrokerClient

engine = CryptoEngine()
database = DatabaseManager.from_passphrase("alice.db", "a long local passphrase")
CyphraClient.provision_identity(engine, database)
transport = HttpBrokerClient("https://post-q.vercel.app")
client = CyphraClient(engine, database, transport)
```

## CLI

```bash
cyphra chat --name Alice
```

Persistent private keys, contacts, and encrypted message history remain on the client. The relay receives only public bundles, routing metadata, and opaque ciphertext.

Project repository: https://github.com/Anupam1707/PostQ
