diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,7 @@
+## 0.6
+
+- Add sizes of tarball and cabal files to `Cabal.Index.ReleaseInfo` data structure.
+
 ## 0.5
 
 - Move to use `Cabal-syntax` package
diff --git a/cabal-install-parsers.cabal b/cabal-install-parsers.cabal
--- a/cabal-install-parsers.cabal
+++ b/cabal-install-parsers.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               cabal-install-parsers
-version:            0.5
+version:            0.6
 synopsis:           Utilities to work with cabal-install files
 description:
   @cabal-install-parsers@ provides parsers for @cabal-install@ files:
@@ -15,18 +15,29 @@
 homepage:           https://haskell-ci.rtfd.org/
 bug-reports:        https://github.com/haskell-CI/haskell-ci/issues
 license:            GPL-2.0-or-later AND BSD-3-Clause
-license-files:      LICENSE LICENSE.GPLv2 LICENSE.GPLv3
+license-files:
+  LICENSE
+  LICENSE.GPLv2
+  LICENSE.GPLv3
+
 author:             Herbert Valerio Riedel, Oleg Grenrus
 maintainer:         hvr@gnu.org, oleg.grenrus@iki.fi
 category:           Development
 build-type:         Simple
 tested-with:
-  GHC ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.4 || ==9.4.1
+  GHC ==8.2.2
+   || ==8.4.4
+   || ==8.6.5
+   || ==8.8.4
+   || ==8.10.7
+   || ==9.0.2
+   || ==9.2.5
+   || ==9.4.4
 
 extra-source-files:
   Changelog.md
