diff --git a/Crypto/Types/PubKey/DH.hs b/Crypto/Types/PubKey/DH.hs
--- a/Crypto/Types/PubKey/DH.hs
+++ b/Crypto/Types/PubKey/DH.hs
@@ -15,12 +15,24 @@
     ) where
 
 import Data.Data
+import Data.ASN1.Types
 
 -- | Represent Diffie Hellman parameters namely P (prime), and G (generator).
 data Params = Params
     { params_p :: Integer
     , params_g :: Integer
     } deriving (Show,Read,Eq,Data,Typeable)
+
+instance ASN1Object Params where
+    toASN1 params = \xs -> Start Sequence
+                           : IntVal (params_p params)
+                           : IntVal (params_g params)
+                           : End Sequence
+                           : xs 
+
+    fromASN1 (Start Sequence:IntVal p:IntVal g:End Sequence:xs) =
+        Right (Params { params_p = p, params_g = g }, xs)
+    fromASN1 _ = Left "fromASN1: DH.Params: unexpected format"
 
 -- | Represent Diffie Hellman public number Y.
 newtype PublicNumber = PublicNumber Integer
diff --git a/Crypto/Types/PubKey/DSA.hs b/Crypto/Types/PubKey/DSA.hs
--- a/Crypto/Types/PubKey/DSA.hs
+++ b/Crypto/Types/PubKey/DSA.hs
@@ -8,7 +8,7 @@
 --
 module Crypto.Types.PubKey.DSA
     ( Params(..)
-    , Signature
+    , Signature(..)
     , PublicNumber
     , PublicKey(..)
     , PrivateNumber
@@ -46,7 +46,20 @@
     fromASN1 _ = Left "fromASN1: DSA.Params: unexpected format"
 
 -- | Represent a DSA signature namely R and S.
-type Signature = (Integer,Integer)
+data Signature = Signature
+    { sign_r :: Integer -- ^ DSA r
+    , sign_s :: Integer -- ^ DSA s
+    } deriving (Show,Read,Eq,Data,Typeable)
+
+instance ASN1Object Signature where
+    toASN1 sign = \xs -> Start Sequence
+                         : IntVal (sign_r sign)
+                         : IntVal (sign_s sign)
+                         : End Sequence
+                         : xs
+    fromASN1 (Start Sequence:IntVal r:IntVal s:End Sequence:xs) =
+        Right (Signature { sign_r = r, sign_s = s }, xs)
+    fromASN1 _ = Left "fromASN1: DSA.Signature: unexpected format"
 
 -- | Represent a DSA public key.
 data PublicKey = PublicKey
diff --git a/Crypto/Types/PubKey/ECC.hs b/Crypto/Types/PubKey/ECC.hs
--- a/Crypto/Types/PubKey/ECC.hs
+++ b/Crypto/Types/PubKey/ECC.hs
@@ -79,24 +79,24 @@
     | SEC_p256r1
     | SEC_p384r1
     | SEC_p521r1 
-	| SEC_t113r1
-	| SEC_t113r2
-	| SEC_t131r1
-	| SEC_t131r2
-	| SEC_t163k1
-	| SEC_t163r1
-	| SEC_t163r2
-	| SEC_t193r1
-	| SEC_t193r2
-	| SEC_t233k1
-	| SEC_t233r1
-	| SEC_t239k1
-	| SEC_t283k1
-	| SEC_t283r1
-	| SEC_t409k1
-	| SEC_t409r1
-	| SEC_t571k1
-	| SEC_t571r1
+    | SEC_t113r1
+    | SEC_t113r2
+    | SEC_t131r1
+    | SEC_t131r2
+    | SEC_t163k1
+    | SEC_t163r1
+    | SEC_t163r2
+    | SEC_t193r1
+    | SEC_t193r2
+    | SEC_t233k1
+    | SEC_t233r1
+    | SEC_t239k1
+    | SEC_t283k1
+    | SEC_t283r1
+    | SEC_t409k1
+    | SEC_t409r1
+    | SEC_t571k1
+    | SEC_t571r1
     deriving (Show,Eq,Ord)
 
 -- | get the curve definition associated with a recommended known curve name.
diff --git a/crypto-pubkey-types.cabal b/crypto-pubkey-types.cabal
--- a/crypto-pubkey-types.cabal
+++ b/crypto-pubkey-types.cabal
@@ -1,5 +1,5 @@
 Name:                crypto-pubkey-types
-Version:             0.3.2
+Version:             0.4.0
 Description:         Generic cryptography public keys algorithm types
 License:             BSD3
 License-file:        LICENSE
@@ -19,7 +19,7 @@
                      Crypto.Types.PubKey.ECC
                      Crypto.Types.PubKey.ECDSA
   Build-depends:     base >= 4 && < 5
-                   , asn1-types >= 0.1 && < 0.2
+                   , asn1-types >= 0.1 && < 0.3
 
 source-repository head
   type:     git
