Skip to main content

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

  1. Start CryptDesk on the host machine.
  2. In Share this device, choose a port and optionally a shared secret, then click Start sharing.
  3. Share one of the listed host IP addresses and the port with the viewer.
  4. On the viewer machine, open Control a device, enter the host IP, port, and the same shared secret if used, then click Connect.
  5. Verify that the safety code matches on both machines.
  6. If remote control is needed, the host enables Allow remote control and the viewer enables Enable 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.yml runs compile checks, pytest, and package builds on pushes, pull requests, and manual dispatch.
  • python-publish.yml builds sdist and wheel distributions and publishes the Python package to PyPI.
  • github-release.yml builds a standalone Windows CryptDesk.exe and 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cryptdesk-0.1.1.tar.gz (22.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cryptdesk-0.1.1-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

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

Hashes for cryptdesk-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2771918d8e39081b0cb022d1e6b20475d7de2252c11b012f18604e1976c4fe29
MD5 5e8e85c1fbb4d008ae7dff04df5cebed
BLAKE2b-256 a940a76662d56366d9414bbacb7a525b90d9c895b8883a94ad919a3d5ce2977b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cryptdesk-0.1.1.tar.gz:

Publisher: python-publish.yml on TheCrimsonborn/CryptDesk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for cryptdesk-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0898c6bc646593e01eda9e395087174452c9b0a9db3ae63e95845aebdb8f8a79
MD5 c9f6ebbac8903db732b42889d1d8c5e3
BLAKE2b-256 cdc123283cc63a975f3ebd305e55368e51b555ebb7fd9d023d18c334ddeb8246

See more details on using hashes here.

Provenance

The following attestation bundles were made for cryptdesk-0.1.1-py3-none-any.whl:

Publisher: python-publish.yml on TheCrimsonborn/CryptDesk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page