botan-low-0.1.0.0: test/Test/Botan/Low/PubKey/DSA.hs
{-# LANGUAGE OverloadedStrings #-}
module Test.Botan.Low.PubKey.DSA (tests) where
import Botan.Low.MPI
import Botan.Low.PubKey
import Botan.Low.PubKey.DSA
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_dsa" spec_dsa
pure $ testGroup "Test.Botan.Low.PubKey.DSA" [
specs
]
-- TODO: Consolidate
dlGroups :: [ByteString]
dlGroups =
[ "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
-- NOTE: Fields are
-- DLGroup PubKey: p, q, g, y
-- DLGroup PrivKey: p, q, g, x, y
-- NOTE: Fails on pubKeyLoadDSA for srp curves (but not privKeyLoadDSA?)
spec_dsa :: Spec
spec_dsa = testSuite dlGroups chars $ \ dlGroup -> do
it "privKeyLoadDSA" $ do
rng <- rngInit "system"
privKey <- privKeyCreate "DSA" dlGroup rng
p <- privKeyField privKey "p"
q <- privKeyField privKey "q"
g <- privKeyField privKey "g"
x <- privKeyField privKey "x"
_loadedKey <- privKeyLoadDSA p q g x
pass
it "pubKeyLoadDSA" $ do
rng <- rngInit "system"
privKey <- privKeyCreate "DSA" dlGroup rng
pubKey <- privKeyExportPubKey privKey
p <- pubKeyField pubKey "p"
q <- pubKeyField pubKey "q"
g <- pubKeyField pubKey "g"
y <- pubKeyField pubKey "y"
_loadedKey <- pubKeyLoadDSA p q g y
pass