depressed-pho/HsOpenSSL

OpenSSL.EVP.Cipher.getCipherNames doesn't return any ciphers

thoughtpolice opened this issue · 3 comments

GHC 7.4.1, when using the EVP.Cipher module I get no ciphers listed, although OpenSSL on my machine has plenty of options:

$ ghci
GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> import OpenSSL.EVP.Cipher 
Prelude OpenSSL.EVP.Cipher> :!openssl list-cipher-commands
aes-128-cbc
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc
aes-256-ecb
base64
bf
bf-cbc
bf-cfb
bf-ecb
bf-ofb
camellia-128-cbc
camellia-128-ecb
camellia-192-cbc
camellia-192-ecb
camellia-256-cbc
camellia-256-ecb
cast
cast-cbc
cast5-cbc
cast5-cfb
cast5-ecb
cast5-ofb
des
des-cbc
des-cfb
des-ecb
des-ede
des-ede-cbc
des-ede-cfb
des-ede-ofb
des-ede3
des-ede3-cbc
des-ede3-cfb
des-ede3-ofb
des-ofb
des3
desx
rc2
rc2-40-cbc
rc2-64-cbc
rc2-cbc
rc2-cfb
rc2-ecb
rc2-ofb
rc4
rc4-40
seed
seed-cbc
seed-cfb
seed-ecb
seed-ofb
zlib
Prelude OpenSSL.EVP.Cipher> getCipherNames 
Loading package bytestring-0.9.2.1 ... linking ... done.
Loading package transformers-0.3.0.0 ... linking ... done.
Loading package mtl-2.1 ... linking ... done.
Loading package array-0.4.0.0 ... linking ... done.
Loading package deepseq-1.3.0.0 ... linking ... done.
Loading package text-0.11.2.0 ... linking ... done.
Loading package parsec-3.1.2 ... linking ... done.
Loading package unix-2.5.1.0 ... linking ... done.
Loading package network-2.3.0.11 ... linking ... done.
Loading package old-locale-1.0.0.4 ... linking ... done.
Loading package time-1.4 ... linking ... done.
Loading package HsOpenSSL-0.10.2 ... linking ... done.
[]
Prelude OpenSSL.EVP.Cipher> x <- getCipherByName "rc4"
Prelude OpenSSL.EVP.Cipher> case x of { Just _ -> print 1; }
*** Exception: <interactive>:6:1-32: Non-exhaustive patterns in case

Prelude OpenSSL.EVP.Cipher> x <- getCipherByName "aes-256-cbc"
Prelude OpenSSL.EVP.Cipher> case x of { Just _ -> print 1; }
*** Exception: <interactive>:8:1-32: Non-exhaustive patterns in case

Prelude OpenSSL.EVP.Cipher> 
mvv commented

HsOpenSSL calls must be wrapped in withOpenSSL:

