Skip to main content

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)

Metadata

Release files for hybrid-pke 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hybrid-pke 1.0.2
File Size Uploaded Provenance Actions
hybrid_pke-1.0.2.tar.gz 1.7 MB Without provenance Details for hybrid_pke-1.0.2.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for hybrid-pke 1.0.2
File Actions
hybrid_pke-1.0.2-cp312-none-win_amd64.whl CPython 3.12 none Windows x86-64 Details for hybrid_pke-1.0.2-cp312-none-win_amd64.whl
hybrid_pke-1.0.2-cp312-none-win32.whl CPython 3.12 none Windows x86-32 Details for hybrid_pke-1.0.2-cp312-none-win32.whl
hybrid_pke-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details for hybrid_pke-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
hybrid_pke-1.0.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl CPython 3.12 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64), macOS 11.0+ ARM64, macOS 10.9+ x86-64 Details for hybrid_pke-1.0.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
hybrid_pke-1.0.2-cp312-cp312-macosx_10_7_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.7+ x86-64 Details for hybrid_pke-1.0.2-cp312-cp312-macosx_10_7_x86_64.whl
hybrid_pke-1.0.2-cp311-none-win_amd64.whl CPython 3.11 none Windows x86-64 Details for hybrid_pke-1.0.2-cp311-none-win_amd64.whl
hybrid_pke-1.0.2-cp311-none-win32.whl CPython 3.11 none Windows x86-32 Details for hybrid_pke-1.0.2-cp311-none-win32.whl
hybrid_pke-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details for hybrid_pke-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
hybrid_pke-1.0.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64, macOS 10.9+ universal2 (ARM64, x86-64), macOS 11.0+ ARM64 Details for hybrid_pke-1.0.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
hybrid_pke-1.0.2-cp311-cp311-macosx_10_7_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.7+ x86-64 Details for hybrid_pke-1.0.2-cp311-cp311-macosx_10_7_x86_64.whl
hybrid_pke-1.0.2-cp310-none-win_amd64.whl CPython 3.10 none Windows x86-64 Details for hybrid_pke-1.0.2-cp310-none-win_amd64.whl
hybrid_pke-1.0.2-cp310-none-win32.whl CPython 3.10 none Windows x86-32 Details for hybrid_pke-1.0.2-cp310-none-win32.whl
hybrid_pke-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details for hybrid_pke-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
hybrid_pke-1.0.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64, macOS 10.9+ universal2 (ARM64, x86-64), macOS 11.0+ ARM64 Details for hybrid_pke-1.0.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
hybrid_pke-1.0.2-cp310-cp310-macosx_10_7_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.7+ x86-64 Details for hybrid_pke-1.0.2-cp310-cp310-macosx_10_7_x86_64.whl
hybrid_pke-1.0.2-cp39-none-win_amd64.whl CPython 3.9 none Windows x86-64 Details for hybrid_pke-1.0.2-cp39-none-win_amd64.whl
hybrid_pke-1.0.2-cp39-none-win32.whl CPython 3.9 none Windows x86-32 Details for hybrid_pke-1.0.2-cp39-none-win32.whl
hybrid_pke-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details for hybrid_pke-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
hybrid_pke-1.0.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64, macOS 10.9+ universal2 (ARM64, x86-64), macOS 11.0+ ARM64 Details for hybrid_pke-1.0.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
hybrid_pke-1.0.2-cp39-cp39-macosx_10_7_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.7+ x86-64 Details for hybrid_pke-1.0.2-cp39-cp39-macosx_10_7_x86_64.whl
hybrid_pke-1.0.2-cp38-none-win_amd64.whl CPython 3.8 none Windows x86-64 Details for hybrid_pke-1.0.2-cp38-none-win_amd64.whl
hybrid_pke-1.0.2-cp38-none-win32.whl CPython 3.8 none Windows x86-32 Details for hybrid_pke-1.0.2-cp38-none-win32.whl
hybrid_pke-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ x86-64 Details for hybrid_pke-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
hybrid_pke-1.0.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl CPython 3.8 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64), macOS 11.0+ ARM64, macOS 10.9+ x86-64 Details for hybrid_pke-1.0.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
hybrid_pke-1.0.2-cp38-cp38-macosx_10_7_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.7+ x86-64 Details for hybrid_pke-1.0.2-cp38-cp38-macosx_10_7_x86_64.whl

Total release size: 16.5 MB

Release files / hybrid_pke-1.0.2.tar.gz

Download URL hybrid_pke-1.0.2.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
20930ef52147ec1251620c4b5b1cca92123921fd09a7b1440aa1b36d9ca205c6
BLAKE2b-256 checksum
How to use checksums
92bad22d6d535078b5df72262e3446c8ac79e087f713315e20e25220d8c4c41e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp312-none-win_amd64.whl

Download URL hybrid_pke-1.0.2-cp312-none-win_amd64.whl
Size 285.7 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
409d700f25ca5f5464d87290b08a30e6545aa37c620f4d630da90ecdfc09c14a
BLAKE2b-256 checksum
How to use checksums
a3a010013b913d6064af6f420a0fc9e1a1bd754e7cd6b0996457ad60509efb9c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp312-none-win32.whl

