logos-blockchain-simulations/scripts/authenticator_cost.py
mjalalzai 5eefa8dc1d main
2023-08-28 13:45:12 -07:00

49 lines
1.7 KiB
Python

import time
import ed25519
def verify_signatures(committee_size, depth):
# Simulate verifying depth * committee_size signatures
start_time = time.time()
# Generate a single EdDSA key pair for verification
private_key, public_key = ed25519.create_keypair()
# 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
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
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 signatures of a tree of depth {depth} and committee size {committee_size} : {verify_time:.6f} seconds")
print(f"Time to aggregate {3 * committee_size} signatures: {aggregate_time:.6f} seconds")
if __name__ == "__main__":
main()