View Source Tezex.Crypto (tezex v0.1.1)

A set of functions to check Tezos signed messages and verify a public key corresponds to a wallet address (public key hash).

Link to this section Summary

Functions

Verify that address is the public key hash of pubkey.

Verify that address is the public key hash of pubkey and that signature is a valid signature for message signed with the private key corresponding to public key pubkey.

Derive public key hash (Tezos wallet address) from public key

Verify that signature is a valid signature for message signed with the private key corresponding to public key pubkey

Link to this section Functions

Link to this function

check_address(address, pubkey)

View Source
@spec check_address(nonempty_binary(), nonempty_binary()) ::
  :ok | {:error, :mismatch | :unknown_pubkey_format}

Verify that address is the public key hash of pubkey.

examples

Examples

iex> pubkey = "sppk7aBerAEA6tv4wzg6FnK7i5YrGtEGFVvNjWhc2QX8bhzpouBVFSW"
iex> Tezex.Crypto.check_address("tz2BC83pvEAag6r2ZV7kPghNAbjFoiqhCvZx", pubkey)
:ok
iex> Tezex.Crypto.check_address("tz1burnburnburnburnburnburnburjAYjjX", pubkey)
{:error, :mismatch}
Link to this function

check_signature(address, signature, message, pubkey)

View Source
@spec check_signature(binary(), binary(), binary(), binary()) :: boolean()

Verify that address is the public key hash of pubkey and that signature is a valid signature for message signed with the private key corresponding to public key pubkey.

examples

Examples

iex> address = "tz2BC83pvEAag6r2ZV7kPghNAbjFoiqhCvZx"
iex> address_b = "tz1burnburnburnburnburnburnburjAYjjX"
iex> signature = "spsig1ZNQaUKNERZSiEiNviqa5EAPkcNASXhfkXtxRatZTDZAnUB4Ra2Jus8b1oEpFnPx8Z6g28pd8vK3R8nPK29JDU5FiSLH5T"
iex> message = "05010000007154657a6f73205369676e6564204d6573736167653a207369676e206d6520696e20617320747a32424338337076454161673672325a56376b5067684e41626a466f69716843765a78206f6e206f626a6b742e636f6d20617420323032312d31302d30345431383a35393a31332e3939305a"
iex> public_key = "sppk7aBerAEA6tv4wzg6FnK7i5YrGtEGFVvNjWhc2QX8bhzpouBVFSW"
iex> Tezex.Crypto.check_signature(address, signature, message, public_key)
true
iex> Tezex.Crypto.check_signature(address_b, signature, message, public_key)
false
iex> Tezex.Crypto.check_signature(address, signature, "", public_key)
false
@spec derive_address(nonempty_binary()) ::
  {:error, :unknown_pubkey_format} | {:ok, nonempty_binary()}

Derive public key hash (Tezos wallet address) from public key

examples

Examples

iex> Tezex.Crypto.derive_address("edpktsPhZ8weLEXqf4Fo5FS9Qx8ZuX4QpEBEwe63L747G8iDjTAF6w")
{:ok, "tz1LKpeN8ZSSFNyTWiBNaE4u4sjaq7J1Vz2z"}
iex> Tezex.Crypto.derive_address("sppk7aBerAEA6tv4wzg6FnK7i5YrGtEGFVvNjWhc2QX8bhzpouBVFSW")
{:ok, "tz2BC83pvEAag6r2ZV7kPghNAbjFoiqhCvZx"}
iex> Tezex.Crypto.derive_address("p2pk65yRxCX65k6qRPrbqGWvfW5JnLB1p3dn1oM5o9cyqLKPPhJaBMa")
{:ok, "tz3bPFa6mGv8m4Ppn7w5KSDyAbEPwbJNpC9p"}
Link to this function

verify_signature(signature, message, pubkey)

View Source
@spec verify_signature(binary(), binary(), binary()) :: boolean()

Verify that signature is a valid signature for message signed with the private key corresponding to public key pubkey