Metadata-Version: 2.4
Name: penguin-security
Version: 0.1.1
Summary: PenguinTech security utilities
Author-email: Penguin Tech Inc <dev@penguintech.io>
License: MIT
Keywords: penguintech,security
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.13
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pydantic>=2.0
Requires-Dist: argon2-cffi==25.1.0
Provides-Extra: crypto
Requires-Dist: cryptography>=42.0.0; extra == "crypto"
Provides-Extra: aws
Requires-Dist: boto3>=1.34; extra == "aws"
Provides-Extra: flask
Requires-Dist: flask>=3.0; extra == "flask"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Requires-Dist: mypy>=1.0; extra == "dev"
Requires-Dist: bandit>=1.7; extra == "dev"
Requires-Dist: pip-audit>=2.7; extra == "dev"
Requires-Dist: flask>=3.0; extra == "dev"
Requires-Dist: cryptography>=42.0.0; extra == "dev"
Requires-Dist: boto3>=1.34; extra == "dev"
Dynamic: license-file

# penguin-security

PenguinTech security utilities.

## Install

```bash
pip install penguin-security
```

## Quick Start

```python
from penguin_security import ...
```

## Crypto (optional)

`penguin_security.crypto` provides symmetric/hybrid encryption, key
derivation (Argon2id, HKDF), ECC (X25519/Ed25519), hashing, and per-tenant
envelope encryption (`penguin_security.crypto.envelope`). It was formerly
the standalone `penguin-crypto` package.

These primitives depend on `cryptography` and `argon2-cffi`, which are
**not** installed with the base package. Install the `crypto` extra to use
them:

```bash
pip install "penguin-security[crypto]"
```

```python
from penguin_security.crypto import encrypt, decrypt, generate_key

key = generate_key()
ciphertext = encrypt(b"secret data", key)
plaintext = decrypt(ciphertext, key)
```

Importing `penguin_security.crypto` without the extra installed raises a
clear `ImportError` naming the extra.

`AwsKmsKek` (in `penguin_security.crypto.envelope`) additionally needs
`boto3`, kept as its own `aws` extra so the rest of the envelope module
never requires it:

```bash
pip install "penguin-security[crypto,aws]"
```
