diff --git a/Codec/Encryption/OpenPGP/BlockCipher.hs b/Codec/Encryption/OpenPGP/BlockCipher.hs
--- a/Codec/Encryption/OpenPGP/BlockCipher.hs
+++ b/Codec/Encryption/OpenPGP/BlockCipher.hs
@@ -1,5 +1,5 @@
 -- BlockCipher.hs: OpenPGP (RFC4880) block cipher stuff
--- Copyright © 2013-2016  Clint Adams
+-- Copyright © 2013-2024  Clint Adams
 -- This software is released under the terms of the Expat license.
 -- (See the LICENSE file).
 {-# LANGUAGE RankNTypes #-}
@@ -10,7 +10,7 @@
   ) where
 
 import Codec.Encryption.OpenPGP.Internal.CryptoCipherTypes (HOWrappedOldCCT(..))
-import Codec.Encryption.OpenPGP.Internal.Cryptonite (HOWrappedCCT(..))
+import Codec.Encryption.OpenPGP.Internal.Crypton (HOWrappedCCT(..))
 import Codec.Encryption.OpenPGP.Internal.HOBlockCipher
 import Codec.Encryption.OpenPGP.Types
 
diff --git a/Codec/Encryption/OpenPGP/Internal/CryptoCipherTypes.hs b/Codec/Encryption/OpenPGP/Internal/CryptoCipherTypes.hs
--- a/Codec/Encryption/OpenPGP/Internal/CryptoCipherTypes.hs
+++ b/Codec/Encryption/OpenPGP/Internal/CryptoCipherTypes.hs
@@ -1,5 +1,5 @@
 -- CryptoCipherTypes.hs: shim for crypto-cipher-types stuff (current nettle)
