Skip to main content

https://github.com/idlesign/srptools

release stats lic ci coverage health

Description

Tools to implement Secure Remote Password (SRP) authentication

SRP is a secure password-based authentication and key-exchange protocol - a password-authenticated key agreement protocol (PAKE).

This package contains protocol implementation for Python 2 and 3.

You may import it into you applications and use its API or you may use srptools command-line utility (CLI):

CLI usage

Command-line utility requires click package to be installed.

Basic scenario:

> srptools get_user_data_triplet
> srptools server get_private_and_public
> srptools client get_private_and_public
> srptools client get_session_data
> srptools server get_session_data

Help is available:

> srptools --help

API usage

Preliminary step. Agree on communication details:

from srptools import SRPContext

context = SRPContext('alice', 'password123')
username, password_verifier, salt = context.get_user_data_triplet()
prime = context.prime
gen = context.generator

Simplified workflow:

from srptools import SRPContext, SRPServerSession, SRPClientSession

# Receive username from client and generate server public.
server_session = SRPServerSession(SRPContext(username, prime=prime, generator=gen), password_verifier)
server_public = server_session.public

# Receive server public and salt and process them.
client_session = SRPClientSession(SRPContext('alice', 'password123', prime=prime, generator=gen))
client_session.process(server_public, salt)
# Generate client public and session key.
client_public = client_session.public

# Process client public and compare session keys.
server_session.process(client_public, salt)

assert server_session.key == client_session.key

Extended workflow

from srptools import SRPContext, SRPServerSession, SRPClientSession

# Receive username from client and generate server public.
server_session = SRPServerSession(SRPContext(username, prime=prime, generator=gen), password_verifier)
server_public = server_session.public

# Receive server public and salt and process them.
client_session = SRPClientSession(SRPContext('alice', 'password123', prime=prime, generator=gen))
client_session.process(server_public, salt)
# Generate client public and session key proof.
client_public = client_session.public
client_session_key_proof = client_session.key_proof

# Process client public and verify session key proof.
server_session.process(client_public, salt)
assert server_session.verify_proof(client_session_key_proof)
# Generate session key proof hash.
server_session_key_proof_hash = client_session.key_proof_hash

# Verify session key proof hash received from server.
assert client_session.verify_proof(server_session_key_proof_hash)

Usage hints

  • srptools.constants contains basic constants which can be used with SRPContext for server and client to agree upon communication details.

  • .process() methods of session classes may raise SRPException in certain circumstances. Auth process on such occasions must be stopped.

  • .private attribute of session classes may be used to restore sessions:
    server_private = server_session.private
    
    # Restore session on new request.
    server_session = SRPServerSession(context, password_verifier, private=server_private)
  • SRPContext is rather flexible, so you can implement some custom server/client session logic with its help.

  • Basic values are represented as hex strings but base64 encoded values are also supported:

    server_public = server_session.public_b64
    
    # Receive server public and salt and process them.
    client_session = SRPClientSession(SRPContext('alice', 'password123', prime=prime, generator=gen))
    client_session.process(server_public, salt, base64=True)
    
    # Use srptools.hex_from_b64() to represent base64 value as hex.
    server_public_hex = hex_from_b64(server_public)

Download files

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

Source Distribution

srptools-0.2.0.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

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

srptools-0.2.0-py2.py3-none-any.whl (14.3 kB view details)

Uploaded Python 2Python 3

File details

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

File metadata

  • Download URL: srptools-0.2.0.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for srptools-0.2.0.tar.gz
Algorithm Hash digest
SHA256 675c041b575b60a85fb91fbfa190660d5afc9c366f8cf57ad97c344bd76c123c
MD5 b82b15d453d4846b117c512caca50b66
BLAKE2b-256 9b4424fb65f5cc26ebefd472e0d344578e5d125fc4ff4d96831a0e25072ff9b1

See more details on using hashes here.

File details

Details for the file srptools-0.2.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for srptools-0.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4f8014ff8cd71a18d9f52feaa730ac27fae5b5bb161c2b57d103026f91d36828
MD5 417affab7472b6115926c0813ac53724
BLAKE2b-256 d0fef5cf417857404c3b797cb3a8fc43967145686a921e491980cdd4ff505408

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.1

2 files

1.0.0

2 files

This release

0.2.0 This release

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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