Lines Matching full:dh
58 static int MDH_generate_key(MDH *dh) in MDH_generate_key() argument
61 MP_set(&dh->ctx.P, dh->p); in MDH_generate_key()
62 MP_set(&dh->ctx.G, dh->g); in MDH_generate_key()
63 dh->ctx.len = 128; in MDH_generate_key()
64 dhm_make_public(&dh->ctx, 1024, out, 1, havege_random, &RTMP_TLS_ctx->hs); in MDH_generate_key()
65 MP_new(dh->pub_key); in MDH_generate_key()
66 MP_new(dh->priv_key); in MDH_generate_key()
67 MP_set(dh->pub_key, &dh->ctx.GX); in MDH_generate_key()
68 MP_set(dh->priv_key, &dh->ctx.X); in MDH_generate_key()
72 static int MDH_compute_key(uint8_t *secret, size_t len, MP_t pub, MDH *dh) in MDH_compute_key() argument
74 MP_set(&dh->ctx.GY, pub); in MDH_compute_key()
75 dhm_calc_secret(&dh->ctx, secret, &len); in MDH_compute_key()
106 … MDH_free(dh) do {MP_free(((MDH*)(dh))->p); MP_free(((MDH*)(dh))->g); MP_free(((MDH*)(dh))->pub_ke… argument
108 static int MDH_generate_key(MDH *dh) in MDH_generate_key() argument
114 num_bytes = (mpz_sizeinbase(dh->p, 2) + 7) / 8 - 1; in MDH_generate_key()
118 dh->priv_key = calloc(1, sizeof(*dh->priv_key)); in MDH_generate_key()
119 if (!dh->priv_key) in MDH_generate_key()
121 mpz_init2(dh->priv_key, 1); in MDH_generate_key()
125 mpz_urandomb(dh->priv_key, rs, num_bytes); in MDH_generate_key()
128 dh->pub_key = calloc(1, sizeof(*dh->pub_key)); in MDH_generate_key()
129 if (!dh->pub_key) in MDH_generate_key()
131 mpz_init2(dh->pub_key, 1); in MDH_generate_key()
132 if (!dh->pub_key) { in MDH_generate_key()
133 mpz_clear(dh->priv_key); in MDH_generate_key()
134 free(dh->priv_key); in MDH_generate_key()
138 mpz_powm(dh->pub_key, dh->g, dh->priv_key, dh->p); in MDH_generate_key()
143 static int MDH_compute_key(uint8_t *secret, size_t len, MP_t pub, MDH *dh) in MDH_compute_key() argument
148 num_bytes = (mpz_sizeinbase(dh->p, 2) + 7) / 8; in MDH_compute_key()
157 mpz_powm(k, pub, dh->priv_key, dh->p); in MDH_compute_key()
168 #include <openssl/dh.h>
184 #define MDH DH
186 #define MDH_free(dh) DH_free(dh) argument
187 #define MDH_generate_key(dh) DH_generate_key(dh) argument
188 #define MDH_compute_key(secret, seclen, pub, dh) DH_compute_key(secret, pub, dh) argument
210 RTMP_Log(RTMP_LOGERROR, "DH public key must be at least 2"); in isValidPublicKey()
220 RTMP_Log(RTMP_LOGERROR, "DH public key must be at most p-2"); in isValidPublicKey()
238 RTMP_Log(RTMP_LOGWARNING, "DH public key does not fulfill y^q mod p = 1"); in isValidPublicKey()
251 MDH *dh = MDH_new(); in DHInit() local
253 if (!dh) in DHInit()
256 MP_new(dh->g); in DHInit()
258 if (!dh->g) in DHInit()
261 MP_gethex(dh->p, P1024, res); /* prime P1024, see dhgroups.h */ in DHInit()
267 MP_set_w(dh->g, 2); /* base 2 */ in DHInit()
269 dh->length = nKeyBits; in DHInit()
270 return dh; in DHInit()
273 if (dh) in DHInit()
274 MDH_free(dh); in DHInit()
280 DHGenerateKey(MDH *dh) in DHGenerateKey() argument
283 if (!dh) in DHGenerateKey()
290 if (!MDH_generate_key(dh)) in DHGenerateKey()
296 res = isValidPublicKey(dh->pub_key, dh->p, q1); in DHGenerateKey()
299 MP_free(dh->pub_key); in DHGenerateKey()
300 MP_free(dh->priv_key); in DHGenerateKey()
301 dh->pub_key = dh->priv_key = 0; in DHGenerateKey()
314 DHGetPublicKey(MDH *dh, uint8_t *pubkey, size_t nPubkeyLen) in DHGetPublicKey() argument
317 if (!dh || !dh->pub_key) in DHGetPublicKey()
320 len = MP_bytes(dh->pub_key); in DHGetPublicKey()
325 MP_setbin(dh->pub_key, pubkey + (nPubkeyLen - len), len); in DHGetPublicKey()
331 DHGetPrivateKey(MDH *dh, uint8_t *privkey, size_t nPrivkeyLen)
333 if (!dh || !dh->priv_key)
336 int len = MP_bytes(dh->priv_key);
341 MP_setbin(dh->priv_key, privkey + (nPrivkeyLen - len), len);
350 DHComputeSharedSecretKey(MDH *dh, uint8_t *pubkey, size_t nPubkeyLen, in DHComputeSharedSecretKey() argument
357 if (!dh || !secret || nPubkeyLen >= INT_MAX) in DHComputeSharedSecretKey()
367 if (isValidPublicKey(pubkeyBn, dh->p, q1)) in DHComputeSharedSecretKey()
368 res = MDH_compute_key(secret, nPubkeyLen, pubkeyBn, dh); in DHComputeSharedSecretKey()