def ntru_plain_hybrid_basis(A, g, q, nsamples): """ Construct ntru basis for the MitM hybrid """ n = A.ncols ell = n - g B = IntegerMatrix(nsamples + ell, nsamples + ell) for i in range(ell): B[i, i] = 1 for j in range(nsamples): B[i, j + ell] = A[i, j] for i in range(nsamples): B[i + ell, i + ell] = q # print('B:') # print(B) Al = B.submatrix(0, ell, ell, ell + nsamples) Ag = A.submatrix(ell, 0, nsamples, nsamples) B = LLL.reduction(B) return B, Al, Ag