-- | Construct an asymmetric SPAKE2 protocol.
makeAsymmetricProtocol :: hashAlgorithm -> group -> Element group -> Element group -> SideID -> SideID -> WhichSide -> Protocol group hashAlgorithm
makeAsymmetricProtocol hashAlgorithm group blindA blindB sideA sideB whichSide =
  Protocol
  { group = group
  , hashAlgorithm = hashAlgorithm
  , relation = Asymmetric
               { sideA = Side { sideID = sideA, blind = blindA }
               , sideB = Side { sideID = sideB, blind = blindB }
               , us = whichSide
               }
  }
makeAsymmetricProtocol :: hashAlgorithm -> group -> Element group -> Element group -> SideID -> SideID -> WhichSide -> Protocol group hashAlgorithm
makeAsymmetricProtocol hashAlgorithm group blindA blindB sideA sideB whichSide =
  Protocol
  { group = group
  , hashAlgorithm = hashAlgorithm
  , relation = Asymmetric
               { sideA = Side { sideID = sideA, blind = blindA }
               , sideB = Side { sideID = sideB, blind = blindB }
               , us = whichSide
               }
  }
makeAsymmetricProtocol hashAlgorithm group blindA blindB sideA sideB whichSide =
  Protocol
  { group = group
  , hashAlgorithm = hashAlgorithm
  , relation = Asymmetric
               { sideA = Side { sideID = sideA, blind = blindA }
               , sideB = Side { sideID = sideB, blind = blindB }
               , us = whichSide
               }
  }