Metadata-Version: 2.4
Name: quantumlock
Version: 2.1.1
Summary: Enterprise License Management with Quantum-Enhanced Security
Project-URL: Homepage, https://softquantus.com
Project-URL: Documentation, https://docs.softquantus.com
Project-URL: Repository, https://github.com/softquantus/quantumlock
Project-URL: Portal, https://portal.softquantus.com
Project-URL: Support, https://support.softquantus.com
Project-URL: Terms of Service, https://docs.softquantus.com/legal/terms
Project-URL: Privacy Policy, https://docs.softquantus.com/legal/privacy
Project-URL: EULA, https://docs.softquantus.com/legal/eula
Author-email: SoftQuantus innovative OÜ <licensing@softquantus.com>
Maintainer-email: SoftQuantus Team <support@softquantus.com>
License: Proprietary - Copyright 2025 SoftQuantus innovative OÜ
License-File: LICENSE
Keywords: digital-signatures,enterprise,license-management,licensing,quantum-cryptography,rsa,saas
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: Other/Proprietary License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.11
Requires-Dist: cryptography>=41.0.0
Requires-Dist: pydantic-settings>=2.0.0
Requires-Dist: pydantic>=2.0.0
Provides-Extra: all
Requires-Dist: alembic>=1.13.0; extra == 'all'
Requires-Dist: email-validator>=2.0.0; extra == 'all'
Requires-Dist: fastapi>=0.110.0; extra == 'all'
Requires-Dist: hiredis>=2.0.0; extra == 'all'
Requires-Dist: httpx>=0.27.0; extra == 'all'
Requires-Dist: mypy>=1.8.0; extra == 'all'
Requires-Dist: numpy>=1.24.0; extra == 'all'
Requires-Dist: oqs-python>=0.8.0; extra == 'all'
Requires-Dist: passlib[bcrypt]>=1.7.4; extra == 'all'
Requires-Dist: pre-commit>=3.6.0; extra == 'all'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'all'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'all'
Requires-Dist: pytest-cov>=4.1.0; extra == 'all'
Requires-Dist: pytest>=8.0.0; extra == 'all'
Requires-Dist: python-jose[cryptography]>=3.3.0; extra == 'all'
Requires-Dist: python-multipart>=0.0.9; extra == 'all'
Requires-Dist: qiskit-aer>=0.14.0; extra == 'all'
Requires-Dist: qiskit>=1.0.0; extra == 'all'
Requires-Dist: redis>=5.0.0; extra == 'all'
Requires-Dist: requests>=2.28.0; extra == 'all'
Requires-Dist: rich>=13.0.0; extra == 'all'
Requires-Dist: ruff>=0.3.0; extra == 'all'
Requires-Dist: sqlalchemy>=2.0.0; extra == 'all'
Requires-Dist: typer>=0.12.0; extra == 'all'
Requires-Dist: uvicorn[standard]>=0.27.0; extra == 'all'
Provides-Extra: api
Requires-Dist: alembic>=1.13.0; extra == 'api'
Requires-Dist: email-validator>=2.0.0; extra == 'api'
Requires-Dist: fastapi>=0.110.0; extra == 'api'
Requires-Dist: httpx>=0.27.0; extra == 'api'
Requires-Dist: passlib[bcrypt]>=1.7.4; extra == 'api'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'api'
Requires-Dist: python-jose[cryptography]>=3.3.0; extra == 'api'
Requires-Dist: python-multipart>=0.0.9; extra == 'api'
Requires-Dist: requests>=2.28.0; extra == 'api'
Requires-Dist: sqlalchemy>=2.0.0; extra == 'api'
Requires-Dist: uvicorn[standard]>=0.27.0; extra == 'api'
Provides-Extra: cli
Requires-Dist: httpx>=0.27.0; extra == 'cli'
Requires-Dist: rich>=13.0.0; extra == 'cli'
Requires-Dist: typer>=0.12.0; extra == 'cli'
Provides-Extra: dev
Requires-Dist: httpx>=0.27.0; extra == 'dev'
Requires-Dist: mypy>=1.8.0; extra == 'dev'
Requires-Dist: pre-commit>=3.6.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.3.0; extra == 'dev'
Provides-Extra: pqc
Requires-Dist: oqs-python>=0.8.0; extra == 'pqc'
Provides-Extra: quantum
Requires-Dist: numpy>=1.24.0; extra == 'quantum'
Requires-Dist: qiskit-aer>=0.14.0; extra == 'quantum'
Requires-Dist: qiskit>=1.0.0; extra == 'quantum'
Provides-Extra: server
Requires-Dist: hiredis>=2.0.0; extra == 'server'
Requires-Dist: redis>=5.0.0; extra == 'server'
Requires-Dist: requests>=2.28.0; extra == 'server'
Description-Content-Type: text/markdown

# QuantumLock

**Enterprise License Management with Quantum-Enhanced Security**

QuantumLock is a comprehensive software licensing solution that combines RSA-4096 cryptographic signatures with optional quantum-enhanced security features.

## Features

