HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

ModuleHsOpenSSL-0.11.7.10Haskell2010

OpenSSL

HsOpenSSL is an OpenSSL binding for Haskell. It can generate RSA and DSA keys, read and write PEM files, generate message digests, sign and verify messages, encrypt and decrypt messages.

Please note that this project has started at the time when there were no pure-Haskell implementations of TLS. Now there is tls package (http://hackage.haskell.org/package/tls), which looks pretty saner than HsOpenSSL especially for initialisation and error handlings. So PHO (the initial author of HsOpenSSL) wants to encourage you to use and improve the tls package instead as long as possible. The only problem is that the tls package has not received as much review as OpenSSL from cryptography specialists yet, thus we can't assume it's secure enough.

Features that aren't (yet) supported:

SSL network connection

ssl(3) functionalities aren't fully covered yet. See

OpenSSL.Session

.

Complete coverage of Low-level API to symmetric ciphers

Only high-level APIs (EVP and BIO) are fully available. But I believe no one will be lost without functions like

DES_set_odd_parity

.

Low-level API to asymmetric ciphers

Only a high-level API (EVP) is available. But I believe no one will complain about the absence of functions like

RSA_public_encrypt

.

X.509 v3 extension handling

It should be supported in the future.

Low-level API to message digest functions

Just use EVP instead of something like

MD5_Update

.

API to PKCS#12 functionality

It should be covered someday.

BIO

BIO isn't needed because we are Haskell hackers. Though HsOpenSSL itself uses BIO internally.

ENGINE cryptographic module

The default implementations work very well, don't they?

  • 1 value
  • PackageHsOpenSSL-0.11.7.10
  • Exports1
  • LanguageHaskell2010
  • LicenceLicenseRef-PublicDomain
  • SourceOpenSSL.hs
valuewithOpenSSL :: IO a -> IO a
#

Computation of withOpenSSL action initializes the OpenSSL library as necessary, and computes action. Every application that uses HsOpenSSL must wrap any operations involving OpenSSL with withOpenSSL, or they might crash:

module Main where
import OpenSSL

main :: IO ()
main = withOpenSSL $
       do ...

Since 0.10.3.5, withOpenSSL is safe to be applied redundantly. Library authors may wish to wrap their functions not to force their users to think about initialization:

get :: URI -> IO Response
get uri = withOpenSSL $ internalImplementationOfGet uri