summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Josefsson <simon@josefsson.org>2009-06-17 09:20:08 +0200
committerSimon Josefsson <simon@josefsson.org>2009-08-07 01:01:38 +0200
commitce53471aa4f2887c684f5cdc6918d8e8c549f143 (patch)
tree7d33356d5df46f877c74e1c92d1ff5cafad21176
parentf758d36a9839ad86221c598a48cdeda5a94eebdf (diff)
downloadgnutls-ce53471aa4f2887c684f5cdc6918d8e8c549f143.tar.gz
Return proper MPI lengths in bits.
Reported by Peter Hendrickson <pdh@wiredyne.com> in <http://thread.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/3607>.
-rw-r--r--lib/gnutls_ui.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/lib/gnutls_ui.c b/lib/gnutls_ui.c
index d0a6d00809..2be9b14a00 100644
--- a/lib/gnutls_ui.c
+++ b/lib/gnutls_ui.c
@@ -288,6 +288,24 @@ gnutls_dh_get_secret_bits (gnutls_session_t session)
}
}
+static int
+mpi_buf2bits (gnutls_datum_t *mpi_buf)
+{
+ bigint_t mpi;
+ int rc;
+
+ rc = _gnutls_mpi_scan_nz (&mpi, mpi_buf->data, mpi_buf->size);
+ if (rc)
+ {
+ gnutls_assert ();
+ return rc;
+ }
+
+ rc = _gnutls_mpi_get_nbits (mpi);
+ _gnutls_mpi_release (&mpi);
+
+ return rc;
+}
/**
* gnutls_dh_get_prime_bits - return the bits used in DH authentication
@@ -346,8 +364,7 @@ gnutls_dh_get_prime_bits (gnutls_session_t session)
return GNUTLS_E_INVALID_REQUEST;
}
- return (dh->prime.size) * 8;
-
+ return mpi_buf2bits (&dh->prime);
}
/**
@@ -368,7 +385,7 @@ gnutls_rsa_export_get_modulus_bits (gnutls_session_t session)
if (info == NULL)
return GNUTLS_E_INTERNAL_ERROR;
- return info->rsa_export.modulus.size * 8;
+ return mpi_buf2bits (&info->rsa_export.modulus);
}
/**
@@ -426,8 +443,7 @@ gnutls_dh_get_peers_public_bits (gnutls_session_t session)
return GNUTLS_E_INVALID_REQUEST;
}
- return dh->public_key.size * 8;
-
+ return mpi_buf2bits (&dh->public_key);
}
/* CERTIFICATE STUFF */