diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for sha1
 
+## 0.1.1.1 -- 2024-01-31
+
+* Update package metadata.
+
 ## 0.1.1.0 -- 2023-07-27
 
 * Add function for encoding to `ByteArrayN`.
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/sha1.cabal b/sha1.cabal
--- a/sha1.cabal
+++ b/sha1.cabal
@@ -1,50 +1,56 @@
-cabal-version: 2.2
-name: sha1
-version: 0.1.1.0
-synopsis: SHA-1 Hash
+cabal-version:      2.2
+name:               sha1
+version:            0.1.1.1
+synopsis:           SHA-1 Hash
 description:
   This library is a copy of cryptohash-sha1 that works on GC-managed
   byte arrays instead of ByteString. The C code is a copied from
   that library. If you find an issue with the C code, you should
   open an issue on cryptohash-sha1.
-homepage: https://github.com/byteverse/sha1
-bug-reports: https://github.com/byteverse/sha1/issues
-license: BSD-3-Clause
-license-file: LICENSE
-author: Andrew Martin
-maintainer: andrew.thaddeus@gmail.com
-copyright: 2020 Andrew Martin
-category: Data
-build-type: Simple
-extra-source-files:
-  CHANGELOG.md
-  cbits/sha1.h
 
+homepage:           https://github.com/byteverse/sha1
+bug-reports:        https://github.com/byteverse/sha1/issues
+license:            BSD-3-Clause
+license-file:       LICENSE
+author:             Andrew Martin
+maintainer:         amartin@layer3com.com
+copyright:          2020 Andrew Martin
+category:           Data
+build-type:         Simple
+extra-source-files: cbits/sha1.h
+extra-doc-files:    CHANGELOG.md
+
 library
-  c-sources: cbits/sha1.c
-  cc-options: -Wall -O3
-  include-dirs: cbits
-  hs-source-dirs: src
-  exposed-modules: Hash.Sha1
+  c-sources:        cbits/sha1.c
+  cc-options:       -Wall
+  include-dirs:     cbits
+  hs-source-dirs:   src
+  exposed-modules:  Hash.Sha1
   build-depends:
-    , base >=4.12 && <5
-    , primitive >=0.7 && <0.8
-    , bytebuild >=0.3.4 && <0.4
-    , byteslice >=0.2.11.1 && <0.3
-    , run-st >=0.1.3
+    , base       >=4.12     && <5
+    , bytebuild  >=0.3.4    && <0.4
+    , byteslice  >=0.2.11.1 && <0.3
+    , primitive  >=0.7      && <0.10
+    , run-st     >=0.1.3    && <0.2
+
   default-language: Haskell2010
-  ghc-options: -O2 -Wall
+  ghc-options:      -O2 -Wall
 
 test-suite test
-  Default-Language: Haskell2010
-  hs-source-dirs: test
-  main-is: Main.hs
-  type: exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  type:             exitcode-stdio-1.0
   build-depends:
     , base
-    , bytebuild >=0.3.4
-    , byteslice >=0.1.4.0
-    , natural-arithmetic >=0.1.1
+    , bytebuild           >=0.3.4
+    , byteslice           >=0.1.4.0
+    , natural-arithmetic  >=0.1.1   && <0.2
     , primitive
     , sha1
