Skip to content
This repository has been archived by the owner on Jan 21, 2025. It is now read-only.
/ pyky Public archive

CRYSTALS-Kyber (PQC KEM) in pure python

Notifications You must be signed in to change notification settings

asdfjkl/pyky

Repository files navigation

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 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 and the Go Implementation, 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. 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)

About

CRYSTALS-Kyber (PQC KEM) in pure python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages