def gen_trap(n,q,m): k = int(np.ceil(np.log2(q))) m0=m-n*k A0 = np.matrix(np.random.randint(0,q,(n,m0))) g = [int(2**i) for i in range(k)] G = np.kron(np.eye(n),g) s=4.7 #smoothing parameter of integer lattice for eps=2^(-100) = 4.7 gsamp = lambda i,j: gauss_samp_1D(s,0,n) vgsamp = np.vectorize(gsamp) R = np.matrix(np.fromfunction(vgsamp, (m0,n*k), dtype=int)) A = np.concatenate((A0,np.mod(G-A0*R,q)),axis=1) R = np.concatenate((R,np.eye(n*k)),axis=0) return A,R
def gen_trap_sis(n, mbar, q): k = int(np.ceil(np.log2(q))) a = np.matrix(np.array(np.random.randint(0,q,n*mbar))).reshape(mbar, n) s=4.7 #smoothing parameter of integer lattice for eps=2^(-200) = 6.6 gsamp = lambda i,j: gauss_samp_1D(s,0,n) vgsamp = np.vectorize(gsamp) R = np.array(np.fromfunction(vgsamp, (k*mbar,n), dtype=int)) g = [int(2**i) for i in range(k)] one = np.zeros(n) one[0]=1 A1 = np.vstack([np.array(g[i]*one - A_mult(q, a, R[i*mbar:(i+1)*mbar]).T) for i in range(k)]) A = np.vstack((a,A1)) return np.mod(A,q),R
def gen_trap(n, q, m): k = int(np.ceil(np.log2(q))) m0 = m - n * k A0 = np.matrix(np.random.randint(0, q, (n, m0))) g = [int(2**i) for i in range(k)] G = np.kron(np.eye(n), g) s = 4.7 #smoothing parameter of integer lattice for eps=2^(-100) = 4.7 gsamp = lambda i, j: gauss_samp_1D(s, 0, n) vgsamp = np.vectorize(gsamp) R = np.matrix(np.fromfunction(vgsamp, (m0, n * k), dtype=int)) A = np.concatenate((A0, np.mod(G - A0 * R, q)), axis=1) R = np.concatenate((R, np.eye(n * k)), axis=0) return A, R
def gen_trap_sis(n, mbar, q): k = int(np.ceil(np.log2(q))) a = np.matrix(np.array(np.random.randint(0, q, n * mbar))).reshape(mbar, n) s = 4.7 #smoothing parameter of integer lattice for eps=2^(-200) = 6.6 gsamp = lambda i, j: gauss_samp_1D(s, 0, n) vgsamp = np.vectorize(gsamp) R = np.array(np.fromfunction(vgsamp, (k * mbar, n), dtype=int)) g = [int(2**i) for i in range(k)] one = np.zeros(n) one[0] = 1 A1 = np.vstack([ np.array(g[i] * one - A_mult(q, a, R[i * mbar:(i + 1) * mbar]).T) for i in range(k) ]) A = np.vstack((a, A1)) return np.mod(A, q), R
def gen_trap_lwe(n,q): k = int(np.ceil(np.log2(q))) a1 = np.array(np.random.randint(0,q,n)) s=4.7 #smoothing parameter of integer lattice for eps=2^(-200) = 6.6 gsamp = lambda i,j: gauss_samp_1D(s,0,n) vgsamp = np.vectorize(gsamp) R = np.matrix(np.fromfunction(vgsamp, (k,n), dtype=int)) E = np.matrix(np.fromfunction(vgsamp, (k,n), dtype=int)) g = [int(2**i) for i in range(k)] one = np.zeros(n) one[0]=1 rota1=Rot(np.matrix(a1)) A1 = np.vstack([np.array(g[i]*one - (np.dot(rota1,R[i].T).T +E[i])) for i in range(k)]) one = np.zeros(n) one[0]=1 A0 = np.vstack((np.matrix(one),np.matrix(a1))) A = np.vstack((A0,A1)) return np.mod(A,q),R,E
def gen_trap_lwe(n, q): k = int(np.ceil(np.log2(q))) a1 = np.array(np.random.randint(0, q, n)) s = 4.7 #smoothing parameter of integer lattice for eps=2^(-200) = 6.6 gsamp = lambda i, j: gauss_samp_1D(s, 0, n) vgsamp = np.vectorize(gsamp) R = np.matrix(np.fromfunction(vgsamp, (k, n), dtype=int)) E = np.matrix(np.fromfunction(vgsamp, (k, n), dtype=int)) g = [int(2**i) for i in range(k)] one = np.zeros(n) one[0] = 1 rota1 = Rot(np.matrix(a1)) A1 = np.vstack([ np.array(g[i] * one - (np.dot(rota1, R[i].T).T + E[i])) for i in range(k) ]) one = np.zeros(n) one[0] = 1 A0 = np.vstack((np.matrix(one), np.matrix(a1))) A = np.vstack((A0, A1)) return np.mod(A, q), R, E