--- Copyright © 2016  Clint Adams
+-- Copyright © 2016-2024  Clint Adams
 -- This software is released under the terms of the Expat license.
 -- (See the LICENSE file).
 {-# LANGUAGE FlexibleInstances #-}
@@ -12,7 +12,7 @@
 
 import Control.Error.Util (note)
 import qualified "crypto-cipher-types" Crypto.Cipher.Types as OldCCT
-import qualified "cryptonite" Crypto.Cipher.Types as CCT
+import qualified "crypton" Crypto.Cipher.Types as CCT
 import qualified Data.ByteString as B
 
 import Codec.Encryption.OpenPGP.Internal.HOBlockCipher
diff --git a/Codec/Encryption/OpenPGP/Internal/Crypton.hs b/Codec/Encryption/OpenPGP/Internal/Crypton.hs
new file mode 100644
--- /dev/null
+++ b/Codec/Encryption/OpenPGP/Internal/Crypton.hs
@@ -0,0 +1,37 @@
+-- Crypton.hs: shim for crypton
+-- Copyright © 2016-2024  Clint Adams
+-- This software is released under the terms of the Expat license.
+-- (See the LICENSE file).
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PackageImports #-}
+{-# LANGUAGE UndecidableInstances #-}
+
+module Codec.Encryption.OpenPGP.Internal.Crypton
+  ( HOWrappedCCT(..)
+  ) where
+
+import Control.Error.Util (note)
+import qualified "crypton" Crypto.Cipher.Types as CCT
+import qualified Crypto.Error as CE
+import Data.Bifunctor (bimap)
+import qualified Data.ByteString as B
+
+import Codec.Encryption.OpenPGP.Internal.HOBlockCipher
+
+newtype HOWrappedCCT a =
+  HWCCT a
+
+instance CCT.BlockCipher cipher => HOBlockCipher (HOWrappedCCT cipher) where
+  cipherInit = bimap show HWCCT . CE.eitherCryptoError . CCT.cipherInit
+  cipherName (HWCCT c) = CCT.cipherName c
+  cipherKeySize (HWCCT c) = CCT.cipherKeySize c
+  blockSize (HWCCT c) = CCT.blockSize c
+  cfbEncrypt (HWCCT c) iv bs =
+    hammerIV iv >>= \i -> return (CCT.cfbEncrypt c i bs)
+  cfbDecrypt (HWCCT c) iv bs =
+    hammerIV iv >>= \i -> return (CCT.cfbDecrypt c i bs)
+
+hammerIV ::
+     CCT.BlockCipher cipher => B.ByteString -> Either String (CCT.IV cipher)
+hammerIV = note "crypton bad IV" . CCT.makeIV
diff --git a/Codec/Encryption/OpenPGP/Internal/Cryptonite.hs b/Codec/Encryption/OpenPGP/Internal/Cryptonite.hs
deleted file mode 100644
--- a/Codec/Encryption/OpenPGP/Internal/Cryptonite.hs
+++ /dev/null
@@ -1,37 +0,0 @@
--- Cryptonite.hs: shim for cryptonite
--- Copyright © 2016  Clint Adams
--- This software is released under the terms of the Expat license.
--- (See the LICENSE file).
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE PackageImports #-}
-{-# LANGUAGE UndecidableInstances #-}
-
-module Codec.Encryption.OpenPGP.Internal.Cryptonite
-  ( HOWrappedCCT(..)
-  ) where
-
-import Control.Error.Util (note)
-import qualified "cryptonite" Crypto.Cipher.Types as CCT
-import qualified Crypto.Error as CE
-import Data.Bifunctor (bimap)
-import qualified Data.ByteString as B
-
-import Codec.Encryption.OpenPGP.Internal.HOBlockCipher
-
-newtype HOWrappedCCT a =
-  HWCCT a
-
-instance CCT.BlockCipher cipher => HOBlockCipher (HOWrappedCCT cipher) where
-  cipherInit = bimap show HWCCT . CE.eitherCryptoError . CCT.cipherInit
-  cipherName (HWCCT c) = CCT.cipherName c
-  cipherKeySize (HWCCT c) = CCT.cipherKeySize c
-  blockSize (HWCCT c) = CCT.blockSize c
-  cfbEncrypt (HWCCT c) iv bs =
-    hammerIV iv >>= \i -> return (CCT.cfbEncrypt c i bs)
-  cfbDecrypt (HWCCT c) iv bs =
-    hammerIV iv >>= \i -> return (CCT.cfbDecrypt c i bs)
-
-hammerIV ::
-     CCT.BlockCipher cipher => B.ByteString -> Either String (CCT.IV cipher)
-hammerIV = note "cryptonite bad IV" . CCT.makeIV
diff --git a/Codec/Encryption/OpenPGP/Internal/HOBlockCipher.hs b/Codec/Encryption/OpenPGP/Internal/HOBlockCipher.hs
--- a/Codec/Encryption/OpenPGP/Internal/HOBlockCipher.hs
+++ b/Codec/Encryption/OpenPGP/Internal/HOBlockCipher.hs
@@ -1,5 +1,5 @@
 -- HOBlockCipher.hs: abstraction for the different BlockCipher classes, plus crazy CFB mode stuff
--- Copyright © 2016  Clint Adams
+-- Copyright © 2016-2024  Clint Adams
 -- This software is released under the terms of the Expat license.
 -- (See the LICENSE file).
 {-# LANGUAGE PackageImports #-}
@@ -8,7 +8,7 @@
   ( HOBlockCipher(..)
   ) where
 
-import qualified "cryptonite" Crypto.Cipher.Types as CCT
+import qualified "crypton" Crypto.Cipher.Types as CCT
 
 import qualified Data.ByteString as B
 
diff --git a/Codec/Encryption/OpenPGP/Types.hs b/Codec/Encryption/OpenPGP/Types.hs
--- a/Codec/Encryption/OpenPGP/Types.hs
+++ b/Codec/Encryption/OpenPGP/Types.hs
@@ -1,5 +1,5 @@
 -- Types.hs: OpenPGP (RFC4880) data types
--- Copyright © 2012-2016  Clint Adams
+-- Copyright © 2012-2024  Clint Adams
 -- This software is released under the terms of the Expat license.
 -- (See the LICENSE file).
 module Codec.Encryption.OpenPGP.Types
@@ -7,7 +7,7 @@
   ) where
 
 import Codec.Encryption.OpenPGP.Types.Internal.Base as X
-import Codec.Encryption.OpenPGP.Types.Internal.CryptoniteNewtypes as X
+import Codec.Encryption.OpenPGP.Types.Internal.CryptonNewtypes as X
 import Codec.Encryption.OpenPGP.Types.Internal.PKITypes as X
 import Codec.Encryption.OpenPGP.Types.Internal.PacketClass as X
 import Codec.Encryption.OpenPGP.Types.Internal.Pkt as X
diff --git a/Codec/Encryption/OpenPGP/Types/Internal/CryptonNewtypes.hs b/Codec/Encryption/OpenPGP/Types/Internal/CryptonNewtypes.hs
new file mode 100644
--- /dev/null
+++ b/Codec/Encryption/OpenPGP/Types/Internal/CryptonNewtypes.hs
@@ -0,0 +1,171 @@
+-- CryptonNewtypes.hs: OpenPGP (RFC4880) newtype wrappers for some crypton types
+-- Copyright © 2012-2024  Clint Adams
+-- This software is released under the terms of the Expat license.
+-- (See the LICENSE file).
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric #-}
+
+module Codec.Encryption.OpenPGP.Types.Internal.CryptonNewtypes where
+
+import GHC.Generics (Generic)
+
+import Control.Monad (mzero)
+import qualified Crypto.PubKey.DSA as DSA
+import qualified Crypto.PubKey.ECC.ECDSA as ECDSA
+import qualified Crypto.PubKey.ECC.Types as ECCT
+import qualified Crypto.PubKey.RSA as RSA
+import qualified Data.Aeson as A
+import Data.Data (Data)
+import Data.Hashable (Hashable(..))
+import Data.Typeable (Typeable)
+import Prettyprinter (Pretty(..), (<+>), tupled)
+
+newtype DSA_PublicKey =
+  DSA_PublicKey
+    { unDSA_PublicKey :: DSA.PublicKey
+    }
+  deriving (Data, Eq, Generic, Show, Typeable)
+
+instance Ord DSA_PublicKey
+
+instance A.ToJSON DSA_PublicKey where
+  toJSON (DSA_PublicKey (DSA.PublicKey p y)) = A.toJSON (DSA_Params p, y)
+
+instance Pretty DSA_PublicKey where
+  pretty (DSA_PublicKey (DSA.PublicKey p y)) =
+    pretty (DSA_Params p) <+> pretty y
+
+newtype RSA_PublicKey =
+  RSA_PublicKey
+    { unRSA_PublicKey :: RSA.PublicKey
+    }
+  deriving (Data, Eq, Generic, Show, Typeable)
+
+instance Ord RSA_PublicKey
+
+instance A.ToJSON RSA_PublicKey where
+  toJSON (RSA_PublicKey (RSA.PublicKey size n e)) = A.toJSON (size, n, e)
+
+instance Pretty RSA_PublicKey where
+  pretty (RSA_PublicKey (RSA.PublicKey size n e)) =
+    pretty size <+> pretty n <+> pretty e
+
+newtype ECDSA_PublicKey =
+  ECDSA_PublicKey
+    { unECDSA_PublicKey :: ECDSA.PublicKey
+    }
+  deriving (Data, Eq, Generic, Show, Typeable)
+
+instance Ord ECDSA_PublicKey
+
+instance A.ToJSON ECDSA_PublicKey where
+  toJSON (ECDSA_PublicKey (ECDSA.PublicKey curve q)) =
+    A.toJSON (show curve, show q)
+
+instance Pretty ECDSA_PublicKey where
+  pretty (ECDSA_PublicKey (ECDSA.PublicKey curve q)) =
+    pretty (show curve, show q)
+
+newtype DSA_PrivateKey =
+  DSA_PrivateKey
+    { unDSA_PrivateKey :: DSA.PrivateKey
+    }
+  deriving (Data, Eq, Generic, Show, Typeable)
+
+instance Ord DSA_PrivateKey
+
+instance A.ToJSON DSA_PrivateKey where
+  toJSON (DSA_PrivateKey (DSA.PrivateKey p x)) = A.toJSON (DSA_Params p, x)
+
+instance Pretty DSA_PrivateKey where
+  pretty (DSA_PrivateKey (DSA.PrivateKey p x)) = pretty (DSA_Params p, x)
+
+newtype RSA_PrivateKey =
+  RSA_PrivateKey
+    { unRSA_PrivateKey :: RSA.PrivateKey
+    }
+  deriving (Data, Eq, Generic, Show, Typeable)
+
+instance Ord RSA_PrivateKey
+
+instance A.ToJSON RSA_PrivateKey where
+  toJSON (RSA_PrivateKey (RSA.PrivateKey pub d p q dP dQ qinv)) =
+    A.toJSON (RSA_PublicKey pub, d, p, q, dP, dQ, qinv)
+
+instance Pretty RSA_PrivateKey where
+  pretty (RSA_PrivateKey (RSA.PrivateKey pub d p q dP dQ qinv)) =
+    pretty (RSA_PublicKey pub) <+> tupled (map pretty [d, p, q, dP, dQ, qinv])
+
+newtype ECDSA_PrivateKey =
+  ECDSA_PrivateKey
+    { unECDSA_PrivateKey :: ECDSA.PrivateKey
+    }
+  deriving (Data, Eq, Generic, Show, Typeable)
+
+instance Ord ECDSA_PrivateKey
+
+instance A.ToJSON ECDSA_PrivateKey where
+  toJSON (ECDSA_PrivateKey (ECDSA.PrivateKey curve d)) =
+    A.toJSON (show curve, show d)
+
+instance Pretty ECDSA_PrivateKey where
+  pretty (ECDSA_PrivateKey (ECDSA.PrivateKey curve d)) =
+    pretty (show curve, show d)
+
+newtype DSA_Params =
+  DSA_Params
+    { unDSA_Params :: DSA.Params
+    }
+  deriving (Data, Eq, Generic, Show, Typeable)
+
+instance A.ToJSON DSA_Params where
+  toJSON (DSA_Params (DSA.Params p g q)) = A.toJSON (p, g, q)
+
+instance Pretty DSA_Params where
+  pretty (DSA_Params (DSA.Params p g q)) = pretty (p, g, q)
+
+instance Hashable DSA_Params where
+  hashWithSalt s (DSA_Params (DSA.Params p g q)) =
+    s `hashWithSalt` p `hashWithSalt` g `hashWithSalt` q
+
+instance Hashable DSA_PublicKey where
+  hashWithSalt s (DSA_PublicKey (DSA.PublicKey p y)) =
+    s `hashWithSalt` DSA_Params p `hashWithSalt` y
+
+instance Hashable DSA_PrivateKey where
+  hashWithSalt s (DSA_PrivateKey (DSA.PrivateKey p x)) =
+    s `hashWithSalt` DSA_Params p `hashWithSalt` x
+
+instance Hashable RSA_PublicKey where
+  hashWithSalt s (RSA_PublicKey (RSA.PublicKey size n e)) =
+    s `hashWithSalt` size `hashWithSalt` n `hashWithSalt` e
+
+instance Hashable RSA_PrivateKey where
+  hashWithSalt s (RSA_PrivateKey (RSA.PrivateKey pub d p q dP dQ qinv)) =
+    s `hashWithSalt` RSA_PublicKey pub `hashWithSalt` d `hashWithSalt` p `hashWithSalt`
+    q `hashWithSalt`
+    dP `hashWithSalt`
+    dQ `hashWithSalt`
+    qinv
+
+instance Hashable ECDSA_PublicKey where
+  hashWithSalt s (ECDSA_PublicKey (ECDSA.PublicKey curve q)) =
+    s `hashWithSalt` show curve `hashWithSalt` show q -- FIXME: don't use show
+
+instance Hashable ECDSA_PrivateKey where
+  hashWithSalt s (ECDSA_PrivateKey (ECDSA.PrivateKey curve d)) =
+    s `hashWithSalt` show curve `hashWithSalt` show d -- FIXME: don't use show
+
+newtype ECurvePoint =
+  ECurvePoint
+    { unECurvepoint :: ECCT.Point
+    }
+  deriving (Data, Eq, Generic, Show, Typeable)
+
+instance A.ToJSON ECurvePoint where
+  toJSON (ECurvePoint (ECCT.Point x y)) = A.toJSON (x, y)
+  toJSON (ECurvePoint ECCT.PointO) = A.toJSON "point at infinity"
+
+instance A.FromJSON ECurvePoint where
+  parseJSON (A.Object v) = error "FIXME: whatsit"
+  parseJSON _ = mzero
diff --git a/Codec/Encryption/OpenPGP/Types/Internal/CryptoniteNewtypes.hs b/Codec/Encryption/OpenPGP/Types/Internal/CryptoniteNewtypes.hs
deleted file mode 100644
--- a/Codec/Encryption/OpenPGP/Types/Internal/CryptoniteNewtypes.hs
+++ /dev/null
@@ -1,171 +0,0 @@
--- CryptoniteNewtypes.hs: OpenPGP (RFC4880) newtype wrappers for some cryptonite types
--- Copyright © 2012-2022  Clint Adams
--- This software is released under the terms of the Expat license.
--- (See the LICENSE file).
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric #-}
-
-module Codec.Encryption.OpenPGP.Types.Internal.CryptoniteNewtypes where
-
-import GHC.Generics (Generic)
-
-import Control.Monad (mzero)
-import qualified Crypto.PubKey.DSA as DSA
-import qualified Crypto.PubKey.ECC.ECDSA as ECDSA
-import qualified Crypto.PubKey.ECC.Types as ECCT
-import qualified Crypto.PubKey.RSA as RSA
-import qualified Data.Aeson as A
-import Data.Data (Data)
-import Data.Hashable (Hashable(..))
-import Data.Typeable (Typeable)
-import Prettyprinter (Pretty(..), (<+>), tupled)
-
-newtype DSA_PublicKey =
-  DSA_PublicKey
-    { unDSA_PublicKey :: DSA.PublicKey
-    }
-  deriving (Data, Eq, Generic, Show, Typeable)
-
-instance Ord DSA_PublicKey
-
-instance A.ToJSON DSA_PublicKey where
-  toJSON (DSA_PublicKey (DSA.PublicKey p y)) = A.toJSON (DSA_Params p, y)
-
-instance Pretty DSA_PublicKey where
-  pretty (DSA_PublicKey (DSA.PublicKey p y)) =
-    pretty (DSA_Params p) <+> pretty y
-
-newtype RSA_PublicKey =
-  RSA_PublicKey
-    { unRSA_PublicKey :: RSA.PublicKey
-    }
-  deriving (Data, Eq, Generic, Show, Typeable)
-
-instance Ord RSA_PublicKey
-
-instance A.ToJSON RSA_PublicKey where
-  toJSON (RSA_PublicKey (RSA.PublicKey size n e)) = A.toJSON (size, n, e)
-
-instance Pretty RSA_PublicKey where
-  pretty (RSA_PublicKey (RSA.PublicKey size n e)) =
-    pretty size <+> pretty n <+> pretty e
-
-newtype ECDSA_PublicKey =
-  ECDSA_PublicKey
-    { unECDSA_PublicKey :: ECDSA.PublicKey
-    }
-  deriving (Data, Eq, Generic, Show, Typeable)
-
-instance Ord ECDSA_PublicKey
-
-instance A.ToJSON ECDSA_PublicKey where
-  toJSON (ECDSA_PublicKey (ECDSA.PublicKey curve q)) =
-    A.toJSON (show curve, show q)
-
-instance Pretty ECDSA_PublicKey where
-  pretty (ECDSA_PublicKey (ECDSA.PublicKey curve q)) =
-    pretty (show curve, show q)
-
-newtype DSA_PrivateKey =
-  DSA_PrivateKey
-    { unDSA_PrivateKey :: DSA.PrivateKey
-    }
-  deriving (Data, Eq, Generic, Show, Typeable)
-
-instance Ord DSA_PrivateKey
-
-instance A.ToJSON DSA_PrivateKey where
-  toJSON (DSA_PrivateKey (DSA.PrivateKey p x)) = A.toJSON (DSA_Params p, x)
-
-instance Pretty DSA_PrivateKey where
-  pretty (DSA_PrivateKey (DSA.PrivateKey p x)) = pretty (DSA_Params p, x)
-
-newtype RSA_PrivateKey =
-  RSA_PrivateKey
-    { unRSA_PrivateKey :: RSA.PrivateKey
-    }
-  deriving (Data, Eq, Generic, Show, Typeable)
-
-instance Ord RSA_PrivateKey
-
-instance A.ToJSON RSA_PrivateKey where
-  toJSON (RSA_PrivateKey (RSA.PrivateKey pub d p q dP dQ qinv)) =
-    A.toJSON (RSA_PublicKey pub, d, p, q, dP, dQ, qinv)
-
-instance Pretty RSA_PrivateKey where
-  pretty (RSA_PrivateKey (RSA.PrivateKey pub d p q dP dQ qinv)) =
-    pretty (RSA_PublicKey pub) <+> tupled (map pretty [d, p, q, dP, dQ, qinv])
-
-newtype ECDSA_PrivateKey =
-  ECDSA_PrivateKey
-    { unECDSA_PrivateKey :: ECDSA.PrivateKey
-    }
-  deriving (Data, Eq, Generic, Show, Typeable)
-
-instance Ord ECDSA_PrivateKey
-
-instance A.ToJSON ECDSA_PrivateKey where
-  toJSON (ECDSA_PrivateKey (ECDSA.PrivateKey curve d)) =
-    A.toJSON (show curve, show d)
-
-instance Pretty ECDSA_PrivateKey where
-  pretty (ECDSA_PrivateKey (ECDSA.PrivateKey curve d)) =
-    pretty (show curve, show d)
-
-newtype DSA_Params =
-  DSA_Params
-    { unDSA_Params :: DSA.Params
-    }
-  deriving (Data, Eq, Generic, Show, Typeable)
-
-instance A.ToJSON DSA_Params where
-  toJSON (DSA_Params (DSA.Params p g q)) = A.toJSON (p, g, q)
-
-instance Pretty DSA_Params where
-  pretty (DSA_Params (DSA.Params p g q)) = pretty (p, g, q)
-
-instance Hashable DSA_Params where
-  hashWithSalt s (DSA_Params (DSA.Params p g q)) =
-    s `hashWithSalt` p `hashWithSalt` g `hashWithSalt` q
-
-instance Hashable DSA_PublicKey where
-  hashWithSalt s (DSA_PublicKey (DSA.PublicKey p y)) =
-    s `hashWithSalt` DSA_Params p `hashWithSalt` y
-
-instance Hashable DSA_PrivateKey where
-  hashWithSalt s (DSA_PrivateKey (DSA.PrivateKey p x)) =
-    s `hashWithSalt` DSA_Params p `hashWithSalt` x
-
-instance Hashable RSA_PublicKey where
-  hashWithSalt s (RSA_PublicKey (RSA.PublicKey size n e)) =
-    s `hashWithSalt` size `hashWithSalt` n `hashWithSalt` e
-
-instance Hashable RSA_PrivateKey where
-  hashWithSalt s (RSA_PrivateKey (RSA.PrivateKey pub d p q dP dQ qinv)) =
-    s `hashWithSalt` RSA_PublicKey pub `hashWithSalt` d `hashWithSalt` p `hashWithSalt`
-    q `hashWithSalt`
-    dP `hashWithSalt`
-    dQ `hashWithSalt`
-    qinv
-
-instance Hashable ECDSA_PublicKey where
-  hashWithSalt s (ECDSA_PublicKey (ECDSA.PublicKey curve q)) =
-    s `hashWithSalt` show curve `hashWithSalt` show q -- FIXME: don't use show
-
-instance Hashable ECDSA_PrivateKey where
-  hashWithSalt s (ECDSA_PrivateKey (ECDSA.PrivateKey curve d)) =
-    s `hashWithSalt` show curve `hashWithSalt` show d -- FIXME: don't use show
-
-newtype ECurvePoint =
-  ECurvePoint
-    { unECurvepoint :: ECCT.Point
-    }
-  deriving (Data, Eq, Generic, Show, Typeable)
-
-instance A.ToJSON ECurvePoint where
-  toJSON (ECurvePoint (ECCT.Point x y)) = A.toJSON (x, y)
-  toJSON (ECurvePoint ECCT.PointO) = A.toJSON "point at infinity"
-
-instance A.FromJSON ECurvePoint where
-  parseJSON (A.Object v) = error "FIXME: whatsit"
-  parseJSON _ = mzero
diff --git a/Codec/Encryption/OpenPGP/Types/Internal/PKITypes.hs b/Codec/Encryption/OpenPGP/Types/Internal/PKITypes.hs
--- a/Codec/Encryption/OpenPGP/Types/Internal/PKITypes.hs
+++ b/Codec/Encryption/OpenPGP/Types/Internal/PKITypes.hs
@@ -1,5 +1,5 @@
 -- PKITypes.hs: OpenPGP (RFC4880) data types for public/secret keys
--- Copyright © 2012-2022  Clint Adams
+-- Copyright © 2012-2024  Clint Adams
 -- This software is released under the terms of the Expat license.
 -- (See the LICENSE file).
 {-# LANGUAGE DataKinds #-}
@@ -13,7 +13,7 @@
 import GHC.Generics (Generic)
 
 import Codec.Encryption.OpenPGP.Types.Internal.Base
-import Codec.Encryption.OpenPGP.Types.Internal.CryptoniteNewtypes
+import Codec.Encryption.OpenPGP.Types.Internal.CryptonNewtypes
 
 import qualified Data.Aeson as A
 import qualified Data.Aeson.TH as ATH
diff --git a/hOpenPGP.cabal b/hOpenPGP.cabal
--- a/hOpenPGP.cabal
+++ b/hOpenPGP.cabal
@@ -1,6 +1,6 @@
-Cabal-version:       2.2
+Cabal-version:       3.4
 Name:                hOpenPGP
-Version:             2.9.8
+Version:             2.10.0
 Synopsis:            native Haskell implementation of OpenPGP (RFC4880)
 Description:         native Haskell implementation of OpenPGP (RFC4880), plus Camellia (RFC5581), plus ECC (RFC6637)
 Homepage:            https://salsa.debian.org/clint/hOpenPGP
@@ -8,7 +8,7 @@
 License-file:        LICENSE
 Author:              Clint Adams
 Maintainer:          Clint Adams <clint@debian.org>
-Copyright:           2012-2022  Clint Adams
+Copyright:           2012-2024  Clint Adams
 Category:            Codec, Data
 Build-type:          Simple
 Extra-source-files: tests/suite.hs
@@ -170,11 +170,11 @@
                , conduit               >= 1.3.0
                , conduit-extra         >= 1.1
                , containers
-               , cryptonite            >= 0.11
+               , crypton
                , crypto-cipher-types
                , errors
                , hashable
-               , incremental-parser
+               , incremental-parser    >= 0.5.1
                , ixset-typed
                , lens                  >= 3.0
                , memory
@@ -217,10 +217,10 @@
 common internalmods
   other-modules:       Codec.Encryption.OpenPGP.Internal
                      , Codec.Encryption.OpenPGP.Internal.CryptoCipherTypes
-                     , Codec.Encryption.OpenPGP.Internal.Cryptonite
+                     , Codec.Encryption.OpenPGP.Internal.Crypton
                      , Codec.Encryption.OpenPGP.Internal.HOBlockCipher
                      , Codec.Encryption.OpenPGP.Types.Internal.Base
-                     , Codec.Encryption.OpenPGP.Types.Internal.CryptoniteNewtypes
+                     , Codec.Encryption.OpenPGP.Types.Internal.CryptonNewtypes
                      , Codec.Encryption.OpenPGP.Types.Internal.PKITypes
                      , Codec.Encryption.OpenPGP.Types.Internal.PacketClass
                      , Codec.Encryption.OpenPGP.Types.Internal.Pkt
@@ -285,4 +285,4 @@
 source-repository this
   type:     git
   location: https://salsa.debian.org/clint/hOpenPGP.git
-  tag:      v2.9.8
+  tag:      v2.10.0
