Metadata-Version: 2.4
Name: crypto-toolkit-py
Version: 1.0.1
Summary: Modern Cryptography & Hashing Toolkit - a misuse-resistant, high-level cryptography library for Python
Author-email: Parthiv Rawat <parthiv05022000@gmail.com>
Maintainer-email: Parthiv Rawat <parthiv05022000@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/parthivrawat/crypto-toolkit
Project-URL: Documentation, https://github.com/parthivrawat/crypto-toolkit/tree/main/python#readme
Project-URL: Repository, https://github.com/parthivrawat/crypto-toolkit
Project-URL: Bug Tracker, https://github.com/parthivrawat/crypto-toolkit/issues
Project-URL: Changelog, https://github.com/parthivrawat/crypto-toolkit/blob/main/python/CHANGELOG.md
Keywords: crypto,cryptography,hash,hashing,hmac,password,encryption,argon2,ed25519,security
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Security
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: crypto
Requires-Dist: cryptography>=43.0.0; extra == "crypto"
Provides-Extra: argon2
Requires-Dist: argon2-cffi>=23.1.0; extra == "argon2"
Provides-Extra: bcrypt
Requires-Dist: bcrypt>=4.0.0; extra == "bcrypt"
Provides-Extra: full
Requires-Dist: cryptography>=43.0.0; extra == "full"
Requires-Dist: argon2-cffi>=23.1.0; extra == "full"
Requires-Dist: bcrypt>=4.0.0; extra == "full"
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: mypy>=1.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Dynamic: license-file

# Modern Cryptography & Hashing Toolkit (Python)

A misuse-resistant, high-level cryptography library with safe defaults, constant-time verification, and a clear API for hashing, password hashing, key derivation, symmetric encryption, HMAC, and digital signatures.

## Features

- **Safe hashing**: SHA-256, SHA-384, SHA-512, SHA-3, BLAKE2 (MD5 and SHA-1 rejected)
- **HMAC**: Constant-time verification
- **Password hashing**: PBKDF2-SHA256, scrypt, Argon2id, bcrypt with adaptive costs
- **Key derivation**: PBKDF2 and scrypt
- **Symmetric encryption**: AES-256-GCM or ChaCha20-Poly1305 with automatic nonce management
- **Digital signatures**: Ed25519
- **Zero runtime dependencies** for core hashing, HMAC, and key derivation
- **Optional extras** for AEAD encryption and signatures (`[crypto]`), Argon2id (`[argon2]`), and bcrypt (`[bcrypt]`)

## Installation

```bash
pip install crypto-toolkit-py
```

With all optional dependencies:

```bash
pip install "crypto-toolkit-py[full]"
```

## Quick Start

```python
from crypto_toolkit import hash, password, encrypt, sign

# Safe, deterministic hashing
sha256 = hash.string('hello world', algorithm='sha-256')
print(sha256)

mac = hash.hmac('secret-key', 'message', algorithm='sha-256')
assert hash.verify_hmac(mac, 'secret-key', 'message', algorithm='sha-256')

# Password hashing
ph = password.hash('user-password')
assert password.verify('user-password', ph)

# Key derivation
salt = b'16-or-more-random-bytes'
key = password.derive('passphrase', salt=salt, length=32)

# Symmetric encryption (requires cryptography)
ciphertext = encrypt.symmetric('sensitive data', key=key)
plaintext = encrypt.decrypt(ciphertext, key=key)
assert plaintext == 'sensitive data'

# Digital signatures (requires cryptography)
private_key, public_key = sign.generate_keypair()
signature = sign.ed25519('message', private_key=private_key)
assert sign.verify(signature, 'message', public_key=public_key)
```

## Development

```bash
cd implementations/security/crypto-toolkit/python
pip install -e ".[dev,full]"
pytest test_crypto_toolkit.py -v
```

## License

MIT License
