Siwe (siwe v0.2.1)

Siwe provides validation and parsing for Sign-In with Ethereum messages and signatures. Exposes the verify!(message, signature) which raises if invalid and returns a Message if valid.

Link to this section Summary

Functions

Parses a SIWE message string into Siwe.Message struct if conforming to standards. Will parse messages without checking for validity.

Tests that a message and signature pair correspond and that the current time is valid (after not_before, and before expiration_time) any validation of other fields to server's expectation are left to the calling application. Just a wrapper around the Rustler NIF

Parses a SIWE message string into a Siwe Message Struct if the given signature matches the message string.

Parses a SIWE message string into a Siwe Message Struct if the current time is valid in terms of the message string.

Formats parsed SIWE message into string matching signing material

Link to this section Functions

Specs

from_str!(String.t()) :: Siwe.Message

Parses a SIWE message string into Siwe.Message struct if conforming to standards. Will parse messages without checking for validity.

Link to this function

parse_if_valid!(message, signature)

Specs

parse_if_valid!(String.t(), String.t()) :: Siwe.Message.t()

Tests that a message and signature pair correspond and that the current time is valid (after not_before, and before expiration_time) any validation of other fields to server's expectation are left to the calling application. Just a wrapper around the Rustler NIF

Returns a Message structure based on the passed message

## Examples iex> Siwe.parseifvalid!(Enum.join(["login.xyz wants you to sign in with your Ethereum account:", ...> "0xfA151B5453CE69ABf60f0dbdE71F6C9C5868800E", ...> "", ...> "Sign-In With Ethereum Example Statement", ...> "", ...> "URI: https://login.xyz", ...> "Version: 1", ...> "Chain ID: 1", ...> "Nonce: ToTaLLyRanDOM", ...> "Issued At: 2021-12-17T00:38:39.834Z", ...> ], "\n"), ...> "0x8d1327a1abbdf172875e5be41706c50fc3bede8af363b67aefbb543d6d082fb76a22057d7cb6d668ceba883f7d70ab7f1dc015b76b51d226af9d610fa20360ad1c") %{ __struct: Siwe, address: "0xfA151B5453CE69ABf60f0dbdE71F6C9C5868800E", chain_id: "1", domain: "login.xyz", expiration_time: nil, issued_at: "2021-12-17T00:38:39.834Z", nonce: "ToTaLLyRanDOM", not_before: nil, request_id: nil, resources: [], statement: "Sign-In With Ethereum Example Statement", uri: "https://login.xyz", version: "1" }

Link to this function

parse_if_valid_sig!(msg, sig)

Specs

parse_if_valid_sig!(String.t(), String.t()) :: Siwe.Message.t()

Parses a SIWE message string into a Siwe Message Struct if the given signature matches the message string.

Link to this function

parse_if_valid_time!(msg)

Specs

parse_if_valid_time!(String.t()) :: Siwe.Message.t()

Parses a SIWE message string into a Siwe Message Struct if the current time is valid in terms of the message string.

Specs

to_str!(String.t()) :: Siwe.Message.t()

Formats parsed SIWE message into string matching signing material