{-# LANGUAGE BangPatterns #-} module Main where import PregenKeys import Control.Applicative import qualified Crypto.Hash.SHA1 as SHA1 import qualified Crypto.PubKey.RSA as RSA import qualified Crypto.PubKey.RSA.OAEP as RSAOAEP import qualified Crypto.PubKey.RSA.PKCS15 as RSAPKCS15 import qualified Data.ByteString as B import Crypto.Random priv = rsaPrivatekey pub = rsaPublickey oaepParams = RSAOAEP.defaultOAEPParams SHA1.hash doEncrypt = False nbEncrypt = 944242 nbDecrypt = 64325 main = do system <- cprgCreate <$> createEntropyPool :: IO SystemRNG if doEncrypt then do putStrLn $ show $ justEncrypt system nbEncrypt B.empty else do let t = either (error . show) id $ fst $ RSAPKCS15.encrypt system pub msg --let t = either (error . show) id $ RSAOAEP.encryptWithSeed (B.replicate 20 0) oaepParams pub msg putStrLn $ show $ decryptEncrypt nbDecrypt (t, msg) where msg = B.replicate 10 4 decryptEncrypt 0 (!bEnc, !b) = b decryptEncrypt n (!bEnc, !b) = let bDec = either (error . show) id $ RSAPKCS15.decrypt Nothing priv bEnc in --let bDec = either (error . show) id $ RSAOAEP.decrypt Nothing oaepParams priv bEnc in decryptEncrypt (n-1) (bEnc, bDec) justEncrypt _ 0 (!bEnc) = bEnc justEncrypt rng n (!bEnc) = let bEnc2 = either (error . show) id $ fst $ RSAPKCS15.encrypt rng pub msg in justEncrypt rng (n-1) bEnc2