Metadata-Version: 2.4
Name: spindlex
Version: 0.1.0
Summary: A pure-Python SSHv2 client/server library
Home-page: https://github.com/spindle-dev/spindle
Author: Spindle Team
Author-email: SpindleX Team <team@spindlex.org>
Maintainer-email: SpindleX Team <team@spindlex.org>
License: MIT
Project-URL: Homepage, https://gitlab.com/daveops.world/development/python/spindlex
Project-URL: Documentation, https://spindlex.readthedocs.io/
Project-URL: Repository, https://gitlab.com/daveops.world/development/python/spindlex.git
Project-URL: Issues, https://gitlab.com/daveops.world/development/python/spindlex/-/issues
Project-URL: Changelog, https://gitlab.com/daveops.world/development/python/spindlex/-/blob/main/CHANGELOG.md
Keywords: ssh,sftp,client,server,cryptography,security
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
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: Topic :: Internet
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Networking
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cryptography>=3.0
Requires-Dist: typing-extensions>=4.0; python_version < "3.10"
Provides-Extra: async
Requires-Dist: asyncio-dgram>=2.0; extra == "async"
Provides-Extra: gssapi
Requires-Dist: gssapi>=1.6.0; sys_platform != "win32" and extra == "gssapi"
Provides-Extra: dev
Requires-Dist: black>=22.0; extra == "dev"
Requires-Dist: isort>=5.0; extra == "dev"
Requires-Dist: flake8>=4.0; extra == "dev"
Requires-Dist: mypy>=0.900; extra == "dev"
Requires-Dist: pre-commit>=2.15; extra == "dev"
Requires-Dist: pytest>=6.0; extra == "dev"
Requires-Dist: pytest-cov>=3.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.18; extra == "dev"
Requires-Dist: pytest-xdist>=2.0; extra == "dev"
Provides-Extra: docs
Requires-Dist: sphinx>=5.0; extra == "docs"
Requires-Dist: sphinx-rtd-theme>=1.0; extra == "docs"
Requires-Dist: myst-parser>=0.18; extra == "docs"
Requires-Dist: sphinx-autobuild>=2021.3.14; extra == "docs"
Requires-Dist: sphinxcontrib-spelling>=7.6; extra == "docs"
Provides-Extra: test
Requires-Dist: pytest>=6.0; extra == "test"
Requires-Dist: pytest-cov>=3.0; extra == "test"
Requires-Dist: pytest-asyncio>=0.18; extra == "test"
Requires-Dist: pytest-xdist>=2.0; extra == "test"
Requires-Dist: coverage>=6.0; extra == "test"
Dynamic: license-file

# SpindleX

A pure-Python SSHv2 client/server library that provides secure, high-performance SSH and SFTP operations without GPL/LGPL dependencies.

## Features

- **Pure Python**: No C extensions or system dependencies
- **Modern Security**: Ed25519, ECDSA, ChaCha20-Poly1305, and other modern algorithms
- **Full SSH Support**: Client and server implementations with all major features
- **SFTP Support**: Complete SFTP client and server functionality
- **Async Support**: Optional asyncio support for high-performance applications
- **Comprehensive**: Port forwarding, authentication methods, host key policies
- **Well-Tested**: Extensive test suite with high code coverage
- **Type Hints**: Fully typed codebase for better development experience

## Quick Start

### Installation

```bash
pip install spindlex
```

### Basic Usage

```python
from spindlex import SSHClient

# Create client and connect
client = SSHClient()
client.connect('example.com', username='user', password='password')

# Execute a command
stdin, stdout, stderr = client.exec_command('ls -la')
print(stdout.read().decode())

# Use SFTP
sftp = client.open_sftp()
sftp.get('/remote/file.txt', '/local/file.txt')
sftp.close()

# Clean up
client.close()
```

### Key-based Authentication

```python
from spindlex import SSHClient
from spindlex.crypto.pkey import Ed25519Key

# Load private key
private_key = Ed25519Key.from_private_key_file('/path/to/private_key')

client = SSHClient()
client.connect(
    hostname='example.com',
    username='user',
    pkey=private_key
)
```

## Documentation

- [Quick Start Guide](https://spindlex.readthedocs.io/en/latest/quickstart.html)
- [User Guide](https://spindlex.readthedocs.io/en/latest/user_guide/)
- [API Reference](https://spindlex.readthedocs.io/en/latest/api_reference/)
- [Examples](https://spindlex.readthedocs.io/en/latest/examples/)
- [Security Guide](https://spindlex.readthedocs.io/en/latest/security.html)

## Requirements

- Python 3.8+
- cryptography >= 3.0

## Optional Dependencies

- `asyncio` support: `pip install spindlex[async]`
- Development tools: `pip install spindlex[dev]`
- GSSAPI authentication: `pip install spindlex[gssapi]` (Unix only)

## Contributing

We welcome contributions! Please see our [Contributing Guide](https://spindlex.readthedocs.io/en/latest/contributing.html) for details.

## Security

For security issues, please email security@spindlex.org instead of creating a public issue.

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Acknowledgments

- Built with modern Python cryptography
- Inspired by the need for a pure-Python SSH library
- Thanks to all contributors and the Python community
