def _create_keypair(key_type: KeyType, seed: Union[str, bytes] = None) -> Key: """Instantiate a new keypair with an optional seed value.""" if key_type == KeyType.ED25519: alg = KeyAlg.ED25519 method = None # elif key_type == KeyType.BLS12381G1: # alg = KeyAlg.BLS12_381_G1 elif key_type == KeyType.BLS12381G2: alg = KeyAlg.BLS12_381_G2 method = SeedMethod.BlsKeyGen # elif key_type == KeyType.BLS12381G1G2: # alg = KeyAlg.BLS12_381_G1G2 else: raise WalletError(f"Unsupported key algorithm: {key_type}") if seed: try: if key_type == KeyType.ED25519: # not a seed - it is the secret key seed = validate_seed(seed) return Key.from_secret_bytes(alg, seed) else: return Key.from_seed(alg, seed, method=method) except AskarError as err: if err.code == AskarErrorCode.INPUT: raise WalletError("Invalid seed for key generation") from None else: return Key.generate(alg)
def test_bls_keygen(): key = Key.from_seed( KeyAlg.BLS12_381_G1G2, b"testseed000000000000000000000001", method=SeedMethod.BlsKeyGen, ) assert key.get_jwk_public(KeyAlg.BLS12_381_G1) == ( '{"crv":"BLS12381_G1","kty":"EC","x":' '"h56eYI8Qkq5hitICb-ik8wRTzcn6Fd4iY8aDNVc9q1xoPS3lh4DB_B4wNtar1HrV"}') assert key.get_jwk_public(KeyAlg.BLS12_381_G2) == ( '{"crv":"BLS12381_G2","kty":"EC",' '"x":"iZIOsO6BgLV72zCrBE2ym3DEhDYcghnUMO4O8IVVD8yS-C_zu6OA3L-ny-AO4' 'rbkAo-WuApZEjn83LY98UtoKpTufn4PCUFVQZzJNH_gXWHR3oDspJaCbOajBfm5qj6d"}' ) assert key.get_jwk_public() == ( '{"crv":"BLS12381_G1G2","kty":"EC",' '"x":"h56eYI8Qkq5hitICb-ik8wRTzcn6Fd4iY8aDNVc9q1xoPS3lh4DB_B4wNtar1H' "rViZIOsO6BgLV72zCrBE2ym3DEhDYcghnUMO4O8IVVD8yS-C_zu6OA3L-ny-AO4rbk" 'Ao-WuApZEjn83LY98UtoKpTufn4PCUFVQZzJNH_gXWHR3oDspJaCbOajBfm5qj6d"}')