-  fixtures/*.project
   fixtures/*.golden
+  fixtures/*.project
 
 source-repository head
   type:     git
@@ -54,18 +65,18 @@
 
   -- GHC-boot libraries
   build-depends:
-    , base          >=4.10     && <4.18
+    , base          >=4.10      && <4.18
     , binary        ^>=0.8.5
     , bytestring    ^>=0.10.8.1 || ^>=0.11.1.0
     , Cabal-syntax  ^>=3.8.1.0
-    , containers    ^>=0.5.7.1 || ^>=0.6.0.1
+    , containers    ^>=0.5.7.1  || ^>=0.6.0.1
     , deepseq       ^>=1.4.2.0
     , directory     ^>=1.3.0.0
     , filepath      ^>=1.4.1.1
     , parsec        ^>=3.1.13.0
     , pretty        ^>=1.1.3.3
-    , text          ^>=1.2.3.0 || ^>=2.0.1
-    , time          ^>=1.8.0.2 || ^>=1.9.3 || ^>=1.11.1.1 || ^>=1.12.2
+    , text          ^>=1.2.3.0  || ^>=2.0.1
+    , time          ^>=1.8.0.2  || ^>=1.9.3    || ^>=1.11.1.1 || ^>=1.12.2
     , transformers  ^>=0.5.2.0
 
   -- extra dependencies
@@ -92,8 +103,8 @@
     , base
     , base16-bytestring
     , bytestring
-    , Cabal-syntax
     , cabal-install-parsers
+    , Cabal-syntax
     , containers
     , tar
 
@@ -112,8 +123,8 @@
   build-depends:
     , base
     , bytestring
-    , Cabal-syntax
     , cabal-install-parsers
+    , Cabal-syntax
     , containers
     , directory
     , filepath
@@ -121,10 +132,10 @@
 
   -- dependencies needing explicit constraints
   build-depends:
-    , ansi-terminal  >=0.10    && <0.12
+    , ansi-terminal  >=0.10     && <0.12
     , tasty          ^>=1.4
     , tasty-golden   ^>=2.3.1.1
-    , tree-diff      ^>=0.2
+    , tree-diff      >=0.2      && <0.4
 
 benchmark cabal-parsers-bench
   default-language: Haskell2010
@@ -136,8 +147,8 @@
   build-depends:
     , base
     , bytestring
-    , Cabal-syntax
     , cabal-install-parsers
+    , Cabal-syntax
     , containers
     , directory
     , filepath
diff --git a/src/Cabal/Index.hs b/src/Cabal/Index.hs
--- a/src/Cabal/Index.hs
+++ b/src/Cabal/Index.hs
@@ -10,7 +10,7 @@
     cachedHackageMetadata,
     -- ** Exceptions thrown
     MetadataParseError (..),
-    InvalidHash (..),
+    InvalidData (..),
     InvalidIndexFile (..),
     NoHackageRepository (..),
     -- * Metadata types
@@ -35,7 +35,7 @@
     foldIndex,
     IndexEntry (..),
     IndexFileType (..),
-    ) where
+) where
 
 import Prelude hiding (pi)
 
@@ -354,10 +354,12 @@
 
 -- | Package's release information.
 data ReleaseInfo = ReleaseInfo
-    { riRevision  :: !Word32              -- ^ revision number
-    , riTarOffset :: !Tar.TarEntryOffset  -- ^ offset into tar file
-    , riCabal     :: !SHA256              -- ^ hash of the last revision of @.cabal@ file
-    , riTarball   :: !SHA256              -- ^ hash of the @.tar.gz@ file.
+    { riRevision    :: !Word32              -- ^ revision number
+    , riTarOffset   :: !Tar.TarEntryOffset  -- ^ offset into tar file
+    , riCabalHash   :: !SHA256              -- ^ hash of the last revision of @.cabal@ file
+    , riCabalSize   :: !Word64              -- ^ size of the last revision of @.cabal@ file
+    , riTarballHash :: !SHA256              -- ^ hash of the @.tar.gz@ file
+    , riTarballSize :: !Word64              -- ^ size of the @.tar.gz@ file
     }
   deriving (Eq, Show, Generic)
 
@@ -389,20 +391,30 @@
                 digest :: SHA256
                 digest = sha256 contents
 
+                size :: Word64
+                size = fromIntegral $ BS.length contents
+
                 offset :: Tar.TarEntryOffset
                 offset = entryTarOffset indexEntry
 
                 f :: Maybe TmpPackageInfo -> Maybe TmpPackageInfo
                 f Nothing = Just TmpPackageInfo
-                    { tmpPiVersions  = Map.singleton ver (TmpReleaseInfo 0 offset (Just digest) Nothing)
+                    { tmpPiVersions  = Map.singleton ver TmpReleaseInfo 
+                        { tmpRiRevision    = 0
+                        , tmpRiTarOffset   = offset
+                        , tmpRiCabalHash   = Just digest
+                        , tmpRiCabalSize   = Just size
+                        , tmpRiTarballHash = Nothing
+                        , tmpRiTarballSize = Nothing
+                        }
                     , tmpPiPreferred = C.anyVersion
                     }
                 f (Just pi) = Just pi { tmpPiVersions = Map.alter g ver (tmpPiVersions pi) }
 
                 g :: Maybe TmpReleaseInfo -> Maybe TmpReleaseInfo
-                g Nothing                                 = Just $ TmpReleaseInfo 0        offset (Just digest) Nothing
-                g (Just (TmpReleaseInfo _r _o Nothing t)) = Just $ TmpReleaseInfo 0        offset (Just digest) t
-                g (Just (TmpReleaseInfo  r _o _c      t)) = Just $ TmpReleaseInfo (succ r) offset (Just digest) t
+                g Nothing                                       = Just $ TmpReleaseInfo 0        offset (Just digest) (Just size) Nothing Nothing
+                g (Just (TmpReleaseInfo _r _o Nothing _ th ts)) = Just $ TmpReleaseInfo 0        offset (Just digest) (Just size) th      ts
+                g (Just (TmpReleaseInfo  r _o _c      _ th ts)) = Just $ TmpReleaseInfo (succ r) offset (Just digest) (Just size) th      ts
 
             PackageJson pn ver -> case A.eitherDecodeStrict contents of
                     Left err -> throwIO $ MetadataParseError (entryPath indexEntry) err
@@ -413,14 +425,14 @@
                       where
                         f :: Target -> Maybe TmpPackageInfo -> Maybe TmpPackageInfo
                         f t Nothing   = Just TmpPackageInfo
-                            { tmpPiVersions  = Map.singleton ver (TmpReleaseInfo 0 0 Nothing (Just (hashSHA256 (targetHashes t))))
+                            { tmpPiVersions  = Map.singleton ver $ TmpReleaseInfo 0 0 Nothing Nothing (Just (hashSHA256 (targetHashes t))) (Just (targetLength t))
                             , tmpPiPreferred = C.anyVersion
                             }
                         f t (Just pi) = Just pi { tmpPiVersions = Map.alter (g t) ver (tmpPiVersions pi) }
 
                         g :: Target -> Maybe TmpReleaseInfo -> Maybe TmpReleaseInfo
-                        g t Nothing                         = Just $ TmpReleaseInfo 0 0 Nothing (Just (hashSHA256 (targetHashes t)))
-                        g t (Just (TmpReleaseInfo r o c _)) = Just $ TmpReleaseInfo r o c       (Just (hashSHA256 (targetHashes t)))
+                        g t Nothing                               = Just $ TmpReleaseInfo 0 0 Nothing Nothing (Just (hashSHA256 (targetHashes t))) (Just (targetLength t))
+                        g t (Just (TmpReleaseInfo r o ch cs _ _)) = Just $ TmpReleaseInfo r o ch      cs      (Just (hashSHA256 (targetHashes t))) (Just (targetLength t))
 
             PreferredVersions pn
                     | BS.null contents -> return m
@@ -446,13 +458,17 @@
 postCheck :: Map C.PackageName TmpPackageInfo -> IO (Map C.PackageName PackageInfo)
 postCheck meta = ifor meta $ \pn pi -> do
     versions <- ifor (tmpPiVersions pi) $ \ver ri -> do
-        cabal   <- maybe (throwIO $ InvalidHash pn ver "cabal")   return (tmpRiCabal   ri)
-        tarball <- maybe (throwIO $ InvalidHash pn ver "tarball") return (tmpRiTarball ri)
+        cabalHash   <- maybe (throwIO $ InvalidHash pn ver "cabal")   return (tmpRiCabalHash   ri)
+        cabalSize   <- maybe (throwIO $ InvalidSize pn ver "cabal")   return (tmpRiCabalSize   ri)
+        tarballHash <- maybe (throwIO $ InvalidHash pn ver "tarball") return (tmpRiTarballHash ri)
+        tarballSize <- maybe (throwIO $ InvalidSize pn ver "tarball") return (tmpRiTarballSize ri)
         return ReleaseInfo
-            { riRevision  = tmpRiRevision ri
-            , riTarOffset = tmpRiTarOffset ri
-            , riCabal     = cabal
-            , riTarball   = tarball
+            { riRevision    = tmpRiRevision ri
+            , riTarOffset   = tmpRiTarOffset ri
+            , riCabalHash   = cabalHash
+            , riCabalSize   = cabalSize
+            , riTarballHash = tarballHash
+            , riTarballSize = tarballSize
             }
 
     return PackageInfo
@@ -470,10 +486,12 @@
 instance Exception MetadataParseError
 
 -- | Thrown if we fail consistency check, we don't know a hash for some file.
-data InvalidHash = InvalidHash C.PackageName C.Version String
+data InvalidData
+    = InvalidHash C.PackageName C.Version String
+    | InvalidSize C.PackageName C.Version String
   deriving (Show)
 
-instance Exception InvalidHash
+instance Exception InvalidData
 
 -------------------------------------------------------------------------------
 -- Temporary types for indexMetadata
@@ -485,10 +503,12 @@
     }
 
 data TmpReleaseInfo = TmpReleaseInfo
-    { tmpRiRevision  :: !Word32              -- ^ revision number
-    , tmpRiTarOffset :: !Tar.TarEntryOffset  -- ^ offset into tar file
-    , tmpRiCabal     :: !(Maybe SHA256)      -- ^ hash of the last revision of @.cabal@ file
-    , tmpRiTarball   :: !(Maybe SHA256)      -- ^ hash of the @.tar.gz@ file.
+    { tmpRiRevision    :: !Word32               -- ^ revision number
+    , tmpRiTarOffset   :: !Tar.TarEntryOffset   -- ^ offset into tar file
+    , tmpRiCabalHash   :: !(Maybe SHA256)       -- ^ hash of the last revision of @.cabal@ file
+    , tmpRiCabalSize   :: !(Maybe Word64)       -- ^ size of the last revision of @.cabal@ file
+    , tmpRiTarballHash :: !(Maybe SHA256)       -- ^ hash of the @.tar.gz@ file.
+    , tmpRiTarballSize :: !(Maybe Word64)       -- ^ size of the @.tar.gz@ file.
     }
 
 -------------------------------------------------------------------------------
@@ -656,14 +676,14 @@
   deriving Show
 
 data Target = Target
-    { _targetLength :: Word
-    , targetHashes :: Hashes
+    { targetLength :: !Word64
+    , targetHashes :: !Hashes
     }
   deriving Show
 
 data Hashes = Hashes
-    { _hashMD5    :: MD5
-    , hashSHA256 :: SHA256
+    { _hashMD5   :: !MD5
+    , hashSHA256 :: !SHA256
     }
   deriving Show
 
diff --git a/test/Index.hs b/test/Index.hs
--- a/test/Index.hs
+++ b/test/Index.hs
@@ -57,12 +57,18 @@
                     -- revision and cabal hash check will start failing
                     -- tarball hash shouldn't ever change.
                     assertEqual "revision" 1 (riRevision ri)
+                    assertEqual "cabal size"
+                        7251
+                        (riCabalSize ri)
                     assertEqual "cabal hash"
                         (unsafeMkSHA256 "a6f5eddcff9526c786a1b77bdfade54b42f67c066b379bbc4b55ffb291e6c7d6")
-                        (riCabal ri)
+                        (riCabalHash ri)
+                    assertEqual "tarball size"
+                        279980
+                        (riTarballSize ri)
                     assertEqual "tarball hash"
                         (unsafeMkSHA256 "17c67cdaca651e18f310b21b2b12bac6bcec5188c3ac0e4b64cc60c94d7e4d2e")
-                        (riTarball ri)
+                        (riTarballHash ri)
 
                     -- check contents
                     withFile indexPath ReadMode $ \hdl -> do
