Example #1
0
def BU(A, B, P):  #radix-2 butterfly unit
    tmp_ay = np.zeros((1, 2), dtype=int)  #tmp_array
    tmp_a = Mod.AddMod(A, B, P)
    tmp_b = Mod.SubMod(A, B, P)
    tmp_ay[0][0] = tmp_a  #a+b
    tmp_ay[0][1] = tmp_b  #a-b
    return tmp_ay
Example #2
0
def NTT(x,ROU,prime,n,inverse): #output is a numpy array
    IN = Mod.InvMod(n,prime)    # calculate inverse multiplication of n
    x = x % prime
    y_list = []
    for i in range(n):
        acm = 0                             #accumlation 
        for j in range(n):
            exp = Mod.MulMod(i,j,n)          #calculates power of i*j
            tmp = Mod.ExpMod(ROU,exp,prime)  #calculates w^(i*j)
            tmp = Mod.MulMod(x[j],tmp,prime) #calculate x[j]w^(ij)
            acm = Mod.AddMod(acm,tmp,prime)  
        y_list.append(acm)
    y = np.array(y_list)
    if(inverse == 1):
        y = y * IN
        y = y % prime
    return y