Post
Topic
Board Development & Technical Discussion
Re: Provably fair puzzle for N-bit public keys
by
ripemdhash
on 05/08/2023, 20:25:34 UTC
example of DLEQ:

Code:
from cryptography.hazmat.primitives.asymmetric import ec

def dleq(g1, h1, n1, x1, y1, g2, h2, n2, x2, y2):
    # Check if g1, h1, g2, and h2 are elements of their respective multiplicative groups
    curve1 = ec.SECP256R1()  # You can change this to a different elliptic curve if needed
    curve2 = ec.SECP384R1()  # You can change this to another elliptic curve if needed

    if not (g1 in curve1 and h1 in curve1 and g2 in curve2 and h2 in curve2):
        raise ValueError("g1, h1, g2, and h2 must be elements of their respective multiplicative groups")

    # Calculate the left-hand side and right-hand side of the DLEQ equations for both curves
    lhs1 = pow(g1, x1, n1)
    rhs1 = pow(h1, y1, n1)
    lhs2 = pow(g2, x2, n2)
    rhs2 = pow(h2, y2, n2)

    # Compare the left-hand side and right-hand side for both curves
    return lhs1 == rhs1 and lhs2 == rhs2

# Example usage
g1 = ec.SECP256R1().generator()  # Generator of the SECP256R1 elliptic curve
h1 = 123456789  # Example element of the multiplicative group for curve 1
n1 = ec.SECP256R1().order()  # Order of the multiplicative group for curve 1
x1 = 987654321  # Secret integers for curve 1
y1 = 543210987

g2 = ec.SECP384R1().generator()  # Generator of the SECP384R1 elliptic curve
h2 = 987654321  # Example element of the multiplicative group for curve 2
n2 = ec.SECP384R1().order()  # Order of the multiplicative group for curve 2
x2 = 246813579  # Secret integers for curve 2
y2 = 135792468

result = dleq(g1, h1, n1, x1, y1, g2, h2, n2, x2, y2)
print("DLEQ result:", result)