Skip to main content

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


Download files

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

Source Distribution

pysui_crypto-0.1.0.tar.gz (82.8 kB view details)

Uploaded Source

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

Hashes for pysui_crypto-0.1.0.tar.gz
Algorithm Hash digest
SHA256 39b22f3b5bd1df1da71e41a7ced507bb86d44577aeee32c3d7cb0c1cb1338461
MD5 c62db69e9db677be3e671a29c10a920e
BLAKE2b-256 da3319f25eedf94d3e934bfcd8f2dcc07673b542f01659c84c7f71e1df461d70

See more details on using hashes here.

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