From 0ed87caa3481cbb6f8c2e809e5ec7df6f6245406 Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Fri, 23 Mar 2018 18:34:42 -0400 Subject: Data.Digest: Reify hash algorithms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eliminate the functional interface for hashing. Hashing now occurs exclusively through the `hash` function, which accepts a `Data.Digest.Algorithm`. This makes btls somewhat less extensible, but it’s the most elegant way to support HMACs. --- src/Data/Digest.hs | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'src/Data/Digest.hs') diff --git a/src/Data/Digest.hs b/src/Data/Digest.hs index 6eebd27..7e88c49 100644 --- a/src/Data/Digest.hs +++ b/src/Data/Digest.hs @@ -1,5 +1,48 @@ module Data.Digest - ( Digest + ( Algorithm + , Digest + , hash + , md5 + , sha1 + , sha224 + , sha256 + , sha384 + , sha512 ) where -import Data.Digest.Internal (Digest) \ No newline at end of file +import Foreign (Ptr) + +import Data.Digest.Internal + + +foreign import ccall "openssl/digest.h EVP_md5" evpMd5 :: Ptr EvpMd + +md5 :: Algorithm +md5 = Algorithm evpMd5 + + +foreign import ccall "openssl/digest.h EVP_sha1" evpSha1 :: Ptr EvpMd + +sha1 :: Algorithm +sha1 = Algorithm evpSha1 + + +foreign import ccall "openssl/digest.h EVP_sha224" evpSha224 :: Ptr EvpMd + +foreign import ccall "openssl/digest.h EVP_sha256" evpSha256 :: Ptr EvpMd + +foreign import ccall "openssl/digest.h EVP_sha384" evpSha384 :: Ptr EvpMd + +foreign import ccall "openssl/digest.h EVP_sha512" evpSha512 :: Ptr EvpMd + +sha224 :: Algorithm +sha224 = Algorithm evpSha224 + +sha256 :: Algorithm +sha256 = Algorithm evpSha256 + +sha384 :: Algorithm +sha384 = Algorithm evpSha384 + +sha512 :: Algorithm +sha512 = Algorithm evpSha512 -- cgit v1.2.3