-  ghc-options: -O2 -Wall
+
+  ghc-options:      -O2 -Wall
+
+source-repository head
+  type:     git
+  location: git://github.com/byteverse/sha1.git
diff --git a/src/Hash/Sha1.hs b/src/Hash/Sha1.hs
--- a/src/Hash/Sha1.hs
+++ b/src/Hash/Sha1.hs
@@ -1,6 +1,6 @@
-{-# language DataKinds #-}
-{-# language MagicHash #-}
-{-# language UnliftedFFITypes #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE UnliftedFFITypes #-}
 
 module Hash.Sha1
   ( boundedBuilder
@@ -11,9 +11,9 @@
 import Control.Monad.ST.Run (runByteArrayST)
 import Data.Bytes.Builder.Bounded as BB
 import Data.Bytes.Builder.Bounded.Unsafe as BBU
-import Data.Bytes.Types (Bytes(Bytes),ByteArrayN(ByteArrayN))
-import Data.Primitive (ByteArray(..),MutableByteArray(..))
-import GHC.Exts (Int(I#),Int#,MutableByteArray#,ByteArray#)
+import Data.Bytes.Types (ByteArrayN (ByteArrayN), Bytes (Bytes))
+import Data.Primitive (ByteArray (..), MutableByteArray (..))
+import GHC.Exts (ByteArray#, Int (I#), Int#, MutableByteArray#)
 import GHC.IO (unsafeIOToST)
 
 import qualified Data.Primitive as PM
@@ -27,14 +27,16 @@
 
 -- | Hash the byte sequence, returning the result as a builder.
 boundedBuilder :: Bytes -> BB.Builder 20
-boundedBuilder (Bytes arr off len) = BBU.construct
-  (\buf ix -> do
-    performHash buf ix arr off len
-    pure (ix + 20)
-  )
+boundedBuilder (Bytes arr off len) =
+  BBU.construct
+    ( \buf ix -> do
+        performHash buf ix arr off len
+        pure (ix + 20)
+    )
 
--- | Hash the byte sequence, returning the result as a byte array
--- known to have exactly 20 bytes.
+{- | Hash the byte sequence, returning the result as a byte array
+known to have exactly 20 bytes.
+-}
 byteArrayN :: Bytes -> ByteArrayN 20
 byteArrayN (Bytes arr off len) = ByteArrayN $ runByteArrayST $ do
   dst <- PM.newByteArray 20
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -1,12 +1,13 @@
-{-# language BangPatterns #-}
+{-# LANGUAGE BangPatterns #-}
 
 import Data.Primitive (ByteArray)
 import Data.Word (Word8)
 import Numeric (showHex)
 
 import qualified Arithmetic.Nat as Nat
-import qualified Data.Bytes.Builder.Bounded as BB
 import qualified Data.Bytes as Bytes
+import qualified Data.Bytes.Builder.Bounded as BB
+import qualified Data.Bytes.Text.Ascii as Ascii
 import qualified Data.Primitive as PM
 import qualified GHC.Exts as Exts
 import qualified Hash.Sha1 as Sha1
@@ -23,27 +24,49 @@
     else fail "Did not match"
 
 printHash :: ByteArray -> IO ()
-printHash !b = putStr (go 0) where
-  go !ix = if ix < 20
-    then let val = PM.indexByteArray b ix :: Word8 in
-      if val < 16
-        then '0' : showHex val (go (ix + 1))
-        else showHex val (go (ix + 1))
-    else "\n"
+printHash !b = putStr (go 0)
+ where
+  go !ix =
+    if ix < 20
+      then
+        let val = PM.indexByteArray b ix :: Word8
+         in if val < 16
+              then '0' : showHex val (go (ix + 1))
+              else showHex val (go (ix + 1))
+      else "\n"
 
 actual :: ByteArray
-actual = BB.run Nat.constant
-  (Sha1.boundedBuilder
-    (Bytes.unsafeDrop 5
-      (Bytes.fromAsciiString "12345theoceanscovertheearth")
+actual =
+  BB.run
+    Nat.constant
+    ( Sha1.boundedBuilder
+        ( Bytes.unsafeDrop
+            5
+            (Ascii.fromString "12345theoceanscovertheearth")
+        )
     )
-  )
 
 expected :: ByteArray
-expected = Exts.fromList
-  [ 0x2d, 0x4c, 0xbf, 0xa2
-  , 0x04, 0xb2, 0x0a, 0xda
-  , 0x06, 0xee, 0xbf, 0x8b
-  , 0x2c, 0x22, 0x23, 0x0c
-  , 0x51, 0xe7, 0x55, 0x8f
-  ]
+expected =
+  Exts.fromList
+    [ 0x2d
+    , 0x4c
+    , 0xbf
+    , 0xa2
+    , 0x04
+    , 0xb2
+    , 0x0a
+    , 0xda
+    , 0x06
+    , 0xee
+    , 0xbf
+    , 0x8b
+    , 0x2c
+    , 0x22
+    , 0x23
+    , 0x0c
+    , 0x51
+    , 0xe7
+    , 0x55
+    , 0x8f
+    ]
