-------------------------------------------------
-- |
-- Module      : Crypto.Noise.HandshakePatterns
-- Maintainer  : John Galt <jgalt@centromere.net>
-- Stability   : experimental
-- Portability : POSIX
--
-- This module contains all of the handshake patterns specified in sections
-- 7.2, 7.3, and 9.4.
module Crypto.Noise.HandshakePatterns
  ( -- * Standard patterns
    noiseNN
  , noiseKN
  , noiseNK
  , noiseKK
  , noiseNX
  , noiseKX
  , noiseXN
  , noiseIN
  , noiseXK
  , noiseIK
  , noiseXX
  , noiseIX
  , noiseN
  , noiseK
  , noiseX
  -- * PSK patterns
  , noiseNNpsk0
  , noiseNNpsk2
  , noiseNKpsk0
  , noiseNKpsk2
  , noiseNXpsk2
  , noiseXNpsk3
  , noiseXKpsk3
  , noiseXXpsk3
  , noiseKNpsk0
  , noiseKNpsk2
  , noiseKKpsk0
  , noiseKKpsk2
  , noiseKXpsk2
  , noiseINpsk1
  , noiseINpsk2
  , noiseIKpsk1
  , noiseIKpsk2
  , noiseIXpsk2
  , noiseNpsk0
  , noiseKpsk0
  , noiseXpsk1
  -- * Deferred patterns
  , noiseNK1
  , noiseNX1
  , noiseX1N
  , noiseX1K
  , noiseXK1
  , noiseX1K1
  , noiseX1X
  , noiseXX1
  , noiseX1X1
  , noiseK1N
  , noiseK1K
  , noiseKK1
  , noiseK1K1
  , noiseK1X
  , noiseKX1
  , noiseK1X1
  , noiseI1N
  , noiseI1K
  , noiseIK1
  , noiseI1K1
  , noiseI1X
  , noiseIX1
  , noiseI1X1
  ) where

import Crypto.Noise.Internal.Handshake.Pattern

-- | @Noise_NN():
--  -> e
--  <- e, ee@
noiseNN :: HandshakePattern
noiseNN :: HandshakePattern
noiseNN = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NN" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee)

-- | @Noise_KN(s):
--  -> s
--  ...
--  -> e
--  <- e, ee, se@
noiseKN :: HandshakePattern
noiseKN :: HandshakePattern
noiseKN = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KN" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e    MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_NK(rs):
--  <- s
--  ...
--  -> e, es
--  <- e, ee@
noiseNK :: HandshakePattern
noiseNK :: HandshakePattern
noiseNK = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NK" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s      MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee)

-- | @Noise_KK(s, rs):
--  -> s
--  <- s
--  ...
--  -> e, es, ss
--  <- e, ee, se@
noiseKK :: HandshakePattern
noiseKK :: HandshakePattern
noiseKK = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KK" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s            MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s            MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_NX(rs):
--  -> e
--  <- e, ee, s, es@
noiseNX :: HandshakePattern
noiseNX :: HandshakePattern
noiseNX = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NX" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_KX(s, rs):
--  -> s
--  ...
--  -> e
--  <- e, ee, se, s, es@
noiseKX :: HandshakePattern
noiseKX :: HandshakePattern
noiseKX = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KX" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e    MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_XN(s):
--  -> e
--  <- e, ee
--  -> s, se@
noiseXN :: HandshakePattern
noiseXN :: HandshakePattern
noiseXN = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"XN" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e         MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_IN(s):
--  -> e, s
--  <- e, ee, se@
noiseIN :: HandshakePattern
noiseIN :: HandshakePattern
noiseIN = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"IN" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_XK(s, rs):
--  <- s
--  ...
--  -> e, es
--  <- e, ee
--  -> s, se@
noiseXK :: HandshakePattern
noiseXK :: HandshakePattern
noiseXK = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"XK" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s      MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_IK(s, rs):
--  <- s
--  ...
--  -> e, es, s, ss
--  <- e, ee, se@
noiseIK :: HandshakePattern
noiseIK :: HandshakePattern
noiseIK = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"IK" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s                 MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_XX(s, rs):
--  -> e
--  <- e, ee, s, es
--  -> s, se@
noiseXX :: HandshakePattern
noiseXX :: HandshakePattern
noiseXX = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"XX" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e                    MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_IX(s, rs):
--  -> e, s
--  <- e, ee, se, s, es@
noiseIX :: HandshakePattern
noiseIX :: HandshakePattern
noiseIX = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"IX" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_N(rs):
--  <- s
--  ...
--  -> e, es@
noiseN :: HandshakePattern
noiseN :: HandshakePattern
noiseN = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"N" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_K(s, rs):
--  -> s
--  <- s
--  ...
--  -> e, es, ss@
noiseK :: HandshakePattern
noiseK :: HandshakePattern
noiseK = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"K" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss)

