{"library":"srptools","title":"SRPTools","type":"library","description":"SRPTools is a Python library designed for implementing Secure Remote Password (SRP) authentication, a robust password-authenticated key agreement protocol (PAKE). It provides tools for both client and server sides to perform secure password-based authentication and key exchange over an insecure network. The current version is 1.0.1, with an infrequent release cadence indicating a stable and mature codebase.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install srptools"],"cli":null},"imports":["from srptools import SRPContext","from srptools import SRPClientSession","from srptools import SRPServerSession","from srptools import constants"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/idlesign/srptools","docs":null,"changelog":null,"pypi":"https://pypi.org/project/srptools/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"from srptools import SRPContext, SRPServerSession, SRPClientSession\n\n# User credentials\nusername = 'alice'\npassword = 'password123'\n\n# Step 1: Server stores salt and verifier for a user\ncontext = SRPContext(username, password)\nsalt, verifier = context.create_salted_verification_key()\nprint(f\"Server stores -> Salt: {salt}, Verifier: {verifier}\")\n\n# --- Client side operations ---\nclient_session = SRPClientSession(context)\nclient_public_key = client_session.start_authentication()\nprint(f\"Client sends -> Public Key A: {client_public_key}\")\n\n# --- Server side operations ---\n# Server retrieves stored salt and verifier for the username\nserver_session = SRPServerSession(context, salt, verifier)\nserver_public_key = server_session.start_authentication(client_public_key)\nprint(f\"Server sends -> Public Key B: {server_public_key}\")\n\n# --- Client side operations (receives B from server) ---\nclient_key = client_session.process(server_public_key)\nprint(f\"Client computed -> Session Key K: {client_key}\")\nprint(f\"Client sends -> Proof M: {client_session.M}\")\n\n# --- Server side operations (receives Client Proof M from client) ---\nserver_key = server_session.process(client_session.M)\nprint(f\"Server computed -> Session Key K: {server_key}\")\n\n# Verify client proof on server\nif client_session.M == server_session.M:\n    print(\"Server: Client proof (M) matches. Authentication in progress.\")\n    # Verify session keys match\n    if client_session.K == server_session.K:\n        print(\"Server: Session keys (K) match. Authentication successful.\")\n    else:\n        print(\"Server Error: Session keys do not match.\")\nelse:\n    print(\"Server Error: Client proof (M) does not match.\")\n\n# Server sends its proof (HAMK) to the client\nprint(f\"Server sends -> Proof HAMK: {server_session.HAMK}\")\n\n# --- Client side operations (receives Server Proof HAMK from server) ---\nif client_session.verify_session(server_session.HAMK):\n    print(\"Client: Server proof (HAMK) verified. Mutual authentication complete.\")\nelse:\n    print(\"Client Error: Server proof (HAMK) verification failed.\")","lang":"python","description":"This quickstart demonstrates a full SRP-6a authentication flow between a client and a server using `srptools`. It covers the generation of salt and verifier, public key exchange, and session key derivation and verification. Remember to handle `SRPException` in a real application.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.0.1","pypi_latest":"1.0.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.6,"avg_import_s":0.02,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":0.8,"disk_size":"18.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1,"disk_size":"19.8M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.03,"mem_mb":1,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":0.5,"disk_size":"11.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.02,"mem_mb":0.5,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":0.6,"disk_size":"11.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.02,"mem_mb":0.4,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1.2,"disk_size":"17.5M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"srptools","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.02,"mem_mb":1.2,"disk_size":"18M"}]}}