diff --git a/asn1.h b/asn1.h
index 50c2e14421f6a5aab194d01bdb5ae87653e2f498..ef7e94705174eaa12a060f673e98c9a00d08a7a3 100644
--- a/asn1.h
+++ b/asn1.h
@@ -93,23 +93,23 @@ enum asn1_iterator_result
 /* Parsing DER objects. */
 struct asn1_der_iterator
 {
-  unsigned buffer_length;
+  size_t buffer_length;
   const uint8_t *buffer;
 
   /* Next object to parse. */
-  unsigned pos;
+  size_t pos;
 
   enum asn1_type type;
 
   /* Pointer to the current object */
-  unsigned length;
+  size_t length;
   const uint8_t *data;
 };
 
 /* Initializes the iterator. */
 enum asn1_iterator_result
 asn1_der_iterator_first(struct asn1_der_iterator *iterator,
-			unsigned length, const uint8_t *input);
+			size_t length, const uint8_t *input);
 
 enum asn1_iterator_result
 asn1_der_iterator_next(struct asn1_der_iterator *iterator);
diff --git a/der-iterator.c b/der-iterator.c
index 2e6efd5fac85f0775e6f090f1e542cb5084c2de9..236d3cb58def85bcfdb0b66222205f88c8f7d969 100644
--- a/der-iterator.c
+++ b/der-iterator.c
@@ -87,7 +87,7 @@ enum {
  * first element. */
 static void
 asn1_der_iterator_init(struct asn1_der_iterator *iterator,
-		       unsigned length, const uint8_t *input)
+		       size_t length, const uint8_t *input)
 {
   iterator->buffer_length = length;
   iterator->buffer = input;
@@ -133,7 +133,7 @@ asn1_der_iterator_next(struct asn1_der_iterator *i)
       if (LEFT(i) < k)
 	return ASN1_ITERATOR_ERROR;
 
-      if (k > sizeof(unsigned))
+      if (k > sizeof(i->length))
 	return ASN1_ITERATOR_ERROR;
 
       i->pos += k;
@@ -164,7 +164,7 @@ asn1_der_iterator_next(struct asn1_der_iterator *i)
 
 enum asn1_iterator_result
 asn1_der_iterator_first(struct asn1_der_iterator *i,
-			unsigned length, const uint8_t *input)
+			size_t length, const uint8_t *input)
 {
   asn1_der_iterator_init(i, length, input);
   return asn1_der_iterator_next(i);
@@ -216,7 +216,7 @@ asn1_der_get_uint32(struct asn1_der_iterator *i,
   /* Big endian, two's complement, minimum number of octets (except 0,
      which is encoded as a single octet */
   uint32_t value = 0;
-  unsigned length = i->length;
+  size_t length = i->length;
   unsigned k;
 
   if (!length || length > 5)
diff --git a/der2dsa.c b/der2dsa.c
index 023a9e742a3e5a42a8946e4a57158aa2254a143c..9d439c3e8cff8966b4dca89138db7657374beb9e 100644
--- a/der2dsa.c
+++ b/der2dsa.c
@@ -103,9 +103,9 @@ dsa_openssl_private_key_from_der_iterator(struct dsa_public_key *pub,
 
 int
 dsa_openssl_private_key_from_der(struct dsa_public_key *pub,
-		     struct dsa_private_key *priv,
-		     unsigned p_max_bits,
-		     unsigned length, const uint8_t *data)
+				 struct dsa_private_key *priv,
+				 unsigned p_max_bits,
+				 size_t length, const uint8_t *data)
 {
   struct asn1_der_iterator i;
   enum asn1_iterator_result res;
diff --git a/der2rsa.c b/der2rsa.c
index 3c94ea5a270b3f5b5ceaf6ee36ee70f3d659beee..30fe2e195eb64168e407f370122d741233c2296d 100644
--- a/der2rsa.c
+++ b/der2rsa.c
@@ -116,7 +116,7 @@ int
 rsa_keypair_from_der(struct rsa_public_key *pub,
 		     struct rsa_private_key *priv,
 		     unsigned limit, 
-		     unsigned length, const uint8_t *data)
+		     size_t length, const uint8_t *data)
 {
   struct asn1_der_iterator i;
   enum asn1_iterator_result res;
diff --git a/dsa.h b/dsa.h
index 7ee26249d76eb62e09e96acef0c6ed3ac8b7c617..91d233a51d3783b84865ec74d20b1c0073f09ad2 100644
--- a/dsa.h
+++ b/dsa.h
@@ -268,7 +268,7 @@ int
 dsa_openssl_private_key_from_der(struct dsa_public_key *pub,
 				 struct dsa_private_key *priv,
 				 unsigned p_max_bits, 
-				 unsigned length, const uint8_t *data);
+				 size_t length, const uint8_t *data);
 
 
 /* Internal functions. */
diff --git a/rsa.h b/rsa.h
index 4226f389751f08fe35e6e18557672306139d09ce..3ad7e9ab7b602ba9839f0a85176aaa05fc074af0 100644
--- a/rsa.h
+++ b/rsa.h
@@ -386,7 +386,7 @@ int
 rsa_keypair_from_der(struct rsa_public_key *pub,
 		     struct rsa_private_key *priv,
 		     unsigned limit, 
-		     unsigned length, const uint8_t *data);
+		     size_t length, const uint8_t *data);
 
 /* OpenPGP format. Experimental interface, subject to change. */
 int