{"library":"python-pkcs11","title":"PKCS#11 support for Python","description":"python-pkcs11 provides Python bindings for PKCS#11, a standard for cryptographic tokens. It allows interaction with hardware security modules (HSMs) and smart cards using a native Python API. The library is actively maintained with frequent minor releases, ensuring compatibility with the latest Python versions and addressing specific token behaviors. The current version is 0.9.4.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install python-pkcs11"],"cli":null},"imports":["import pkcs11","lib = pkcs11.lib(library_path)"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import pkcs11\nimport os\n\n# Set the path to your PKCS#11 shared library\n# For testing, you might use SoftHSM2: /usr/lib/softhsm/libsofthsm2.so (Linux)\n# or a vendor-specific driver.\nPKCS11_LIBRARY_PATH = os.environ.get('PKCS11_LIBRARY', '/usr/local/lib/softhsm/libsofthsm2.so')\n\ntry:\n    # Load the PKCS#11 library\n    lib = pkcs11.lib(PKCS11_LIBRARY_PATH)\n\n    # List available slots (where tokens/smart cards are inserted)\n    slots = lib.get_slots()\n    if not slots:\n        print(f\"No PKCS#11 slots found for library: {PKCS11_LIBRARY_PATH}\")\n        print(\"Please ensure your PKCS#11 library is correctly configured and tokens are present.\")\n    else:\n        print(f\"Found {len(slots)} PKCS#11 slots:\")\n        for i, slot in enumerate(slots):\n            try:\n                token_info = slot.get_token_info()\n                print(f\"  Slot {i}: '{token_info.label}' (serial: {token_info.serial_number})\")\n            except pkcs11.exceptions.PKCS11Error as e:\n                if e.rv == pkcs11.CKR_TOKEN_NOT_PRESENT:\n                    print(f\"  Slot {i}: No token present\")\n                else:\n                    print(f\"  Slot {i}: Error getting token info: {e}\")\n\nexcept pkcs11.exceptions.PKCS11Error as e:\n    print(f\"Failed to load PKCS#11 library at '{PKCS11_LIBRARY_PATH}': {e}\")\n    print(\"Please check the path and ensure the library is installed and accessible.\")\nexcept FileNotFoundError:\n    print(f\"PKCS#11 library not found at '{PKCS11_LIBRARY_PATH}'\")\n    print(\"Ensure the path is correct and the PKCS#11 shared library (e.g., .so, .dll) is installed.\")\n","lang":"python","description":"This quickstart demonstrates how to load a PKCS#11 shared library and list available slots. You must have a PKCS#11 library installed on your system (e.g., SoftHSM2 for testing, or a hardware vendor's driver). Set the `PKCS11_LIBRARY` environment variable to its path.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"0.9.4","pypi_latest":"0.9.4","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.8,"avg_import_s":0.14,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":4.2,"disk_size":"23.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.07,"mem_mb":4.2,"disk_size":"26M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.24,"mem_mb":4.8,"disk_size":"25.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.21,"mem_mb":4.8,"disk_size":"28M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.16,"mem_mb":4.8,"disk_size":"17.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.18,"mem_mb":4.8,"disk_size":"20M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.15,"mem_mb":5.2,"disk_size":"17.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.15,"mem_mb":5.2,"disk_size":"20M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":4.1,"disk_size":"23.0M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"python-pkcs11","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.08,"mem_mb":4.1,"disk_size":"25M"}]}}