$ ghci
GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
λ> import OpenSSL (withOpenSSL)
λ> import OpenSSL.EVP.Cipher (getCipherNames)
λ> withOpenSSL $ getCipherNames
Loading package bytestring-0.9.2.1 ... linking ... done.
Loading package transformers-0.2.2.0 ... linking ... done.
Loading package mtl-2.0.1.0 ... linking ... done.
Loading package array-0.4.0.0 ... linking ... done.
Loading package deepseq-1.3.0.0 ... linking ... done.
Loading package text-0.11.1.13 ... linking ... done.
Loading package parsec-3.1.2 ... linking ... done.
Loading package unix-2.5.1.0 ... linking ... done.
Loading package network-2.3.0.11 ... linking ... done.
Loading package old-locale-1.0.0.4 ... linking ... done.
Loading package time-1.4 ... linking ... done.
Loading package HsOpenSSL-0.10.1.4 ... linking ... done.
["AES-128-CBC","AES-128-CFB","AES-128-CFB1","AES-128-CFB8","AES-128-CTR","AES-128-ECB","AES-128-OFB","AES-128-XTS","AES-192-CBC","AES-192-CFB","AES-192-CFB1","AES-192-CFB8","AES-192-CTR","AES-192-ECB","AES-192-OFB","AES-256-CBC","AES-256-CFB","AES-256-CFB1","AES-256-CFB8","AES-256-CTR","AES-256-ECB","AES-256-OFB","AES-256-XTS","AES128","AES192","AES256","BF","BF-CBC","BF-CFB","BF-ECB","BF-OFB","CAMELLIA-128-CBC","CAMELLIA-128-CFB","CAMELLIA-128-CFB1","CAMELLIA-128-CFB8","CAMELLIA-128-ECB","CAMELLIA-128-OFB","CAMELLIA-192-CBC","CAMELLIA-192-CFB","CAMELLIA-192-CFB1","CAMELLIA-192-CFB8","CAMELLIA-192-ECB","CAMELLIA-192-OFB","CAMELLIA-256-CBC","CAMELLIA-256-CFB","CAMELLIA-256-CFB1","CAMELLIA-256-CFB8","CAMELLIA-256-ECB","CAMELLIA-256-OFB","CAMELLIA128","CAMELLIA192","CAMELLIA256","CAST","CAST-cbc","CAST5-CBC","CAST5-CFB","CAST5-ECB","CAST5-OFB","DES","DES-CBC","DES-CFB","DES-CFB1","DES-CFB8","DES-ECB","DES-EDE","DES-EDE-CBC","DES-EDE-CFB","DES-EDE-OFB","DES-EDE3","DES-EDE3-CBC","DES-EDE3-CFB","DES-EDE3-CFB1","DES-EDE3-CFB8","DES-EDE3-OFB","DES-OFB","DES3","DESX","DESX-CBC","IDEA","IDEA-CBC","IDEA-CFB","IDEA-ECB","IDEA-OFB","RC2","RC2-40-CBC","RC2-64-CBC","RC2-CBC","RC2-CFB","RC2-ECB","RC2-OFB","RC4","RC4-40","RC4-HMAC-MD5","SEED","SEED-CBC","SEED-CFB","SEED-ECB","SEED-OFB","aes-128-cbc","aes-128-cfb","aes-128-cfb1","aes-128-cfb8","aes-128-ctr","aes-128-ecb","aes-128-gcm","aes-128-ofb","aes-128-xts","aes-192-cbc","aes-192-cfb","aes-192-cfb1","aes-192-cfb8","aes-192-ctr","aes-192-ecb","aes-192-gcm","aes-192-ofb","aes-256-cbc","aes-256-cfb","aes-256-cfb1","aes-256-cfb8","aes-256-ctr","aes-256-ecb","aes-256-gcm","aes-256-ofb","aes-256-xts","aes128","aes192","aes256","bf","bf-cbc","bf-cfb","bf-ecb","bf-ofb","blowfish","camellia-128-cbc","camellia-128-cfb","camellia-128-cfb1","camellia-128-cfb8","camellia-128-ecb","camellia-128-ofb","camellia-192-cbc","camellia-192-cfb","camellia-192-cfb1","camellia-192-cfb8","camellia-192-ecb","camellia-192-ofb","camellia-256-cbc","camellia-256-cfb","camellia-256-cfb1","camellia-256-cfb8","camellia-256-ecb","camellia-256-ofb","camellia128","camellia192","camellia256","cast","cast-cbc","cast5-cbc","cast5-cfb","cast5-ecb","cast5-ofb","des","des-cbc","des-cfb","des-cfb1","des-cfb8","des-ecb","des-ede","des-ede-cbc","des-ede-cfb","des-ede-ofb","des-ede3","des-ede3-cbc","des-ede3-cfb","des-ede3-cfb1","des-ede3-cfb8","des-ede3-ofb","des-ofb","des3","desx","desx-cbc","id-aes128-GCM","id-aes192-GCM","id-aes256-GCM","idea","idea-cbc","idea-cfb","idea-ecb","idea-ofb","rc2","rc2-40-cbc","rc2-64-cbc","rc2-cbc","rc2-cfb","rc2-ecb","rc2-ofb","rc4","rc4-40","rc4-hmac-md5","seed","seed-cbc","seed-cfb","seed-ecb","seed-ofb"]

Usually you just do

main = withOpenSSL $ do
  ...

You're correct! Thanks for the tip.

You are correct Mikhail. In fact that's one of reasons why I began to think tls is better than HsOpenSSL...