Peer-to-peer encrypted screen sharing and remote control desktop app
Project description
CryptDesk
CryptDesk is a Python + PySide6 desktop application for direct peer-to-peer screen sharing with optional remote control and end-to-end encrypted transport.
What this build includes
- Direct host/viewer connection over TCP without a central relay
- Ephemeral X25519 key exchange per session
- AES-256-GCM encrypted message transport
- Optional shared secret to harden session authentication
- Live screen streaming from the host's primary display
- Remote mouse and keyboard control gated by explicit host consent
- Session safety code shown on both ends for manual verification
Security model
- Media and control packets are encrypted end-to-end after the initial public-key exchange.
- If you set the same shared secret on both peers, it is mixed into key derivation.
- The safety code should match on both peers. If it does not, terminate the session.
- This build is a direct desktop-to-desktop MVP. It does not include relay servers, TURN/STUN, or unattended access workflows.
Prerequisites
- Python 3.11+
- Windows, macOS, or Linux desktop environment
- The host and viewer must be able to open a direct TCP connection. On LAN this usually works immediately. Across the internet you will usually need port forwarding or a VPN.
Run locally
python -m pip install -e .
python -m cryptdesk
You can also use the console entry point:
cryptdesk
Basic usage
- Start CryptDesk on the host machine.
- In
Share this device, choose a port and optionally a shared secret, then clickStart sharing. - Share one of the listed host IP addresses and the port with the viewer.
- On the viewer machine, open
Control a device, enter the host IP, port, and the same shared secret if used, then clickConnect. - Verify that the safety code matches on both machines.
- If remote control is needed, the host enables
Allow remote controland the viewer enablesEnable remote input.
Build a desktop executable
Install the dev dependencies and run the packaged build script:
python -m pip install -e .[dev]
powershell -ExecutionPolicy Bypass -File .\scripts\build.ps1
PyInstaller output will be generated in dist\CryptDesk.
For a single-file Windows executable:
powershell -ExecutionPolicy Bypass -File .\scripts\build.ps1 -OneFile
That build produces dist\CryptDesk.exe.
GitHub Actions
Two workflows are included under .github/workflows:
python-package.ymlruns compile checks,pytest, and package builds on pushes, pull requests, and manual dispatch.python-publish.ymlbuildssdistandwheeldistributions and publishes the Python package to PyPI.github-release.ymlbuilds a standalone WindowsCryptDesk.exeand uploads it to the GitHub Release as a click-to-run asset.
The publish workflow is configured for PyPI Trusted Publishing. In PyPI, register cryptdesk with this repository and the workflow file python-publish.yml, and use the GitHub environment name pypi.
For manual release uploads, trigger github-release.yml with the release_tag input set to an existing GitHub Release tag.
Tests
python -m pytest
Limitations
- The current build streams the primary display only.
- The current transport is direct TCP; NAT traversal and relay infrastructure are not included.
- Input injection depends on OS permissions and may require accessibility permissions on some systems.
- Keyboard layout translation is best-effort and may vary across platforms.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cryptdesk-0.1.1.tar.gz.
File metadata
- Download URL: cryptdesk-0.1.1.tar.gz
- Upload date:
- Size: 22.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2771918d8e39081b0cb022d1e6b20475d7de2252c11b012f18604e1976c4fe29
|
|
| MD5 |
5e8e85c1fbb4d008ae7dff04df5cebed
|
|
| BLAKE2b-256 |
a940a76662d56366d9414bbacb7a525b90d9c895b8883a94ad919a3d5ce2977b
|
Provenance
The following attestation bundles were made for cryptdesk-0.1.1.tar.gz:
Publisher:
python-publish.yml on TheCrimsonborn/CryptDesk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cryptdesk-0.1.1.tar.gz -
Subject digest:
2771918d8e39081b0cb022d1e6b20475d7de2252c11b012f18604e1976c4fe29 - Sigstore transparency entry: 1079986163
- Sigstore integration time:
-
Permalink:
TheCrimsonborn/CryptDesk@542231aba55d10057e53a2ba06ba958064443e7b -
Branch / Tag:
refs/heads/master - Owner: https://github.com/TheCrimsonborn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@542231aba55d10057e53a2ba06ba958064443e7b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file cryptdesk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: cryptdesk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 22.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0898c6bc646593e01eda9e395087174452c9b0a9db3ae63e95845aebdb8f8a79
|
|
| MD5 |
c9f6ebbac8903db732b42889d1d8c5e3
|
|
| BLAKE2b-256 |
cdc123283cc63a975f3ebd305e55368e51b555ebb7fd9d023d18c334ddeb8246
|
Provenance
The following attestation bundles were made for cryptdesk-0.1.1-py3-none-any.whl:
Publisher:
python-publish.yml on TheCrimsonborn/CryptDesk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cryptdesk-0.1.1-py3-none-any.whl -
Subject digest:
0898c6bc646593e01eda9e395087174452c9b0a9db3ae63e95845aebdb8f8a79 - Sigstore transparency entry: 1079986261
- Sigstore integration time:
-
Permalink:
TheCrimsonborn/CryptDesk@542231aba55d10057e53a2ba06ba958064443e7b -
Branch / Tag:
refs/heads/master - Owner: https://github.com/TheCrimsonborn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@542231aba55d10057e53a2ba06ba958064443e7b -
Trigger Event:
workflow_dispatch
-
Statement type: