comparison src/protocols/jabber/auth.c @ 10684:72a5babfa8b4

[gaim-migrate @ 12231] the cipher api that grim has been working on for ages is finally done!! big congrats and thanks to him!! lots of modified files in this commit. it builds here. moved the md5 files to src/protocols/oscar so that it continues to depend on nothing in gaim. everything else uses the new centralized cipher api. I'm not sure if src/md5.* needs to be removed or not, so I left it there. someone let me know or do it directly. someone check if these need to be added to potfiles.in and let there be much rejoicing! committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Fri, 11 Mar 2005 13:05:31 +0000
parents dc33b3b475c2
children b256ce6b85b8
comparison
equal deleted inserted replaced
10683:e11f3e1599d4 10684:72a5babfa8b4
23 #include "jutil.h" 23 #include "jutil.h"
24 #include "auth.h" 24 #include "auth.h"
25 #include "xmlnode.h" 25 #include "xmlnode.h"
26 #include "jabber.h" 26 #include "jabber.h"
27 #include "iq.h" 27 #include "iq.h"
28 #include "sha.h"
29 28
30 #include "debug.h" 29 #include "debug.h"
31 #include "md5.h"
32 #include "util.h" 30 #include "util.h"
31 #include "cipher.h"
33 #include "sslconn.h" 32 #include "sslconn.h"
34 #include "request.h" 33 #include "request.h"
35 34
36 static void auth_old_result_cb(JabberStream *js, xmlnode *packet, 35 static void auth_old_result_cb(JabberStream *js, xmlnode *packet,
37 gpointer data); 36 gpointer data);
225 x = xmlnode_new_child(query, "resource"); 224 x = xmlnode_new_child(query, "resource");
226 xmlnode_insert_data(x, js->user->resource, -1); 225 xmlnode_insert_data(x, js->user->resource, -1);
227 226
228 x = xmlnode_new_child(query, "digest"); 227 x = xmlnode_new_child(query, "digest");
229 s = g_strdup_printf("%s%s", js->stream_id, pw); 228 s = g_strdup_printf("%s%s", js->stream_id, pw);
230 shaBlock((unsigned char *)s, strlen(s), hashval); 229
230 gaim_cipher_digest_region("sha1", (guint8 *)s, strlen(s),
231 hashval, NULL);
232
231 p = h; 233 p = h;
232 for(i=0; i<20; i++, p+=2) 234 for(i=0; i<20; i++, p+=2)
233 snprintf(p, 3, "%02x", hashval[i]); 235 snprintf(p, 3, "%02x", hashval[i]);
234 xmlnode_insert_data(x, h, -1); 236 xmlnode_insert_data(x, h, -1);
235 g_free(s); 237 g_free(s);
298 300
299 static unsigned char* 301 static unsigned char*
300 generate_response_value(JabberID *jid, const char *passwd, const char *nonce, 302 generate_response_value(JabberID *jid, const char *passwd, const char *nonce,
301 const char *cnonce, const char *a2, const char *realm) 303 const char *cnonce, const char *a2, const char *realm)
302 { 304 {
303 md5_state_t ctx; 305 GaimCipher *cipher;
304 md5_byte_t result[16]; 306 GaimCipherContext *context;
307 guint8 result[16];
305 size_t a1len; 308 size_t a1len;
306 309
307 unsigned char *x, *a1, *ha1, *ha2, *kd, *z, *convnode, *convpasswd; 310 unsigned char *x, *a1, *ha1, *ha2, *kd, *z, *convnode, *convpasswd;
308 311
309 if((convnode = g_convert(jid->node, strlen(jid->node), "iso-8859-1", "utf-8", 312 if((convnode = g_convert(jid->node, strlen(jid->node), "iso-8859-1", "utf-8",
313 if((convpasswd = g_convert(passwd, strlen(passwd), "iso-8859-1", "utf-8", 316 if((convpasswd = g_convert(passwd, strlen(passwd), "iso-8859-1", "utf-8",
314 NULL, NULL, NULL)) == NULL) { 317 NULL, NULL, NULL)) == NULL) {
315 convpasswd = g_strdup(passwd); 318 convpasswd = g_strdup(passwd);
316 } 319 }
317 320
321 cipher = gaim_ciphers_find_cipher("md5");
322 context = gaim_cipher_context_new(cipher, NULL);
323
318 x = g_strdup_printf("%s:%s:%s", convnode, realm, convpasswd); 324 x = g_strdup_printf("%s:%s:%s", convnode, realm, convpasswd);
319 md5_init(&ctx); 325 gaim_cipher_context_append(context, x, strlen(x));
320 md5_append(&ctx, x, strlen(x)); 326 gaim_cipher_context_digest(context, NULL, result);
321 md5_finish(&ctx, result);
322 327
323 a1 = g_strdup_printf("xxxxxxxxxxxxxxxx:%s:%s", nonce, cnonce); 328 a1 = g_strdup_printf("xxxxxxxxxxxxxxxx:%s:%s", nonce, cnonce);
324 a1len = strlen(a1); 329 a1len = strlen(a1);
325 g_memmove(a1, result, 16); 330 g_memmove(a1, result, 16);
326 331
327 md5_init(&ctx); 332 gaim_cipher_context_reset(context, NULL);
328 md5_append(&ctx, a1, a1len); 333 gaim_cipher_context_append(context, a1, a1len);
329 md5_finish(&ctx, result); 334 gaim_cipher_context_digest(context, NULL, result);
330 335
331 ha1 = gaim_base16_encode(result, 16); 336 ha1 = gaim_base16_encode(result, 16);
332 337
333 md5_init(&ctx); 338 gaim_cipher_context_reset(context, NULL);
334 md5_append(&ctx, a2, strlen(a2)); 339 gaim_cipher_context_append(context, a2, strlen(a2));
335 md5_finish(&ctx, result); 340 gaim_cipher_context_digest(context, NULL, result);
336 341
337 ha2 = gaim_base16_encode(result, 16); 342 ha2 = gaim_base16_encode(result, 16);
338 343
339 kd = g_strdup_printf("%s:%s:00000001:%s:auth:%s", ha1, nonce, cnonce, ha2); 344 kd = g_strdup_printf("%s:%s:00000001:%s:auth:%s", ha1, nonce, cnonce, ha2);
340 345
341 md5_init(&ctx); 346 gaim_cipher_context_reset(context, NULL);
342 md5_append(&ctx, kd, strlen(kd)); 347 gaim_cipher_context_append(context, kd, strlen(kd));
343 md5_finish(&ctx, result); 348 gaim_cipher_context_digest(context, NULL, result);
349 gaim_cipher_context_destroy(context);
344 350
345 z = gaim_base16_encode(result, 16); 351 z = gaim_base16_encode(result, 16);
346 352
347 g_free(convnode); 353 g_free(convnode);
348 g_free(convpasswd); 354 g_free(convpasswd);