Skip to main content

Python bindings for the OPAQUE-KE asymmetric password-authenticated key exchange protocol

Project description

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 server
  • get_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 server
  • get_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 server
  • get_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 client
  • get_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 server
  • get_session_key(): Shared session key for encrypted communication
  • get_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

  1. Transport Security: OPAQUE should be used over a secure transport layer (e.g., TLS) to prevent MITM attacks
  2. Server Setup Storage: Store the server setup securely and never expose it
  3. Password File Storage: Store password files securely in your database
  4. State Management: Keep client/server states private during multi-step protocols
  5. Session Keys: Use the established session keys for encrypting subsequent communications
  6. Username Binding: Usernames are cryptographically bound to registrations to prevent confusion attacks

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

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

opaque_ke_py-0.1.1-cp314-cp314t-win_amd64.whl (244.9 kB view details)

Uploaded CPython 3.14tWindows x86-64

opaque_ke_py-0.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl (571.7 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

opaque_ke_py-0.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl (573.0 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

opaque_ke_py-0.1.1-cp314-cp314t-manylinux_2_28_aarch64.whl (390.0 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

opaque_ke_py-0.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (401.4 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

opaque_ke_py-0.1.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (708.4 kB view details)

Uploaded CPython 3.14tmacOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

opaque_ke_py-0.1.1-cp313-cp313t-win_amd64.whl (244.2 kB view details)

Uploaded CPython 3.13tWindows x86-64

opaque_ke_py-0.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl (571.6 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

opaque_ke_py-0.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl (573.3 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

opaque_ke_py-0.1.1-cp313-cp313t-manylinux_2_28_aarch64.whl (390.0 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ ARM64

opaque_ke_py-0.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (401.3 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ x86-64

opaque_ke_py-0.1.1-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (708.6 kB view details)

Uploaded CPython 3.13tmacOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

opaque_ke_py-0.1.1-cp38-abi3-win_amd64.whl (250.8 kB view details)

Uploaded CPython 3.8+Windows x86-64

opaque_ke_py-0.1.1-cp38-abi3-musllinux_1_2_x86_64.whl (579.9 kB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ x86-64

opaque_ke_py-0.1.1-cp38-abi3-musllinux_1_2_aarch64.whl (580.9 kB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARM64

opaque_ke_py-0.1.1-cp38-abi3-manylinux_2_28_aarch64.whl (397.6 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ ARM64

opaque_ke_py-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (411.3 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

opaque_ke_py-0.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (724.1 kB view details)

Uploaded CPython 3.8+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file opaque_ke_py-0.1.1-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 02c0e944723bf027579c53541cffda63d230c8054655668b6b94af0440b374b7
MD5 08da88fc698fa4f8e0b460f396de7722
BLAKE2b-256 871a50c12706c2cb319c6537d135f87340a6084f437cf28c8b80eca5febfdd3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp314-cp314t-win_amd64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4bef3501bd8f2c09b7e80c2ff36a1e9d15af3a7a8906fdd125b572fa750adf3f
MD5 2880026b37cd63de84ddcd0a8e43c56c
BLAKE2b-256 bb4edec78ff557a4eec726fecf7d86d532afc864d3b215b6fbf7cf3d94d00926

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 21ea7d932652e1bb6aa2857b9de43a0a8a1b80e873dc260f84b8bce843b3b201
MD5 0ddefd3e18a32e11e0b6fa630ec10dd9
BLAKE2b-256 d3bce9bfcdca325d0fd5210d06a09e228a0d84dd16df7ac3e7ef712bf2ba32fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e74f6d97cc599b29c3751770f1de2eb22c0781423a6e266bf7124642b97752bb
MD5 aff46615cc80257c759f1ecefa01b825
BLAKE2b-256 8a64479643314b4cde8519f20c4fce6952f9ad9a4fe4de5df2de44a245fdf092

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp314-cp314t-manylinux_2_28_aarch64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6247dd5154f4b2e06a5e1a251e895bcf723e5c3370ea64bdfec3c9a167232af4
MD5 5e4eb8069da6f5e5c61c182c360f2319
BLAKE2b-256 09ba008e0b8da80f17a2b87b37fb93723b72e3cf8ab778ed62445ac092209690

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 f4f26e7682b414ca534d55801b31d9f8ed9a9b5eaef36d3397107887c8fd78f6
MD5 92e59f916e0f616706a31e67adef6de0
BLAKE2b-256 a31a2ff31ddf8068916fe77c1fb7f4562b2778f47e007b3b5462093a877c790f

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp313-cp313t-win_amd64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 538938be05f76f1d03c4f63528ededa61d61016d90c83d97410c062f181783d7
MD5 fbff85819c947674889dc27fe0df092f
BLAKE2b-256 f2847968700ab98ddb9adf97dc27cb796d88e1e770694e8f805ce885991c2779

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp313-cp313t-win_amd64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d3f9b752baa0c791dba724917df4f32bf8b23845f567afe28db924c3671e34dd
MD5 4ee08a4ceff264eddec9f831e7cd174f
BLAKE2b-256 4209899b64f979c403ec34f8de594e20cfc2d2e5b7d5f17e9c43a079b32692fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2879b7221260ae61687d3cf91d5e5a27accda942531c883a94d8c64dd73b44ff
MD5 132dd605098a84fb06651e8c73b70a40
BLAKE2b-256 17a497c849c8f3942a8a8737ae785c1bf6e76a84b5861362611eba3e548abcd5

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp313-cp313t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp313-cp313t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 06ef03483fdcb331a1d241131123ff0899b425fced6796865581c71867af0e9a
MD5 0ca698f870f20658f3f7bec0dfb45564
BLAKE2b-256 9fce329664f15ee9f69756ff8037d68ebc8459a67b05eb14a9bb2d4ca0559a41

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp313-cp313t-manylinux_2_28_aarch64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 68cb5cbe09a714260316987b4ba4a9f757218fd03f1c4720745248cda3799a2d
MD5 f583b291ad5b2b0947f306495280794c
BLAKE2b-256 4bbd945c9d41d47c76345048c8d15783894b2c6d55c9187bfdef75c32e15f2a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 927a41e7afc7ce62babe6b4248209e81506b60df948f4a85b908a2c38add5ebd
MD5 246a5a4af0f393b1fd6457592de136f0
BLAKE2b-256 a55857da4b81123114c89abb61800aa08e3fce93d191d19c1dbf5f60da15e778

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: opaque_ke_py-0.1.1-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 250.8 kB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for opaque_ke_py-0.1.1-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 982caca78cd5ea0c761271dd8cd618e54aa4e5878ace92c659dd7174c4b9312e
MD5 0d1ec2bc856d1f8b8baa606c830abd19
BLAKE2b-256 41e25fae8ec48e8c4613e2a92f00831cb8a45cac4c1d63fd53100635af5f0074

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp38-abi3-win_amd64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp38-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a007370a0521cfda7e097887b000cd879097dd3d360038d2e7afd4753ddb4f85
MD5 ebd523c45e2da5a369de05aec0356941
BLAKE2b-256 5167f34aa2f9eaf09a6b00db94992c6e57640ff43eaceb92320aee6d78115b1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp38-abi3-musllinux_1_2_x86_64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp38-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp38-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a83b98fa44b09dd1154a79de9b18bec40506a15283ae1425d5e8eea11fcc3c12
MD5 a87166271e0811918b7ec17d44132dc6
BLAKE2b-256 92535d0d18c358af30e18da56e4450c599f6b740c4ca62e11ce21335e0225ae8

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp38-abi3-musllinux_1_2_aarch64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp38-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp38-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 41555c9325d23e2cb25aa3fcf607f58effe47a7357517f2b3f569ebd484a2c7c
MD5 f73ab17ca3026e885301ee7674d05167
BLAKE2b-256 232753e8323ed6f4f58c808e0f28a73c969b1b36f960d01968f4f8686dfca17e

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp38-abi3-manylinux_2_28_aarch64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7f7df62778c7c80060175580d6f928db42aef6a0e814ec15d69159fbec77225e
MD5 9519587a2d7e852d2f5d7bda87ed9c30
BLAKE2b-256 32aefb2feb6b9b115e3508fe6dc3e1dd3f52e3b30041c213204c58c33d977bdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opaque_ke_py-0.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for opaque_ke_py-0.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 81f4029125e3aa245c340a338af77778f0231d7a7442c82ce2fc33a898a3357d
MD5 004b22350d01279bcd15b7561b8804d1
BLAKE2b-256 3f5e5a02ab19477dd7bc0dbb62a33d8552e2905825a049d2c88fe9531078afc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for opaque_ke_py-0.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: py-release.yml on jontyms/opaque-ke-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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