in python3/frodokem.py [0:0]
def pack(self, C):
"""Pack a matrix mod q into a bitstring (represented in Python as a bytes
object) (FrodoKEM specification, Algorithm 3)"""
n1 = len(C)
n2 = len(C[0])
b = bitstring.BitArray(self.D * n1 * n2)
# 1. for i = 0; i < n1; i += 1
for i in range(n1):
# for j = 0; j < n2; j += 1
for j in range(n2):
# 3. Cij = sum_{l=0}^{D-1} c_l * 2^l
tmp = C[i][j]
c = [0 for l in range(self.D)]
for l in range(self.D):
c[l] = tmp % 2
tmp >>= 1
# 4. for l = 0; l < D; L += 1
for l in range(self.D):
# 5. b[(i * n2 + j) * D + l] = c[D - 1 - l]
b[(i * n2 + j) * self.D + l] = c[self.D - 1 - l]
return b.bytes