diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # CHANGELOG for crypton
 
+## 1.1.4
+
+* Generic instance for RSA PublicKey and PrivateKey
+
 ## 1.1.3
 
 * Ensure that `pointAdd` in `PubKey.ECC.P256` treats the point at infinity as the additive identity.
diff --git a/Crypto/PubKey/RSA/Types.hs b/Crypto/PubKey/RSA/Types.hs
--- a/Crypto/PubKey/RSA/Types.hs
+++ b/Crypto/PubKey/RSA/Types.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 
 -- |
@@ -23,6 +24,8 @@
 import Crypto.Internal.Imports
 import Data.Data
 
+import GHC.Generics
+
 -- | Blinder which is used to obfuscate the timing
 -- of the decryption primitive (used by decryption and signing).
 data Blinder = Blinder !Integer !Integer
@@ -51,7 +54,7 @@
     , public_e :: Integer
     -- ^ public exponent e
     }
-    deriving (Show, Read, Eq, Data)
+    deriving (Show, Read, Eq, Data, Generic)
 
 instance NFData PublicKey where
     rnf (PublicKey sz n e) = rnf n `seq` rnf e `seq` sz `seq` ()
@@ -81,7 +84,7 @@
     , private_qinv :: Integer
     -- ^ q^(-1) mod p
     }
-    deriving (Show, Read, Eq, Data)
+    deriving (Show, Read, Eq, Data, Generic)
 
 instance NFData PrivateKey where
     rnf (PrivateKey pub d p q dp dq qinv) =
diff --git a/crypton.cabal b/crypton.cabal
--- a/crypton.cabal
+++ b/crypton.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               crypton
-version:            1.1.3
+version:            1.1.4
 license:            BSD3
 license-file:       LICENSE
 copyright:          Vincent Hanquez <vincent@snarc.org>
