def print_tv_hash(hash_in, ciphersuite, hash_fn, print_pt_fn, is_ell2, opts): if len(hash_in) > 2: (msg, _, hash_expect) = hash_in[:3] else: msg = hash_in[0] hash_expect = None # hash to point P = hash_fn(msg, ciphersuite) if opts.gen_vectors: print(b' '.join( hexlify(v) for v in (msg, b'\x00', serialize(P)) ).decode('ascii')) return if hash_expect is not None: if serialize(P) != hash_expect: raise SerError("serializing P did not give hash_expect") if from_jacobian(deserialize(hash_expect, is_ell2)) != from_jacobian(P): raise DeserError("deserializing hash_expect did not give P") if opts.quiet: return print("=============== begin hash test vector ==================") sys.stdout.write("ciphersuite: ") print_value(ciphersuite, 13, True) sys.stdout.write("message: ") print_value(msg, 13, True) print("result:") print_pt_fn(P) print("=============== end hash test vector ==================")
def print_tv_sig(sig_in, ciphersuite, sign_fn, keygen_fn, print_pk_fn, print_sig_fn, ver_fn, is_ell2, opts): if len(sig_in) > 2: (msg, sk, sig_expect) = sig_in[:3] else: (msg, sk) = sig_in sig_expect = None # generate key and signature (x_prime, pk) = keygen_fn(sk) sig = sign_fn(x_prime, msg, ciphersuite) if ver_fn is not None and not ver_fn(pk, sig, msg, ciphersuite): raise RuntimeError("verifying generated signature failed") if opts.gen_vectors: print(b' '.join(hexlify(v) for v in (msg, sk, serialize(sig))).decode('ascii')) return if sig_expect is not None: if serialize(sig) != sig_expect: raise SerError("serializing sig did not give sig_expect") if from_jacobian(deserialize(sig_expect, is_ell2)) != from_jacobian(sig): raise DeserError("deserializing sig_expect did not give sig") if opts.quiet: return # output the test vector print("================== begin test vector ====================") print("g1 generator:") print_g1_hex(g1gen) print("g2 generator:") print_g2_hex(g2gen) print("group order: 0x%x" % q) sys.stdout.write("ciphersuite: ") print_value(ciphersuite, 13, True) sys.stdout.write("message: ") print_value(msg, 13, True) sys.stdout.write("sk: ") print_value(sk, 13, True) sys.stdout.write("x_prime: ") print_value(x_prime, 13, True) print("public key:") print_pk_fn(pk) print("signature:") print_sig_fn(sig) print("================== end test vector ====================")