- 🔐 **Cryptographic License Signing** - RSA-4096 with SHA-256
- ⚛️ **Quantum-Enhanced Security** - Optional quantum fingerprinting (Qiskit)
- 🌐 **REST API** - SaaS license management platform
- 💻 **CLI Tool** - Command-line license generation and validation
- 🔄 **Floating Licenses** - Concurrent seat management with Redis
- 📦 **SDK** - Embeddable validation library

## Installation

```bash
# Core SDK only
pip install quantumlock

# With CLI tool
pip install "quantumlock[cli]"

# With API server
pip install "quantumlock[api]"

# Full installation
pip install "quantumlock[all]"
```

## Quick Start

### CLI

```bash
# Generate keys
quantumlock keys generate

# Create a license
quantumlock license create \
  --customer "Acme Corp" \
  --type enterprise \
  --valid-days 365 \
  --output license.json

# Validate a license
quantumlock license validate license.json
```

### SDK

```python
from quantumlock.sdk import LicenseValidator

validator = LicenseValidator.from_file("keys/license.pub")
result = validator.validate_file("license.json")

if result.is_valid:
    print(f"License valid for: {result.customer_name}")
else:
    print(f"Invalid: {result.error}")
```

### API Server

```bash
# Using Docker
docker-compose up -d api

# Or directly
uvicorn quantumlock.api:create_app --factory --host 0.0.0.0 --port 8000
```

## Architecture

```
quantumlock/
├── src/quantumlock/       # Main package
│   ├── core/              # Shared models, crypto, config
│   ├── api/               # REST API (FastAPI)
│   ├── cli/               # CLI tool (Typer)
│   ├── sdk/               # Embeddable SDK
│   └── server/            # Floating license server
├── lib/                   # Shared libraries
│   ├── authority.py       # RSA signing/validation
│   └── quantum_protocol.py # Quantum features
└── tests/                 # Test suite
```

## Docker

```bash
# API server
docker build --target api -t quantumlock-api .

# CLI tool
docker build --target cli -t quantumlock-cli .

# License server
docker build --target server -t quantumlock-server .
```

## Deployment

### Unified Deployment Script

The project includes a master deployment script that handles everything from zero:

```bash
# Full deployment (API + SDK + CLI)
./scripts/deploy_all.sh

# Staging environment
./scripts/deploy_all.sh --env staging

# Preview without executing
./scripts/deploy_all.sh --dry-run

# Skip components
./scripts/deploy_all.sh --skip-api      # Only SDK/CLI
./scripts/deploy_all.sh --skip-sdk      # Only API + CLI
./scripts/deploy_all.sh --skip-cli      # Only API + SDK
```

### Deployment Phases

1. **Bootstrap** - Generate RSA-4096 keys and bootstrap license for API
2. **Build API** - Nuitka compilation in Docker (Linux-compatible binaries)
3. **Deploy API** - Push to Azure Container Apps
4. **Generate Licenses** - Create SDK/CLI licenses via running API
5. **Build SDK/CLI** - Nuitka with embedded licenses and public keys
6. **Deploy SDK/CLI** - Push to Azure/Registry

### Scripts

| Script | Purpose |
|--------|---------|
| `scripts/deploy_all.sh` | Master script - does everything |
| `scripts/build_docker.sh` | Nuitka build via Docker |
| `scripts/build_nuitka.py` | Core Nuitka compilation |
| `automation/3-deploy-protected-apis.sh` | Azure deployment (alternative) |

### License Protection

- Binaries compiled with Nuitka have embedded license + public key
- Bootstrap license for API uses self-signed key pair
- SDK/CLI licenses generated via QuantumLock API (dogfooding)
- RSA-4096 signatures prevent tampering

## Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `QUANTUMLOCK_DATABASE_URL` | `sqlite:///quantumlock.db` | Database connection |
| `QUANTUMLOCK_SECRET_KEY` | (required) | JWT signing key |
| `QUANTUMLOCK_REDIS_URL` | `redis://localhost:6379` | Redis for server |
| `QUANTUMLOCK_DEBUG` | `false` | Enable debug mode |

## License

**Proprietary Software - Copyright © 2025 SoftQuantus innovative OÜ**

This software is proprietary and confidential. Use of this software is governed by the End User License Agreement (EULA) and Terms of Service.

### Legal Documents

| Document | Link |
|----------|------|
| **EULA** | [docs/legal/EULA.md](./docs/legal/EULA.md) |
| **Terms of Service** | [docs/legal/TERMS_OF_SERVICE.md](./docs/legal/TERMS_OF_SERVICE.md) |
| **Privacy Policy** | [docs/legal/PRIVACY_POLICY.md](./docs/legal/PRIVACY_POLICY.md) |
| **License** | [LICENSE](./LICENSE) |

### Company Information

**SoftQuantus innovative OÜ**
- Registry Code: 17048927
- VAT: EE102767458
- Address: Veskiposti tn 2-1002, Tallinn, 10138, Estonia

### Contact

| Purpose | Contact |
|---------|---------|
| Website | https://softquantus.com |
| Portal | https://portal.softquantus.com |
| Support | support@softquantus.com |
| Legal | legal@softquantus.com |
| Phone | +33 628315815 |

---

QuantumLock™ is a trademark of SoftQuantus innovative OÜ.
