Skip to main content

The Hybrid Public Key Encryption (HPKE) standard in Python

Project description

Hybrid PKE

The Hybrid Public Key Encryption (HPKE) standard in Python.

hybrid_pke = hpke-rs :heavy_plus_sign: PyO3

This library provides Python bindings to the hpke-rs crate, which supports primitives from either Rust Crypto or EverCrypt.

Table of Contents
  1. Usage
  2. Features
  3. Installation
  4. Development
  5. Related Projects

Usage

Basic

The single-shot API is intended for single message encryption/decryption. The default HPKE configuration uses the unauthenticated Base mode, an X25519 DH key encapsulation mechanism, a SHA256 key derivation mechanism, and a ChaCha20Poly1305 AEAD function.

import hybrid_pke

hpke = hybrid_pke.default()
info = b""  # shared metadata, correspondance-level
aad = b""  # shared metadata, message-level
secret_key_r, public_key_r = hpke.generate_key_pair()  # receiver keys, pre-generated

# ============== Sender ==============

message = b"hello from the other side!"
encap, ciphertext = hpke.seal(public_key_r, info, aad, message)

# ============= Receiver =============

plaintext = hpke.open(encap, secret_key_r, info, aad, ciphertext)
print(plaintext.decode("utf-8"))
# >> hello from the other side!

Advanced

Sender & Receiver Contexts

The Sender Context and Receiver Context APIs allow for setting up a context for repeated encryptions and decryptions. It's recommended whenever you intend to perform several encryptions or decryptions in quick succession.

info = b"quotes from your favorite aphorists"
aads = [
  b"Szasz",
  b"Nietzsche",
  b"Morandotti",
  b"Brudzinski",
  b"Hubbard",
]

# ============== Sender ==============

messages = [
    b"Two wrongs don't make a right, but they make a good excuse.",
    b"Become who you are!",
    b"Only those who aren't hungry are able to judge the quality of a meal.",
    b"Under certain circumstances a wanted poster is a letter of recommendation.",
    b"Nobody ever forgets where he buried the hatchet.",
]
encap, sender_context = hpke.setup_sender(public_key_r, info)

ciphertexts = []
for aad, msg in zip(aads, messages):
    ciphertext = sender_context.seal(aad, msg)
    ciphertexts.append(ciphertext)

# ============= Receiver =============

receiver_context = hpke.setup_receiver(encap, secret_key_r, info)
plaintexts = []
for aad, ctxt in zip(aads, ciphertexts):
    plaintext = receiver_context.open(aad, ctxt)
    plaintexts.append(plaintext)

print(f"\"{plaintexts[0].decode()}\" - {aad[0].decode()}")
print(f"\"{plaintexts[1].decode()}\" - {aad[1].decode()}")
# >> "Two wrongs don't make a right, but they make a good excuse." - Szasz
# >> "Become who you are!" - Nietzsche
Mode.AUTH: Authenticated Sender

Auth mode allows for signing and verifying encryptions with a previously authenticated sender key-pair.

hpke = hybrid_pke.default(mode=hybrid_pke.Mode.AUTH)
secret_key_r, public_key_r = hpke.generate_key_pair()  # receiver keys
secret_key_s, public_key_s = hpke.generate_key_pair()  # sender keys, pre-authenticated

# ============== Sender ==============

# sign with sender's secret key
encap, ciphertext = hpke.seal(public_key_r, info, aad, message, sk_s=secret_key_s)

# ============= Receiver =============

# verify with sender's public key
plaintext = hpke.open(encap, secret_key_r, info, aad, ciphertext, pk_s=public_key_s)
Mode.PSK: Pre-shared Key Authentication

PSK mode allows for signing and verifying encryptions with a previously shared key held by both the sender and recipient.

hpke = hybrid_pke.default(mode=hybrid_pke.Mode.PSK)
# pre-shared key + ID
psk = bytes.fromhex("0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82")
psk_id = bytes.fromhex("456e6e796e20447572696e206172616e204d6f726961")

# ============== Sender ==============

# sign with pre-shared key
encap, ciphertext = hpke.seal(public_key_r, info, aad, message, psk=psk, psk_id=psk_id)

# ============= Receiver =============

# verify with pre-shared key
plaintext = hpke.open(encap, secret_key_r, info, aad, ciphertext, psk=psk, psk_id=psk_id)
Mode.AUTH_PSK: Combining AUTH and PSK.

