botan-low-0.0.2.0: test/Botan/Low/SRP6Spec.hs
{-# LANGUAGE CPP #-}
#if defined(MIN_VERSION_GLASGOW_HASKELL)
#if MIN_VERSION_GLASGOW_HASKELL(9,8,0,0)
{-# OPTIONS_GHC -Wwarn=x-partial #-}
#endif
#endif
module Main where
import Test.Prelude
import Botan.Low.SRP6
import Botan.Low.RNG
import Botan.Low.PubKey
import Botan.Low.Hash
username :: ByteString
username = "username"
password :: ByteString
password = "password"
salt :: ByteString
salt = "salt"
-- NOTE: Consolidate with DLGroup
groupIds :: [DLGroupName]
groupIds =
[ "ffdhe/ietf/2048"
, "ffdhe/ietf/3072"
, "ffdhe/ietf/4096"
, "ffdhe/ietf/6144"
, "ffdhe/ietf/8192"
, "modp/ietf/1024"
, "modp/ietf/1536"
, "modp/ietf/2048"
, "modp/ietf/3072"
, "modp/ietf/4096"
, "modp/ietf/6144"
, "modp/ietf/8192"
, "modp/srp/1024"
, "modp/srp/1536"
, "modp/srp/2048"
, "modp/srp/3072"
, "modp/srp/4096"
, "modp/srp/6144"
, "modp/srp/8192"
, "dsa/jce/1024"
, "dsa/botan/2048"
, "dsa/botan/3072"
]
groupId :: DLGroupName
groupId = head groupIds
-- TODO: Test which hashes work
hashId :: HashName
hashId = "SHA-256"
main :: IO ()
main = hspec $ testSuite groupIds chars $ \ groupId -> do
it "can negotiate a shared secret" $ do
rng <- rngInit "system"
verifier <- srp6GenerateVerifier username password salt groupId hashId
ctx <- srp6ServerSessionInit
b <- srp6ServerSessionStep1 ctx verifier groupId hashId rng
(a,sharedSecret) <- srp6ClientAgree username password groupId hashId salt b rng
sharedSecret' <- srp6ServerSessionStep2 ctx a
sharedSecret `shouldBe` sharedSecret'
pass