Julia interface to the crypto API of openssl
3 Stars
Updated Last
2 Years Ago
Started In
May 2013


Julia interface to crypto functions from OpenSSL.

gen/generate.jl generates the wrapper using Clang.jl

src/crpyto_* files are the generated files src/Crypto.jl and OpenSSL.jl includes the generated files


  • Currently functions in openssl/md5.h, openssl/hmac.h, openssl/sha.h and openssl/evp.h have been wrapped

  • Please refer to openssl documentation on using them

  • The EVP_* family of functions provide higer level functions for other lower level openssl functions.

  • man EVP_DigestInit has information on using them.

  • Additionally, the following utility functions have been provided.

hmacsha256_digest(s::String, k::Union(String, Vector{Uint8})) -> Vector{Uint8} returns a 32 byte HMACSHA256 digest for the given data and key

hmacsha1_digest(s::String, k::Union(String, Vector{Uint8})) -> Vector{Uint8} returns a 20 byte HMACSHA1 digest for given data and key

md5(s::String) -> Vector{Uint8} is a regular 16 byte MD5 digest of the string

md5(s::IO) -> Vector{Uint8} same as md5 above, except that it processes the IOStream or IOBuffer in 64K chunks


using OpenSSLCrypto.Crypto
sb = bytes2hex(Crypto.hmacsha256_digest("The quick brown fox jumps over the lazy dog", "key"))
assert(sb == "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8")


  • More utility functions
  • More crypto functions exposed