Exemple #1
0
def gauss_samp(B, sigma, mean, n, q):
    Bg = gramschmidt.gs(B)
    current_center =  mean

    e = np.zeros(n)

    #print max([np.linalg.norm(np.array(Bg[:,i].T)[0]) for i in  range(n)])
    print B
    #print sigma
    # iterate i = n - 1 ... 0
    for i in range(0,n)[::-1]:

        # get the i^th gram schmidt vector
        bg_i = np.array(Bg[:,i].T)[0]

        cp_i = np.dot(current_center.T, bg_i) / np.dot(bg_i, bg_i)
        sp_i = sigma/np.linalg.norm(bg_i)

        #print "s_i, c_i: ", sp_i, cp_i
        z_i = gauss_samp_1D(sp_i, cp_i, n) % q

        # get the i^th basis vector
        b_i = np.array(B[:,i].T)[0]

        zb = z_i*b_i

        e = np.mod(np.add(e, zb), q)

        current_center = np.mod(np.subtract(current_center, zb), q)
    return e
Exemple #2
0
def gauss_samp(B, sigma, mean, n, q):
    Bg = gramschmidt.gs(B)
    current_center = mean

    e = np.zeros(n)

    #print max([np.linalg.norm(np.array(Bg[:,i].T)[0]) for i in  range(n)])
    print B
    #print sigma
    # iterate i = n - 1 ... 0
    for i in range(0, n)[::-1]:

        # get the i^th gram schmidt vector
        bg_i = np.array(Bg[:, i].T)[0]

        cp_i = np.dot(current_center.T, bg_i) / np.dot(bg_i, bg_i)
        sp_i = sigma / np.linalg.norm(bg_i)

        #print "s_i, c_i: ", sp_i, cp_i
        z_i = gauss_samp_1D(sp_i, cp_i, n) % q

        # get the i^th basis vector
        b_i = np.array(B[:, i].T)[0]

        zb = z_i * b_i

        e = np.mod(np.add(e, zb), q)

        current_center = np.mod(np.subtract(current_center, zb), q)
    return e
Exemple #3
0
        W = np.concatenate((W,nextrow),axis=0)
    return W[1:]

def trapdoor_G(n,q,k):
    Tg = np.diagflat(2*np.ones(k))+np.diagflat(-1*np.ones(k-1),-1)
    Tg[:,-1] = [int(b) for b in np.binary_repr(q,k)[::-1]]
    T = np.kron(np.eye(n),Tg)
    return T

def gen_basis(n, q, m, A, R):
    k = int(np.ceil(np.log2(q)))
    m0=m-n*k
    M1 = np.concatenate((np.concatenate((np.eye(m0),np.zeros((n*k,m0))),axis=0),R),axis=1)
    Tg = trapdoor_G(n,q,k)
    A0 = np.mod(-A[:,:m0],q)
    W = binary_decomp(A0,k)
    M2 = np.concatenate((np.concatenate((np.eye(m0),W),axis=0),np.concatenate((np.zeros((m0,n*k)),Tg),axis=0)),axis=1)
    return np.mod(M1*M2,q)

if __name__ == "__main__":
    n=32
    q=2053
    k=int(np.ceil(np.log2(q)))
    m=2*n*k
    A,R = gen_trap(n,q,m)
    B = gen_basis(n,q,m,A,R)
    print np.amax(np.amax(np.mod(A*B,q)))

    Bg = gramschmidt.gs(B)
    print "Max Gram-Schmidt: ", max([np.linalg.norm(np.array(Bg[:,i].T)[0]) for i in  range(m)])
Exemple #4
0
    return T


def gen_basis(n, q, m, A, R):
    k = int(np.ceil(np.log2(q)))
    m0 = m - n * k
    M1 = np.concatenate((np.concatenate(
        (np.eye(m0), np.zeros((n * k, m0))), axis=0), R),
                        axis=1)
    Tg = trapdoor_G(n, q, k)
    A0 = np.mod(-A[:, :m0], q)
    W = binary_decomp(A0, k)
    M2 = np.concatenate((np.concatenate((np.eye(m0), W), axis=0),
                         np.concatenate((np.zeros((m0, n * k)), Tg), axis=0)),
                        axis=1)
    return np.mod(M1 * M2, q)


if __name__ == "__main__":
    n = 32
    q = 2053
    k = int(np.ceil(np.log2(q)))
    m = 2 * n * k
    A, R = gen_trap(n, q, m)
    B = gen_basis(n, q, m, A, R)
    print np.amax(np.amax(np.mod(A * B, q)))

    Bg = gramschmidt.gs(B)
    print "Max Gram-Schmidt: ", max(
        [np.linalg.norm(np.array(Bg[:, i].T)[0]) for i in range(m)])