Python extension for Sui SEAL threshold encryption and zkLogin support
Project description
A Python extension providing zkLogin and SEAL threshold encryption support for Sui, extending the pysui SDK.
The library is backed by a Rust crate compiled via PyO3 and maturin, exposing a native Python extension module.
Requirements
Python 3.10 or later
pysui — integrated in the upcoming pysui 1.1.0 release (date TBD)
Installation
From PyPI (sdist)
Only a source distribution is published to PyPI. Installing it requires a Rust toolchain and maturin:
pip install maturin
pip install pysui-crypto
Pre-built wheels
Platform wheels for Linux (x86_64, aarch64), Windows (x64), and macOS (x86_64, aarch64) are attached to each GitHub release as zip archives. Download the archive for your platform and install the wheel directly:
pip install pysui_crypto-<version>-<platform>.whl
Build from source
maturin is required to compile the Rust extension:
pip install maturin
maturin develop # installs into the active virtual environment
To produce a wheel:
maturin build --release --out dist
zkLogin Support
Functions for constructing and submitting zkLogin authenticated transactions on Sui.
- generate_ephemeral_keypair(as_secp256r1)
Generate an Ed25519 (default) or secp256r1 ephemeral key pair for nonce construction. Returns {"public_key": bytes, "private_key": bytes}.
- extract_jwt_claims(jwt)
Parse a zkLogin JWT and enforce Sui size constraints. Returns (iss, sub, aud, nonce).
- compute_nonce(epk_bytes, max_epoch, randomness)
Compute the Poseidon-hashed nonce to embed in the OAuth authorization request.
- compute_address_seed(key_claim_name, key_claim_value, audience, user_salt)
Compute the 32-byte BN254/Poseidon address seed from JWT claims and a user salt.
- compute_zklogin_address(iss, address_seed, legacy)
Derive the final Blake2b256 Sui address from the issuer string and address seed.
- build_zklogin_signature(proof_json, ephemeral_sig, address_seed, max_epoch)
Assemble and BCS-serialize a ZkLoginAuthenticator; returns standard base64 ready for the Sui RPC.
SEAL Support
Functions for SEAL threshold encryption. SEAL requires access to one or more running SEAL key servers; this library provides the client-side cryptographic primitives only.
- DemType
Enum of supported data-encapsulation mechanisms: AesGcm256, Hmac256Ctr, Plain.
- EncryptedObject
Parse and inspect a SEAL encrypted object (parse(data) / to_bytes()). Exposes version, package_id, id, threshold, services, dem_type.
- seal_encrypt(package_id, id, key_servers, public_keys, threshold, data, dem_type, aad)
Threshold-encrypt plaintext using IBE. Returns (ciphertext, dem_key) where dem_key is non-None only for Plain mode.
- seal_decrypt(encrypted_object, user_secret_keys, public_keys)
Decrypt a SEAL ciphertext using user secret keys collected from key servers.
- generate_session_keypair()
Generate an Ed25519 session key pair for SEAL key server authentication. Returns {"public_key": bytes, "private_key": bytes}.
- generate_elgamal_keypair()
Generate an ElGamal key pair for SEAL key server encryption. Returns {"public_key": bytes, "private_key": bytes}.
- elgamal_decrypt(sk, encryption)
Decrypt an ElGamal ciphertext using a private key.
- verify_user_secret_key(usk, full_id, public_key)
Verify a user secret key returned by a key server; raises ValueError on failure.
- seal_signed_message(package_id, session_vk, creation_time, ttl_min)
Construct the key server request message for signing; returns hex-encoded bytes.
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pysui_crypto-0.1.0.tar.gz.
File metadata
- Download URL: pysui_crypto-0.1.0.tar.gz
- Upload date:
- Size: 82.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39b22f3b5bd1df1da71e41a7ced507bb86d44577aeee32c3d7cb0c1cb1338461
|
|
| MD5 |
c62db69e9db677be3e671a29c10a920e
|
|
| BLAKE2b-256 |
da3319f25eedf94d3e934bfcd8f2dcc07673b542f01659c84c7f71e1df461d70
|