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 */ |
