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.

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 them to PyPI when a GitHub release is published or when manually triggered.

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.

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.0.tar.gz (22.2 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.0-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file cryptdesk-0.1.0.tar.gz.

File metadata

  • Download URL: cryptdesk-0.1.0.tar.gz
  • Upload date:
  • Size: 22.2 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.0.tar.gz
Algorithm Hash digest
SHA256 73baa2175e2b9c7e0072f12a35d633e5e211c7307ada2550aba9daecf723cd55
MD5 6f0f46117e6acf0cb33a484f0a4ea358
BLAKE2b-256 cf9a472a0110bfe1bb94452d4e9093f15a598ccda48e0066a770005e0bf3d6b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for cryptdesk-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: cryptdesk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.2 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 91fe3edb6bb55c8729230586382f756cb90f017ea525ee57f0160ce3cabf99be
MD5 7b4cbb93ab9c052b036114ed458a6998
BLAKE2b-256 e1fdf27d5f1ca3fa4dda2257dad5dfa6091716eec234aad3ee784f4cf62943c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for cryptdesk-0.1.0-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