Siwe (siwe v0.2.3)

Siwe provides validation and parsing for Sign-In with Ethereum messages and signatures.

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.

Generates an alphanumeric nonce for use in SIWE messages.

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

generate_nonce()

Specs

generate_nonce() :: String.t()

Generates an alphanumeric nonce for use in SIWE messages.

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