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