{- |
	NTRU cryptographic system using the EES401EP1 parameter set, for use at the 112-bit security level.
-}

module Math.NTRU.EES401EP1 (keyGen, encrypt, decrypt) where

import qualified Math.NTRU as NTRU

-- | Generates a random PublicKey-PrivateKey pair
keyGen :: IO ([Integer], [Integer]) -- ^ A tuple representing (PublicKey, PrivateKey) where PrivateKey = 1 + pf, per <https://www.securityinnovation.com/uploads/Crypto/NTRU%20Enhancements%201.pdf enahncement#2>.
keyGen = NTRU.keyGen (NTRU.genParams "EES401EP1")


-- | Encrypts a message with the given public key
encrypt :: [Integer] -- ^ A list of ASCII values representing the message
              -> [Integer] -- ^ A list of numbers representing the public key
              -> IO [Integer] -- ^ A list of numbers representing the ciphertext
encrypt = NTRU.encrypt (NTRU.genParams "EES401EP1")

-- | Decrypts and verifies a cyphertext with the given keys
decrypt :: [Integer] -- ^ A list of numbers representing the private key
              -> [Integer] -- ^ A list of numbers representing the public key
              -> [Integer] -- ^ A list of numbers representing the ciphertext
              -> Maybe [Integer] -- ^ A list of numbers representing the original message, or nothing on failure
decrypt = NTRU.decrypt (NTRU.genParams "EES401EP1")