-- | @Noise_X(s, rs):
--  <- s
--  ...
--  -> e, es, s, ss@
noiseX :: HandshakePattern
noiseX :: HandshakePattern
noiseX = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"X" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss)

-- | @Noise_NNpsk0():
--  -> psk, e
--  <- e, ee@
noiseNNpsk0 :: HandshakePattern
noiseNNpsk0 :: HandshakePattern
noiseNNpsk0 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NNpsk0" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
psk MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
e) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee)

-- | @Noise_NNpsk2():
--  -> e
--  <- e, ee, psk@
noiseNNpsk2 :: HandshakePattern
noiseNNpsk2 :: HandshakePattern
noiseNNpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NNpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_NKpsk0(rs):
--  <- s
--  ...
--  -> psk, e, es
--  <- e, ee@
noiseNKpsk0 :: HandshakePattern
noiseNKpsk0 :: HandshakePattern
noiseNKpsk0 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NKpsk0" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
psk MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee)

-- | @Noise_NKpsk2(rs):
--  <- s
--  ...
--  -> e, es
--  <- e, ee, psk@
noiseNKpsk2 :: HandshakePattern
noiseNKpsk2 :: HandshakePattern
noiseNKpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NKpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_NXpsk2(rs):
--  -> e
--  <- e, ee, s, es, psk@
noiseNXpsk2 :: HandshakePattern
noiseNXpsk2 :: HandshakePattern
noiseNXpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NXpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_XNpsk3(s):
--  -> e
--  <- e, ee
--  -> s, se, psk@
noiseXNpsk3 :: HandshakePattern
noiseXNpsk3 :: HandshakePattern
noiseXNpsk3 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"XNpsk3" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_XKpsk3(s, rs):
--  <- s
--  ...
--  -> e, es
--  <- e, ee
--  -> s, se, psk@
noiseXKpsk3 :: HandshakePattern
noiseXKpsk3 :: HandshakePattern
noiseXKpsk3 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"XKpsk3" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_XXpsk3(s, rs):
--  -> e
--  <- e, ee, s, es
--  -> s, se, psk@
noiseXXpsk3 :: HandshakePattern
noiseXXpsk3 :: HandshakePattern
noiseXXpsk3 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"XXpsk3" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_KNpsk0(s):
--  -> s
--  ...
--  -> psk, e
--  <- e, ee, se@
noiseKNpsk0 :: HandshakePattern
noiseKNpsk0 :: HandshakePattern
noiseKNpsk0 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KNpsk0" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
psk MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
e) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_KNpsk2(s):
--  -> s
--  ...
--  -> e
--  <- e, ee, se, psk@
noiseKNpsk2 :: HandshakePattern
noiseKNpsk2 :: HandshakePattern
noiseKNpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KNpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_KKpsk0(s, rs):
--  -> s
--  <- s
--  ...
--  -> psk, e, es, ss
--  <- e, ee, se@
noiseKKpsk0 :: HandshakePattern
noiseKKpsk0 :: HandshakePattern
noiseKKpsk0 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KKpsk0" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
psk MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_KKpsk2(s, rs):
--  -> s
--  <- s
--  ...
--  -> e, es, ss
--  <- e, ee, se, psk@
noiseKKpsk2 :: HandshakePattern
noiseKKpsk2 :: HandshakePattern
noiseKKpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KKpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_KXpsk2(s, rs):
--  -> s
--  ...
--  -> e
--  <- e, ee, se, s, es, psk@
noiseKXpsk2 :: HandshakePattern
noiseKXpsk2 :: HandshakePattern
noiseKXpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KXpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_INpsk1(s):
--  -> e, s, psk
--  <- e, ee, se@
noiseINpsk1 :: HandshakePattern
noiseINpsk1 :: HandshakePattern
noiseINpsk1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"INpsk1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_INpsk2(s):
--  -> e, s
--  <- e, ee, se, psk@
noiseINpsk2 :: HandshakePattern
noiseINpsk2 :: HandshakePattern
noiseINpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"INpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_IKpsk1(s, rs):
--  <- s
--  ...
--  -> e, es, s, ss, psk
--  <- e, ee, se@
noiseIKpsk1 :: HandshakePattern
noiseIKpsk1 :: HandshakePattern
noiseIKpsk1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"IKpsk1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_IKpsk2(s, rs):
--  <- s
--  ...
--  -> e, es, s, ss
--  <- e, ee, se, psk@
noiseIKpsk2 :: HandshakePattern
noiseIKpsk2 :: HandshakePattern
noiseIKpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"IKpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_IXpsk2(s, rs):
--  -> e, s
--  <- e, ee, se, s, es, psk@
noiseIXpsk2 :: HandshakePattern
noiseIXpsk2 :: HandshakePattern
noiseIXpsk2 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"IXpsk2" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_Npsk0(rs):
--  <- s
--  ...
--  -> psk, e, es@
noiseNpsk0 :: HandshakePattern
noiseNpsk0 :: HandshakePattern
noiseNpsk0 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"Npsk0" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
psk MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_Kpsk0(s, rs):
--  <- s
--  ...
--  -> psk, e, es, ss@
noiseKpsk0 :: HandshakePattern
noiseKpsk0 :: HandshakePattern
noiseKpsk0 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"Kpsk0" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
psk MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss)