Download URL hybrid_pke-1.0.2-cp312-none-win32.whl
Size 300.3 kB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
a13726e8b1285945315f7172a7c1abf1f5b78d9b02776ddaaa40079e3927583f
BLAKE2b-256 checksum
How to use checksums
18a83cbd82b406f729541cf59c3c022440cd8686535f192b103d65d729ec26af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hybrid_pke-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
02e14b8e96e8cf80862c8a636c395a3dde986b838f6918a27286a778128f43ed
BLAKE2b-256 checksum
How to use checksums
b3b0c803a9c992a282c0ec715a5fb20b92243fb8f2a4b762163122f0d8c315ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl

Download URL hybrid_pke-1.0.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Size 761.5 kB
Tags CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
bd4ae02ae9a63ebdafa34a776d09edd2e7a4c70ca366bb13b6d0ef79cdc37c96
BLAKE2b-256 checksum
How to use checksums
5d3a3dd355217c8cbf9587d2faee1b7587d47e8d6406bd5ec3ca04f45251459a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp312-cp312-macosx_10_7_x86_64.whl

Download URL hybrid_pke-1.0.2-cp312-cp312-macosx_10_7_x86_64.whl
Size 397.2 kB
Tags CPython 3.12 macOS 10.7+ x86-64
SHA-256 checksum
How to use checksums
0caa88d62bd80d82553a1c6b87027bc440bf5b1abb83da14190abc7f72e7c7f9
BLAKE2b-256 checksum
How to use checksums
abb64a99e67695c32ce05641cc6983a8f789db861fa0e838ea31c614877f33ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp311-none-win_amd64.whl

Download URL hybrid_pke-1.0.2-cp311-none-win_amd64.whl
Size 286.2 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
7212787f823ce87ad9e7041647809b4e852a31d98ee0629921aff26320da3ff5
BLAKE2b-256 checksum
How to use checksums
4d586ba3ae3cf4281c6e47de0a9f58c104f798488ac24cc1b27274965b475bf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp311-none-win32.whl

Download URL hybrid_pke-1.0.2-cp311-none-win32.whl
Size 300.5 kB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
017e68ec4a814936629c00c03adf7dbbb902390490090e56e40bf38fa652ac71
BLAKE2b-256 checksum
How to use checksums
c1b84544523115f19fd9617c17dd21000d7c78d6db0c68b3c6cb328938127dc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hybrid_pke-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
e08aae5c2d4bd2c09b01a3c9456540f8327503e81dad4c6fb9c7c9a1f0bd78f3
BLAKE2b-256 checksum
How to use checksums
419153ec032b5ae3bd82bfea40f9fc6c9dfe77e6150460c164570525d7316b21
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl

Download URL hybrid_pke-1.0.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Size 763.3 kB
Tags CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6ddd4731a79d418d7c599143866e69d6b5cd454fe494a801b9ed73572b6cc072
BLAKE2b-256 checksum
How to use checksums
2fb86728d6dc49bb307e93e2a5cc992be456d76f09bbb96b6a81a7bbb74807b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp311-cp311-macosx_10_7_x86_64.whl

Download URL hybrid_pke-1.0.2-cp311-cp311-macosx_10_7_x86_64.whl
Size 399.0 kB
Tags CPython 3.11 macOS 10.7+ x86-64
SHA-256 checksum
How to use checksums
fb37cb4f4b4bde09f849026f819ba9b5aa7072a0b160dd7136a1fafa49606c73
BLAKE2b-256 checksum
How to use checksums
b8b076bac13e467b6fb670546c380823d0d25a22e2d1a70d0c0b07fab5fd1943
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp310-none-win_amd64.whl

Download URL hybrid_pke-1.0.2-cp310-none-win_amd64.whl
Size 286.3 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
a051896428e7791e184e619e552ad6992f52f3d2d57d9abb53dcf4412dac2327
BLAKE2b-256 checksum
How to use checksums
2e9b7f3553bf112aca9f617dd72f0172767f30c573ed89f77335e64dbfa2bb56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp310-none-win32.whl

Download URL hybrid_pke-1.0.2-cp310-none-win32.whl
Size 300.7 kB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
d8ad3d2ad70e4c208cee4840529ae73bccfa71df2291af07f359b58cefdf8834
BLAKE2b-256 checksum
How to use checksums
19d54fe5cb0c12a39548ba91b6d26fc47eed8f8ef51189e74051e2f9952b0e7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hybrid_pke-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
fb47a9a4dcc1ac918e0c41822e967ee299e6151eb382d5a32ae7e0bf5b786513
BLAKE2b-256 checksum
How to use checksums
a1c3cd6b2591a1a757534bad9a2436fcab3086cb51d842af5b1fb1e02e2bb0c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl

