BlsEx (bls_ex v0.1.1)
BlsEx provides utility to leverage BLS signatures
BLS scheme supports aggregation of public keys and aggregation of signatures.
Here an full example of aggregated signature verification
iex> seed = :crypto.hash(:sha512, "myseed")
iex> public_key1 = BlsEx.get_public_key!(seed)
iex> signature1 = BlsEx.sign!(seed, "hello")
iex> seed2 = :crypto.hash(:sha512, "myseed2")
iex> public_key2 = BlsEx.get_public_key!(seed2)
iex> signature2 = BlsEx.sign!(seed2, "hello")
iex> aggregated_signature = BlsEx.aggregate_signatures!([signature1, signature2], [public_key1, public_key2])
iex> aggregated_public_key = BlsEx.aggregate_public_keys!([public_key1, public_key2])
iex> BlsEx.verify_signature?(aggregated_public_key, "hello", aggregated_signature)
true
Summary
Functions
Aggregate a list of public keys
Same as aggregate_public_keys/1
but raise the error
Aggregate a list of signatures
Same as aggregate_signatures/2
but raise the error
Generate a public key from a secret key
Same as get_public_key/1
but raise the error
Sign a message using the given secret key
Same as sign/2
but raise the error
Verifies a single BLS signature
Types
public_key()
@type public_key() :: <<_::384>>
secret_key()
@type secret_key() :: <<_::512>>
signature()
@type signature() :: <<_::768>>
Functions
aggregate_public_keys(public_keys)
@spec aggregate_public_keys(public_keys :: [public_key()]) :: {:ok, aggregated_public_key :: public_key()} | {:error, :no_valid_keys}
Aggregate a list of public keys
aggregate_public_keys!(public_keys)
@spec aggregate_public_keys!(public_keys :: [public_key()]) :: aggregated_public_key :: public_key()
Same as aggregate_public_keys/1
but raise the error
aggregate_signatures(signatures, public_keys)
@spec aggregate_signatures(signatures :: [signature()], public_keys :: [public_key()]) :: {:ok, aggregated_signature :: signature()} | {:error, :no_valid_keys_or_signatures}
Aggregate a list of signatures
aggregate_signatures!(signatures, public_keys)
@spec aggregate_signatures!( signatures :: [signature()], public_keys :: [public_key()] ) :: aggregated_signature :: signature()
Same as aggregate_signatures/2
but raise the error
get_public_key(secret_key)
@spec get_public_key(secret_key :: secret_key()) :: {:ok, public_key()} | {:error, :invalid_seed}
Generate a public key from a secret key
get_public_key!(secret_key)
@spec get_public_key!(secret_key :: secret_key()) :: public_key()
Same as get_public_key/1
but raise the error
sign(secret_key, data)
@spec sign(secret_key :: secret_key(), message :: binary()) :: {:ok, signature()} | {:error, :invalid_seed}
Sign a message using the given secret key
sign!(secret_key, data)
@spec sign!(secret_key :: secret_key(), message :: binary()) :: signature()
Same as sign/2
but raise the error
verify_signature?(public_key, message, signature)
@spec verify_signature?( public_key :: public_key(), message :: binary(), signature :: signature() ) :: boolean()
Verifies a single BLS signature