Beispiel #1
0
def secret_int_to_points(secret_int, point_threshold, num_points, prime=None):
    """ Split a secret (integer) into shares (pair of integers / x,y coords).
        Sample the points of a random polynomial with the y intercept equal to
        the secret int.
    """
    if point_threshold < 2:
        raise ValueError("Threshold must be >= 2.")
    if point_threshold > num_points:
        raise ValueError("Threshold must be < the total number of points.")
    if not prime:
        prime = get_large_enough_prime([secret_int, num_points])
    if not prime:
        raise ValueError("Error! Secret is too long for share calculation!")
    coefficients = random_polynomial(point_threshold-1, secret_int, prime)
    points = get_polynomial_points(coefficients, num_points, prime)
    return points
def secret_int_to_points(secret_int, point_threshold, num_points):
    """ Split a secret (integer) into shares (pair of integers / x,y coords).

        Sample the points of a random polynomial with the y intercept equal to
        the secret int.
    """
    if point_threshold < 2:
        raise ValueError("Threshold must be >= 2.")
    if point_threshold > num_points:
        raise ValueError("Threshold must be < the total number of points.")
    prime = get_large_enough_prime([secret_int, num_points])
    if not prime:
        raise ValueError("Error! Secret is too long for share calculation!")
    print 'Selected Prime Number = ', prime
    coefficients = random_polynomial(point_threshold-1, secret_int, prime)
    points = get_polynomial_points(coefficients, num_points, prime)
    return points
Beispiel #3
0
def points_to_secret_int(points):
    """ Join int points into a secret int.

        Get the intercept of a random polynomial defined by the given points.
    """
    if not isinstance(points, list):
        raise ValueError("Points must be in list form.")
    for point in points:
        if not isinstance(point, tuple) and len(point) == 2:
            raise ValueError("Each point must be a tuple of two values.")
        if not isinstance(point[0], (int, long)) and \
            isinstance(point[1], (int, long)):
            raise ValueError("Each value in the point must be an int.")
    x_values, y_values = zip(*points)
    prime = get_large_enough_prime(y_values)
    free_coefficient = modular_lagrange_interpolation(0, points, prime)
    secret_int = free_coefficient  # the secret int is the free coefficient
    return secret_int
def points_to_secret_int(points):
    """ Join int points into a secret int.

        Get the intercept of a random polynomial defined by the given points.
    """
    if not isinstance(points, list):
        raise ValueError("Points must be in list form.")
    for point in points:
        if not isinstance(point, tuple) and len(point) == 2:
            raise ValueError("Each point must be a tuple of two values.")
        if not isinstance(point[0], (int, long)) and \
            isinstance(point[1], (int, long)):
            raise ValueError("Each value in the point must be an int.")
    x_values, y_values = zip(*points)
    prime = get_large_enough_prime(y_values)
    free_coefficient = modular_lagrange_interpolation(0, points, prime)
    secret_int = free_coefficient # the secret int is the free coefficient
    return secret_int
	print '---'
	print 'Example: python additions.py 7 3 123 -556 3 -4'
	print '---'
 	sys.exit()	


# Get inputs. Just trying this for 2 secrets and 2 coefficients
num_points = int(sys.argv[1])
threshold = int(sys.argv[2])
secret1 = int(sys.argv[3])
secret2 = int(sys.argv[4])
coeff1 = int(sys.argv[5])
coeff2 = int(sys.argv[6])

# Determine a large-enough prime number
prime = get_large_enough_prime([max(abs(secret1), abs(secret2))*max(abs(coeff1), abs(coeff2)), num_points])

# Compute shares of each secret
shares1 = secret_int_to_points_given_prime(secret1, threshold, num_points, prime)
print shares1
shares2 = secret_int_to_points_given_prime(secret2, threshold, num_points, prime)
print shares2

# Reconstruct the shares of the linear combination of the secret
shares3 = []
for i in range(1,num_points+1):
	shares3.append((i, (coeff1*shares1[i-1][1] + coeff2*shares2[i-1][1]) % prime))
print shares3

recovered_sum = points_to_secret_int(shares3[1:1+threshold])