in python3/frodokem.py [0:0]
def __init__(self, variant = "FrodoKEM-640-AES"):
"""Construct a new FrodoKEM instance
- variant: One of FrodoKEM-{640,976,1344}-{AES,SHAKE}"""
self.print_intermediate_values = False
self.variant = variant
self.randombytes = lambda k : bytes((secrets.randbits(8) for i in range(k)))
if variant == "FrodoKEM-640-AES":
self.setParamsFrodo640()
self.gen = self.genAES128
elif variant == "FrodoKEM-640-SHAKE":
self.setParamsFrodo640()
self.gen = self.genSHAKE128
elif variant == "FrodoKEM-976-AES":
self.setParamsFrodo976()
self.gen = self.genAES128
elif variant == "FrodoKEM-976-SHAKE":
self.setParamsFrodo976()
self.gen = self.genSHAKE128
elif variant == "FrodoKEM-1344-AES":
self.setParamsFrodo1344()
self.gen = self.genAES128
elif variant == "FrodoKEM-1344-SHAKE":
self.setParamsFrodo1344()
self.gen = self.genSHAKE128
else:
assert "Unknown variant"
warnings.warn("WARNING: This Python3 implementation of FrodoKEM is not designed to be fast or secure, and may leak secret information via timing or other side channels; it should not be used in production environments.")