kyber_py.kyber package

Submodules

kyber_py.kyber.default_parameters module

kyber_py.kyber.default_parameters.DEFAULT_PARAMETERS = {'kyber_1024': {'du': 11, 'dv': 5, 'eta_1': 2, 'eta_2': 2, 'k': 4, 'q': 3329}, 'kyber_512': {'du': 10, 'dv': 4, 'eta_1': 3, 'eta_2': 2, 'k': 2}, 'kyber_768': {'du': 10, 'dv': 4, 'eta_1': 2, 'eta_2': 2, 'k': 3}}

Lattice parameters for the Kyber key exchange.

To be used for initialisation of Kyber objects.

kyber_py.kyber.default_parameters.Kyber1024 = <kyber_py.kyber.kyber.Kyber object>

Key exchange object that uses Kyber1024 parameters internally.

Provides about 256 bit level of security.

kyber_py.kyber.default_parameters.Kyber512 = <kyber_py.kyber.kyber.Kyber object>

Key exchange object that uses Kyber512 parameters internally.

Provides about 128 bit level of security.

kyber_py.kyber.default_parameters.Kyber768 = <kyber_py.kyber.kyber.Kyber object>

Key exchange object that uses Kyber768 parameters internally.

Provides about 192 bit level of security.

kyber_py.kyber.kyber module

class kyber_py.kyber.kyber.Kyber(parameter_set)

Bases: object

decaps(sk, c, key_length=32)

Decapsulate a key from a ciphertext using a secret key.

Algorithm 9 (CCA KEM Decapsulation) https://pq-crystals.org/kyber/data/kyber-specification-round3-20210804.pdf

NOTE:

We switch the order of the input (c, sk) as (sk, c) to align with FIPS 203

Parameters:
  • sk (bytes) – secret key

  • c (bytes) – ciphertext with an encapsulated key

  • key_length (int) – length of secret key, default value 32

Returns:

shared key

Return type:

bytes

encaps(pk, key_length=32)

Generate a random key, encapsulate it, return both it and ciphertext.

Algorithm 8 (CCA KEM Encapsulation) https://pq-crystals.org/kyber/data/kyber-specification-round3-20210804.pdf

NOTE:

We switch the order of the output (c, K) as (K, c) to align encaps output with FIPS 203.

Parameters:
  • pk (bytes) – byte-encoded public key

  • key_length (int) – length of secret key, default value 32

Returns:

a random key and a ciphertext of it

Return type:

tuple(bytes, bytes)

keygen()

Generate a public public key and private secret key.

Algorithm 7 (CCA KEM KeyGen) https://pq-crystals.org/kyber/data/kyber-specification-round3-20210804.pdf

Returns:

Tuple with public key and secret key.

Return type:

tuple(bytes, bytes)

set_drbg_seed(seed)

Change entropy source to a DRBG and seed it with provided value.

Setting the seed switches the entropy source from os.urandom() to an AES256 CTR DRBG.

Used for both deterministic versions of Kyber as well as testing alignment with the KAT vectors

Note:

currently requires pycryptodome for AES impl.

Parameters:

seed (bytes) – random bytes to seed the DRBG with

Module contents