diff --git a/src/pki_gcrypt.c b/src/pki_gcrypt.c index fcbe8517..4865ea35 100644 --- a/src/pki_gcrypt.c +++ b/src/pki_gcrypt.c @@ -1189,34 +1189,17 @@ int pki_export_pubkey_rsa1(const ssh_key key, char *rsa1, size_t rsa1_len) { - gcry_sexp_t sexp; + gpg_error_t err; int rsa_size; - bignum b; + bignum E, N; char *e, *n; - sexp = gcry_sexp_find_token(key->rsa, "e", 0); - if (sexp == NULL) { + err = gcry_sexp_extract_param(key->rsa, NULL, "en", &E, &N, NULL); + if (err != 0) { return SSH_ERROR; } - b = gcry_sexp_nth_mpi(sexp, 1, GCRYMPI_FMT_USG); - gcry_sexp_release(sexp); - if (b == NULL) { - return SSH_ERROR; - } - e = bignum_bn2dec(b); - - sexp = gcry_sexp_find_token(key->rsa, "n", 0); - if (sexp == NULL) { - SAFE_FREE(e); - return SSH_ERROR; - } - b = gcry_sexp_nth_mpi(sexp, 1, GCRYMPI_FMT_USG); - gcry_sexp_release(sexp); - if (b == NULL) { - SAFE_FREE(e); - return SSH_ERROR; - } - n = bignum_bn2dec(b); + e = bignum_bn2dec(E); + n = bignum_bn2dec(N); rsa_size = (gcry_pk_get_nbits(key->rsa) + 7) / 8; @@ -1225,6 +1208,8 @@ int pki_export_pubkey_rsa1(const ssh_key key, host, rsa_size << 3, e, n); SAFE_FREE(e); SAFE_FREE(n); + bignum_free(E); + bignum_free(N); return SSH_OK; }