Skip to content

Commit c8e8236

Browse files
nicstangeherbertx
authored andcommitted
crypto: dh - allow for passing NULL to the ffdheXYZ(dh)s' ->set_secret()
Ephemeral key generation can be requested from any of the ffdheXYZ(dh) variants' common ->set_secret() by passing it an (encoded) struct dh with the key parameter being unset, i.e. with ->key_size == 0. As the whole purpose of the ffdheXYZ(dh) templates is to fill in the group parameters as appropriate, they expect ->p and ->g to be unset in any input struct dh as well. This means that a user would have to encode an all-zeroes struct dh instance via crypto_dh_encode_key() when requesting ephemeral key generation from a ffdheXYZ(dh) instance, which is kind of pointless. Make dh_safe_prime_set_secret() to decode a struct dh from the supplied buffer only if the latter is non-NULL and initialize it with all zeroes otherwise. That is, it is now possible to call crypto_kpp_set_secret(tfm, NULL, 0); on any ffdheXYZ(dh) tfm for requesting ephemeral key generation. Signed-off-by: Nicolai Stange <[email protected]> Reviewed-by: Hannes Reinecke <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 209b7fc commit c8e8236

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

crypto/dh.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -444,17 +444,18 @@ static int dh_safe_prime_set_secret(struct crypto_kpp *tfm, const void *buffer,
444444
struct dh_safe_prime_instance_ctx *inst_ctx =
445445
dh_safe_prime_instance_ctx(tfm);
446446
struct dh_safe_prime_tfm_ctx *tfm_ctx = kpp_tfm_ctx(tfm);
447-
struct dh params;
447+
struct dh params = {};
448448
void *buf = NULL, *key = NULL;
449449
unsigned int buf_size;
450450
int err;
451451

452-
err = __crypto_dh_decode_key(buffer, len, &params);
453-
if (err)
454-
return err;
455-
456-
if (params.p_size || params.g_size)
457-
return -EINVAL;
452+
if (buffer) {
453+
err = __crypto_dh_decode_key(buffer, len, &params);
454+
if (err)
455+
return err;
456+
if (params.p_size || params.g_size)
457+
return -EINVAL;
458+
}
458459

459460
params.p = inst_ctx->safe_prime->p;
460461
params.p_size = inst_ctx->safe_prime->p_size;

0 commit comments

Comments
 (0)