python/run_bls_ZZZ.py.in (126 lines of code) (raw):

#!/usr/bin/env python3 """ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ """ example for using bls """ import cffi import platform import os import bls_ZZZ if __name__ == "__main__": # Print hex values DEBUG = False # Seed seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" seed = bytes.fromhex(seed_hex) # Message message = b"test message" # random number generator rng = bls_ZZZ.create_csprng(seed) # Generate key pairs rtn, sk1, pktmp = bls_ZZZ.key_pair_generate(rng) if rtn != 0: print("Error: key_pair_generate {}".format(rtn)) raise SystemExit(0) print("sk1: {}".format(sk1.hex())) print("pktmp: {}".format(pktmp.hex())) rtn, sk1, pk1 = bls_ZZZ.key_pair_generate(rng, sk1) if rtn != 0: print("Error: key_pair_generate {}".format(rtn)) raise SystemExit(0) print("sk1: {}".format(sk1.hex())) print("pk1: {}".format(pk1.hex())) rtn, sk2, pk2 = bls_ZZZ.key_pair_generate(rng) if rtn != 0: print("Error: key_pair_generate {}".format(rtn)) raise SystemExit(0) print("sk2: {}".format(sk2.hex())) print("pk2: {}".format(pk2.hex())) rtn, sk3, pk3 = bls_ZZZ.key_pair_generate(rng) if rtn != 0: print("Error: key_pair_generate {}".format(rtn)) raise SystemExit(0) print("sk3: {}".format(sk3.hex())) print("pk3: {}".format(pk3.hex())) # Sign and verify rtn, sig1 = bls_ZZZ.sign(message, sk1) if rtn != 0: print("Error: sign {}".format(rtn)) raise SystemExit(0) print("sig1: {}".format(sig1.hex())) rtn = bls_ZZZ.verify(sig1, message, pk1) if rtn != 0: print("Error: Invalid signature {}".format(rtn)) raise SystemExit(0) print("Success: Signature is valid") rtn, sig2 = bls_ZZZ.sign(message, sk2) if rtn != 0: print("Error: sign {}".format(rtn)) raise SystemExit(0) print("sig2: {}".format(sig2.hex())) rtn = bls_ZZZ.verify(sig2, message, pk2) if rtn != 0: print("Error: Invalid signature {}".format(rtn)) raise SystemExit(0) print("Success: Signature is valid") rtn, sig3 = bls_ZZZ.sign(message, sk3) if rtn != 0: print("Error: sign {}".format(rtn)) raise SystemExit(0) print("sig3: {}".format(sig3.hex())) rtn = bls_ZZZ.verify(sig3, message, pk3) if rtn != 0: print("Error: Invalid signature {}".format(rtn)) raise SystemExit(0) print("Success: Signature is valid") # Add Signatures rtn, sig12 = bls_ZZZ.add_G1(sig1, sig2) if rtn != 0: print("Error: add_G1 {}".format(rtn)) raise SystemExit(0) print("sig12: {}".format(sig12.hex())) rtn, sig123 = bls_ZZZ.add_G1(sig12, sig3) if rtn != 0: print("Error: add_G1 {}".format(rtn)) raise SystemExit(0) print("sig123: {}".format(sig123.hex())) # Add Public keys rtn, pk12 = bls_ZZZ.add_G2(pk1, pk2) if rtn != 0: print("Error: add_G2 {}".format(rtn)) raise SystemExit(0) print("pk12: {}".format(pk12.hex())) rtn, pk123 = bls_ZZZ.add_G2(pk12, pk3) if rtn != 0: print("Error: add_G2 {}".format(rtn)) raise SystemExit(0) print("pk123: {}".format(pk123.hex())) # Verify aggretated values rtn = bls_ZZZ.verify(sig123, message, pk123) if rtn != 0: print("Error: Invalid aggregated signature {}".format(rtn)) raise SystemExit(0) print("Success: Aggregated signature is valid") # Clear memory bls_ZZZ.kill_csprng(rng) del sk1 del pk1 del sk2 del pk2 del sk3 del pk3