[](https://pypi.org/project/mlkem/)
[](https://mlkem.readthedocs.io/en/latest/?badge=latest)
# Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM)
An implementation of the module-lattice-based key encapsulation mechanism (ML-KEM)
as described in [FIPS-203](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.pdf).
At this time the package is in alpha and _SHOULD NOT_ be considered for real-world
cryptographic applications.
# Usage
The package includes includes a pure python implementation of the K-PKE function
(`mlkem.k_pke.K_PKE`) and an implementation that leverages C extensions
(`mlkem.fast_k_pke.Fast_K_PKE`). The implementations have interchangeable interfaces
and can be selected in their wrapper class `mlkem.ml_kem.ML_KEM` by setting the
`fast` param to `True` for C extensions and `False` for pure python e.g.
```python
from mlkem.ml_kem import ML_KEM
from mlkem.parameter_set import ML_KEM_768
ML_KEM(ML_KEM_768, fast=True) # C extensions
ML_KEM(ML_KEM_768, fast=False) # Pure python
```
Both implementations are self contained and portable (assuming you have 8 bits per byte
on your system) with no dependencies on third party libraries in either the C or python
code.
NIST recommends the ML-KEM-768 parameter set, which offers 192 bit security. ML-KEM-512
and ML-KEM-1024 are also available, which provide 128 and 256 bit security respectively.
ML-KEM-768 is used by default in this package. Thus, the two instantiations below are
equivalent -
```python
from mlkem.ml_kem import ML_KEM
from mlkem.parameter_set import ML_KEM_768
ML_KEM()
ML_KEM(ML_KEM_768, fast=True)
```
The interface follows the one defined in section 7 of the standard for the functions KeyGen,
Encaps and Decaps.
```python
from mlkem.ml_kem import ML_KEM
ml_kem = ML_KEM()
ek, dk = ml_kem.key_gen() # encapsulation and decapsulation key
k, c = ml_kem.encaps(ek) # shared secret key and ciphertext
k_ = ml_kem.decaps(dk, c) # shared secret key
```
In a less contrived scenario, Alice might run KeyGen and send the encapsulation key
to Bob. Bob would then run Encaps and generate a shared secret key and a ciphertext.
Bob would send the ciphertext to Alice, who would derive the shared secret key from the
ciphertext. Alice and Bob can then use the shared secret key to generate additional
secret material by passing it to a KDF, use the shared secret to directly key a symmetric
cipher like AES, etc.
# Development
As a prerequisite, `uv` is required for this project
pip install uv
Build the C extensions
uv run python setup.py build_ext --inplace
Run the test suite
uv run pytest
Build the docs
uv run make -C docs html
# Performance
Below are some benchmarks for each parameter set, running on an 2021 M1 MacBook Pro and python3.13
```
===== C Extensions =====
1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_512 took 0.544 seconds
1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_768 took 0.794 seconds
1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_1024 took 1.095 seconds
===== Pure Python =====
1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_512 took 32.670 seconds
1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_768 took 51.277 seconds
1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_1024 took 72.187 seconds
```
You can also run the benchmark yourself as well
```bash
uv run benchmark # for local development
python -m mlkem.benchmark # for pip installed package
```
The performance of the C extensions is _significantly_ faster (benchmark shows ~60-70x). The python implementation is
primarily included for those that wish to explore and interactively debug the algorithm using pure python tooling.
Raw data
{
"_id": null,
"home_page": null,
"name": "mlkem",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "post-quantum, cryptography, fip-203, kyber, crystals, module-lattice-based, key-encapsulation, mechanism",
"author": null,
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/f6/03/8e67bd59d0f626c5393d180f6aa88d75324cffda4aaba85f34e41f7ec322/mlkem-0.0.3.tar.gz",
"platform": null,
"description": "[](https://pypi.org/project/mlkem/)\n[](https://mlkem.readthedocs.io/en/latest/?badge=latest)\n\n# Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM)\nAn implementation of the module-lattice-based key encapsulation mechanism (ML-KEM)\nas described in [FIPS-203](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.pdf).\nAt this time the package is in alpha and _SHOULD NOT_ be considered for real-world\ncryptographic applications.\n\n# Usage\n\nThe package includes includes a pure python implementation of the K-PKE function\n(`mlkem.k_pke.K_PKE`) and an implementation that leverages C extensions\n(`mlkem.fast_k_pke.Fast_K_PKE`). The implementations have interchangeable interfaces\nand can be selected in their wrapper class `mlkem.ml_kem.ML_KEM` by setting the\n`fast` param to `True` for C extensions and `False` for pure python e.g.\n\n```python\nfrom mlkem.ml_kem import ML_KEM\nfrom mlkem.parameter_set import ML_KEM_768\n\nML_KEM(ML_KEM_768, fast=True) # C extensions\nML_KEM(ML_KEM_768, fast=False) # Pure python\n```\n\nBoth implementations are self contained and portable (assuming you have 8 bits per byte\non your system) with no dependencies on third party libraries in either the C or python\ncode.\n\nNIST recommends the ML-KEM-768 parameter set, which offers 192 bit security. ML-KEM-512\nand ML-KEM-1024 are also available, which provide 128 and 256 bit security respectively.\nML-KEM-768 is used by default in this package. Thus, the two instantiations below are\nequivalent -\n\n```python\nfrom mlkem.ml_kem import ML_KEM\nfrom mlkem.parameter_set import ML_KEM_768\n\nML_KEM()\nML_KEM(ML_KEM_768, fast=True)\n```\n\nThe interface follows the one defined in section 7 of the standard for the functions KeyGen,\nEncaps and Decaps.\n\n```python\nfrom mlkem.ml_kem import ML_KEM\n\nml_kem = ML_KEM()\nek, dk = ml_kem.key_gen() # encapsulation and decapsulation key\nk, c = ml_kem.encaps(ek) # shared secret key and ciphertext\nk_ = ml_kem.decaps(dk, c) # shared secret key\n```\n\nIn a less contrived scenario, Alice might run KeyGen and send the encapsulation key\nto Bob. Bob would then run Encaps and generate a shared secret key and a ciphertext.\nBob would send the ciphertext to Alice, who would derive the shared secret key from the\nciphertext. Alice and Bob can then use the shared secret key to generate additional\nsecret material by passing it to a KDF, use the shared secret to directly key a symmetric\ncipher like AES, etc.\n\n# Development\n\nAs a prerequisite, `uv` is required for this project\n\n pip install uv\n\nBuild the C extensions\n\n uv run python setup.py build_ext --inplace\n\nRun the test suite\n\n uv run pytest\n\nBuild the docs\n\n uv run make -C docs html\n\n# Performance\n\nBelow are some benchmarks for each parameter set, running on an 2021 M1 MacBook Pro and python3.13\n```\n===== C Extensions =====\n1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_512 took 0.544 seconds\n1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_768 took 0.794 seconds\n1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_1024 took 1.095 seconds\n===== Pure Python =====\n1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_512 took 32.670 seconds\n1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_768 took 51.277 seconds\n1000 KeyGen, Encaps and Decaps operations with parameter set ML_KEM_1024 took 72.187 seconds\n```\n\nYou can also run the benchmark yourself as well\n\n```bash\nuv run benchmark # for local development\npython -m mlkem.benchmark # for pip installed package\n```\n\nThe performance of the C extensions is _significantly_ faster (benchmark shows ~60-70x). The python implementation is\nprimarily included for those that wish to explore and interactively debug the algorithm using pure python tooling.\n",
"bugtrack_url": null,
"license": null,
"summary": "A module-latice-based key-encapsulation mechanism (ML-KEM). Implements the FIPS-203 standard.",
"version": "0.0.3",
"project_urls": {
"docs": "https://mlkem.readthedocs.io",
"pypi": "https://pypi.org/project/mlkem",
"repo": "https://github.com/AntonKueltz/ml-kem"
},
"split_keywords": [
"post-quantum",
" cryptography",
" fip-203",
" kyber",
" crystals",
" module-lattice-based",
" key-encapsulation",
" mechanism"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "83b65410502a0df2e9846d84de33edb65e0d32d8bdd1443ce59e26c317073507",
"md5": "fd0a0e4ad31f5fe8643e9581f3e79542",
"sha256": "b41159cb70acb6435d0fcd635f51a9f35fdcb6acffaf088c5532030a2ff4c631"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp311-cp311-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "fd0a0e4ad31f5fe8643e9581f3e79542",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 47787,
"upload_time": "2025-02-08T20:08:17",
"upload_time_iso_8601": "2025-02-08T20:08:17.749132Z",
"url": "https://files.pythonhosted.org/packages/83/b6/5410502a0df2e9846d84de33edb65e0d32d8bdd1443ce59e26c317073507/mlkem-0.0.3-cp311-cp311-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ff6b006b07317f9dfad7c65c71052a1457470e099a6406dff06cd9572651b4d9",
"md5": "88d9ceec3fdc05497a565d3d5155e4d6",
"sha256": "b74077d1ad9b39313d4552dd01f1fd98de6f7223ef2f0795a685a328993a2baf"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp311-cp311-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "88d9ceec3fdc05497a565d3d5155e4d6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 46874,
"upload_time": "2025-02-08T20:08:20",
"upload_time_iso_8601": "2025-02-08T20:08:20.278912Z",
"url": "https://files.pythonhosted.org/packages/ff/6b/006b07317f9dfad7c65c71052a1457470e099a6406dff06cd9572651b4d9/mlkem-0.0.3-cp311-cp311-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e0e55d2c3b98ce2bf5caf1a1a18c3a61423df034c985f93d45aa099b0c17ced5",
"md5": "85df649a69462d1b53603b0ba73b9afc",
"sha256": "984b6de2e98f2f9f02cfecda85bc00e721cf1809aa0dca311809038f0919e43d"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "85df649a69462d1b53603b0ba73b9afc",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 49985,
"upload_time": "2025-02-08T20:08:22",
"upload_time_iso_8601": "2025-02-08T20:08:22.079690Z",
"url": "https://files.pythonhosted.org/packages/e0/e5/5d2c3b98ce2bf5caf1a1a18c3a61423df034c985f93d45aa099b0c17ced5/mlkem-0.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "93d18659be4e2d62e13d0eff17d7980a4fb2bd9005fc5f3941d429527f4544fb",
"md5": "9e8007c346762bb29d1e33e1b6e0f3f7",
"sha256": "c04fa029e1426eea2d7c7a78c8042ef10069f1ef77def2e288c9a52aba559a42"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "9e8007c346762bb29d1e33e1b6e0f3f7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 52706,
"upload_time": "2025-02-08T20:08:25",
"upload_time_iso_8601": "2025-02-08T20:08:25.554819Z",
"url": "https://files.pythonhosted.org/packages/93/d1/8659be4e2d62e13d0eff17d7980a4fb2bd9005fc5f3941d429527f4544fb/mlkem-0.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8f3cfc2fae023b315792ffe8a1033b9e842a6f8b5007fc71caed69c91485bc11",
"md5": "112b37446630a4126a4c30ca27f5e833",
"sha256": "7bdb975a91dca94ef693808a8c2a28939fb92d30e51a480c75725fac65a02cc7"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp311-cp311-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "112b37446630a4126a4c30ca27f5e833",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 50936,
"upload_time": "2025-02-08T20:08:27",
"upload_time_iso_8601": "2025-02-08T20:08:27.599304Z",
"url": "https://files.pythonhosted.org/packages/8f/3c/fc2fae023b315792ffe8a1033b9e842a6f8b5007fc71caed69c91485bc11/mlkem-0.0.3-cp311-cp311-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3fb535a4a6563c1096c07c4740a2e2c5a30b45bf5c9b1f0342cd2d0ba3205e06",
"md5": "24dcd5b8622016a350160d1c2be3a31c",
"sha256": "ccee9b5803abc004e2e60b48fa9d6bf68426ca26d7fa04de78be67764a71ab2f"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "24dcd5b8622016a350160d1c2be3a31c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 53265,
"upload_time": "2025-02-08T20:08:28",
"upload_time_iso_8601": "2025-02-08T20:08:28.893277Z",
"url": "https://files.pythonhosted.org/packages/3f/b5/35a4a6563c1096c07c4740a2e2c5a30b45bf5c9b1f0342cd2d0ba3205e06/mlkem-0.0.3-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f3d0c361b331aec720870ad31cb36c0a23c5791ac49a936660386c31c3d3ada4",
"md5": "63efdcec08b3eddf1adb5f2d9bcef803",
"sha256": "c208d55256f8480216e11771f3d47a84416ad42c0892ba282cf7d943ce85e68a"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "63efdcec08b3eddf1adb5f2d9bcef803",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 34886,
"upload_time": "2025-02-08T20:08:30",
"upload_time_iso_8601": "2025-02-08T20:08:30.256776Z",
"url": "https://files.pythonhosted.org/packages/f3/d0/c361b331aec720870ad31cb36c0a23c5791ac49a936660386c31c3d3ada4/mlkem-0.0.3-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e1e8ce7e567b2647a153f0129e1a525a78215b94e6e9b79d4d8f107e406deaa3",
"md5": "d16c39244e07b9160981910685b7f925",
"sha256": "97cbc6a4080c24db79ee248b72095610c7e2d86a39d3db7dd5611e1b5ace1ea0"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "d16c39244e07b9160981910685b7f925",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 38034,
"upload_time": "2025-02-08T20:08:31",
"upload_time_iso_8601": "2025-02-08T20:08:31.519942Z",
"url": "https://files.pythonhosted.org/packages/e1/e8/ce7e567b2647a153f0129e1a525a78215b94e6e9b79d4d8f107e406deaa3/mlkem-0.0.3-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c3b7988b20075949ba588b8df50c6766834009d8ebfbe24327e975019b3af34e",
"md5": "e4125ebd5f15d98c15a30aef8ef66b71",
"sha256": "74b548049cc60a7652709d5c5c8ce6177f37f9999f6d91ead3b2014d18ffcbc5"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp312-cp312-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "e4125ebd5f15d98c15a30aef8ef66b71",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 47790,
"upload_time": "2025-02-08T20:08:32",
"upload_time_iso_8601": "2025-02-08T20:08:32.713976Z",
"url": "https://files.pythonhosted.org/packages/c3/b7/988b20075949ba588b8df50c6766834009d8ebfbe24327e975019b3af34e/mlkem-0.0.3-cp312-cp312-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f723323f95705c25f3328a8e18c056385faefcb9ad839c23a86405e2d936599e",
"md5": "3dd1281af15663f20239eb747e09f4b6",
"sha256": "df1cd27ae29088c9f4a77e018af9d8701f8efe12c32495baefb05a77aca73a88"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp312-cp312-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "3dd1281af15663f20239eb747e09f4b6",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 46875,
"upload_time": "2025-02-08T20:08:34",
"upload_time_iso_8601": "2025-02-08T20:08:34.696016Z",
"url": "https://files.pythonhosted.org/packages/f7/23/323f95705c25f3328a8e18c056385faefcb9ad839c23a86405e2d936599e/mlkem-0.0.3-cp312-cp312-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "088742b3557467fc6da42b697503878160cea2fa72745903e69a6a68367d61e1",
"md5": "3702efc35cede75f7fdac75372de62f2",
"sha256": "e99535bed4ce7a667a584041fc60504af52cee6eb42f9059083ae9f70e591a8d"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "3702efc35cede75f7fdac75372de62f2",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 50083,
"upload_time": "2025-02-08T20:08:36",
"upload_time_iso_8601": "2025-02-08T20:08:36.649817Z",
"url": "https://files.pythonhosted.org/packages/08/87/42b3557467fc6da42b697503878160cea2fa72745903e69a6a68367d61e1/mlkem-0.0.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bbb08e9ae037b596308d4254be44a9a224a71146affa0f47f20bffe5f6955bcc",
"md5": "64a4d410f566500d49c48439fd217017",
"sha256": "4dd10a46246dd56c1f5b5704a4d60eb4eb8f4e78fa516538fd4f0e41499c17cc"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "64a4d410f566500d49c48439fd217017",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 52829,
"upload_time": "2025-02-08T20:08:38",
"upload_time_iso_8601": "2025-02-08T20:08:38.707235Z",
"url": "https://files.pythonhosted.org/packages/bb/b0/8e9ae037b596308d4254be44a9a224a71146affa0f47f20bffe5f6955bcc/mlkem-0.0.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "97f801c8185e785dd584422e0295680341047d6b6bc27ccecef4f8ec643d5083",
"md5": "0e194c6956e1ea675357b907db801f31",
"sha256": "32047669c77dcad3bd6ac1ad3a528ca74580af829a5407beb232df6284689e99"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp312-cp312-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "0e194c6956e1ea675357b907db801f31",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 51012,
"upload_time": "2025-02-08T20:08:41",
"upload_time_iso_8601": "2025-02-08T20:08:41.152591Z",
"url": "https://files.pythonhosted.org/packages/97/f8/01c8185e785dd584422e0295680341047d6b6bc27ccecef4f8ec643d5083/mlkem-0.0.3-cp312-cp312-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a33a27a29a03a2ee46d7d3e449507dae834e927bb54a300c4b5171d8eaa018e2",
"md5": "2e3ae5a9d4bc5481bd8eac2ca99ffa68",
"sha256": "035a393260739fb7115b32d6c51fe09420266e73977186a16546e79430bb75b8"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "2e3ae5a9d4bc5481bd8eac2ca99ffa68",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 53398,
"upload_time": "2025-02-08T20:08:43",
"upload_time_iso_8601": "2025-02-08T20:08:43.064045Z",
"url": "https://files.pythonhosted.org/packages/a3/3a/27a29a03a2ee46d7d3e449507dae834e927bb54a300c4b5171d8eaa018e2/mlkem-0.0.3-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "563139205ff3fe19dd3aded63d762dadf8698df49ebe0c42e2914a4e576b11a7",
"md5": "183c53629371fca123914e1ce50e0e8e",
"sha256": "9fcce6bd6fc460b39b1c756903a714a8f682fb34614c16e93eb2e8a653facbd5"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "183c53629371fca123914e1ce50e0e8e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 34888,
"upload_time": "2025-02-08T20:08:44",
"upload_time_iso_8601": "2025-02-08T20:08:44.368123Z",
"url": "https://files.pythonhosted.org/packages/56/31/39205ff3fe19dd3aded63d762dadf8698df49ebe0c42e2914a4e576b11a7/mlkem-0.0.3-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ba98bd4c50f8be2ca7665884073b90437e1b5b6b61f9bb0e8b683ce5699833ac",
"md5": "3208e2178eaa396e4c284dbcc7122424",
"sha256": "362e0250e169cc08e6aad06e99e8a8e75bcfd34c7a82d8e917fec161a4c2fafe"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "3208e2178eaa396e4c284dbcc7122424",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 38031,
"upload_time": "2025-02-08T20:08:45",
"upload_time_iso_8601": "2025-02-08T20:08:45.592253Z",
"url": "https://files.pythonhosted.org/packages/ba/98/bd4c50f8be2ca7665884073b90437e1b5b6b61f9bb0e8b683ce5699833ac/mlkem-0.0.3-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "65dfaf36e719e355da8ebd35c45a7f7997efa44ae8b57da7821920410e33d4f7",
"md5": "0c2e93cb68885dfcb8a48cbd8e303afd",
"sha256": "aa4f6524cf0d846875082eb9a66876df90f9215776163db8f007be36b82e2a3d"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp313-cp313-macosx_13_0_x86_64.whl",
"has_sig": false,
"md5_digest": "0c2e93cb68885dfcb8a48cbd8e303afd",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 47794,
"upload_time": "2025-02-08T20:08:49",
"upload_time_iso_8601": "2025-02-08T20:08:49.793378Z",
"url": "https://files.pythonhosted.org/packages/65/df/af36e719e355da8ebd35c45a7f7997efa44ae8b57da7821920410e33d4f7/mlkem-0.0.3-cp313-cp313-macosx_13_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ec8c88233a37c6c390689ed03ad34d8650b97674e19b8eace00af354fc97e631",
"md5": "2748486fe05087618bce5585e13697ae",
"sha256": "5304c7fc44a021ae0c1f4adbeea8d0c224cbf68eea6611c97619b8fb9f7a8a62"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp313-cp313-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "2748486fe05087618bce5585e13697ae",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 46875,
"upload_time": "2025-02-08T20:08:51",
"upload_time_iso_8601": "2025-02-08T20:08:51.024689Z",
"url": "https://files.pythonhosted.org/packages/ec/8c/88233a37c6c390689ed03ad34d8650b97674e19b8eace00af354fc97e631/mlkem-0.0.3-cp313-cp313-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2f22e98aace507c4b221478339e793c08b23580cca15e62f9629f351f74dc884",
"md5": "e9a90b5a2c6457543db108e2a212ae03",
"sha256": "8b836e64e621a68d36a96c61113b450aeb4d6e74ffa35f44f4d91c28c753c94c"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "e9a90b5a2c6457543db108e2a212ae03",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 50021,
"upload_time": "2025-02-08T20:08:53",
"upload_time_iso_8601": "2025-02-08T20:08:53.001974Z",
"url": "https://files.pythonhosted.org/packages/2f/22/e98aace507c4b221478339e793c08b23580cca15e62f9629f351f74dc884/mlkem-0.0.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9584c48f83e967c365f559d992953991f4b7907c7db867379a81828e59c8c19e",
"md5": "19ef8074d421176a850f63f47144e9c7",
"sha256": "b631e0615315ab1fdb3e30a2f1421de4309273c5c39b2885559aadcb26618264"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "19ef8074d421176a850f63f47144e9c7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 52766,
"upload_time": "2025-02-08T20:08:54",
"upload_time_iso_8601": "2025-02-08T20:08:54.319409Z",
"url": "https://files.pythonhosted.org/packages/95/84/c48f83e967c365f559d992953991f4b7907c7db867379a81828e59c8c19e/mlkem-0.0.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2f1394c2776301e194bb570fbbc23ac3914897c26c74f7d7178e81367028c641",
"md5": "8fc1840c544f248f4b6313a67c683323",
"sha256": "3c7931c3a3da10a9ba2cc707322924948f10cd1439a6c0424cce155c9f6175db"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp313-cp313-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "8fc1840c544f248f4b6313a67c683323",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 51047,
"upload_time": "2025-02-08T20:08:56",
"upload_time_iso_8601": "2025-02-08T20:08:56.368625Z",
"url": "https://files.pythonhosted.org/packages/2f/13/94c2776301e194bb570fbbc23ac3914897c26c74f7d7178e81367028c641/mlkem-0.0.3-cp313-cp313-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3d516753f95ba8c51935200e2219347d15fd44888abeccfb5991e1c21f245380",
"md5": "ef6a3cbc2e8b0cf3bd2eee0d9f75f5c6",
"sha256": "25f437b4d3e448c608d53971f869c22a9ecd105bcc9bb4dd5f4a22a30455c535"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "ef6a3cbc2e8b0cf3bd2eee0d9f75f5c6",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 53408,
"upload_time": "2025-02-08T20:08:57",
"upload_time_iso_8601": "2025-02-08T20:08:57.627840Z",
"url": "https://files.pythonhosted.org/packages/3d/51/6753f95ba8c51935200e2219347d15fd44888abeccfb5991e1c21f245380/mlkem-0.0.3-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ac1bac5484aae6e31f70544fb6ff1944970b8ab7bb367cfae59b0325a8c7069d",
"md5": "54e5e21915b48c842f3d75aba517c076",
"sha256": "7e3a7cbe1fc0021cce6b542c3fc4a76fd3514452f33d4d2620eba00d155fa5ed"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp313-cp313-win32.whl",
"has_sig": false,
"md5_digest": "54e5e21915b48c842f3d75aba517c076",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 34883,
"upload_time": "2025-02-08T20:08:59",
"upload_time_iso_8601": "2025-02-08T20:08:59.636102Z",
"url": "https://files.pythonhosted.org/packages/ac/1b/ac5484aae6e31f70544fb6ff1944970b8ab7bb367cfae59b0325a8c7069d/mlkem-0.0.3-cp313-cp313-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "374b082a55b29b348a3a529d9cb7ce98990f0690dd91d2325152d7105b3135fe",
"md5": "03a83eae7394f04eb65f953b145b93c4",
"sha256": "6dd57be85f4316960389ecd10afc83fce127ff96d760e0326dfdf2eb16215743"
},
"downloads": -1,
"filename": "mlkem-0.0.3-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "03a83eae7394f04eb65f953b145b93c4",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 38034,
"upload_time": "2025-02-08T20:09:01",
"upload_time_iso_8601": "2025-02-08T20:09:01.624912Z",
"url": "https://files.pythonhosted.org/packages/37/4b/082a55b29b348a3a529d9cb7ce98990f0690dd91d2325152d7105b3135fe/mlkem-0.0.3-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f6038e67bd59d0f626c5393d180f6aa88d75324cffda4aaba85f34e41f7ec322",
"md5": "de864932cc3785d225ca5ed077f49bda",
"sha256": "8bd425a2d7ffd1e948a238516f59abd60d729610f2e9d215ca7fd8d6b815a34a"
},
"downloads": -1,
"filename": "mlkem-0.0.3.tar.gz",
"has_sig": false,
"md5_digest": "de864932cc3785d225ca5ed077f49bda",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 800904,
"upload_time": "2025-02-08T20:09:03",
"upload_time_iso_8601": "2025-02-08T20:09:03.056573Z",
"url": "https://files.pythonhosted.org/packages/f6/03/8e67bd59d0f626c5393d180f6aa88d75324cffda4aaba85f34e41f7ec322/mlkem-0.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-08 20:09:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "AntonKueltz",
"github_project": "ml-kem",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "mlkem"
}