def share_generation(k, m, n, l=None, pub_inf=None): #k degree, m members, n identities, n >=m, modulus is 2l bits long if l == None: s = safePrime() else: s = safePrime(l) mod = s.get_modulus() A = random_polynomial(k, randint(0, mod - 1), mod) #the second parameter means secret #A = [985, 254, 1957, 312] #print "f_i" + str(A) P = Polynomial(A, mod, n) ''' for i in range(1,n+1): print P.value(i) ''' S = [] if pub_inf == None: pub_inf = range(1, n + 1) inverseOfnminus1 = mod_inverse(n - 1, s.get_eular()) for i in range(n): c = s.sqaure_and_multiply(P.value(pub_inf[i]), inverseOfnminus1) S.append(share_Polynomial(P.get_mul_value(c), mod, n, i)) return A, S
#time for calculation of s_i(x)=f(i)^{1/(n-1)}f(x) with i = n/2, RSA modulus 1024 bits start = timeit.default_timer() inverseOfnminus1 = mod_inverse(n-1, phi_1) stop = timeit.default_timer() t_inverse_1 = stop-start start = timeit.default_timer() c11 = sqaure_and_multiply(n1,P11.value(pub_inf[n/2]), inverseOfnminus1) s11_ = [(c11*i % n1)for i in f11] stop = timeit.default_timer() print "n=%d"%n, print "time for calculation of s_i(x)=f(i)^{1/(n-1)}f(x) with i = n/2, RSA modulus 1024 bits degree k = 10 is " print stop-start+t_inverse_1, " seconds" f.write(str(stop-start+t_inverse_1)) f.write('\n') s11=share_Polynomial(P11.get_mul_value(c11),n1,n, n/2) #time for evaluation of s_i(x)=f(i)^{1/(n-1)}f(x) with x = n/2+1 and i = n/2 start = timeit.default_timer() s11.value(n/2+1) stop = timeit.default_timer() print "n=%d"%n, print "time for evaluation of s_i(x)=f(i)^{1/(n-1)}f(x) with i = n/2, x = n/2+1, RSA modulus 1024 bits degree k = 10 is " print stop-start, " seconds" f.write(str(stop-start)) f.write('\n') #time for rn user reconstruct share secret using lagrange interpolation S=[] for i in range(rn+1): c = sqaure_and_multiply(n1,P11.value(pub_inf[i]), inverseOfnminus1)