Metadata-Version: 2.2
Name: pyky
Version: 1.0.2
Summary: A Python implementation of Kyber Post-Quantum KEM
Home-page: https://github.com/asdfjkl/pyky
Author: Erhan
Author-email: erhan@example.com
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Requires-Dist: numpy
Requires-Dist: pycryptodome
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# NOT MAINTAINED ANYMORE

I wrote this implementation three years ago to understand Kyber - when it was a hot candidate to be selected in the NIST process. Meanwhile, there are 
other, better maintained implementations out there.

If you are looking for a clean, straight-forward and well-tested implementation of Kyber (now standardized as ML-KEM) I recommend the [Python](https://github.com/mjosaarinen/py-acvp-pqc) implementation of Markku-Juhani O. Saarinen.

# Crystals-Kyber in Python

## About

- just a toy implementation to better understand the algorithm
- all three 512, 768 and 1024 sec levels. 
- ported from the [reference](https://github.com/pq-crystals/kyber) and the [Go Implementation](https://github.com/kudelskisecurity/crystals-go), so not the fanciest Python code
- not hardened against (timing/other) side channel attacks
- test coverage is poor, use at your own risk

## How To Use

Just take a look at `ccakem.py`. Functions 

- `kem_keygenXXX()`, 
- `kem_encapsXXX(pubkey, seed=None)` and 
- `kem_decapsXXX(private_key, ciphertext)` 

correspond directly to the [spec](https://pq-crystals.org/). For `kem_encaps` you can optionally provide a custom `seed` which is useful for debugging.

Typical kem, e.g. 512 sec level, would be

````
priv, pub = kem_keygen512()
secret1, cipher = kem_encaps512(pub)
secret2 = kem_decaps512(priv, cipher)
````
