diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-08-20 22:37:29 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-08-20 22:37:29 (GMT) |
commit | 3c5b02bde6754f2db27a8b413739711396690e1c (patch) | |
tree | baf5e252bce0d26d1766a964f43d5d73b24e0ac4 /src | |
parent | 643d8886dbc8e04de7a3bab1207c6997ea2549d7 (diff) |
Replaced calls to deprecated functions building RSA keys.
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/db/certs.c | 81 |
1 files changed, 69 insertions, 12 deletions
diff --git a/src/analysis/db/certs.c b/src/analysis/db/certs.c index 8367c39..c6b49a8 100644 --- a/src/analysis/db/certs.c +++ b/src/analysis/db/certs.c @@ -47,6 +47,9 @@ static bool add_extension_to_cert(X509 *, X509 *, /*const */char *, /*const */ch /* Ajoute une extension à une requête de signature. */ static bool add_extension_to_req(STACK_OF(X509_EXTENSION) *, int, /*const */char *); +/* Crée une paire de clefs RSA. */ +static RSA *generate_rsa_key(unsigned int, unsigned long); + /****************************************************************************** @@ -171,6 +174,68 @@ static bool add_extension_to_cert(X509 *issuer, X509 *subj, /*const */char *name /****************************************************************************** * * +* Paramètres : bits = taille de la clef en nombre de bits. * +* e = valeur de l'exposant destiné à la clef. * +* * +* Description : Crée une paire de clefs RSA. * +* * +* Retour : Clef RSA mise en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static RSA *generate_rsa_key(unsigned int bits, unsigned long e) +{ + RSA *result; /* Clef à retourner */ + BIGNUM *bne; /* Autre version de l'exposant */ + int ret; /* Bilan d'un appel */ + + bne = BN_new(); + if (bne == NULL) + { + log_variadic_message(LMT_ERROR, _("Unable to create a BIGNUM structure (error=%lu)"), ERR_get_error()); + goto grk_no_bne; + } + + ret = BN_set_word(bne, e); + if (ret != 1) goto grk_bne_failed; + + result = RSA_new(); + if (bne == NULL) + { + log_variadic_message(LMT_ERROR, _("Unable to create a RSA key (error=%lu)"), ERR_get_error()); + goto grk_no_rsa; + } + + ret = RSA_generate_key_ex(result, bits, bne, NULL); + if (ret != 1) + { + log_variadic_message(LMT_ERROR, _("Unable to generate RSA key (error=%lu)"), ERR_get_error()); + + RSA_free(result); + result = NULL; + + goto grk_done; + } + + grk_done: + + grk_no_rsa: + + grk_bne_failed: + + BN_free(bne); + + grk_no_bne: + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : dir = répertoire d'enregistrement de la création. * * label = étiquette à coller au certificat produit. * * valid = durée de validité en secondes. * @@ -194,12 +259,8 @@ bool make_ca(const char *dir, const char *label, unsigned long valid, const x509 char *filename; /* Chemin d'accès à un fichier */ FILE *stream; /* Flux ouvert en écriture */ - rsa = RSA_generate_key(4096, 17, NULL, NULL); - if (rsa == NULL) - { - log_variadic_message(LMT_ERROR, _("Unable to generate RSA key (error=%lu)"), ERR_get_error()); - goto rsa_failed; - } + rsa = generate_rsa_key(4096, 17); + if (rsa == NULL) goto rsa_failed; pk = EVP_PKEY_new(); if (pk == NULL) goto pk_failed; @@ -402,12 +463,8 @@ bool make_request(const char *dir, const char *label, const x509_entries *entrie char *filename; /* Chemin d'accès à un fichier */ FILE *stream; /* Flux ouvert en écriture */ - rsa = RSA_generate_key(2048, 17, NULL, NULL); - if (rsa == NULL) - { - log_variadic_message(LMT_ERROR, _("Unable to generate RSA key (error=%lu)"), ERR_get_error()); - goto rsa_failed; - } + rsa = generate_rsa_key(2048, 17); + if (rsa == NULL) goto rsa_failed; pk = EVP_PKEY_new(); if (pk == NULL) goto pk_failed; |