packages feed

botan-low-0.1.0.0: test/Test/Botan/Low/PubKey/RSA.hs

{-# LANGUAGE OverloadedStrings #-}

module Test.Botan.Low.PubKey.RSA (tests) where

import           Botan.Low.MPI
import           Botan.Low.PubKey
import           Botan.Low.PubKey.RSA
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_rsa" spec_rsa
    pure $ testGroup "Test.Botan.Low.PubKey.RSA" [
        specs
      ]

rsaSizes :: [ByteString]
rsaSizes = [ "2048" ]

-- 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_rsa :: Spec
spec_rsa = testSuite rsaSizes chars $ \ rsaSize -> do
    it "privKeyLoadRSA" $ do
        rng <- rngInit "system"
        privKey <- privKeyCreate "RSA" rsaSize rng
        p <- privKeyField privKey "p"
        q <- privKeyField privKey "q"
        e <- privKeyField privKey "e"
        _loadedKey <- privKeyLoadRSA p q e
        pass
    it "pubKeyLoadRSA" $ do
        rng <- rngInit "system"
        privKey <- privKeyCreate "RSA" rsaSize rng
        pubKey <- privKeyExportPubKey privKey
        n <- pubKeyField pubKey "n"
        e <- pubKeyField pubKey "e"
        _loadedKey <- pubKeyLoadRSA n e
        pass