{"library":"jwcrypto","title":"jwcrypto: JOSE Web Standards Implementation","type":"library","description":"JWCrypto is a Python library that implements the Javascript Object Signing and Encryption (JOSE) Web Standards, including JSON Web Key (JWK), JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Token (JWT). It leverages the `cryptography` package for its underlying cryptographic functions, ensuring strong security. The library is actively maintained, with frequent releases addressing security vulnerabilities and compatibility, currently at version 1.5.6.","language":"python","status":"active","last_verified":"Wed May 20","install":{"commands":["pip install jwcrypto"],"cli":null},"imports":["from jwcrypto import jwk","from jwcrypto import jws","from jwcrypto import jwe","from jwcrypto import jwt","from jwcrypto.common import json_encode, json_decode"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/latchset/jwcrypto","docs":null,"changelog":null,"pypi":"https://pypi.org/project/jwcrypto/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"from jwcrypto import jwk, jws\nfrom jwcrypto.common import json_encode\n\n# 1. Generate a symmetric key\nkey = jwk.JWK.generate(kty='oct', size=256)\n\n# 2. Define the payload and JWS headers\npayload = \"My Integrity protected message\"\njwstoken = jws.JWS(payload.encode('utf-8'))\n\n# 3. Add signature to the token\njwstoken.add_signature(\n    key,\n    None,\n    json_encode({\"alg\": \"HS256\"}),\n    json_encode({\"kid\": key.thumbprint()})\n)\n\n# 4. Serialize the JWS token\nsigned_token = jwstoken.serialize()\nprint(f\"Signed JWS: {signed_token}\")\n\n# 5. Verify the JWS token\nverifier_token = jws.JWS()\nverifier_token.deserialize(signed_token)\nverifier_token.verify(key)\n\n# 6. Access the verified payload\nverified_payload = verifier_token.payload.decode('utf-8')\nprint(f\"Verified Payload: {verified_payload}\")","lang":"python","description":"This quickstart demonstrates how to generate a symmetric key, sign a payload using JWS, and then verify the signed token. It utilizes `jwk` for key management and `jws` for signature operations, along with `jwcrypto.common` for JSON encoding.","tag":null,"tag_description":null,"last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","last_tested":"2026-05-20","installed_version":"1.5.7","pypi_latest":"1.5.7","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.4,"avg_import_s":0.45,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.29,"mem_mb":7.8,"disk_size":"34.9M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":7.6,"disk_size":"33.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.2,"mem_mb":7.8,"disk_size":"35M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.23,"mem_mb":7.6,"disk_size":"34M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.61,"mem_mb":8.8,"disk_size":"37.6M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.71,"mem_mb":8.6,"disk_size":"36.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.3,"import_time_s":0.55,"mem_mb":8.8,"disk_size":"38M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.54,"mem_mb":8.6,"disk_size":"37M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.65,"mem_mb":12,"disk_size":"29.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.73,"mem_mb":11.8,"disk_size":"28.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.67,"mem_mb":12,"disk_size":"30M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.88,"mem_mb":11.8,"disk_size":"29M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.33,"mem_mb":5.5,"disk_size":"29.0M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.38,"mem_mb":5.3,"disk_size":"27.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.2,"import_time_s":0.37,"mem_mb":5.5,"disk_size":"29M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.4,"mem_mb":5.3,"disk_size":"28M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.28,"mem_mb":7.8,"disk_size":"35.2M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":7.6,"disk_size":"34.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":0.26,"mem_mb":7.8,"disk_size":"36M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"jwcrypto","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.27,"mem_mb":7.6,"disk_size":"35M"}]}}