summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2016-11-30 09:15:06 +0100
committerNikos Mavrogiannopoulos <nmav@redhat.com>2016-11-30 09:25:22 +0100
commit3ae7423780426d2f2c97d87af6e9bcd6ce3a2f69 (patch)
treee34dfb35b1d41d1e24d0f020302786d7b7d4ff31
parentc2d27215550945a2f39d40abd3d1985134b9e89c (diff)
downloadgnutls-3ae7423780426d2f2c97d87af6e9bcd6ce3a2f69.tar.gz
When decoding a public key ensure that algorithm is written in the params struct
Reported by Dmitry Eremin-Solenikov.
-rw-r--r--lib/x509/key_decode.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/x509/key_decode.c b/lib/x509/key_decode.c
index 049e93a951..f1ce99f6b3 100644
--- a/lib/x509/key_decode.c
+++ b/lib/x509/key_decode.c
@@ -239,18 +239,24 @@ int _gnutls_x509_read_pubkey(gnutls_pk_algorithm_t algo, uint8_t * der,
switch (algo) {
case GNUTLS_PK_RSA:
ret = _gnutls_x509_read_rsa_pubkey(der, dersize, params);
- if (ret >= 0)
+ if (ret >= 0) {
+ params->algo = GNUTLS_PK_RSA;
params->params_nr = RSA_PUBLIC_PARAMS;
+ }
break;
case GNUTLS_PK_DSA:
ret = _gnutls_x509_read_dsa_pubkey(der, dersize, params);
- if (ret >= 0)
+ if (ret >= 0) {
+ params->algo = GNUTLS_PK_DSA;
params->params_nr = DSA_PUBLIC_PARAMS;
+ }
break;
case GNUTLS_PK_EC:
ret = _gnutls_x509_read_ecc_pubkey(der, dersize, params);
- if (ret >= 0)
+ if (ret >= 0) {
+ params->algo = GNUTLS_PK_ECDSA;
params->params_nr = ECC_PUBLIC_PARAMS;
+ }
break;
default:
ret = gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE);