Skip to main content

Secure Peer Protocol

Project description

Secure Peer Protocol (SPP)

Description

Chat with friends in a truly cryptographically secure way.

Intended to work as 5th OSI layer usually on top of TCP/IP.

Mechanism

  1. shared key is obtained using ECDHE. Transferred DH public keys are signed and verified with pre-obtained Ed25519 public keys.
  2. auth key is derived from shared key using ConcatKDFHash.
  3. Message using ChaCha20-Poly1305 with auth key.

Preparation before using

  1. Generate private key, give your public key to friend.
  2. Get friend's public key through reliable channel.
from pathlib import Path
from spproto.key import generate_private_key, get_public_key

def main() -> None:
    privkey_path = Path('~/Desktop/privkey').expanduser()
    pubkey_path = Path('~/Desktop/pubkey').expanduser()
    
    privkey = generate_private_key()
    pubkey = get_public_key(privkey)
    
    privkey_path.write_bytes(privkey)
    pubkey_path.write_bytes(pubkey)

main()

How to use

Client

Connect to your friend

import asyncio
from pathlib import Path
from spproto.client import connect

async def main() -> None:
    privkey = Path('~/Desktop/privkey').expanduser().read_bytes()
    peer_pubkey = Path('~/Desktop/friend_pubkey').expanduser().read_bytes()

    host = '1.2.3.4'
    port = 4321
    async with connect(host, port, privkey, peer_pubkey) as conn:
        await conn.send(b'Hello, server!')
        print(await conn.receive())

asyncio.run(main())

Server

Make your friend available to connect to you.

import asyncio
from pathlib import Path
from spproto.connection import Connection
from spproto.server import serve

async def callback(
    conn: Connection
) -> None:
    print(await conn.receive())
    await conn.send(b'Hello, client')

async def main() -> None:
    privkey = Path('~/Desktop/privkey').expanduser().read_bytes()
    peer_pubkey = Path('~/Desktop/friend_pubkey').expanduser().read_bytes()

    host = '1.2.3.4'
    port = 4321
    await serve(host, port, privkey, peer_pubkey, callback)

asyncio.run(main())

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

spproto-0.2.0.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

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

spproto-0.2.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file spproto-0.2.0.tar.gz.

File metadata

  • Download URL: spproto-0.2.0.tar.gz
  • Upload date:
  • Size: 5.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for spproto-0.2.0.tar.gz
Algorithm Hash digest
SHA256 774b91f1d50d045d466586cf28831894c4bcb60da87bc43b4d6efc174f3df1e0
MD5 78986cd832b5b5359e22687a0f025ce9
BLAKE2b-256 790c5a2b3591ae66c8b4e39217b94e7db6172764b0a5b502357e8f7a3bc48694

See more details on using hashes here.

File details

Details for the file spproto-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: spproto-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for spproto-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 217e73eef691a6f01ad07a23b806d45ad05804fcd0daa6f1bc22089fd9e8d60a
MD5 d77dd07290b40d9520a35d28760d91f7
BLAKE2b-256 9b66e1aacda030930c84cd2a7a143bbeb52f8d37b0fb144e85760816bcad1c0a

See more details on using hashes here.

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