Skip to main content

Socket interface to Curve25519 ECDH from an OpenPGP card.

Project description

OpenPGP Card X25519 Agent

Socket interface to Curve25519 ECDH from an OpenPGP card, using the SSH agent protocol. It's intended to be used with the OpenPGP Card WireGuard Go client, allowing a WireGuard private key to be stored on an OpenPGP card.

See the OpenPGP Card WireGuard Guide for a complete walkthrough of installation and usage of both agent and client.

Development

Prerequisites

Requires Python 3.8 or newer, and the pcsc-lite daemon.

Install prerequisites on Debian with the following packages:

apt install gcc libpcsclite-dev make pcscd python3-dev python3-venv swig

Or on Fedora:

dnf install findutils gcc make pcsc-lite pcsc-lite-devel python3-devel swig

Set up dev env

  1. Create a virtualenv with pyenv:

    pyenv virtualenv 3.8.16 openpgpcard-x25519-agent
    
  2. Activate the virtualenv:

    pyenv local openpgpcard-x25519-agent
    
  3. Install tox:

    pip install tox
    
  4. Install pre-commit and pre-push hooks:

    tox exec -e lint -- pre-commit install
    

Dev tasks

List all tox tasks you can run:

tox list

Run unit tests in watch mode:

tox -e watch

Run linting:

tox -e lint

Dev usage

Run agent listening at /var/run/wireguard/agent0:

sudo mkdir -p /var/run/wireguard && sudo chown $USER /var/run/wireguard
tox -e agent -- -l -vv

Or run agent listening on test socket:

tox -e agent -- -l -s test.socket -vv

Prompt to cache PIN on agent:

tox -e client -- -p -t -vv

Clear PIN from agent listening on test socket:

tox -e client -- -c -s test.socket -vv

Beware

  • Any client with access to the socket on which the agent is listening has full use of your OpenPGP card's decryption key when the agent has the card's PIN cached. An adversary with access to the socket can easily decrypt your WireGuard traffic, or impersonate your WireGuard identity; she also can decrypt regular OpenPGP messages encrypted for your card's decryption key.
  • Use of the agent requires the OpenPGP card's PIN to be cached in memory. After the card's PIN has been cached, if an adversary is able to dump your computer's memory, she will be able to recover the PIN.
  • Even after you clear the PIN or shut down the agent, there still may be copies of the PIN in memory that an adversary could recover.

Contributing

License

Copyright (c) 2023 Arcem Tene, Inc.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

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

openpgpcard-x25519-agent-1.1.0.tar.gz (51.1 kB view details)

Uploaded Source

Built Distribution

openpgpcard_x25519_agent-1.1.0-py3-none-any.whl (35.3 kB view details)

Uploaded Python 3

File details

Details for the file openpgpcard-x25519-agent-1.1.0.tar.gz.

File metadata

File hashes

Hashes for openpgpcard-x25519-agent-1.1.0.tar.gz
Algorithm Hash digest
SHA256 fcf44223ef90a8a866c299b87053b03baece425c5a420c5f2ab81b53b38f5961
MD5 3884a3bc1e3b93a2acd53223bd093e9b
BLAKE2b-256 25d859d973572f32bf4b20809c541c1d91fba6903345724e1e76049ff9481e80

See more details on using hashes here.

File details

Details for the file openpgpcard_x25519_agent-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for openpgpcard_x25519_agent-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bcc3e1f88e70e931a08452e507d656467580ba5364ff99e8d03ac80e645912bf
MD5 fac82eb884ef4ed8d24c33632ace115d
BLAKE2b-256 2ebd031b266199811d4b043dd482e6412ed85c601369507fca6224ce549acd8f

See more details on using hashes here.

Supported by

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