Beispiel #1
0
def get_Lagrange_Polynomials(e, field_value=257):
    k = len(e)
    Lagrange_polynomials = []
    for i in range(k):
        temp_prod = 1
        temp_poly = Polynomial([1])
        for j in range(k):
            if (i != j):
                temp_poly = temp_poly.multiply(
                    Polynomial([1, (field_value - e[j]) % field_value]))
                temp_val = ((e[i] - e[j] + field_value) % field_value)
                inverse_temp_val = get_inverse(temp_val)
                temp_poly = temp_poly.multiply(Polynomial([inverse_temp_val]))
        Lagrange_polynomials += [temp_poly]
    return Lagrange_polynomials
Beispiel #2
0
def get_prod_funs(e, field_value=257):
    k = len(e)
    temp_poly = Polynomial([1])
    for i in range(k):
        temp_poly = temp_poly.multiply(
            Polynomial([1, (field_value - e[i]) % field_value]))
    return temp_poly
Beispiel #3
0
def reconstruct_polynomial(alpha, poly_alpha, field_value=257):
    temp_poly = Polynomial([0])
    t = len(alpha)
    for i in range(t):
        poly = Polynomial([1])
        temp_prod = 1
        alpha_i = alpha[i]
        for j in range(t):
            if (i != j):
                poly = poly.multiply(
                    Polynomial([1, (field_value - alpha[j]) % field_value]))
                temp_prod = temp_prod * (
                    (alpha_i - alpha[j] + field_value) % field_value)
                temp_prod %= field_value
        poly = poly.divide_by_constant(temp_prod)
        poly = poly.multiply(Polynomial([poly_alpha[i]]))
        temp_poly = temp_poly.add(poly)
    return temp_poly
	def generate_shadow_images(self, store_shadows = True):
		print ("Encryption begins!")
		img_info = self.img_info
		n, t, k = self.n, self.t, self.k

		alpha = self.alpha
		e = self.e
		poly_q = self.poly_q

		shadow_image_size = None
		shadow_images = []

		for i in range(n):
			print ("Shadow Image no :- {}".format(i))
			x_secrets = []
			y_secrets = []
			lagrange = get_Lagrange_Polynomials(e)
			prod_fun = get_prod_funs(e)

			temp_poly = Polynomial(poly_q)
			temp_poly = temp_poly.multiply(prod_fun)


			if self.debug == True:
				#For debugging whether the first term of the generated polynomial is correct
				for mmm in range(len(e)):
					value = temp_poly.eval(e[mmm])
					if value != 0:
						raise ValueError("First term of the encrypting polynomial is wrong")
						quit()

				#For debugging whether the generated Lagrange Polynomial is correct
				for nnn in range(len(e)):
					for j in range(len(lagrange)):
						if nnn != j:
							if (lagrange[j].eval(e[nnn]) != 0):
								raise ValueError("Lagrange Polynmial is wrong")
						else:
							if (lagrange[j].eval(e[nnn]) != 1):
								raise ValueError("Lagrange Polynomial is wrong")

			for x in img_info.keys():
				for y in range(len(img_info[x][1])):
					bar = img_info[x][1][y]
					sum_polyx = Polynomial([0])
					sum_polyy = Polynomial([0])
					for u in range(k):
						s_x = img_info[x][1][y][u][0]
						s_y = img_info[x][1][y][u][1]
						tempx = (lagrange[u]).multiply(Polynomial([s_x]))
						tempy = (lagrange[u]).multiply(Polynomial([s_y]))
						sum_polyx = sum_polyx.add(tempx)
						sum_polyy = sum_polyy.add(tempy)
					x_poly = temp_poly.add(sum_polyx)
					y_poly = temp_poly.add(sum_polyy)
					x_secrets += [x_poly.eval(alpha[i])]
					y_secrets += [y_poly.eval(alpha[i])]
			temp_shadow = x_secrets + y_secrets
			if (shadow_image_size is None):
				temp_size = len(temp_shadow)
				while(1):
					if (floor(sqrt(temp_size)) == ceil(sqrt(temp_size))):
						break
					else:
						temp_size += 1
				shadow_image_size = temp_size
			temp_shadow = temp_shadow + [np.random.randint(0, 256) for u in range(len(x_secrets + y_secrets), shadow_image_size)]
			temp_shadow = np.array(temp_shadow).astype(int)
			temp_shadow = temp_shadow.reshape((int(sqrt(shadow_image_size)), int(sqrt(shadow_image_size))))
			invalid_positions = []
			for x in range(temp_shadow.shape[0]):
				for y in range(temp_shadow.shape[1]):
					if temp_shadow[x, y] == 256:
						invalid_positions += [(x, y)]
						temp_shadow[x, y] = 255
			if store_shadows == True:
				cv2.imwrite("Shadows/{}.jpg".format(i), temp_shadow)
			shadow_images += [(temp_shadow, invalid_positions)]
		print ("Encryption ends!")

		return shadow_images