diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-03-24  Vladimir Shabanov  <vshabanoff@gmail.com>
+
+	* HsOpenSSL.cabal (Version): Bump version to 0.11.4.4
+
+	* OpenSSL/EVP/Digest.hsc (hmacLBS): fixed linking error (#19).
+
+	* Tests/OpenSSL/EVP/Digest.hs: added tests for hmacBS and hmacLBS.
+
 2017-03-22  Vladimir Shabanov  <vshabanoff@gmail.com>
 
 	* HsOpenSSL.cabal (Version): Bump version to 0.11.4.3
diff --git a/HsOpenSSL.cabal b/HsOpenSSL.cabal
--- a/HsOpenSSL.cabal
+++ b/HsOpenSSL.cabal
@@ -12,7 +12,7 @@
     <http://hackage.haskell.org/package/tls>, which is a pure Haskell
     implementation of SSL.
     .
-Version:       0.11.4.3
+Version:       0.11.4.4
 License:       PublicDomain
 License-File:  COPYING
 Author:        Adam Langley, Mikhail Vorozhtsov, PHO, Taru Karttunen
@@ -168,6 +168,19 @@
 Test-Suite test-evp-base64
     Type:    exitcode-stdio-1.0
     Main-Is: Test/OpenSSL/EVP/Base64.hs
+    Other-Modules: Test.OpenSSL.TestUtils
+    Build-Depends:
+        HsOpenSSL,
+        base                 >= 4.4 && < 5,
+        bytestring           >= 0.9 && < 0.11
+    Default-Language:
+        Haskell2010
+    GHC-Options:
+        -Wall
+
+Test-Suite test-evp-digest
+    Type:    exitcode-stdio-1.0
+    Main-Is: Test/OpenSSL/EVP/Digest.hs
     Other-Modules: Test.OpenSSL.TestUtils
     Build-Depends:
         HsOpenSSL,
diff --git a/OpenSSL/EVP/Internal.hsc b/OpenSSL/EVP/Internal.hsc
--- a/OpenSSL/EVP/Internal.hsc
+++ b/OpenSSL/EVP/Internal.hsc
@@ -327,7 +327,7 @@
 newtype HmacCtx = HmacCtx (ForeignPtr HMAC_CTX)
 data HMAC_CTX
 
-foreign import ccall unsafe "HsOpenSSL_HMAC_CTX_init"
+foreign import ccall unsafe "HsOpenSSL_HMAC_CTX_new"
   _hmac_ctx_new :: IO (Ptr HMAC_CTX)
 
 foreign import ccall unsafe "HMAC_Init"
diff --git a/Test/OpenSSL/EVP/Digest.hs b/Test/OpenSSL/EVP/Digest.hs
new file mode 100644
--- /dev/null
+++ b/Test/OpenSSL/EVP/Digest.hs
@@ -0,0 +1,38 @@
+module Main (main) where
+
+import qualified Data.ByteString.Char8 as B
+import qualified Data.ByteString.Lazy.Char8 as BL
+import Data.Char
+import OpenSSL
+import Text.Printf
+import OpenSSL.EVP.Digest
+import Test.OpenSSL.TestUtils
+
+main :: IO ()
+main = withOpenSSL $ do
+    Just md5 <- getDigestByName "MD5"
+    Just sha1 <- getDigestByName "SHA1"
+    Just sha256 <- getDigestByName "SHA256"
+    let hex  = concatMap (printf "%02x" . ord) . B.unpack
+        checkHMAC digestName key testData result = do
+            assertEqual what result $
+                hex $ hmacBS d (B.pack key) (B.pack testData)
+            assertEqual ("lazy " ++ what) result $
+                hex $ hmacLBS d (B.pack key) (BL.pack testData)
+            where what =
+                      "HMAC_" ++ digestName ++
+                      "(" ++ show key ++ ", " ++ show testData ++ ")"
+                  d = case digestName of
+                      "MD5" -> md5
+                      "SHA1" -> sha1
+                      "SHA256" -> sha256
+                      _ -> error digestName
+    -- test data from
+    -- https://en.wikipedia.org/wiki/Hash-based_message_authentication_code
+
+    checkHMAC "MD5" "" ""    "74e6f7298a9c2d168935f58c001bad88"
+    checkHMAC "SHA1" "" ""   "fbdb1d1b18aa6c08324b7d64b71fb76370690e1d"
+    checkHMAC "SHA256" "" "" "b613679a0814d9ec772f95d778c35fc5ff1697c493715653c6c712144292c5ad"
+    checkHMAC "MD5" "key" "The quick brown fox jumps over the lazy dog"    "80070713463e7749b90c2dc24911e275"
+    checkHMAC "SHA1" "key" "The quick brown fox jumps over the lazy dog"   "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9"
+    checkHMAC "SHA256" "key" "The quick brown fox jumps over the lazy dog" "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"
