botan-low-0.0.2.0: test/Botan/Low/PubKey/ECDSASpec.hs
module Main where
import Test.Prelude
import Botan.Low.MPI
import Botan.Low.RNG
import Botan.Low.PubKey
import Botan.Low.PubKey.ECDSA
-- TODO: Consolidate
ecGroups :: [ByteString]
ecGroups =
[ "secp160k1"
, "secp160r1"
, "secp160r2"
, "secp192k1"
, "secp192r1"
, "secp224k1"
, "secp224r1"
, "secp256k1"
, "secp256r1"
, "secp384r1"
, "secp521r1"
, "brainpool160r1"
, "brainpool192r1"
, "brainpool224r1"
, "brainpool256r1"
, "brainpool320r1"
, "brainpool384r1"
, "brainpool512r1"
, "x962_p192v2"
, "x962_p192v3"
, "x962_p239v1"
, "x962_p239v2"
, "x962_p239v3"
, "gost_256A"
, "gost_512A"
, "frp256v1"
, "sm2p256v1"
]
-- 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
-- TODO: Don't assume just "ECDSA", other elliptic curve DSA might be valid here
main :: IO ()
main = hspec $ testSuite ecGroups chars $ \ ecGroup -> do
it "privKeyLoadECDSA" $ do
rng <- rngInit "system"
privKey <- privKeyCreate "ECDSA" ecGroup rng
x <- privKeyField privKey "x"
loadedPrivKey <- privKeyLoadECDSA x ecGroup
pass
it "pubKeyLoadECDSA" $ do
rng <- rngInit "system"
privKey <- privKeyCreate "ECDSA" ecGroup rng
pubKey <- privKeyExportPubKey privKey
public_x <- pubKeyField pubKey "public_x"
public_y <- pubKeyField pubKey "public_y"
loadedPubKey <- pubKeyLoadECDSA public_x public_y ecGroup
pass