mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Move store_dynamic_prime() to crypto.c.
This commit is contained in:
parent
cabb8e54c7
commit
2ef68980a7
@ -1849,10 +1849,44 @@ crypto_generate_dynamic_prime(void)
|
|||||||
return dynamic_prime;
|
return dynamic_prime;
|
||||||
}
|
}
|
||||||
|
|
||||||
BIGNUM *
|
/** Store our dynamic prime to <b>fname</b> for future use. */
|
||||||
crypto_get_tls_dh_prime(void)
|
int
|
||||||
|
router_store_dynamic_prime(const char *fname)
|
||||||
{
|
{
|
||||||
return dh_param_p_tls;
|
FILE *fp = NULL;
|
||||||
|
int retval = -1;
|
||||||
|
file_status_t fname_status = file_status(fname);
|
||||||
|
|
||||||
|
tor_assert(fname);
|
||||||
|
|
||||||
|
if (fname_status == FN_FILE) {
|
||||||
|
/* If the fname is a file, then the dynamic prime is already stored. */
|
||||||
|
retval = 0;
|
||||||
|
goto done;
|
||||||
|
} else if (fname_status != FN_NOENT) {
|
||||||
|
log_info(LD_GENERAL, "Dynamic prime filename is occupied.");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
tor_assert(fname_status == FN_NOENT);
|
||||||
|
|
||||||
|
if (!(fp = fopen(fname, "w"))) {
|
||||||
|
log_notice(LD_GENERAL, "Error while creating dynamic prime file.");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BN_print_fp(fp, dh_param_p_tls) == 0) {
|
||||||
|
log_warn(LD_GENERAL, "Error while printing dynamic prime to file.");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = 0;
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (fp)
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set the global TLS Diffie-Hellman modulus.
|
/** Set the global TLS Diffie-Hellman modulus.
|
||||||
|
@ -97,7 +97,7 @@ void crypto_free_pk_env(crypto_pk_env_t *env);
|
|||||||
|
|
||||||
void crypto_set_tls_dh_prime(int use_dynamic_primes,
|
void crypto_set_tls_dh_prime(int use_dynamic_primes,
|
||||||
BIGNUM *stored_dynamic_prime);
|
BIGNUM *stored_dynamic_prime);
|
||||||
BIGNUM * crypto_get_tls_dh_prime(void);
|
int router_store_dynamic_prime(const char *fname);
|
||||||
|
|
||||||
/* convenience function: wraps crypto_create_crypto_env, set_key, and init. */
|
/* convenience function: wraps crypto_create_crypto_env, set_key, and init. */
|
||||||
crypto_cipher_env_t *crypto_create_init_cipher(const char *key,
|
crypto_cipher_env_t *crypto_create_init_cipher(const char *key,
|
||||||
|
@ -485,46 +485,6 @@ v3_authority_check_key_expiry(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Store <b>dynamic_prime</b> to disk for future use. */
|
|
||||||
int
|
|
||||||
router_store_dynamic_prime(const BIGNUM *dynamic_prime)
|
|
||||||
{
|
|
||||||
FILE *fp = NULL;
|
|
||||||
char *fname = get_datadir_fname2("keys", "dynamic_prime");
|
|
||||||
int retval = -1;
|
|
||||||
file_status_t fname_status = file_status(fname);
|
|
||||||
|
|
||||||
if (fname_status == FN_FILE) {
|
|
||||||
/* If the fname is a file, then the dynamic prime is already stored. */
|
|
||||||
retval = 0;
|
|
||||||
goto done;
|
|
||||||
} else if (fname_status != FN_NOENT) {
|
|
||||||
log_info(LD_GENERAL, "Dynamic prime filename is occupied.");
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
tor_assert(fname_status == FN_NOENT);
|
|
||||||
|
|
||||||
if (!(fp = fopen(fname, "w"))) {
|
|
||||||
log_notice(LD_GENERAL, "Error while creating dynamic prime file.");
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BN_print_fp(fp, dynamic_prime) == 0) {
|
|
||||||
log_warn(LD_GENERAL, "Error while printing dynamic prime to file.");
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
retval = 0;
|
|
||||||
|
|
||||||
done:
|
|
||||||
if (fp)
|
|
||||||
fclose(fp);
|
|
||||||
tor_free(fname);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Return the dynamic prime stored in the disk. If there is no
|
/** Return the dynamic prime stored in the disk. If there is no
|
||||||
dynamic prime stored in the disk, return NULL. */
|
dynamic prime stored in the disk, return NULL. */
|
||||||
BIGNUM *
|
BIGNUM *
|
||||||
@ -722,12 +682,12 @@ init_keys(void)
|
|||||||
|
|
||||||
/** 3b. If we use a dynamic prime, store it to disk. */
|
/** 3b. If we use a dynamic prime, store it to disk. */
|
||||||
if (get_options()->DynamicPrimes) {
|
if (get_options()->DynamicPrimes) {
|
||||||
BIGNUM *dynamic_prime = crypto_get_tls_dh_prime();
|
const char *fname = get_datadir_fname2("keys", "dynamic_prime");
|
||||||
if (dynamic_prime) {
|
if (crypto_store_dynamic_prime(fname)) {
|
||||||
if (router_store_dynamic_prime(dynamic_prime) < 0)
|
log_notice(LD_GENERAL, "Failed while storing dynamic prime. "
|
||||||
log_notice(LD_GENERAL, "Failed while storing dynamic prime. "
|
"Make sure your data directory is sane.");
|
||||||
"Make sure your data directory is sane.");
|
}
|
||||||
}
|
tor_free(fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 4. Build our router descriptor. */
|
/* 4. Build our router descriptor. */
|
||||||
|
@ -30,7 +30,6 @@ crypto_pk_env_t *init_key_from_file(const char *fname, int generate,
|
|||||||
int severity);
|
int severity);
|
||||||
|
|
||||||
BIGNUM *router_get_stored_dynamic_prime(void);
|
BIGNUM *router_get_stored_dynamic_prime(void);
|
||||||
int router_store_dynamic_prime(const BIGNUM *dynamic_prime);
|
|
||||||
|
|
||||||
void v3_authority_check_key_expiry(void);
|
void v3_authority_check_key_expiry(void);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user