startSpake2
  :: (MonadRandom randomly, AbelianGroup group)
  => Protocol group hashAlgorithm
  -> Password
  -> randomly (Math.Spake2Exchange group)
startSpake2 protocol password =
  Math.startSpake2 Math.Spake2 { Math.params = getParams protocol
                               , Math.password = passwordToScalar (group protocol) password
                               }
startSpake2
  :: (MonadRandom randomly, AbelianGroup group)
  => Protocol group hashAlgorithm
  -> Password
  -> randomly (Math.Spake2Exchange group)
startSpake2 protocol password =
  Math.startSpake2 Math.Spake2 { Math.params = getParams protocol
                               , Math.password = passwordToScalar (group protocol) password
                               }
startSpake2 protocol password =
  Math.startSpake2 Math.Spake2 { Math.params = getParams protocol
                               , Math.password = passwordToScalar (group protocol) password
                               }