main :: IO ()
main = do
  authKeyToEval <- authEnv
  authKey <- evaluate $ force authKeyToEval

  oneTimeAuthKeyToEval <- oneTimeAuthEnv
  oneTimeAuthKey <- evaluate $ force oneTimeAuthKeyToEval

  boxToEval <- boxEnv
  boxKeys <- evaluate $ force boxToEval

  secretboxKeyToEval <- secretboxEnv
  secretboxKey <- evaluate $ force secretboxKeyToEval

  scmlToEval <- scalarMultEnv
  scml <- evaluate $ force scmlToEval

  signToEval <- signEnv
  signKey <- evaluate $ force signToEval

  streamKeyToEval <- streamEnv
  streamKey <- evaluate $ force streamKeyToEval

  passwordSaltToEval <- passwordEnv
  passwordSalt <- evaluate $ force passwordSaltToEval

  hashKeysToEval <- hashEnv
  hashKeys <- evaluate $ force hashKeysToEval

  aes256GCMKeyToEval <- aes256GCMEnv
  aes256GCMKey <- evaluate $ force aes256GCMKeyToEval

  chaCha20Poly1305KeyToEval <- chaCha20Poly1305Env
  chaCha20Poly1305Key <- evaluate $ force chaCha20Poly1305KeyToEval

  chaCha20Poly1305IETFKeyToEval <- chaCha20Poly1305IETFEnv
  chaCha20Poly1305IETFKey <- evaluate $ force chaCha20Poly1305IETFKeyToEval

  xChaCha20Poly1305KeyToEval <- xChaCha20Poly1305Env
  xChaCha20Poly1305Key <- evaluate $ force xChaCha20Poly1305KeyToEval

  defaultMain [
      benchAuth authKey
    , benchOneTimeAuth oneTimeAuthKey
    , benchBox boxKeys
    , benchSecretbox secretboxKey
    , benchHash hashKeys
    , benchScalarMult scml
    , benchSign signKey
    , benchStream streamKey
    , benchPassword passwordSalt
    , benchComparison
    , benchAes256GCM aes256GCMKey
    , benchChaCha20Poly1305 chaCha20Poly1305Key
    , benchChaCha20Poly1305IETF chaCha20Poly1305IETFKey
    , benchXChaCha20Poly1305 xChaCha20Poly1305Key
    ]
main :: IO ()
main = do
  authKeyToEval <- authEnv
  authKey <- evaluate $ force authKeyToEval

  oneTimeAuthKeyToEval <- oneTimeAuthEnv
  oneTimeAuthKey <- evaluate $ force oneTimeAuthKeyToEval

  boxToEval <- boxEnv
  boxKeys <- evaluate $ force boxToEval

  secretboxKeyToEval <- secretboxEnv
  secretboxKey <- evaluate $ force secretboxKeyToEval

  scmlToEval <- scalarMultEnv
  scml <- evaluate $ force scmlToEval

  signToEval <- signEnv
  signKey <- evaluate $ force signToEval

  streamKeyToEval <- streamEnv
  streamKey <- evaluate $ force streamKeyToEval

  passwordSaltToEval <- passwordEnv
  passwordSalt <- evaluate $ force passwordSaltToEval

  hashKeysToEval <- hashEnv
  hashKeys <- evaluate $ force hashKeysToEval

  aes256GCMKeyToEval <- aes256GCMEnv
  aes256GCMKey <- evaluate $ force aes256GCMKeyToEval

  chaCha20Poly1305KeyToEval <- chaCha20Poly1305Env
  chaCha20Poly1305Key <- evaluate $ force chaCha20Poly1305KeyToEval

  chaCha20Poly1305IETFKeyToEval <- chaCha20Poly1305IETFEnv
  chaCha20Poly1305IETFKey <- evaluate $ force chaCha20Poly1305IETFKeyToEval

  xChaCha20Poly1305KeyToEval <- xChaCha20Poly1305Env
  xChaCha20Poly1305Key <- evaluate $ force xChaCha20Poly1305KeyToEval

  defaultMain [
      benchAuth authKey
    , benchOneTimeAuth oneTimeAuthKey
    , benchBox boxKeys
    , benchSecretbox secretboxKey
    , benchHash hashKeys
    , benchScalarMult scml
    , benchSign signKey
    , benchStream streamKey
    , benchPassword passwordSalt
    , benchComparison
    , benchAes256GCM aes256GCMKey
    , benchChaCha20Poly1305 chaCha20Poly1305Key
    , benchChaCha20Poly1305IETF chaCha20Poly1305IETFKey
    , benchXChaCha20Poly1305 xChaCha20Poly1305Key
    ]
main = do
  authKeyToEval <- authEnv
  authKey <- evaluate $ force authKeyToEval

  oneTimeAuthKeyToEval <- oneTimeAuthEnv
  oneTimeAuthKey <- evaluate $ force oneTimeAuthKeyToEval

  boxToEval <- boxEnv
  boxKeys <- evaluate $ force boxToEval

  secretboxKeyToEval <- secretboxEnv
  secretboxKey <- evaluate $ force secretboxKeyToEval

  scmlToEval <- scalarMultEnv
  scml <- evaluate $ force scmlToEval

  signToEval <- signEnv
  signKey <- evaluate $ force signToEval

  streamKeyToEval <- streamEnv
  streamKey <- evaluate $ force streamKeyToEval

  passwordSaltToEval <- passwordEnv
  passwordSalt <- evaluate $ force passwordSaltToEval

  hashKeysToEval <- hashEnv
  hashKeys <- evaluate $ force hashKeysToEval

  aes256GCMKeyToEval <- aes256GCMEnv
  aes256GCMKey <- evaluate $ force aes256GCMKeyToEval

  chaCha20Poly1305KeyToEval <- chaCha20Poly1305Env
  chaCha20Poly1305Key <- evaluate $ force chaCha20Poly1305KeyToEval

  chaCha20Poly1305IETFKeyToEval <- chaCha20Poly1305IETFEnv
  chaCha20Poly1305IETFKey <- evaluate $ force chaCha20Poly1305IETFKeyToEval

  xChaCha20Poly1305KeyToEval <- xChaCha20Poly1305Env
  xChaCha20Poly1305Key <- evaluate $ force xChaCha20Poly1305KeyToEval

  defaultMain [
      benchAuth authKey
    , benchOneTimeAuth oneTimeAuthKey
    , benchBox boxKeys
    , benchSecretbox secretboxKey
    , benchHash hashKeys
    , benchScalarMult scml
    , benchSign signKey
    , benchStream streamKey
    , benchPassword passwordSalt
    , benchComparison
    , benchAes256GCM aes256GCMKey
    , benchChaCha20Poly1305 chaCha20Poly1305Key
    , benchChaCha20Poly1305IETF chaCha20Poly1305IETFKey
    , benchXChaCha20Poly1305 xChaCha20Poly1305Key
    ]