PSK mode allows for signing and verifying encryptions with a previously shared key held by both the sender and recipient.

hpke = hybrid_pke.default(mode=hybrid_pke.Mode.PSK)
secret_key_r, public_key_r = hpke.generate_key_pair()  # receiver keys
secret_key_s, public_key_s = hpke.generate_key_pair()  # sender keys, pre-authenticated
# pre-shared key + ID
psk = bytes.fromhex("0247fd33b913760fa1fa51e1892d9f307fbe65eb171e8132c2af18555a738b82")
psk_id = bytes.fromhex("456e6e796e20447572696e206172616e204d6f726961")

# ============== Sender ==============

# sign with both pre-shared key and sender's secret key
encap, ciphertext = hpke.seal(
    public_key_r, info, aad, message,
    psk=psk, psk_id=psk_id, sk_s=secret_key_s,
)

# ============= Receiver =============

# verify with both pre-shared key and sender's public key
plaintext = hpke.open(
    encap, secret_key_r, info, aad, ciphertext,
    psk=psk, psk_id=psk_id, pk_s=public_key_s,
)

(back to top)

Features

The features available match those supported by hpke-rs.

HPKE Modes
  • mode_base
  • mode_psk
  • mode_auth
  • mode_auth_psk
KEMs: (Diffie-Hellman) Key Encapsulation Mechanisms
  • DHKEM(P-256, HKDF-SHA256)
  • DHKEM(P-384, HKDF-SHA384)
  • DHKEM(P-521, HKDF-SHA512)
  • DHKEM(X25519, HKDF-SHA256)
  • DHKEM(X448, HKDF-SHA512)
KDFs: Key Derivation Functions
  • HKDF-SHA256
  • HKDF-SHA384
  • HKDF-SHA512
AEADs: Authenticated Encryption with Additional Data functions
  • AES-128-GCM
  • AES-256-GCM
  • ChaCha20Poly1305
  • Export only

(back to top)

Installation

Wheels for various platforms and architectures can be found on PyPI or in the wheelhouse.zip archive from the latest Github release.

The library can also be installed from source with maturin -- see below.

(back to top)

Development

We use maturin to build and distribute the PyO3 extension module as a Python wheel.

For users of cmake, we provide a Makefile that includes some helpful development commands.

Some useful tips
  • maturin develop builds & installs the Python package into your Python environment (venv or conda recommended)
  • pytest . tests the resulting Python package.
  • pytest -n auto . runs the full test suite in parallel.
  • maturin build --release -o dist --sdist builds the extension module in release-mode and produces a wheel for your environment's OS and architecture.
  • The -i/--interpreter flag for maturin can be used to swap out different Python interpreters, if you have multiple Python installations.

(back to top)

Releasing

We use cargo-release to manage release commits and git tags. Our versioning follows SemVer, and after every release we immediately bump to a prerelease version with the -dev0 suffix.

Example release flow
$ git checkout main
$ cargo release patch --execute
Upgrading hybrid_pke from X.X.X-dev0 to X.X.X
   Replacing in pyproject.toml
--- pyproject.toml      original
+++ pyproject.toml      replaced
@@ -8 +8 @@
-version = "X.X.X-dev0"  # NOTE: auto-updated during release
+version = "X.X.X"  # NOTE: auto-updated during release
$ cargo release X.X.Y-dev0 --no-tag
Upgrading hybrid_pke from X.X.X to X.X.Y-dev0
   Replacing in pyproject.toml
--- pyproject.toml      original
+++ pyproject.toml      replaced
@@ -8 +8 @@
-version = "X.X.X"  # NOTE: auto-updated during release
+version = "X.X.Y-dev0"  # NOTE: auto-updated during release
$ git push origin main
$ git push origin vX.X.X  # triggers automatic release steps in CI

(back to top)

Related Projects

(back to top)

Project details


Download files

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

Source Distribution

hybrid_pke-1.0.2.tar.gz (1.7 MB view details)

Uploaded Source

Built Distributions

hybrid_pke-1.0.2-cp312-none-win_amd64.whl (285.7 kB view details)

Uploaded CPython 3.12 Windows x86-64

hybrid_pke-1.0.2-cp312-none-win32.whl (300.3 kB view details)

