From: Nikos Mavrogiannopoulos Date: Wed, 16 Mar 2011 21:38:18 +0000 (+0100) Subject: read correct algorithm when decrypting data and use correct number of private parameters. X-Git-Tag: gnutls_2_99_0~104 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=555fce334bcc9f44b078341f1c04172e8d6a9e41;p=thirdparty%2Fgnutls.git read correct algorithm when decrypting data and use correct number of private parameters. --- diff --git a/lib/openpgp/privkey.c b/lib/openpgp/privkey.c index 0ed4f0d7cf..3b831a2288 100644 --- a/lib/openpgp/privkey.c +++ b/lib/openpgp/privkey.c @@ -759,6 +759,7 @@ _gnutls_openpgp_privkey_get_mpis (gnutls_openpgp_privkey_t pkey, goto error; } } + /* fixup will generate exp1 and exp2 that are not * available here. */ @@ -1324,8 +1325,8 @@ _gnutls_openpgp_privkey_decrypt_data (gnutls_openpgp_privkey_t key, gnutls_datum_t * plaintext) { int result, i; - bigint_t params[MAX_PUBLIC_PARAMS_SIZE]; - int params_size = MAX_PUBLIC_PARAMS_SIZE; + bigint_t params[MAX_PRIV_PARAMS_SIZE]; + int params_size = MAX_PRIV_PARAMS_SIZE; int pk_algorithm; gnutls_openpgp_keyid_t keyid; @@ -1343,11 +1344,18 @@ _gnutls_openpgp_privkey_decrypt_data (gnutls_openpgp_privkey_t key, KEYID_IMPORT (kid, keyid); result = _gnutls_openpgp_privkey_get_mpis (key, kid, params, ¶ms_size); + + i = gnutls_openpgp_privkey_get_subkey_idx (key, keyid); + + pk_algorithm = gnutls_openpgp_privkey_get_subkey_pk_algorithm (key, i, NULL); } else { + pk_algorithm = gnutls_openpgp_privkey_get_pk_algorithm (key, NULL); + result = _gnutls_openpgp_privkey_get_mpis (key, NULL, params, ¶ms_size); + } if (result < 0) @@ -1356,8 +1364,6 @@ _gnutls_openpgp_privkey_decrypt_data (gnutls_openpgp_privkey_t key, return result; } - pk_algorithm = gnutls_openpgp_privkey_get_pk_algorithm (key, NULL); - if (pk_algorithm != GNUTLS_PK_RSA) { gnutls_assert ();