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.2.0.0
+version:             0.3.1.0
 synopsis:            Sign and verify Cabal packages.
 description:         Sign and verify Cabal packages.
 license:             BSD3
diff --git a/cabal-sign.sig b/cabal-sign.sig
new file mode 100644
Binary files /dev/null and b/cabal-sign.sig differ
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -8,6 +8,7 @@
 import qualified Codec.Compression.GZip as Gzip
 import           Data.ByteString.Lazy (ByteString)
 import qualified Data.ByteString.Lazy as L
+import qualified Data.ByteString as S
 import qualified Codec.Digest.SHA as Sha2
 import           Data.List
 import           Data.Serialize
@@ -31,7 +32,7 @@
   exists <- doesFileExist fp
   if not exists
      then error $ fp ++ " doesn't exist"
-     else do gzip <- L.readFile fp
+     else do gzip <- fmap (L.fromChunks . return) (S.readFile fp)
              entries <- getGzipEntries gzip
              L.writeFile sum (checksum entries)
              rawSystem "gpg" ["--detach-sign",sum]
@@ -47,11 +48,13 @@
     Left err -> error err
     Right spath -> do
       let sigEntry = Tar.fileEntry spath signature
-      L.writeFile (translate ".signed.tar.gz" gz)
-                  (Gzip.compress (Tar.write (sigEntry : entries)))
+      L.writeFile gz (Gzip.compress (Tar.write (sigEntry : entries)))
       removeFile sig
 
-makeSigName = translate ".sig" . takeFileName
+projectName = dropWhile (=='-') . translate "" . takeFileName
+
+makeSigName gz = projectName gz </> filename gz where
+  filename = translate ".sig" . reverse . drop 1 . dropWhile (/='-') . reverse . takeFileName
 
 translate ext = (++ ext) . dropSigned . dropExtension . dropExtension where
   dropSigned x | isSuffixOf ".signed" x = dropExtension x
