diff --git a/cabal-sign.cabal b/cabal-sign.cabal
--- a/cabal-sign.cabal
+++ b/cabal-sign.cabal
@@ -1,5 +1,5 @@
 name:                cabal-sign
-version:             0.4.0.0
+version:             0.4.1.0
 synopsis:            Sign and verify Cabal packages.
 description:         Sign and verify Cabal packages.
 license:             BSD3
@@ -15,7 +15,6 @@
   ghc-options: -O2
   hs-source-dirs:      src
   build-depends:       base > 4 && < 5,
-                       SHA2,
                        zlib,
                        tar,
                        bytestring,
diff --git a/cabal-sign.sig b/cabal-sign.sig
Binary files a/cabal-sign.sig and b/cabal-sign.sig differ
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -41,9 +41,13 @@
      then error $ fp ++ " doesn't exist"
      else do gzip <- fmap (L.fromChunks . return) (S.readFile fp)
              entries <- getGzipEntries gzip
-             _ <- rawSystem "gpg" ["--detach-sign",fp]
-             addSignature fp (fp <.> "sig") entries
+             L.writeFile tar (Gzip.decompress gzip)
+             _ <- rawSystem "gpg" ["--detach-sign",tar]
+             addSignature fp (tar <.> "sig") entries
+             removeFile tar
 
+  where tar = translate ".tar" fp
+
 addSignature :: FilePath -> FilePath -> [Entry] -> IO ()
 addSignature gz sig entries = do
   signature <- L.readFile sig
@@ -88,7 +92,7 @@
              case find isSig entries of
                Nothing -> error $ "unable to find " ++ sigName ++ " in archive"
                Just entry -> do
-                 L.writeFile stripped (Gzip.compress (Tar.write (filter (not . isSig) entries)))
+                 L.writeFile stripped (Tar.write (filter (not . isSig) entries))
                  L.writeFile sig (getEntryFileContent entry)
                  _ <- rawSystem "gpg" ["--verify",sig,stripped]
                  removeFile stripped
