diff --git a/hokey.hs b/hokey.hs
--- a/hokey.hs
+++ b/hokey.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE DeriveFunctor #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE TypeApplications #-}
 
 import Codec.Encryption.OpenPGP.Expirations (getKeyExpirationTimesFromSignature)
 import Codec.Encryption.OpenPGP.Fingerprint (eightOctetKeyID, fingerprint)
@@ -38,9 +39,11 @@
 import Control.Lens ((&), (^.), _1, _2, mapped, over)
 import Control.Monad.Trans.Except (runExceptT)
 import Control.Monad.Trans.Writer.Lazy (execWriter, tell)
-import qualified Crypto.Hash.SHA3 as SHA3
+import qualified Crypto.Hash as CH
+import qualified Crypto.Hash.Algorithms as CHA
 import qualified Data.Aeson as A
 import Data.Binary (get, put)
+import qualified Data.ByteArray as BA
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Base16 as Base16
 import qualified Data.ByteString.Char8 as BC8
@@ -333,10 +336,10 @@
       "<uat:[" ++ intercalate "," (map uaspToString us) ++ "]>"
     uaspToString (ImageAttribute hdr d) =
       hdrToString hdr ++ ':' : show (BL.length d) ++ ':' :
-      BC8.unpack (Base16.encode (SHA3.hashlazy 48 d))
+      BC8.unpack (Base16.encode (BA.convert (CH.hashlazy @CHA.SHA3_512 d)))
     uaspToString (OtherUASub t d) =
       "other-" ++ show t ++ ':' : show (BL.length d) ++ ':' :
-      BC8.unpack (Base16.encode (SHA3.hashlazy 48 d))
+      BC8.unpack (Base16.encode (BA.convert (CH.hashlazy @CHA.SHA3_512 d)))
     hdrToString (ImageHV1 JPEG) = "jpeg"
     hdrToString (ImageHV1 fmt) = "image-" ++ show (fromFVal fmt)
     uidr Nothing sps =
diff --git a/hopenpgp-tools.cabal b/hopenpgp-tools.cabal
--- a/hopenpgp-tools.cabal
+++ b/hopenpgp-tools.cabal
@@ -1,158 +1,108 @@
+cabal-version:       2.2
 name:                hopenpgp-tools
-version:             0.23.2
+version:             0.23.3
 synopsis:            hOpenPGP-based command-line tools
 description:         command-line tools for performing some OpenPGP-related operations
 homepage:            https://salsa.debian.org/clint/hOpenPGP-tools
-license:             AGPL-3
+license:             AGPL-3.0-or-later
 license-file:        LICENSE
 author:              Clint Adams
 maintainer:          Clint Adams <clint@debian.org>
 copyright:           2012-2020 Clint Adams
 category:            Codec, Data
 build-type:          Simple
-cabal-version:       >=1.10
 
-executable hot
-  main-is:             hot.hs
-  ghc-options:         -Wall
-  other-modules:       HOpenPGP.Tools.Armor
-               ,       HOpenPGP.Tools.Common
-               ,       HOpenPGP.Tools.Lexer
-               ,       HOpenPGP.Tools.Parser
+common deps
+  autogen-modules:     Paths_hopenpgp_tools
   build-depends:       base                   > 4.9       && < 5
                ,       aeson
-               ,       array
                ,       binary                 >= 0.6.4.0
                ,       binary-conduit
                ,       bytestring
-               ,       conduit                >= 1.2.8
-               ,       conduit-extra          >= 1.1
+               ,       conduit                >= 1.3.0
                ,       errors
                ,       hOpenPGP               >= 2.9.5    && < 3
                ,       lens
-               ,       monad-loops
-               ,       openpgp-asciiarmor     >= 0.1
                ,       optparse-applicative   >= 0.11.0
                ,       prettyprinter
                ,       prettyprinter-convert-ansi-wl-pprint
                ,       text
                ,       transformers
                ,       yaml
-  build-tools:         alex
-               ,       happy
+  ghc-options:         -Wall
+  other-modules:       HOpenPGP.Tools.Common
+               ,       Paths_hopenpgp_tools
+
+executable hot
+  import:              deps
+  main-is:             hot.hs
+  autogen-modules:     Paths_hopenpgp_tools
+  other-modules:       HOpenPGP.Tools.Armor
+               ,       HOpenPGP.Tools.Lexer
+               ,       HOpenPGP.Tools.Parser
+  build-depends:       array
+               ,       conduit-extra          >= 1.1
+               ,       monad-loops
+               ,       openpgp-asciiarmor     >= 0.1
+  build-tool-depends:  alex:alex, happy:happy
   default-language: Haskell2010
 
 executable hokey
+  import:              deps
   main-is:             hokey.hs
-  ghc-options:         -Wall
-  other-modules:       HOpenPGP.Tools.Common
-               ,       HOpenPGP.Tools.HKP
+  other-modules:       HOpenPGP.Tools.HKP
                ,       HOpenPGP.Tools.TKUtils
-  build-depends:       base                   > 4.9       && < 5
-               ,       aeson
-               ,       base16-bytestring
-               ,       binary                 >= 0.6.4.0
-               ,       binary-conduit
-               ,       bytestring
-               ,       conduit                >= 1.2.8
+  build-depends:       base16-bytestring
                ,       conduit-extra          >= 1.1
                ,       containers