Uploaded CPython 3.12 Windows x86

hybrid_pke-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

hybrid_pke-1.0.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (761.5 kB view details)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

hybrid_pke-1.0.2-cp312-cp312-macosx_10_7_x86_64.whl (397.2 kB view details)

Uploaded CPython 3.12 macOS 10.7+ x86-64

hybrid_pke-1.0.2-cp311-none-win_amd64.whl (286.2 kB view details)

Uploaded CPython 3.11 Windows x86-64

hybrid_pke-1.0.2-cp311-none-win32.whl (300.5 kB view details)

Uploaded CPython 3.11 Windows x86

hybrid_pke-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

hybrid_pke-1.0.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (763.3 kB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

hybrid_pke-1.0.2-cp311-cp311-macosx_10_7_x86_64.whl (399.0 kB view details)

Uploaded CPython 3.11 macOS 10.7+ x86-64

hybrid_pke-1.0.2-cp310-none-win_amd64.whl (286.3 kB view details)

Uploaded CPython 3.10 Windows x86-64

hybrid_pke-1.0.2-cp310-none-win32.whl (300.7 kB view details)

Uploaded CPython 3.10 Windows x86

hybrid_pke-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

hybrid_pke-1.0.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (764.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

hybrid_pke-1.0.2-cp310-cp310-macosx_10_7_x86_64.whl (399.2 kB view details)

Uploaded CPython 3.10 macOS 10.7+ x86-64

hybrid_pke-1.0.2-cp39-none-win_amd64.whl (286.8 kB view details)

Uploaded CPython 3.9 Windows x86-64

hybrid_pke-1.0.2-cp39-none-win32.whl (300.1 kB view details)

Uploaded CPython 3.9 Windows x86

hybrid_pke-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

hybrid_pke-1.0.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (765.3 kB view details)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

hybrid_pke-1.0.2-cp39-cp39-macosx_10_7_x86_64.whl (399.7 kB view details)

Uploaded CPython 3.9 macOS 10.7+ x86-64

hybrid_pke-1.0.2-cp38-none-win_amd64.whl (286.1 kB view details)

Uploaded CPython 3.8 Windows x86-64

hybrid_pke-1.0.2-cp38-none-win32.whl (300.5 kB view details)

Uploaded CPython 3.8 Windows x86

hybrid_pke-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

hybrid_pke-1.0.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (765.2 kB view details)

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

hybrid_pke-1.0.2-cp38-cp38-macosx_10_7_x86_64.whl (399.7 kB view details)

Uploaded CPython 3.8 macOS 10.7+ x86-64

File details

Details for the file hybrid_pke-1.0.2.tar.gz.

File metadata

  • Download URL: hybrid_pke-1.0.2.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for hybrid_pke-1.0.2.tar.gz
Algorithm Hash digest
SHA256 20930ef52147ec1251620c4b5b1cca92123921fd09a7b1440aa1b36d9ca205c6
MD5 f249e4fc5fbf6d0d98a1c8d8e3092575
BLAKE2b-256 92bad22d6d535078b5df72262e3446c8ac79e087f713315e20e25220d8c4c41e

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 409d700f25ca5f5464d87290b08a30e6545aa37c620f4d630da90ecdfc09c14a
MD5 f64cc88391f82fa2a8512348dcc5145d
BLAKE2b-256 a3a010013b913d6064af6f420a0fc9e1a1bd754e7cd6b0996457ad60509efb9c

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp312-none-win32.whl.

File metadata

  • Download URL: hybrid_pke-1.0.2-cp312-none-win32.whl
  • Upload date:
  • Size: 300.3 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for hybrid_pke-1.0.2-cp312-none-win32.whl
Algorithm Hash digest
SHA256 a13726e8b1285945315f7172a7c1abf1f5b78d9b02776ddaaa40079e3927583f
MD5 1a99269dc3262769585372e526156b5f
BLAKE2b-256 18a83cbd82b406f729541cf59c3c022440cd8686535f192b103d65d729ec26af

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 02e14b8e96e8cf80862c8a636c395a3dde986b838f6918a27286a778128f43ed
MD5 2b21df5e808a9a959576e0144b8805e5
BLAKE2b-256 b3b0c803a9c992a282c0ec715a5fb20b92243fb8f2a4b762163122f0d8c315ae

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 bd4ae02ae9a63ebdafa34a776d09edd2e7a4c70ca366bb13b6d0ef79cdc37c96
MD5 0cfe39830583f1b688fb86413a60824c
BLAKE2b-256 5d3a3dd355217c8cbf9587d2faee1b7587d47e8d6406bd5ec3ca04f45251459a

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp312-cp312-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp312-cp312-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 0caa88d62bd80d82553a1c6b87027bc440bf5b1abb83da14190abc7f72e7c7f9
MD5 1e383ccdf5c1819e51320e0ac6fbdbbe
BLAKE2b-256 abb64a99e67695c32ce05641cc6983a8f789db861fa0e838ea31c614877f33ca

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 7212787f823ce87ad9e7041647809b4e852a31d98ee0629921aff26320da3ff5
MD5 16958c710435a97df6535ec3659fd55b
BLAKE2b-256 4d586ba3ae3cf4281c6e47de0a9f58c104f798488ac24cc1b27274965b475bf9

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp311-none-win32.whl.

File metadata

  • Download URL: hybrid_pke-1.0.2-cp311-none-win32.whl
  • Upload date:
  • Size: 300.5 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for hybrid_pke-1.0.2-cp311-none-win32.whl
Algorithm Hash digest
SHA256 017e68ec4a814936629c00c03adf7dbbb902390490090e56e40bf38fa652ac71
MD5 0ae89ebdb4f07756e8985b0de05a6c36
BLAKE2b-256 c1b84544523115f19fd9617c17dd21000d7c78d6db0c68b3c6cb328938127dc2

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e08aae5c2d4bd2c09b01a3c9456540f8327503e81dad4c6fb9c7c9a1f0bd78f3
MD5 9e19cdecac0932b4a7a42fe06f786d75
BLAKE2b-256 419153ec032b5ae3bd82bfea40f9fc6c9dfe77e6150460c164570525d7316b21

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6ddd4731a79d418d7c599143866e69d6b5cd454fe494a801b9ed73572b6cc072
MD5 ce308061b85c7ecf5e7bb55b04df97b8
BLAKE2b-256 2fb86728d6dc49bb307e93e2a5cc992be456d76f09bbb96b6a81a7bbb74807b1

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp311-cp311-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp311-cp311-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 fb37cb4f4b4bde09f849026f819ba9b5aa7072a0b160dd7136a1fafa49606c73
MD5 7625dd6ebb04b955fb4be1238fe8a91e
BLAKE2b-256 b8b076bac13e467b6fb670546c380823d0d25a22e2d1a70d0c0b07fab5fd1943

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 a051896428e7791e184e619e552ad6992f52f3d2d57d9abb53dcf4412dac2327
MD5 b6605623fa1df8e59b0dd06b59b21c30
BLAKE2b-256 2e9b7f3553bf112aca9f617dd72f0172767f30c573ed89f77335e64dbfa2bb56

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp310-none-win32.whl.

File metadata

  • Download URL: hybrid_pke-1.0.2-cp310-none-win32.whl
  • Upload date:
  • Size: 300.7 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for hybrid_pke-1.0.2-cp310-none-win32.whl
Algorithm Hash digest
SHA256 d8ad3d2ad70e4c208cee4840529ae73bccfa71df2291af07f359b58cefdf8834
MD5 56f5ba01be80593ce9f81209cdfec126
BLAKE2b-256 19d54fe5cb0c12a39548ba91b6d26fc47eed8f8ef51189e74051e2f9952b0e7c

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fb47a9a4dcc1ac918e0c41822e967ee299e6151eb382d5a32ae7e0bf5b786513
MD5 604499a358bd108b50d60b0470740134
BLAKE2b-256 a1c3cd6b2591a1a757534bad9a2436fcab3086cb51d842af5b1fb1e02e2bb0c7

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 55c44963ba94000240c4ba11b9dcbfd31dfb95c4564125382574404820ae798a
MD5 9a50dbc8bf1200d9bf50583289d334d0
BLAKE2b-256 0653320b0558ababea7784fe41bd886d54a9ddf2882cef429055ae09c3adf895

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp310-cp310-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp310-cp310-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 3c6c46b25d41c4f016474ff03b3d4f1a805442d8faf323f4c9bf600c59f9944f
MD5 06bf9210a7e1a03cfa98751106123bee
BLAKE2b-256 eb7a0b546323485575bb7f90adbbf551d52d8c32d114e646c407a8a94086fbff

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp39-none-win_amd64.whl.

File metadata

  • Download URL: hybrid_pke-1.0.2-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 286.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for hybrid_pke-1.0.2-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 95537ecfcdd8c22b89102e45649390a0443e14e7b31231404288b157ed4e7814
MD5 13e99e44154caf5f39ba29bf5bc58065
BLAKE2b-256 fef7d41d6194dd9eed1f6b8fb3ebcb375dadb29912ab46ea8b0dc1193b48be23

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp39-none-win32.whl.

File metadata

  • Download URL: hybrid_pke-1.0.2-cp39-none-win32.whl
  • Upload date:
  • Size: 300.1 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for hybrid_pke-1.0.2-cp39-none-win32.whl
Algorithm Hash digest
SHA256 7a8906f7882adc8af43bd19739b5ee2fa1ad55f4c18d240e1ed310d74e102f31
MD5 06256dc81e20202b32ce8f0e958f8003
BLAKE2b-256 b6aac54d370b340469ae9c96fc129881d8dd2d70436d5ef006745617c9e5afde

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eab2f6f70aaac651bdebc21b71a5e0166c32365cc68ec3749042260afefac205
MD5 192757911679d6edbeae7601ed1552da
BLAKE2b-256 7102a8add85f0cb79ba043d4d23937d640675c60d9cbd362ed071159da85d36f

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 66623d6203cff0c2b7f7e29e3b690e1756f7c52ddb54b36014b5fe22f44ab3c4
MD5 b0a817369258a25943786c23c9561489
BLAKE2b-256 55ebf42971c37a6e1883c466832df79babe77cd6c3416b4f038d177a0dfd26bb

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp39-cp39-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp39-cp39-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 69256626e44a6a00cce2f12ec52ab27088c210260c24c38fc6aafcf52184af07
MD5 7df663b66aabe64bad93447d07e759a8
BLAKE2b-256 92b614cd00b22b379fe2eca16058bb5405e8b1f34a0a1a466d09c61d24eb2902

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp38-none-win_amd64.whl.

File metadata

  • Download URL: hybrid_pke-1.0.2-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 286.1 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for hybrid_pke-1.0.2-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 37a9abb46512a147b84803b5038462e2eb5f847b81743711177a2cbc95544d99
MD5 6f78d3c255563812f51c918df76baf5e
BLAKE2b-256 3c78b7e7d6f917ff35bfac7d31bad24d79712d952ec4f4613506534f7bdfeca2

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp38-none-win32.whl.

File metadata

  • Download URL: hybrid_pke-1.0.2-cp38-none-win32.whl
  • Upload date:
  • Size: 300.5 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for hybrid_pke-1.0.2-cp38-none-win32.whl
Algorithm Hash digest
SHA256 4e833c706ad488b7ee2e0025a6292f1620485820e91f9a8ac49c5d27c5bcfc73
MD5 c1b2bb78c5088e9319ca817a534d22db
BLAKE2b-256 d97dcc7044dcc70a62872ec9448f3ea8dcbc3ee371465a614eb4c758f0aae6cc

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7bd3f90b48d89f44a799b6428d8c79e7b91d452e868e6d3ba5811e121340c9ac
MD5 b63018a811d819fd16a1ff568971a8a7
BLAKE2b-256 00cf793397338704670d8aea044832d1e53e3000e85dd873e16067935a5c5111

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 26a223b7330768d8b4f4dc818f2ac05acf3f03cafddaa182e3d510649bd0933e
MD5 612106c0e492165c142c0632ff8fb573
BLAKE2b-256 d005acc85cbbf4bff654a6285273b72f118d1ff8d557ce7009b753ac15e40ba0

See more details on using hashes here.

File details

Details for the file hybrid_pke-1.0.2-cp38-cp38-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for hybrid_pke-1.0.2-cp38-cp38-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 f07751fae4d75fc06ffc67d2d863a396e19c20f48582195f93c19eeb3d1c777a
MD5 918cc8e76245212b0abbbd3ac514b07f
BLAKE2b-256 a063f9e328f6ca32ace1981b091ec24bf6b05f84c67df44c2fdb899bd1ace142

See more details on using hashes here.

Supported by

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