in python3/frodokem.py [0:0]
def encode(self, k):
"""Encode a bitstring (represented in Python as a bytes object) as a mod-q
integer matrix (FrodoKEM specification, Algorithm 1)"""
l = self.B * self.mbar * self.nbar
K = [[0 for j in range(self.nbar)] for i in range(self.mbar)]
kbits = FrodoKEM.__bytes_to_bit_array(k)
# 1. for i = 0; i < mbar; i += 1
for i in range(self.mbar):
# 2. for j = 0; j < nbar; j += 1
for j in range(self.nbar):
# 3. tmp = sum_{l=0}^{B-1} k_{(i*nbar+j)*B+l} 2^l
tmp = 0
for l in range(self.B):
if kbits[(i * self.nbar + j) * self.B + l]: tmp += 2 ** l
# 4. K[i][j] = ec(tmp) = tmp * q/2^B
K[i][j] = tmp * int(self.q / (2 ** self.B))
return K