mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-04 12:20:42 +09:00
pki_gcrypt: Rework 'pki_export_pubkey_rsa1'
* src/pki_gcrypt.c (pki_export_pubkey_rsa1): Rework to be more idiomatic. Fix leaking MPIs. Signed-off-by: Justus Winter <justus@g10code.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Andreas Schneider
parent
ed34425306
commit
e518ec1cb7
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user