-               ,       crypto-pubkey
-               ,       cryptohash             >= 0.7.7
-               ,       directory
-               ,       errors
-               ,       hOpenPGP               >= 2.7      && < 3
+               ,       cryptonite
                ,       http-client            >= 0.4.30
                ,       http-client-tls
                ,       http-types
-               ,       ixset-typed
-               ,       lens
-               ,       monad-loops
-               ,       openpgp-asciiarmor
-               ,       optparse-applicative   >= 0.11.0
-               ,       prettyprinter
+               ,       memory
+               ,       openpgp-asciiarmor     >= 0.1
                ,       prettyprinter-ansi-terminal
-               ,       prettyprinter-convert-ansi-wl-pprint
-               ,       text
                ,       time
                ,       time-locale-compat
-               ,       transformers
-               ,       yaml
   default-language: Haskell2010
 
 executable hkt
+  import:              deps
   main-is:             hkt.hs
-  ghc-options:         -Wall
-  other-modules:       HOpenPGP.Tools.Common
-               ,       HOpenPGP.Tools.Lexer
+  other-modules:       HOpenPGP.Tools.Lexer
                ,       HOpenPGP.Tools.Parser
-  build-depends:       base                   > 4.9       && < 5
-               ,       aeson
-               ,       array
-               ,       attoparsec             >= 0.10.0.0
-               ,       binary                 >= 0.6.4.0
-               ,       binary-conduit
-               ,       bytestring
-               ,       conduit                >= 1.2.8
-               ,       conduit-extra          >= 1.1
+  build-depends:       array
                ,       containers
-               ,       crypto-pubkey
+               ,       conduit-extra          >= 1.1
                ,       directory
-               ,       errors
                ,       fgl                    >= 5.5.4.0
                ,       graphviz
-               ,       hOpenPGP               >= 2.7      && < 3
                ,       ixset-typed
-               ,       lens
                ,       monad-loops
-               ,       optparse-applicative   >= 0.11.0
-               ,       prettyprinter
-               ,       prettyprinter-convert-ansi-wl-pprint
                ,       resourcet
-               ,       text
                ,       time
-               ,       transformers
                ,       unordered-containers
-               ,       yaml
-  build-tools:         alex
-               ,       happy
+  build-tool-depends:  alex:alex, happy:happy
   default-language: Haskell2010
 
 executable hop
+  import:              deps
   main-is:             hop.hs
-  ghc-options:         -Wall
   other-modules:       HOpenPGP.Tools.Armor
-               ,       HOpenPGP.Tools.Common
                ,       HOpenPGP.Tools.Lexer
                ,       HOpenPGP.Tools.Parser
-  build-depends:       base                   > 4.9       && < 5
-               ,       aeson
-               ,       array
-               ,       binary
-               ,       binary-conduit
-               ,       bytestring
-               ,       conduit                >= 1.3.0
+               ,       HOpenPGP.Tools.TKUtils
+  build-depends:       array
                ,       conduit-extra          >= 1.1
                ,       containers
                ,       cryptonite
-               ,       directory
-               ,       errors
-               ,       hOpenPGP               >= 2.9    && < 3
-               ,       lens
                ,       monad-loops
                ,       mtl
                ,       openpgp-asciiarmor     >= 0.1
-               ,       optparse-applicative   >= 0.11.0
-               ,       prettyprinter
-               ,       prettyprinter-convert-ansi-wl-pprint
                ,       resourcet
-               ,       text
-               ,       transformers
                ,       time
                ,       vector
-               ,       yaml
-  build-tools:         alex
-               ,       happy
+  build-tool-depends:  alex:alex, happy:happy
   default-language: Haskell2010
 
 source-repository head
@@ -162,4 +112,4 @@
 source-repository this
   type:     git
   location: https://salsa.debian.org/clint/hopenpgp-tools.git
-  tag:      hopenpgp-tools/0.23.2
+  tag:      hopenpgp-tools/0.23.3
diff --git a/hot.hs b/hot.hs
--- a/hot.hs
+++ b/hot.hs
@@ -1,3 +1,21 @@
+-- hot.hs: hOpenPGP Tool
+-- Copyright © 2012-2020  Clint Adams
+--
+-- vim: softtabstop=4:shiftwidth=4:expandtab
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU Affero General Public License as
+-- published by the Free Software Foundation, either version 3 of the
+-- License, or (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU Affero General Public License for more details.
+--
+-- You should have received a copy of the GNU Affero General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
 {-# LANGUAGE RecordWildCards #-}
 
 import qualified Codec.Encryption.OpenPGP.ASCIIArmor as AA
@@ -20,27 +38,9 @@
   , conduitPktFilter
   )
 import Data.Conduit.Serialization.Binary (conduitGet, conduitPut)
-import Data.Monoid ((<>))
 import Data.Void (Void)
 import qualified Data.Yaml as Y
 import HOpenPGP.Tools.Armor (doDeArmor)
--- hot.hs: hOpenPGP Tool
--- Copyright © 2012-2020  Clint Adams
---
--- vim: softtabstop=4:shiftwidth=4:expandtab
---
--- This program is free software: you can redistribute it and/or modify
--- it under the terms of the GNU Affero General Public License as
--- published by the Free Software Foundation, either version 3 of the
--- License, or (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU Affero General Public License for more details.
---
--- You should have received a copy of the GNU Affero General Public License
--- along with this program.  If not, see <http://www.gnu.org/licenses/>.
 import HOpenPGP.Tools.Common (banner, prependAuto, versioner, warranty)
 import HOpenPGP.Tools.Parser (parsePExp)
 