-- | @Noise_Xpsk1(s, rs):
--  <- s
--  ...
--  -> e, es, s, ss, psk@
noiseXpsk1 :: HandshakePattern
noiseXpsk1 :: HandshakePattern
noiseXpsk1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"Xpsk1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ss MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
psk)

-- | @Noise_NK1:
--  <- s
--  ...
--  -> e
--  <- e, ee, es
noiseNK1 :: HandshakePattern
noiseNK1 :: HandshakePattern
noiseNK1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NK1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_NX1:
--  -> e
--  <- e, ee, s
--  -> es
noiseNX1 :: HandshakePattern
noiseNX1 :: HandshakePattern
noiseNX1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"NX1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
es

-- | @Noise_X1N:
--  -> e
--  <- e, ee
--  -> s
--  <- se
noiseX1N :: HandshakePattern
noiseX1N :: HandshakePattern
noiseX1N = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"X1N" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder MessagePattern ()
se

-- | @Noise_X1K:
--  <- s
--  ...
--  -> e, es
--  <- e, ee
--  -> s
--  <- se
noiseX1K :: HandshakePattern
noiseX1K :: HandshakePattern
noiseX1K = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"X1K" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder MessagePattern ()
se

-- | @Noise_XK1:
--  <- s
--  ...
--  -> e
--  <- e, ee, es
--  -> s, se
noiseXK1 :: HandshakePattern
noiseXK1 :: HandshakePattern
noiseXK1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"XK1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_X1K1:
--  <- s
--  ...
--  -> e
--  <- e, ee, es
--  -> s
--  <- se
noiseX1K1 :: HandshakePattern
noiseX1K1 :: HandshakePattern
noiseX1K1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"X1K1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder MessagePattern ()
se

-- | @Noise_X1X
--  -> e
--  <- e, ee, s, es
--  -> s
--  <- se
noiseX1X :: HandshakePattern
noiseX1X :: HandshakePattern
noiseX1X = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"X1X" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder MessagePattern ()
se

-- | @Noise_XX1:
--  -> e
--  <- e, ee, s
--  -> es, s, se
noiseXX1 :: HandshakePattern
noiseXX1 :: HandshakePattern
noiseXX1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"XX1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se)

-- | @Noise_X1X1:
--  -> e
--  <- e, ee, s
--  -> es, s
--  <- se
noiseX1X1 :: HandshakePattern
noiseX1X1 :: HandshakePattern
noiseX1X1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"X1X1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder MessagePattern ()
se