Download URL hybrid_pke-1.0.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Size 764.2 kB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
55c44963ba94000240c4ba11b9dcbfd31dfb95c4564125382574404820ae798a
BLAKE2b-256 checksum
How to use checksums
0653320b0558ababea7784fe41bd886d54a9ddf2882cef429055ae09c3adf895
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp310-cp310-macosx_10_7_x86_64.whl

Download URL hybrid_pke-1.0.2-cp310-cp310-macosx_10_7_x86_64.whl
Size 399.2 kB
Tags CPython 3.10 macOS 10.7+ x86-64
SHA-256 checksum
How to use checksums
3c6c46b25d41c4f016474ff03b3d4f1a805442d8faf323f4c9bf600c59f9944f
BLAKE2b-256 checksum
How to use checksums
eb7a0b546323485575bb7f90adbbf551d52d8c32d114e646c407a8a94086fbff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp39-none-win_amd64.whl

Download URL hybrid_pke-1.0.2-cp39-none-win_amd64.whl
Size 286.8 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
95537ecfcdd8c22b89102e45649390a0443e14e7b31231404288b157ed4e7814
BLAKE2b-256 checksum
How to use checksums
fef7d41d6194dd9eed1f6b8fb3ebcb375dadb29912ab46ea8b0dc1193b48be23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp39-none-win32.whl

Download URL hybrid_pke-1.0.2-cp39-none-win32.whl
Size 300.1 kB
Tags CPython 3.9 Windows x86-32
SHA-256 checksum
How to use checksums
7a8906f7882adc8af43bd19739b5ee2fa1ad55f4c18d240e1ed310d74e102f31
BLAKE2b-256 checksum
How to use checksums
b6aac54d370b340469ae9c96fc129881d8dd2d70436d5ef006745617c9e5afde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hybrid_pke-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
eab2f6f70aaac651bdebc21b71a5e0166c32365cc68ec3749042260afefac205
BLAKE2b-256 checksum
How to use checksums
7102a8add85f0cb79ba043d4d23937d640675c60d9cbd362ed071159da85d36f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl

Download URL hybrid_pke-1.0.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Size 765.3 kB
Tags CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
66623d6203cff0c2b7f7e29e3b690e1756f7c52ddb54b36014b5fe22f44ab3c4
BLAKE2b-256 checksum
How to use checksums
55ebf42971c37a6e1883c466832df79babe77cd6c3416b4f038d177a0dfd26bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp39-cp39-macosx_10_7_x86_64.whl

Download URL hybrid_pke-1.0.2-cp39-cp39-macosx_10_7_x86_64.whl
Size 399.7 kB
Tags CPython 3.9 macOS 10.7+ x86-64
SHA-256 checksum
How to use checksums
69256626e44a6a00cce2f12ec52ab27088c210260c24c38fc6aafcf52184af07
BLAKE2b-256 checksum
How to use checksums
92b614cd00b22b379fe2eca16058bb5405e8b1f34a0a1a466d09c61d24eb2902
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp38-none-win_amd64.whl

Download URL hybrid_pke-1.0.2-cp38-none-win_amd64.whl
Size 286.1 kB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
37a9abb46512a147b84803b5038462e2eb5f847b81743711177a2cbc95544d99
BLAKE2b-256 checksum
How to use checksums
3c78b7e7d6f917ff35bfac7d31bad24d79712d952ec4f4613506534f7bdfeca2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp38-none-win32.whl

Download URL hybrid_pke-1.0.2-cp38-none-win32.whl
Size 300.5 kB
Tags CPython 3.8 Windows x86-32
SHA-256 checksum
How to use checksums
4e833c706ad488b7ee2e0025a6292f1620485820e91f9a8ac49c5d27c5bcfc73
BLAKE2b-256 checksum
How to use checksums
d97dcc7044dcc70a62872ec9448f3ea8dcbc3ee371465a614eb4c758f0aae6cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL hybrid_pke-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
7bd3f90b48d89f44a799b6428d8c79e7b91d452e868e6d3ba5811e121340c9ac
BLAKE2b-256 checksum
How to use checksums
00cf793397338704670d8aea044832d1e53e3000e85dd873e16067935a5c5111
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl

Download URL hybrid_pke-1.0.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Size 765.2 kB
Tags CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
26a223b7330768d8b4f4dc818f2ac05acf3f03cafddaa182e3d510649bd0933e
BLAKE2b-256 checksum
How to use checksums
d005acc85cbbf4bff654a6285273b72f118d1ff8d557ce7009b753ac15e40ba0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Release files / hybrid_pke-1.0.2-cp38-cp38-macosx_10_7_x86_64.whl

Download URL hybrid_pke-1.0.2-cp38-cp38-macosx_10_7_x86_64.whl
Size 399.7 kB
Tags CPython 3.8 macOS 10.7+ x86-64
SHA-256 checksum
How to use checksums
f07751fae4d75fc06ffc67d2d863a396e19c20f48582195f93c19eeb3d1c777a
BLAKE2b-256 checksum
How to use checksums
a063f9e328f6ca32ace1981b091ec24bf6b05f84c67df44c2fdb899bd1ace142
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.19

Security for hybrid-pke 1.0.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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page