Noise.Pattern (Noise Protocol v0.3.0)

View Source

A handshake pattern (spec §7): pre-messages and message token sequences.

from_name/1 resolves a pattern name such as "IK", "XXpsk2" or "NNpsk0+psk2" — every one-way, fundamental and deferred pattern from spec §7.4-§7.6 plus the pskN modifiers of §9.4. Unknown patterns and invalid modifiers (psk9 on a two-message pattern, fallback, …) raise ArgumentError.

Summary

Functions

Whether role's token (:e or :s) is a pre-message, known to the peer up front.

Whether any message carries a psk token (spec §9.2 changes e handling).

Number of psk tokens, i.e. the number of pre-shared keys each party needs.

Whether role sends token (:e or :s) in one of its handshake messages.

Types

role()

@type role() :: :ini | :resp

t()

@type t() :: %Noise.Pattern{
  name: String.t(),
  pre_message: [[token()]],
  tokens: [{role(), [token()]}]
}

token()

@type token() :: :e | :s | :ee | :se | :es | :ss | :psk

Functions

from_name(name)

@spec from_name(String.t()) :: t()

pre_shares?(pattern, atom, token)

@spec pre_shares?(t(), role(), :e | :s) :: boolean()

Whether role's token (:e or :s) is a pre-message, known to the peer up front.

psk?(pattern)

@spec psk?(t()) :: boolean()

Whether any message carries a psk token (spec §9.2 changes e handling).

psk_count(pattern)

@spec psk_count(t()) :: non_neg_integer()

Number of psk tokens, i.e. the number of pre-shared keys each party needs.

transmits?(pattern, role, token)

@spec transmits?(t(), role(), :e | :s) :: boolean()

Whether role sends token (:e or :s) in one of its handshake messages.