def pack()

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