opaque-ke-py
Python bindings for the OPAQUE-KE asymmetric password-authenticated key exchange (aPAKE) protocol.
What is OPAQUE?
OPAQUE is a secure asymmetric password-authenticated key exchange protocol that provides strong security guarantees:
- Server never sees the password: The server doesn't store passwords in plaintext or even hashed form
- Resistant to pre-computation attacks: Even if the server is compromised, attackers cannot perform offline dictionary attacks
- Mutual authentication: Both client and server authenticate each other
- Establishes a shared session key: After successful authentication, both parties share a strong cryptographic session key
Installation
From source
You'll need Rust and Python 3.12+ installed.
# Install maturin (Rust/Python build tool)
pip install maturin
# Build and install
maturin build --release
pip install target/wheels/opaque_ke_py-*.whl
From PyPI (when published)
pip install opaque-ke-py
Quick Start
import opaque_ke_py
# Server setup (done once when server initializes)
server_setup = opaque_ke_py.server_setup()
# Registration flow
username = b"alice"
password = b"correct-horse-battery-staple"
# 1. Client starts registration
client_reg_start = opaque_ke_py.client_registration_start(password)
registration_request = client_reg_start.get_message()
client_reg_state = client_reg_start.get_state()
# 2. Server processes registration request
server_reg_start = opaque_ke_py.server_registration_start(
server_setup,
registration_request,
username
)
registration_response = server_reg_start.get_message()
# 3. Client finishes registration
client_reg_finish = opaque_ke_py.client_registration_finish(
password,
client_reg_state,
registration_response
)
registration_upload = client_reg_finish.get_message()
# 4. Server stores password file
server_reg_finish = opaque_ke_py.server_registration_finish(registration_upload)
password_file = server_reg_finish.get_password_file()
# Store password_file securely in database
# Login flow
# 1. Client starts login
client_login_start = opaque_ke_py.client_login_start(password)
credential_request = client_login_start.get_message()
client_login_state = client_login_start.get_state()
# 2. Server processes login request
server_login_start = opaque_ke_py.server_login_start(
server_setup,
password_file,
credential_request,
username
)
credential_response = server_login_start.get_message()
server_login_state = server_login_start.get_state()
# 3. Client finishes login
client_login_finish = opaque_ke_py.client_login_finish(
password,
client_login_state,
credential_response
)
credential_finalization = client_login_finish.get_message()
client_session_key = client_login_finish.get_session_key()
# 4. Server finishes login
server_login_finish = opaque_ke_py.server_login_finish(
server_login_state,
credential_finalization
)
server_session_key = server_login_finish.get_session_key()
# Both client and server now have matching session keys
assert client_session_key == server_session_key
Complete Example
See example.py for a complete working example demonstrating:
- Server setup
- User registration
- User login
- Session key establishment
- Failed login handling
Run it with:
python example.py
API Reference
Server Setup
server_setup() -> ServerSetupData
Generate server setup containing the server's keypair. This should be done once when the server starts and the result should be stored securely.
Registration Flow
1. Client Registration Start
client_registration_start(password: bytes) -> ClientRegistrationStartData
Client initiates registration with their password.
Returns:
get_message(): Message to send to serverget_state(): Client state to keep private
2. Server Registration Start
server_registration_start(
server_setup: ServerSetupData,
registration_request: bytes,
username: bytes
) -> ServerRegistrationStartData
Server processes the registration request.
Returns:
get_message(): Message to send back to client
3. Client Registration Finish
client_registration_finish(
password: bytes,
client_state: bytes,
registration_response: bytes
) -> ClientRegistrationFinishData
Client completes registration.
Returns:
get_message(): Final message to send to serverget_export_key(): Export key for additional key derivation
4. Server Registration Finish
server_registration_finish(
registration_upload: bytes
) -> ServerRegistrationFinishData
Server completes registration and generates password file.
Returns:
get_password_file(): Password file to store in database
Login Flow
1. Client Login Start
client_login_start(password: bytes) -> ClientLoginStartData
Client initiates login with their password.
Returns:
get_message(): Message to send to serverget_state(): Client state to keep private
2. Server Login Start
server_login_start(
server_setup: ServerSetupData,
password_file: bytes,
credential_request: bytes,
username: bytes
) -> ServerLoginStartData
Server processes the login request.
Returns:
get_message(): Message to send back to clientget_state(): Server state to keep private
3. Client Login Finish
client_login_finish(
password: bytes,
client_state: bytes,
credential_response: bytes
) -> ClientLoginFinishData
Client completes login. Raises ValueError if authentication fails.
Returns:
get_message(): Final message to send to serverget_session_key(): Shared session key for encrypted communicationget_export_key(): Export key for additional key derivation
4. Server Login Finish
server_login_finish(
server_state: bytes,
credential_finalization: bytes
) -> ServerLoginFinishData
Server completes login. Raises ValueError if authentication fails.
Returns:
get_session_key(): Shared session key for encrypted communication
Security Considerations
⚠️ CRITICAL: Python Memory Limitations
Python bytes are immutable and cannot be reliably zeroized from memory. This is a fundamental limitation of Python's memory management model.
What this means:
- Passwords passed to this library may persist in Python's heap memory until garbage collection
- They may be written to swap files or appear in core dumps
- Memory scraping malware could potentially extract passwords from process memory
When it's appropriate:
- ✅ Standard web applications with reasonable security requirements
- ✅ Internal tools with trusted environments
- ✅ Prototyping and development
- ✅ Applications where TLS + standard practices provide sufficient security
General Security Best Practices
- Transport Security: ALWAYS use TLS 1.3+ to prevent man-in-the-middle attacks
- Rate Limiting: Implement rate limiting to prevent online guessing attacks (see below)
- Server Setup Storage: Encrypt server setup before storing (contains private key)
- Password File Storage: Store password files securely in your database (they're safe to store)
- State Management: Keep client/server states in memory only, never log or persist them
- Session Key Comparison: Use
constant_time_compare()for comparing sensitive values - Username Binding: Usernames are cryptographically bound to registrations
Rate Limiting (REQUIRED)
OPAQUE protects against offline dictionary attacks, but you MUST implement rate limiting to prevent online guessing:
from time import time
from collections import defaultdict
# Simple rate limiting example
failed_attempts = defaultdict(list) # username -> [timestamps]
def check_rate_limit(username: str, max_attempts: int = 5, window_seconds: int = 900):
"""Allow max_attempts failures per window_seconds (default: 5 per 15 min)"""
now = time()
# Remove old attempts outside the window
failed_attempts[username] = [
ts for ts in failed_attempts[username]
if now - ts < window_seconds
]
if len(failed_attempts[username]) >= max_attempts:
raise Exception(f"Rate limit exceeded. Try again later.")
def record_failed_login(username: str):
"""Record a failed login attempt"""
failed_attempts[username].append(time())
# Use before login
check_rate_limit(username)
try:
# ... perform login ...
pass
except ValueError:
record_failed_login(username)
raise
Recommended mitigations:
- Rate limiting: 5 failed attempts per 15 minutes per username
- IP-based limits: 20 failed attempts per hour per IP address
- Progressive delays: Exponential backoff after repeated failures
- Account lockout: Temporary lockout after 10 failures in 1 hour
- Monitoring: Alert on suspicious patterns (distributed attacks, enumeration attempts)
Server Setup Key Storage
The server setup contains the server's private key. You MUST encrypt it before storage:
from cryptography.fernet import Fernet
import os
# Generate encryption key (store in environment variable or KMS)
storage_key = os.environ.get('SERVER_SETUP_ENCRYPTION_KEY').encode()
cipher = Fernet(storage_key)
# Encrypt before storage
server_setup = opaque_ke_py.server_setup()
plaintext = server_setup.to_bytes()
encrypted = cipher.encrypt(plaintext)
# Store encrypted bytes to disk/database
with open('server_setup.enc', 'wb') as f:
f.write(encrypted)
# Later: decrypt when loading
with open('server_setup.enc', 'rb') as f:
encrypted = f.read()
plaintext = cipher.decrypt(encrypted)
server_setup = opaque_ke_py.ServerSetupData.from_bytes(plaintext)
⚠️ NEVER:
- Log the server setup or its private key
- Store server setup in plaintext
- Transmit server setup over the network
- Include server setup in backups without encryption
State Security
States returned by login/registration functions contain sensitive cryptographic material:
You MUST:
- ✅ Keep states in memory only (never persist to disk/database)
- ✅ Never reuse states across different login/registration attempts
- ✅ Never log or serialize states
- ✅ Discard states immediately after the protocol completes
States are single-use only. Reusing a state violates the protocol's security guarantees.
Constant-Time Comparisons
When comparing session keys or other sensitive values, use the provided constant-time comparison:
import opaque_ke_py
# ❌ WRONG: Timing attack vulnerable
if client_session_key == server_session_key:
print("Keys match!")
# ✅ CORRECT: Constant-time comparison
if opaque_ke_py.constant_time_compare(client_session_key, server_session_key):
print("Keys match!")
Error Handling
This library uses generic error messages to prevent information leakage:
"Authentication failed"- Login/registration cryptographic operation failed"Invalid message format"- Deserialization or format error"Registration failed"- Registration protocol error"input too large"- Input exceeds 1 MB limit
Never expose these errors directly to end users. Instead, show user-friendly messages like:
- "Invalid username or password"
- "Registration failed, please try again"
- "An error occurred, please contact support"
Audit Status
- ✅ Underlying Rust library (
opaque-kev4.0.1): Audited by NCC Group for WhatsApp (2021) - ⚠️ This Python wrapper: Not independently audited
The underlying cryptographic implementation is solid and has been professionally reviewed. The Python binding layer has been designed following security best practices but has not undergone formal security audit.
Cipher Suite
This wrapper uses the following cryptographic primitives:
- OPRF: Ristretto255
- Key Exchange: TripleDH over Ristretto255 with SHA-512
- Key Stretching Function: Argon2
These provide strong security guarantees and are recommended by the OPAQUE specification.
Development
Building
# Debug build
maturin develop
# Release build
maturin build --release
Testing
# Run the example
python example.py
# Check types
mypy example.py
License
MIT
Credits
This project wraps the opaque-ke Rust implementation by Meta Platforms, Inc.
References
Metadata
Release files for opaque-ke-py 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 8.8 MB
Release files / opaque_ke_py-0.1.2-cp314-cp314t-win_amd64.whl
| Download URL | opaque_ke_py-0.1.2-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 246.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f28a9730b0fdcad55f25a1dedefb71bb5be1e89134c0355310271dfac0bac001
|
|
BLAKE2b-256 checksum How to use checksums |
d13680d0c3ac9e66c6a3c9c21eb352cab585ceff0a0d0a0514c261b433011f2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | opaque_ke_py-0.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 573.4 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
249d376c8756b4ee5c9e2b5be205fbaa7ebbc3e558e12fbf8ef73d9a6ebb6727
|
|
BLAKE2b-256 checksum How to use checksums |
b90e6a16d3925d6fc0c8294c7aa8fe48d503fea29ffc3412f07ddd5cd9033556
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl
| Download URL | opaque_ke_py-0.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 575.2 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
7d978daa0a0f4ed537f1c6d0fa67653580ea1e5bc7e2e9e5b0f353c68da447e4
|
|
BLAKE2b-256 checksum How to use checksums |
0923769f53c6f5388347701f860e213a333bd3a32d456b9b07cd57a932958f1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp314-cp314t-manylinux_2_28_aarch64.whl
| Download URL | opaque_ke_py-0.1.2-cp314-cp314t-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 392.4 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
4cd9b051e590da3ab362b23b5c7f491afd6b4ab209c0f62f07ec6566c6e46497
|
|
BLAKE2b-256 checksum How to use checksums |
a4c81eb39f48ca3633650f417af43f55f4b85adbffbd55e2c8def70e8f12c651
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | opaque_ke_py-0.1.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 403.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
6199f42a5c9d7d23e8d6eb074b688a8d4a45f55ada4fd4ff25b31e4751586506
|
|
BLAKE2b-256 checksum How to use checksums |
7b1e7c08ddb1da81e218900b1960806bfd297b0b6671731367d84652ef7e031b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | opaque_ke_py-0.1.2-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 711.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
fcb0b78daf880551736267c06789ba7b8e580131d4c76e52662045b1e4eb9608
|
|
BLAKE2b-256 checksum How to use checksums |
ae8a855d28b34793f434aacc0831616b2f8d0003013cf0f8fd50f1fd8f875bec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp313-cp313t-win_amd64.whl
| Download URL | opaque_ke_py-0.1.2-cp313-cp313t-win_amd64.whl |
|---|---|
| Size | 245.5 kB |
| Tags | CPython 3.13 CPython 3.13 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ebde1910fda9cc3e9829a5cde3dbb33ffc8fc2992e7d0a6784249d9603b463c2
|
|
BLAKE2b-256 checksum How to use checksums |
fc4cc130e294842241c69306d712aa574633369cfa4ecf2f11e32d07fa254e22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl
| Download URL | opaque_ke_py-0.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 573.0 kB |
| Tags | CPython 3.13 CPython 3.13 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
f446d57dc21862483410acbb214ab027e38d265d7c4e5b38172462be9957ed14
|
|
BLAKE2b-256 checksum How to use checksums |
07342bef50f2553729d388d566ce21cca8614959148e62cf0785fff9eb7e541e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl
| Download URL | opaque_ke_py-0.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 575.4 kB |
| Tags | CPython 3.13 CPython 3.13 free-threading Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
41cc137487c696d74936484a4c0bf78be98fac2162527d3bfa50d9f33b76fc0a
|
|
BLAKE2b-256 checksum How to use checksums |
2d73d5b4f250a26fbb2226ebd7fa53334a3c4d0781db6a07e9f9da08687731ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp313-cp313t-manylinux_2_28_aarch64.whl
| Download URL | opaque_ke_py-0.1.2-cp313-cp313t-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 392.4 kB |
| Tags | CPython 3.13 CPython 3.13 free-threading Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
0c9731126bd170a6ade1bd707530d1a3ba48da64528b3c4a0d740397c42d1c4b
|
|
BLAKE2b-256 checksum How to use checksums |
5725896313078f90e1407be4db02e652bdba97dc80d06ab09efde716d752e187
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | opaque_ke_py-0.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 403.1 kB |
| Tags | CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
68ba0f9b2c924ba715e763f6ecc47a7c76385f490672937a27d07f89c9003962
|
|
BLAKE2b-256 checksum How to use checksums |
6e7b67b89c65e7d1d5644f9cc0c82a21e5e714fb0b6fbaa0fcf85d17d0e1403b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | opaque_ke_py-0.1.2-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 711.2 kB |
| Tags | CPython 3.13 CPython 3.13 free-threading macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0b1319900214a05302de0bdc8dce6bb7724f0e749c35a5aaf344a53258450686
|
|
BLAKE2b-256 checksum How to use checksums |
798ceab3a2720e68f7d6a2e75a843d0b64403e754a24d4326f402bc53b256307
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp38-abi3-win_amd64.whl
| Download URL | opaque_ke_py-0.1.2-cp38-abi3-win_amd64.whl |
|---|---|
| Size | 252.2 kB |
| Tags | CPython 3.8 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
be687c8fc609a10412442b883c51a177c471d5eaee1254788c287334152a25fc
|
|
BLAKE2b-256 checksum How to use checksums |
3550c58b045300abfeeb1aaffddb67c83635b47ed6260d0a1dc2282239c97319
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp38-abi3-musllinux_1_2_x86_64.whl
| Download URL | opaque_ke_py-0.1.2-cp38-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 581.7 kB |
| Tags | CPython 3.8 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b09ccf3d0975d498ddeee0f9bc8b3e56587ed4e669f3ba54a25f76644ea20f54
|
|
BLAKE2b-256 checksum How to use checksums |
9290906d231ecaa7c3d19404327ca5fffe23186622ec38b86af7190beffd3c95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp38-abi3-musllinux_1_2_aarch64.whl
| Download URL | opaque_ke_py-0.1.2-cp38-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 583.4 kB |
| Tags | CPython 3.8 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
138ffeeaba969483eafea11be491837b4732a11f20b00f1e50022153463514f4
|
|
BLAKE2b-256 checksum How to use checksums |
d2385d69bfc3d3799f95821a36e69930a978f333070312c58918dc394a6a962f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp38-abi3-manylinux_2_28_aarch64.whl
| Download URL | opaque_ke_py-0.1.2-cp38-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 400.4 kB |
| Tags | CPython 3.8 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
ee5e3a34b70f8bba9952a40712cd0e6eca99837a1d237be0afd8b5fc2d1d316d
|
|
BLAKE2b-256 checksum How to use checksums |
119ea2703ce5d8260450a6f04e8409be261082d3e3201dc201d3af6063a77dd6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | opaque_ke_py-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 413.0 kB |
| Tags | CPython 3.8 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
9a260bf9953c3b551f2a846eb4833f00650c302bb9191a1bd84e05dbac6bb393
|
|
BLAKE2b-256 checksum How to use checksums |
75ddb7529336eb7dd8c42d5da6f9f885199422669cb9c42280ec25b8e5ba8343
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logRelease files / opaque_ke_py-0.1.2-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | opaque_ke_py-0.1.2-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 726.6 kB |
| Tags | CPython 3.8 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
73bd1ac34861ecd4357da76b7457c776f9e859ed88627a6f3158ae08b194d5e0
|
|
BLAKE2b-256 checksum How to use checksums |
5d5f3c7af187f2289fa47df2e4f93e6ee1d6b104686fbbd773da55acab3a0ede
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logSecurity for opaque-ke-py 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 18 files in this release have been uploaded with provenance metadata.
Attestation for opaque_ke_py-0.1.2-cp314-cp314t-win_amd64.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 8, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.