-- | @Noise_K1N:
--  -> s
--  ...
--  -> e
--  <- e, ee
--  -> se
noiseK1N :: HandshakePattern
noiseK1N :: HandshakePattern
noiseK1N = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"K1N" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
se

-- | @Noise_K1K:
--  -> s
--  <- s
--  ...
--  -> e, es
--  <- e, ee
--  -> se
noiseK1K :: HandshakePattern
noiseK1K :: HandshakePattern
noiseK1K = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"K1K" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
se

-- | @Noise_KK1:
--  -> s
--  <- s
--  ...
--  -> e
--  <- e, ee, se, es
noiseKK1 :: HandshakePattern
noiseKK1 :: HandshakePattern
noiseKK1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KK1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_K1K1:
--  -> s
--  <- s
--  ...
--  -> e
--  <- e, ee, es
--  -> se
noiseK1K1 :: HandshakePattern
noiseK1K1 :: HandshakePattern
noiseK1K1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"K1K1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
se

-- | @Noise_K1X
--  -> s
--  ...
--  -> e
--  <- e, ee, s, es
--  -> se
noiseK1X :: HandshakePattern
noiseK1X :: HandshakePattern
noiseK1X = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"K1X" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
se

-- | @Noise_KX1
--  -> s
--  ...
--  -> e
--  <- e, ee, se, s
--  -> es
noiseKX1 :: HandshakePattern
noiseKX1 :: HandshakePattern
noiseKX1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"KX1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
es

-- | @Noise_K1X1:
--  -> s
--  ...
--  -> e
--  <- e, ee, s
--  -> se, es
noiseK1X1 :: HandshakePattern
noiseK1X1 :: HandshakePattern
noiseK1X1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"K1X1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preInitiator MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
e MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_I1N:
--  -> e, s
--  <- e, ee
--  -> se
noiseI1N :: HandshakePattern
noiseI1N :: HandshakePattern
noiseI1N = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"I1N" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
se

-- | @Noise_I1K:
--  <- s
--  ...
--  -> e, es, s
--  <- e, ee
--  -> se
noiseI1K :: HandshakePattern
noiseI1K :: HandshakePattern
noiseI1K = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"I1K" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
se

-- | @Noise_IK1:
--  <- s
--  ...
--  -> e, s
--  <- e, ee, se, es
noiseIK1 :: HandshakePattern
noiseIK1 :: HandshakePattern
noiseIK1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"IK1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)

-- | @Noise_I1K1:
--  <- s
--  ...
--  -> e, s
--  <- e, ee, es
--  -> se
noiseI1K1 :: HandshakePattern
noiseI1K1 :: HandshakePattern
noiseI1K1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"I1K1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
preResponder MessagePattern ()
s MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
se

-- | @Noise_I1X:
--  -> e, s
--  <- e, ee, s, es
--  -> se
noiseI1X :: HandshakePattern
noiseI1X :: HandshakePattern
noiseI1X = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"I1X" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
se

-- | @Noise_IX1:
--  -> e, s
--  <- e, ee, se, s
--  -> es
noiseIX1 :: HandshakePattern
noiseIX1 :: HandshakePattern
noiseIX1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"IX1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator MessagePattern ()
es

-- | @Noise_I1X1:
--  -> e, s
--  <- e, ee, s
--  -> se, es
noiseI1X1 :: HandshakePattern
noiseI1X1 :: HandshakePattern
noiseI1X1 = ByteString -> MessageSequence () -> HandshakePattern
handshakePattern ByteString
"I1X1" (MessageSequence () -> HandshakePattern)
-> MessageSequence () -> HandshakePattern
forall a b. (a -> b) -> a -> b
$
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
responder (MessagePattern ()
e MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
ee MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
s) MessageSequence () -> MessageSequence () -> MessageSequence ()
forall a b. Ap Message a -> Ap Message b -> Ap Message b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
  MessagePattern () -> MessageSequence ()
initiator (MessagePattern ()
se MessagePattern () -> MessagePattern () -> MessagePattern ()
forall a b. Ap Token a -> Ap Token b -> Ap Token b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> MessagePattern ()
es)