2023-08-28 11:01:55 -07:00
|
|
|
import time
|
2023-08-28 13:34:49 -07:00
|
|
|
import ed25519
|
2023-08-28 11:01:55 -07:00
|
|
|
|
|
|
|
|
def verify_signatures(committee_size, depth):
|
|
|
|
|
# Simulate verifying depth * committee_size signatures
|
|
|
|
|
start_time = time.time()
|
|
|
|
|
|
2023-08-28 13:34:49 -07:00
|
|
|
# Generate a single EdDSA key pair for verification
|
|
|
|
|
private_key, public_key = ed25519.create_keypair()
|
2023-08-28 11:01:55 -07:00
|
|
|
|
|
|
|
|
# Simulate depth * committee_size signature verifications
|
|
|
|
|
for _ in range(depth * committee_size):
|
|
|
|
|
message = b"Message to be signed"
|
|
|
|
|
signature = private_key.sign(message)
|
|
|
|
|
public_key.verify(signature, message)
|
|
|
|
|
|
|
|
|
|
end_time = time.time()
|
|
|
|
|
elapsed_time = end_time - start_time
|
|
|
|
|
return elapsed_time
|
2023-08-28 11:25:52 -07:00
|
|
|
|
2023-08-28 13:35:50 -07:00
|
|
|
def aggregate_signatures(committee_size, root_members):
|
|
|
|
|
# Simulate aggregating 3 * committee_size signatures
|
|
|
|
|
start_time = time.time()
|
|
|
|
|
|
|
|
|
|
# Generate multiple EdDSA key pairs for signature aggregation
|
|
|
|
|
private_keys = [ed25519.create_keypair() for _ in range(root_members * committee_size)]
|
|
|
|
|
|
|
|
|
|
# Simulate signature aggregation
|
|
|
|
|
shared_message = b"Shared message to be signed"
|
|
|
|
|
signatures = [private_key[0].sign(shared_message) for private_key in private_keys]
|
|
|
|
|
|
|
|
|
|
# Aggregation isn't straightforward for EdDSA; we'll skip it in this example
|
|
|
|
|
|
|
|
|
|
end_time = time.time()
|
|
|
|
|
elapsed_time = end_time - start_time
|
|
|
|
|
return elapsed_time
|
|
|
|
|
|
2023-08-28 13:36:16 -07:00
|
|
|
def main():
|
|
|
|
|
committee_size = int(input("Enter committee size: "))
|
|
|
|
|
depth = int(input("Enter depth: "))
|
|
|
|
|
|
|
|
|
|
verify_time = verify_signatures(committee_size, depth)
|
|
|
|
|
aggregate_time = aggregate_signatures(committee_size,3)
|
|
|
|
|
|
|
|
|
|
print(f"Time to verify {depth * committee_size} signatures: {verify_time:.6f} seconds")
|
|
|
|
|
print(f"Time to aggregate {3 * committee_size} signatures: {aggregate_time:.6f} seconds")
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
main()
|