packages feed

HsOpenSSL-0.2: examples/GenRSAKey.hs

import Control.Monad hiding (join)
import OpenSSL
import OpenSSL.EVP.PKey
import OpenSSL.PEM
import OpenSSL.RSA
import System.IO
import Text.Printf

main = withOpenSSL $
       do let keyBits = 512
              keyE    = 65537

          printf "Generating RSA key-pair, nbits = %d, e = %d:\n" keyBits keyE
          
          rsa  <- generateKey keyBits keyE $ Just $ \ phase _ ->
                  do hPutChar stdout $ case phase of
                                         0 -> '.'
                                         1 -> '+'
                                         2 -> '*'
                                         3 -> '\n'
                                         n -> head $ show n
                     hFlush stdout

          printf "Done.\n"
          
          n    <- rsaN rsa
          e    <- rsaE rsa
          d    <- rsaD rsa
          p    <- rsaP rsa
          q    <- rsaQ rsa
          dmp1 <- rsaDMP1 rsa
          dmq1 <- rsaDMQ1 rsa
          iqmp <- rsaIQMP rsa

          printf "n (public modulus) = %s\n" (show n)
          printf "e (public exponent) = %s\n" (show e)
          printf "d (private exponent) = %s\n" (show d)
          printf "p (secret prime factor) = %s\n" (show p)
          printf "q (secret prime factor) = %s\n" (show q)
          printf "dmp1 (d mod (p-1)) = %s\n" (show dmp1)
          printf "dmq1 (d mod (q-1)) = %s\n" (show dmq1)
          printf "iqmp (q^-1 mod p) = %s\n" (show iqmp)

          let pkey = newPKeyRSA rsa
          writePKCS8PrivateKey pkey Nothing >>= putStr
          -- writePublicKey pkey >>= putStr