diff --git a/Codec/Crypto/RSA.hs b/Codec/Crypto/RSA.hs
--- a/Codec/Crypto/RSA.hs
+++ b/Codec/Crypto/RSA.hs
@@ -5,6 +5,8 @@
 module Codec.Crypto.RSA(
        -- * Keys and key generations
        generateKeyPair
+       , PrivateKey
+       , PublicKey
        -- * High-level encryption and signing functions
        , encrypt
        , decrypt
@@ -75,14 +77,11 @@
               return $ PublicKey (fromIntegral len) n 65537
 
 instance Binary PrivateKey where
-  put pk = do putLazyByteString $ i2osp (private_size pk) 8
-              putLazyByteString $ i2osp (private_n pk)    (private_size pk)
-              putLazyByteString $ i2osp (private_d pk)    (private_size pk)
-  get    = do len <- (fromIntegral . os2ip) `fmap` getLazyByteString 8
-              n   <- os2ip `fmap` getLazyByteString len
-              d   <- os2ip `fmap` getLazyByteString len
-              return $ PrivateKey { private_size = fromIntegral len
-                                  , private_n    = n
+  put pk = do put (private_pub pk)
+              putLazyByteString $ i2osp (private_d pk)    (public_size $ private_pub pk)
+  get    = do pub <- get
+              d   <- os2ip `fmap` getLazyByteString (fromIntegral $ public_size pub)
+              return $ PrivateKey { private_pub  = pub
                                   , private_d    = d
                                   , private_p    = 0
                                   , private_q    = 0
@@ -115,7 +114,7 @@
 -- generator is of considerable importance when using this function; the 
 -- input CryptoRandomGen should never be used again for any other purpose.
 generateKeyPair :: CryptoRandomGen g => g -> Int -> (PublicKey, PrivateKey, g)
-generateKeyPair g sizeBits = (PublicKey kLen n e, privateKey, g')
+generateKeyPair g sizeBits = (publicKey, privateKey, g')
  where
   kLen       = fromIntegral $ sizeBits `div` 8
   (p, q, g') = generate_pq g kLen
@@ -123,8 +122,8 @@
   phi        = (p - 1) * (q - 1)
   e          = 65537
   d          = modular_inverse e phi 
-  privateKey = PrivateKey { private_size = kLen
-                          , private_n    = n
+  publicKey  = PublicKey kLen n e
+  privateKey = PrivateKey { private_pub  = publicKey
                           , private_d    = d
                           , private_p    = 0
                           , private_q    = 0
diff --git a/RSA.cabal b/RSA.cabal
--- a/RSA.cabal
+++ b/RSA.cabal
@@ -1,6 +1,6 @@
 name:       RSA
 category:   Cryptography, Codec
-version:    1.2.1.0
+version:    1.2.2.0
 license:    BSD3
 license-file: LICENSE
 author:     Adam Wick <awick@galois.com>
@@ -32,7 +32,7 @@
   Default: False
 
 Library
- build-depends: bytestring, crypto-api >= 0.10, monadcryptorandom, crypto-pubkey-types
+ build-depends: bytestring, crypto-api >= 0.10, monadcryptorandom, crypto-pubkey-types >= 0.2
  GHC-Options: -O2 -Wall -fno-ignore-asserts -fno-warn-orphans
  if flag(OldBase)
    build-depends: base >= 3 && < 4, SHA < 1.4.1
