packages feed

botan-low-0.0.1.0: test/Botan/Low/PubKey/SignSpec.hs

module Main where

import Test.Prelude

import Botan.Low.PubKey
import Botan.Low.PubKey.Sign
import Botan.Low.RNG

ecGroup :: ByteString
ecGroup = "secp256r1"

dlGroup :: ByteString
dlGroup = "modp/ietf/1024"

sha = "SHA-256"

-- TODO: More exhaustive testing in botan
-- pks :: [(PKName, PKParams, Padding)]
pks :: [(ByteString, ByteString, ByteString)]
pks =
    [ ("RSA", "2048", "EMSA4(SHA-256)") -- NOTE: It is not yet known if any of the others suppport EMSA
    , ("SM2", "sm2p256v1", "foo,SHA-256")
    , ("DSA", dlGroup, sha)
    , ("ECDSA", ecGroup, sha)
    , ("ECKCDSA", ecGroup, sha)
    , ("ECGDSA", ecGroup, sha)
    , ("GOST-34.10", ecGroup, sha)
    , ("Ed25519", "", "")
    , ("XMSS",  "XMSS-SHAKE_10_256", "")
    -- TODO: Dilithium-x-y
    , ("Dilithium", "", "")
    -- TODO: SPHINCS+
    ]

pkTestName :: (ByteString, ByteString, ByteString) -> String
pkTestName (pk, param, padding) = chars $ pk <> " " <> param <> " " <> padding

-- NOTE: Some algorithms do not support DER format encoding.
main :: IO ()
main = hspec $ testSuite pks pkTestName $ \ (pk, param, algo) -> do
    it "signCreate" $ do
        rng <- rngInit "system"
        privKey <- privKeyCreate pk param rng
        ctx <- signCreate privKey algo StandardFormatSignature
        -- ctxDER <- signCreate privKey algo DERFormatSignature
        pass
    it "signOutputLength" $ do
        rng <- rngInit "system"
        privKey <- privKeyCreate pk param rng
        ctx <- signCreate privKey algo StandardFormatSignature
        sigLen <- signOutputLength ctx
        -- ctxDER <- signCreate privKey algo DERFormatSignature
        -- _ <- signOutputLength ctxDER
        pass
    it "signUpdate" $ do
        rng <- rngInit "system"
        privKey <- privKeyCreate pk param rng
        ctx <- signCreate privKey algo StandardFormatSignature
        signUpdate ctx "Fee fi fo fum!"
        pass
    it "signFinish" $ do
        rng <- rngInit "system"
        privKey <- privKeyCreate pk param rng
        ctx <- signCreate privKey algo StandardFormatSignature
        signUpdate ctx "Fee fi fo fum!"
        sig <- signFinish ctx rng
        pass