[Haskell-iPhone] FFI calls into Haskell taking a long time

James Parker jp at jamesparker.me
Wed Apr 6 21:25:37 UTC 2016


Hi,

I’m exporting a Haskell function that generates RSA keys for an iOS application. I’m using the crypto-pubkey and crypto-random packages. Unfortunately, the key generation is taking an extremely long time (around 5 minutes) when run in the simulator (XCode 7.2.1). When running Haskell code through Criterion, key generation only takes 110ms. When benchmarking a c program that links the Haskell FFI library (on my x86 laptop), key generation takes about 130ms. 

Does anyone have any ideas why this is so much slower on the simulator? I thought maybe there was an issue with running out of randomness, so I tried creating a fixed seed by using `createTestEntropyPool`, but this did not make any difference. I’ve included the relevant key generate function below. 

gen :: MonadRandom m => m (RSA.PublicKey, RSA.PrivateKey)
gen = withCPRG $ \prg -> return $ RSA.generate prg 256 65537

instance MonadRandom IO where
    type MonadCPRG IO = SystemRNG

    withCPRG f = do
        entropy <- createEntropyPool
        (res, _) <- f $ cprgCreate entropy
        return res

I’d appreciate any help.

Thanks!

James


More information about the iPhone mailing list