Mercurial > pidgin
comparison src/protocols/sametime/meanwhile/session.c @ 12261:2edf5dc1b2ea
[gaim-migrate @ 14563]
Removed the dependancy on libgmp, opting to use the public domain libmpi code
instead. Bringing over updates to the places service which should fix some
crash bugs.
committer: Tailor Script <tailor@pidgin.im>
author | Christopher O'Brien <siege@pidgin.im> |
---|---|
date | Tue, 29 Nov 2005 23:31:40 +0000 |
parents | 0110fc7c6a8a |
children | a2ebf585d8c6 |
comparison
equal
deleted
inserted
replaced
12260:0a9574ed62cd | 12261:2edf5dc1b2ea |
---|---|
17 License along with this library; if not, write to the Free | 17 License along with this library; if not, write to the Free |
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 */ | 19 */ |
20 | 20 |
21 #include <glib.h> | 21 #include <glib.h> |
22 #include <gmp.h> | |
23 #include <string.h> | 22 #include <string.h> |
24 | 23 |
25 #include "mw_channel.h" | 24 #include "mw_channel.h" |
26 #include "mw_cipher.h" | 25 #include "mw_cipher.h" |
27 #include "mw_debug.h" | 26 #include "mw_debug.h" |
369 | 368 |
370 char iv[8]; | 369 char iv[8]; |
371 struct mwOpaque a, b, c; | 370 struct mwOpaque a, b, c; |
372 struct mwPutBuffer *p; | 371 struct mwPutBuffer *p; |
373 | 372 |
374 mpz_t private, public; | 373 struct mwMpi *private, *public; |
375 mpz_t remote; | 374 struct mwMpi *remote; |
376 mpz_t shared; | 375 struct mwMpi *shared; |
377 | 376 |
378 mpz_init(private); | 377 private = mwMpi_new(); |
379 mpz_init(public); | 378 public = mwMpi_new(); |
380 mpz_init(remote); | 379 remote = mwMpi_new(); |
381 mpz_init(shared); | 380 shared = mwMpi_new(); |
382 | 381 |
383 mwIV_init(iv); | 382 mwIV_init(iv); |
384 | 383 |
385 mwDHRandKeypair(private, public); | 384 mwMpi_randDHKeypair(private, public); |
386 mwDHImportKey(remote, rkey); | 385 mwMpi_import(remote, rkey); |
387 mwDHCalculateShared(shared, remote, private); | 386 mwMpi_calculateDHShared(shared, remote, private); |
388 | 387 |
389 /* put the password in opaque a */ | 388 /* put the password in opaque a */ |
390 p = mwPutBuffer_new(); | 389 p = mwPutBuffer_new(); |
391 guint32_put(p, magic); | 390 guint32_put(p, magic); |
392 mwString_put(p, pass); | 391 mwString_put(p, pass); |
393 mwPutBuffer_finalize(&a, p); | 392 mwPutBuffer_finalize(&a, p); |
394 | 393 |
395 /* put the shared key in opaque b */ | 394 /* put the shared key in opaque b */ |
396 mwDHExportKey(shared, &b); | 395 mwMpi_export(shared, &b); |
397 | 396 |
398 /* encrypt the password (a) using the shared key (b), put the result | 397 /* encrypt the password (a) using the shared key (b), put the result |
399 in opaque c */ | 398 in opaque c */ |
400 mwEncrypt(b.data+(b.len-16), 16, iv, &a, &c); | 399 mwEncrypt(b.data+(b.len-16), 16, iv, &a, &c); |
401 | 400 |
402 /* don't need the shared key anymore, re-use opaque (b) as the | 401 /* don't need the shared key anymore, re-use opaque (b) as the |
403 export of the public key */ | 402 export of the public key */ |
404 mwOpaque_clear(&b); | 403 mwOpaque_clear(&b); |
405 mwDHExportKey(public, &b); | 404 mwMpi_export(public, &b); |
406 | 405 |
407 p = mwPutBuffer_new(); | 406 p = mwPutBuffer_new(); |
408 guint16_put(p, 0x0001); /* XXX: unknown */ | 407 guint16_put(p, 0x0001); /* XXX: unknown */ |
409 mwOpaque_put(p, &b); | 408 mwOpaque_put(p, &b); |
410 mwOpaque_put(p, &c); | 409 mwOpaque_put(p, &c); |
412 | 411 |
413 mwOpaque_clear(&a); | 412 mwOpaque_clear(&a); |
414 mwOpaque_clear(&b); | 413 mwOpaque_clear(&b); |
415 mwOpaque_clear(&c); | 414 mwOpaque_clear(&c); |
416 | 415 |
417 mpz_clear(private); | 416 mwMpi_free(private); |
418 mpz_clear(public); | 417 mwMpi_free(public); |
419 mpz_clear(remote); | 418 mwMpi_free(remote); |
420 mpz_clear(shared); | 419 mwMpi_free(shared); |
421 } | 420 } |
422 | 421 |
423 | 422 |
424 /** handle the receipt of a handshake_ack message by sending the login | 423 /** handle the receipt of a handshake_ack message by sending the login |
425 message */ | 424 message */ |