botan-low-0.1.0.0: test/Test/Botan/Low/PubKey/DH.hs
{-# LANGUAGE OverloadedStrings #-}
module Test.Botan.Low.PubKey.DH (tests) where
import Botan.Low.MPI
import Botan.Low.PubKey
import Botan.Low.PubKey.DH
import Botan.Low.RNG
import Data.ByteString
import Test.Hspec
import Test.Tasty
import Test.Tasty.Hspec
import Test.Util.ByteString
import Test.Util.Hspec
tests :: IO TestTree
tests = do
specs <- testSpec "spec_dh" spec_dh
pure $ testGroup "Test.Botan.Low.PubKey.DH" [
specs
]
-- TODO: Consolidate
dlGroups :: [ByteString]
dlGroups =
[ "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"
]
-- TODO: Consolidate
privKeyField :: PrivKey -> ByteString -> IO MP
privKeyField privKey field = do
mp <- mpInit
privKeyGetField mp privKey field
return mp
-- TODO: Consolidate
pubKeyField :: PubKey -> ByteString -> IO MP
pubKeyField pubKey field = do
mp <- mpInit
pubKeyGetField mp pubKey field
return mp
spec_dh :: Spec
spec_dh = testSuite dlGroups chars $ \ dlGroup -> do
it "privKeyLoadDH" $ do
rng <- rngInit "system"
privKey <- privKeyCreate "DH" dlGroup rng
p <- privKeyField privKey "p"
g <- privKeyField privKey "g"
x <- privKeyField privKey "x"
_loadedKey <- privKeyLoadDH p g x
pass
it "pubKeyLoadDH" $ do
rng <- rngInit "system"
privKey <- privKeyCreate "DH" dlGroup rng
pubKey <- privKeyExportPubKey privKey
p <- pubKeyField pubKey "p"
g <- pubKeyField pubKey "g"
y <- pubKeyField pubKey "y"
_loadedKey <- pubKeyLoadDH p g y
pass