botan-low-0.0.1.0: test/Botan/Low/PubKey/KeyEncapsulationSpec.hs
module Main where
import Test.Prelude
import Botan.Low.PubKey
import Botan.Low.PubKey.KeyEncapsulation
import Botan.Low.RNG
pks =
[ ( "RSA", "2048", "HKDF(SHA-256)")
, ( "Kyber", "", "HKDF(SHA-256)")
, ( "McEliece", "", "HKDF(SHA-256)")
]
pkTestName :: (ByteString, ByteString, ByteString) -> String
pkTestName (pk, param, kdf) = chars $ pk <> " " <> param <> " " <> kdf
main :: IO ()
main = hspec $ testSuite pks pkTestName $ \ (pk, param, kdf) -> do
it "kemEncryptCreate" $ do
rng <- rngInit "system"
privKey <- privKeyCreate pk param rng
pubKey <- privKeyExportPubKey privKey
kem <- kemEncryptCreate pubKey "HKDF(SHA-256)"
pass
it "kemEncryptSharedKeyLength" $ do
rng <- rngInit "system"
privKey <- privKeyCreate pk param rng
pubKey <- privKeyExportPubKey privKey
kem <- kemEncryptCreate pubKey "HKDF(SHA-256)"
sharedKeyLength <- kemEncryptSharedKeyLength kem 256
pass
it "kemEncryptEncapsulatedKeyLength" $ do
rng <- rngInit "system"
privKey <- privKeyCreate pk param rng
pubKey <- privKeyExportPubKey privKey
kem <- kemEncryptCreate pubKey "HKDF(SHA-256)"
encapsulatedKeyLength <- kemEncryptEncapsulatedKeyLength kem
pass
it "kemEncryptCreateSharedKey" $ do
rng <- rngInit "system"
privKey <- privKeyCreate pk param rng
pubKey <- privKeyExportPubKey privKey
kem <- kemEncryptCreate pubKey "HKDF(SHA-256)"
(sharedKey, encapsulatedKey) <- kemEncryptCreateSharedKey kem rng "salt" 256
pass
it "kemDecryptCreate" $ do
rng <- rngInit "system"
privKey <- privKeyCreate pk param rng
kem <- kemDecryptCreate privKey "HKDF(SHA-256)"
pass
it "kemDecryptSharedKeyLength" $ do
rng <- rngInit "system"
privKey <- privKeyCreate pk param rng
kem <- kemDecryptCreate privKey "HKDF(SHA-256)"
sharedKeyLen <- kemDecryptSharedKeyLength kem 256
pass
it "kemDecryptSharedKey" $ do
rng <- rngInit "system"
privKey <- privKeyCreate pk param rng
pubKey <- privKeyExportPubKey privKey
encryptCtx <- kemEncryptCreate pubKey "HKDF(SHA-256)"
(sharedKey, encapsulatedKey) <- kemEncryptCreateSharedKey encryptCtx rng "salt" 256
decryptCtx <- kemDecryptCreate privKey "HKDF(SHA-256)"
decryptedSharedKey <- kemDecryptSharedKey decryptCtx "salt" encapsulatedKey 256
sharedKey `shouldBe` decryptedSharedKey
pass