README.md

# ExWeb3EcRecover

Library for recovering and verifying public keys from signatures,

## Installation

This package relies on `ExSecp256k1` which uses Rust.
Please visit [rusts website](https://www.rust-lang.org/tools/install) and install it.

The package can be installed
by adding `ex_web3_ec_recover` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:ex_web3_ec_recover, "~> 0.2.0"}
  ]
end
```


## Usage


### Personal Sign
```elixir
iex> ExWeb3EcRecover.recover_personal_signature("hello world", "0x1dd3657c91d95f350ab25f17ee7cbcdbccd3f5bc52976bfd4dd03bd6bc29d2ac23e656bee509ca33b921e0e6b53eb64082be1bb3c69c3a4adccd993b1d667f8d1b")
"0xb117a8bc3ecf2c3f006b89da6826e49b4193977a"

```

### Typed Sign (Types 3 and 4)


```

 iex>  types: %{
        "Message" => [%{"name" => "data", "type" => "string"}],
        "EIP712Domain" => [
          %{
            "name" => "name",
            "type" => "string"
          },
          %{
            "name" => "version",
            "type" => "string"
          },
          %{
            "name" => "chainId",
            "type" => "uint256"
          },
          %{
            "name" => "verifyingContract",
            "type" => "address"
          }
        ]
      },
      primary_type: "Message",
      message: %{
        "data" => "test"
      },
      domain: %{
        "name" => "example.metamask.io",
        "version" => "3",
        "chainId" => 1,
        "verifyingContract" => "0x"
      }
    }
iex> ExWeb3EcRecover.recover_typed_signature(message, sig, :v4)
"0x29c76e6ad8f28bb1004902578fb108c507be341b"

```


## Documentation
Hosted on [https://hexdocs.pm/ex_web3_ec_recover/ExWeb3EcRecover.html](https://hexdocs.pm/ex_web3_ec_recover/ExWeb3EcRecover.html)

## Authors
Charlie Graham & Jakub Hajto (Hawku, Inc)

## Releases
0.2 Support for Typed Signatures (EIP 712) and signatures using Ledger devices
<br/> 0.1 Initial Release


ExWeb3EcRecover is released under the [MIT License](https://github.com/appcues/exsentry/blob/master/LICENSE.txt).