Alkindi
In honor of Alkindi (الكِندي), the 9th-century pioneer of cryptography
High-performance Python bindings for NIST-standardized post-quantum cryptography, powered by OpenSSL.
Table of Contents
About
The project is named after Alkindi (الكِنْدي), the 9th-century Arab Muslim polymath who pioneered cryptanalysis and frequency analysis, laying the foundations for modern cryptography.
Alkindi makes quantum-resistant cryptography straightforward and accessible in Python by providing clean, type-safe bindings to OpenSSL's implementations of NIST-standardized post-quantum algorithms. As quantum computers advance, traditional public-key systems like RSA and elliptic curves become vulnerable. Alkindi provides the cryptographic primitives needed to protect against both classical and quantum attacks.
Supported Algorithms
-
ML-KEM (formerly Kyber) — Key encapsulation mechanisms for secure key exchange
Based on lattice cryptography, ML-KEM enables two parties to establish a shared secret over an insecure channel. Available in three security levels (ML-KEM-512, ML-KEM-768, ML-KEM-1024) corresponding to AES-128, AES-192, and AES-256 equivalent security. -
ML-DSA (formerly Dilithium) — Digital signatures for authentication and integrity
Lattice-based signatures that provide quantum-resistant authentication. Three parameter sets (ML-DSA-44, ML-DSA-65, ML-DSA-87) offer balanced trade-offs between signature size and security strength. -
SLH-DSA (formerly SPHINCS+) — Hash-based signatures for conservative security guarantees
Unlike lattice-based schemes, SLH-DSA relies only on hash function security, making it ideal for long-term signatures and applications requiring minimal cryptographic assumptions. Available in multiple variants optimized for either speed or size.
Alkindi uses CFFI to interface directly with OpenSSL's C implementations, achieving high performance with minimal overhead. The library provides a thread-safe API with full type annotations for enhanced developer experience.
Status: Alpha — Alkindi is under active development with the explicit goal of becoming a production-grade, thoroughly reviewed PQC library for Python. APIs may change before version 1.0.0.
Why Alkindi?
Alkindi bridges the gap between enterprise-grade cryptography and Python developer ergonomics, bringing NIST-standardized post-quantum algorithms to your applications with production readiness in mind:
| Feature | Description |
|---|---|
| Battle-tested backend | Built on OpenSSL, leveraging decades of cryptographic engineering and security audits rather than implementing algorithms from scratch. |
| Standards-first | Uses NIST-standardized post-quantum algorithms exclusively and avoids experimental or pre-standard variants. |
| High performance | CFFI-based bindings call OpenSSL directly, achieving near-native C performance with minimal Python overhead. |
| Type-safe, simple API | Full type hints and a thread-safe design for safer concurrent usage and superior developer experience. |
| Minimal attack surface | A deliberately focused API that is easier to reason about, audit, and review than a sprawling cryptographic toolkit. |
Installation
From PyPI (Coming Soon)
pip install alkindi
From Source
Requirements: Python 3.10+ and C compiler
# Clone the repository
git clone https://github.com/alraddady/alkindi.git
cd alkindi
# Build OpenSSL with PQC support
./scripts/build_openssl.sh
# Install Alkindi
pip install -e .
# Or install with development dependencies
pip install -e ".[dev]"
Quick Start
Key Encapsulation (ML-KEM)
from alkindi import KEM
# Generate a keypair for the receiver
keypair = KEM.generate_keypair("ML-KEM-768")
# Sender: encapsulate a shared secret
ciphertext, shared_secret_sender = KEM.encapsulate("ML-KEM-768", keypair.public_key)
# Receiver: decapsulate to recover the shared secret
shared_secret_receiver = KEM.decapsulate("ML-KEM-768", keypair.private_key, ciphertext)
# Both parties now share the same secret
assert shared_secret_sender == shared_secret_receiver
Deterministic Key Generation
Pass a 64-byte seed to produce the same keypair every time. The seed is the concatenation of the two FIPS 203 internal seeds d || z.
import os
seed = os.urandom(64)
keypair = KEM.generate_keypair("ML-KEM-768", seed=seed)
keypair2 = KEM.generate_keypair("ML-KEM-768", seed=seed)
assert keypair.public_key == keypair2.public_key
Digital Signatures (ML-DSA / SLH-DSA)
from alkindi import Signature
# Generate a keypair for the signer
keypair = Signature.generate_keypair("ML-DSA-65")
# Sign a message
message = b"Hello, quantum world!"
signature = Signature.sign("ML-DSA-65", keypair.private_key, message)
# Verify the signature
is_valid = Signature.verify("ML-DSA-65", keypair.public_key, message, signature)
print(f"Signature valid: {is_valid}") # True
# Tampering detection
is_valid = Signature.verify("ML-DSA-65", keypair.public_key, b"Tampered message", signature)
print(f"Tampered signature valid: {is_valid}") # False
Context Strings
ML-DSA and SLH-DSA support an optional context string (up to 255 bytes) that is cryptographically bound to the signature. The same context must be supplied at both signing and verification time.
ctx = b"the quick brown fox jumps over the lazy dog"
signature = Signature.sign("ML-DSA-65", keypair.private_key, message, context=ctx)
# Verification succeeds only with the correct context
Signature.verify("ML-DSA-65", keypair.public_key, message, signature, context=ctx) # True
Signature.verify("ML-DSA-65", keypair.public_key, message, signature) # False
Key Serialization (DER/PEM)
Keys converts raw key bytes to and from standard wire formats for storage and interoperability:
- Public keys → SubjectPublicKeyInfo (SPKI / X.509)
- Private keys → PKCS#8 PrivateKeyInfo (unencrypted)
from alkindi import KEM, Keys
keypair = KEM.generate_keypair("ML-KEM-768")
keys = Keys("ML-KEM-768")
# Export to DER or PEM
public_pem = keys.public_key_to_pem(keypair.public_key)
private_der = keys.private_key_to_der(keypair.private_key)
# Import back to raw bytes
public_key = keys.public_key_from_pem(public_pem)
private_key = keys.private_key_from_der(private_der)
Keys works with all ML-KEM, ML-DSA, and SLH-DSA algorithms. Bind it once to an algorithm, then call encode/decode methods without repeating the algorithm name.
Documentation
Algorithm Selection Guide
Choosing the right algorithm and parameter set depends on your security requirements, performance constraints, and use case. For detailed guidance on selecting appropriate algorithms, see the Algorithm Selection Guide.
NIST Standards
- FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism
- FIPS 204: Module-Lattice-Based Digital Signature Standard
- FIPS 205: Stateless Hash-Based Digital Signature Standard
Additional Resources
Contributing
Contributions are welcome! Please review our Contributing Guidelines before submitting pull requests or opening issues.
License
Licensed under the Apache License 2.0. See LICENSE for complete terms.
Acknowledgments
Alkindi stands on the shoulders of giants. I would like to thank the following organizations and teams for their foundational work:
- National Institute of Standards and Technology (NIST): for standardizing post-quantum cryptography
- OpenSSL Project: for providing the cryptographic foundation
- Algorithm Development Teams:
- Kyber developers
- Dilithium developers
- SPHINCS+ developers
- Open Quantum Safe (OQS): for their pioneering work in making post-quantum cryptography practical and for fostering a welcoming community
My sincere gratitude also extends to the broader open-source community, whose collaborative spirit and tireless contributions make projects like this possible.
Release files for alkindi 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 18.6 MB
Release files / alkindi-0.0.3-cp313-cp313-win_amd64.whl
| Download URL | alkindi-0.0.3-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 886.0 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
05925e3274786018a863c2914317c4cbebbc11a3dcad5c4de5012698494897d9
|
|
BLAKE2b-256 checksum How to use checksums |
65c8b3de526f0da20099bd2e12aa361f015fba362c09cb56387b7bdc24b70c96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
| Download URL | alkindi-0.0.3-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.13 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
3aa518495f0ff8400c496dd59bb9def14e52aaf15d314c9d5ef8baabc0cad244
|
|
BLAKE2b-256 checksum How to use checksums |
edef33625c2f6751cd7b94b543840a93923c53ba7c950dc1c0375692c44c7936
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | alkindi-0.0.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
bb116cf1a2fb7ceaf2fe843c31487ce552daaef878edcf6c0bea2e123def671d
|
|
BLAKE2b-256 checksum How to use checksums |
702e94b3abebc6982a6889c2b9e32f45a0765594c202cf00f97ad84e01addb22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp313-cp313-macosx_14_0_arm64.whl
| Download URL | alkindi-0.0.3-cp313-cp313-macosx_14_0_arm64.whl |
|---|---|
| Size | 944.7 kB |
| Tags | CPython 3.13 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c25b34d72fd6adddf3e5ee0f199df8e9ebe51462f1165a62dc0ef0f55c488e67
|
|
BLAKE2b-256 checksum How to use checksums |
f17d52ca9714e88ec28fc99419555dacaa21fe101a535d7b2ba52528e3438b86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp312-cp312-win_amd64.whl
| Download URL | alkindi-0.0.3-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 886.0 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
56e77b78517ba258f7d26a1bbe4088225267be688df8fb859f39b434f05f20d0
|
|
BLAKE2b-256 checksum How to use checksums |
a692f9f50bf2d99be8fd1af78e6fa9726f973c5805a03bb481a884c100c0c1e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
| Download URL | alkindi-0.0.3-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.12 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4244d8353b918b85c001cfa1f381429f8b3d7ff75988e3f381c23127f154cd41
|
|
BLAKE2b-256 checksum How to use checksums |
ad68e80e327b00f1963fbbe92f32555962b8cabb016adf48ac06d020b314cc19
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | alkindi-0.0.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
8efd8a09215f7058595db418514528e23effb4cb6691fdc7bdf62345717219bf
|
|
BLAKE2b-256 checksum How to use checksums |
79a06fb8346e172475305f6d31a358215fac0d4b3f17210957ff81ec45489cf1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp312-cp312-macosx_14_0_arm64.whl
| Download URL | alkindi-0.0.3-cp312-cp312-macosx_14_0_arm64.whl |
|---|---|
| Size | 944.7 kB |
| Tags | CPython 3.12 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2686e5c4e358b523b02fb9e14cd84f239bcfd4ea21660ce3c8194729804f8240
|
|
BLAKE2b-256 checksum How to use checksums |
b15ab5c7652b068aa4c4932540768e121c1a38a6c21e20dff9a08cb808cc49f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp311-cp311-win_amd64.whl
| Download URL | alkindi-0.0.3-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 885.9 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9d91452b22f145f8892f1a8fd455ba0737d0813de7bb4dcbb224ccf80de37ad3
|
|
BLAKE2b-256 checksum How to use checksums |
1ae0c5fb0d28f9142b97cc5252d7c48f68b2a4c8190da244c1c24ebe5be4be2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
| Download URL | alkindi-0.0.3-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.11 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9af819b02716d934e148d08aacc1bcaea0cd07d2bb3ee1e6ccb5690211c76770
|
|
BLAKE2b-256 checksum How to use checksums |
839b23bcacd3b77a75a3b51d761d5f361d465fac6a59f54fffc7b28229760cb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | alkindi-0.0.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
6bb2bfa660523f9ac484e3e283585beabd91f9b20493b716f47f559465b2d45b
|
|
BLAKE2b-256 checksum How to use checksums |
33987894c8d5d11e7b2e153da624132c3d2eed9e86373852a05ab792e8d6d253
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp311-cp311-macosx_14_0_arm64.whl
| Download URL | alkindi-0.0.3-cp311-cp311-macosx_14_0_arm64.whl |
|---|---|
| Size | 944.6 kB |
| Tags | CPython 3.11 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f9e4e856e4a0f1d8ca687857b4604c164198a997b7e54aac697be8e4cad0ae52
|
|
BLAKE2b-256 checksum How to use checksums |
34c3a1dac8544d7b2e0870d72f1f8aa0c885087e5e629d7857eb224e56145760
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp310-cp310-win_amd64.whl
| Download URL | alkindi-0.0.3-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 885.9 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e0f12028fe0debcf072ab92b10ddf923ff77b2fc0a3623a07de1cac9850f883c
|
|
BLAKE2b-256 checksum How to use checksums |
2ba9ec78c4710f2afa7ea595d10063f0761a85c74ff0164b874630cccfd30d4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl
| Download URL | alkindi-0.0.3-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 Linux glibc 2.26+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f12f0baa372ed7c116ed1255492c2f44a1a4b12793b0923691a44b6f58206c13
|
|
BLAKE2b-256 checksum How to use checksums |
bbb083bdb020f98c514cff3cc825c8444713af3723d50d569daf8b8e47d3c946
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | alkindi-0.0.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
76d4c15b990552365c024513e28b4fd664f636c333f3d27280bc5f196fba58bc
|
|
BLAKE2b-256 checksum How to use checksums |
4ee3fdf140147ad4df8542328eee568d4083f5539ffd9b95cd707b7d15fa6533
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency logRelease files / alkindi-0.0.3-cp310-cp310-macosx_14_0_arm64.whl
| Download URL | alkindi-0.0.3-cp310-cp310-macosx_14_0_arm64.whl |
|---|---|
| Size | 944.6 kB |
| Tags | CPython 3.10 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9ee514797af5163e1d27ad8664aea9ecc7d25d656a41eb83504add44f219e880
|
|
BLAKE2b-256 checksum How to use checksums |
859ff346e588134253f9dcd1eb8e3ca6ffdd928adbe76c922314828fe98d1181
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.
Transparency log