Lines Matching defs:dh
223 static FFBigNum dh_generate_key(FF_DH *dh)
227 num_bytes = bn_num_bytes(dh->p) - 1;
231 bn_new(dh->priv_key);
232 if (!dh->priv_key)
234 bn_random(dh->priv_key, 8 * num_bytes);
236 bn_new(dh->pub_key);
237 if (!dh->pub_key) {
238 bn_free(dh->priv_key);
242 if (bn_modexp(dh->pub_key, dh->g, dh->priv_key, dh->p) < 0)
245 return dh->pub_key;
248 static int dh_compute_key(FF_DH *dh, FFBigNum pub_key_bn,
258 if ((ret = bn_modexp(k, pub_key_bn, dh->priv_key, dh->p)) < 0) {
269 void ff_dh_free(FF_DH *dh)
271 if (!dh)
273 bn_free(dh->p);
274 bn_free(dh->g);
275 bn_free(dh->pub_key);
276 bn_free(dh->priv_key);
277 av_free(dh);
323 FF_DH *dh;
326 if (!(dh = dh_new()))
329 bn_new(dh->g);
330 if (!dh->g)
333 bn_hex2bn(dh->p, P1024, ret);
337 bn_set_word(dh->g, 2);
338 dh->length = key_len;
340 return dh;
343 ff_dh_free(dh);
348 int ff_dh_generate_public_key(FF_DH *dh)
355 if (!dh_generate_key(dh))
362 ret = dh_is_valid_public_key(dh->pub_key, dh->p, q1);
374 int ff_dh_write_public_key(FF_DH *dh, uint8_t *pub_key, int pub_key_len)
379 len = bn_num_bytes(dh->pub_key);
385 bn_bn2bin(dh->pub_key, pub_key + pub_key_len - len, len);
390 int ff_dh_compute_shared_secret_key(FF_DH *dh, const uint8_t *pub_key,
410 if ((ret = dh_is_valid_public_key(pub_key_bn, dh->p, q1)) < 0) {
412 } else if ((ret = dh_compute_key(dh, pub_key_bn, secret_key_len,