comparison libpurple/cipher.c @ 15823:32c366eeeb99

sed -ie 's/gaim/purple/g'
author Sean Egan <seanegan@gmail.com>
date Mon, 19 Mar 2007 07:01:17 +0000
parents 5fe8042783c1
children eca698c354d0 07cf49a0f404
comparison
equal deleted inserted replaced
15822:84b0f9b23ede 15823:32c366eeeb99
1 /* 1 /*
2 * gaim 2 * purple
3 * 3 *
4 * Gaim is the legal property of its developers, whose names are too numerous 4 * Purple is the legal property of its developers, whose names are too numerous
5 * to list here. Please refer to the COPYRIGHT file distributed with this 5 * to list here. Please refer to the COPYRIGHT file distributed with this
6 * source distribution. 6 * source distribution.
7 * 7 *
8 * Original md5 8 * Original md5
9 * Copyright (C) 2001-2003 Christophe Devine <c.devine@cr0.net> 9 * Copyright (C) 2001-2003 Christophe Devine <c.devine@cr0.net>
82 (b)[(i) + 2] = (guchar)((n) >> 16); \ 82 (b)[(i) + 2] = (guchar)((n) >> 16); \
83 (b)[(i) + 3] = (guchar)((n) >> 24); \ 83 (b)[(i) + 3] = (guchar)((n) >> 24); \
84 } 84 }
85 85
86 static void 86 static void
87 md5_init(GaimCipherContext *context, gpointer extra) { 87 md5_init(PurpleCipherContext *context, gpointer extra) {
88 struct MD5Context *md5_context; 88 struct MD5Context *md5_context;
89 89
90 md5_context = g_new0(struct MD5Context, 1); 90 md5_context = g_new0(struct MD5Context, 1);
91 91
92 gaim_cipher_context_set_data(context, md5_context); 92 purple_cipher_context_set_data(context, md5_context);
93 93
94 gaim_cipher_context_reset(context, extra); 94 purple_cipher_context_reset(context, extra);
95 } 95 }
96 96
97 static void 97 static void
98 md5_reset(GaimCipherContext *context, gpointer extra) { 98 md5_reset(PurpleCipherContext *context, gpointer extra) {
99 struct MD5Context *md5_context; 99 struct MD5Context *md5_context;
100 100
101 md5_context = gaim_cipher_context_get_data(context); 101 md5_context = purple_cipher_context_get_data(context);
102 102
103 md5_context->total[0] = 0; 103 md5_context->total[0] = 0;
104 md5_context->total[1] = 0; 104 md5_context->total[1] = 0;
105 105
106 md5_context->state[0] = 0x67452301; 106 md5_context->state[0] = 0x67452301;
110 110
111 memset(md5_context->buffer, 0, sizeof(md5_context->buffer)); 111 memset(md5_context->buffer, 0, sizeof(md5_context->buffer));
112 } 112 }
113 113
114 static void 114 static void
115 md5_uninit(GaimCipherContext *context) { 115 md5_uninit(PurpleCipherContext *context) {
116 struct MD5Context *md5_context; 116 struct MD5Context *md5_context;
117 117
118 gaim_cipher_context_reset(context, NULL); 118 purple_cipher_context_reset(context, NULL);
119 119
120 md5_context = gaim_cipher_context_get_data(context); 120 md5_context = purple_cipher_context_get_data(context);
121 memset(md5_context, 0, sizeof(md5_context)); 121 memset(md5_context, 0, sizeof(md5_context));
122 122
123 g_free(md5_context); 123 g_free(md5_context);
124 md5_context = NULL; 124 md5_context = NULL;
125 } 125 }
243 md5_context->state[2] += C; 243 md5_context->state[2] += C;
244 md5_context->state[3] += D; 244 md5_context->state[3] += D;
245 } 245 }
246 246
247 static void 247 static void
248 md5_append(GaimCipherContext *context, const guchar *data, size_t len) { 248 md5_append(PurpleCipherContext *context, const guchar *data, size_t len) {
249 struct MD5Context *md5_context = NULL; 249 struct MD5Context *md5_context = NULL;
250 guint32 left = 0, fill = 0; 250 guint32 left = 0, fill = 0;
251 251
252 g_return_if_fail(context != NULL); 252 g_return_if_fail(context != NULL);
253 253
254 md5_context = gaim_cipher_context_get_data(context); 254 md5_context = purple_cipher_context_get_data(context);
255 g_return_if_fail(md5_context != NULL); 255 g_return_if_fail(md5_context != NULL);
256 256
257 left = md5_context->total[0] & 0x3F; 257 left = md5_context->total[0] & 0x3F;
258 fill = 64 - left; 258 fill = 64 - left;
259 259
281 memcpy((md5_context->buffer + left), data, len); 281 memcpy((md5_context->buffer + left), data, len);
282 } 282 }
283 } 283 }
284 284
285 static gboolean 285 static gboolean
286 md5_digest(GaimCipherContext *context, size_t in_len, guchar digest[16], 286 md5_digest(PurpleCipherContext *context, size_t in_len, guchar digest[16],
287 size_t *out_len) 287 size_t *out_len)
288 { 288 {
289 struct MD5Context *md5_context = NULL; 289 struct MD5Context *md5_context = NULL;
290 guint32 last, pad; 290 guint32 last, pad;
291 guint32 high, low; 291 guint32 high, low;
297 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 297 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
298 }; 298 };
299 299
300 g_return_val_if_fail(in_len >= 16, FALSE); 300 g_return_val_if_fail(in_len >= 16, FALSE);
301 301
302 md5_context = gaim_cipher_context_get_data(context); 302 md5_context = purple_cipher_context_get_data(context);
303 303
304 high = (md5_context->total[0] >> 29) 304 high = (md5_context->total[0] >> 29)
305 | (md5_context->total[1] << 3); 305 | (md5_context->total[1] << 3);
306 low = (md5_context->total[0] << 3); 306 low = (md5_context->total[0] << 3);
307 307
323 *out_len = 16; 323 *out_len = 16;
324 324
325 return TRUE; 325 return TRUE;
326 } 326 }
327 327
328 static GaimCipherOps MD5Ops = { 328 static PurpleCipherOps MD5Ops = {
329 NULL, /* Set option */ 329 NULL, /* Set option */
330 NULL, /* Get option */ 330 NULL, /* Get option */
331 md5_init, /* init */ 331 md5_init, /* init */
332 md5_reset, /* reset */ 332 md5_reset, /* reset */
333 md5_uninit, /* uninit */ 333 md5_uninit, /* uninit */
470 le32_to_cpu_array(ctx->block, sizeof(ctx->block) / sizeof(guint32)); 470 le32_to_cpu_array(ctx->block, sizeof(ctx->block) / sizeof(guint32));
471 md4_transform(ctx->hash, ctx->block); 471 md4_transform(ctx->hash, ctx->block);
472 } 472 }
473 473
474 static void 474 static void
475 md4_init(GaimCipherContext *context, gpointer extra) { 475 md4_init(PurpleCipherContext *context, gpointer extra) {
476 struct MD4_Context *mctx; 476 struct MD4_Context *mctx;
477 mctx = g_new0(struct MD4_Context, 1); 477 mctx = g_new0(struct MD4_Context, 1);
478 gaim_cipher_context_set_data(context, mctx); 478 purple_cipher_context_set_data(context, mctx);
479 gaim_cipher_context_reset(context, extra); 479 purple_cipher_context_reset(context, extra);
480 480
481 mctx->hash[0] = 0x67452301; 481 mctx->hash[0] = 0x67452301;
482 mctx->hash[1] = 0xefcdab89; 482 mctx->hash[1] = 0xefcdab89;
483 mctx->hash[2] = 0x98badcfe; 483 mctx->hash[2] = 0x98badcfe;
484 mctx->hash[3] = 0x10325476; 484 mctx->hash[3] = 0x10325476;
485 mctx->byte_count = 0; 485 mctx->byte_count = 0;
486 } 486 }
487 487
488 static void 488 static void
489 md4_reset(GaimCipherContext *context, gpointer extra) { 489 md4_reset(PurpleCipherContext *context, gpointer extra) {
490 struct MD4_Context *mctx; 490 struct MD4_Context *mctx;
491 491
492 mctx = gaim_cipher_context_get_data(context); 492 mctx = purple_cipher_context_get_data(context);
493 493
494 mctx->hash[0] = 0x67452301; 494 mctx->hash[0] = 0x67452301;
495 mctx->hash[1] = 0xefcdab89; 495 mctx->hash[1] = 0xefcdab89;
496 mctx->hash[2] = 0x98badcfe; 496 mctx->hash[2] = 0x98badcfe;
497 mctx->hash[3] = 0x10325476; 497 mctx->hash[3] = 0x10325476;
498 mctx->byte_count = 0; 498 mctx->byte_count = 0;
499 } 499 }
500 500
501 static void 501 static void
502 md4_append(GaimCipherContext *context, const guchar *data, size_t len) 502 md4_append(PurpleCipherContext *context, const guchar *data, size_t len)
503 { 503 {
504 struct MD4_Context *mctx = gaim_cipher_context_get_data(context); 504 struct MD4_Context *mctx = purple_cipher_context_get_data(context);
505 const guint32 avail = sizeof(mctx->block) - (mctx->byte_count & 0x3f); 505 const guint32 avail = sizeof(mctx->block) - (mctx->byte_count & 0x3f);
506 506
507 mctx->byte_count += len; 507 mctx->byte_count += len;
508 508
509 if (avail > len) { 509 if (avail > len) {
528 528
529 memcpy(mctx->block, data, len); 529 memcpy(mctx->block, data, len);
530 } 530 }
531 531
532 static gboolean 532 static gboolean
533 md4_digest(GaimCipherContext *context, size_t in_len, guchar *out, 533 md4_digest(PurpleCipherContext *context, size_t in_len, guchar *out,
534 size_t *out_len) 534 size_t *out_len)
535 { 535 {
536 struct MD4_Context *mctx = gaim_cipher_context_get_data(context); 536 struct MD4_Context *mctx = purple_cipher_context_get_data(context);
537 const unsigned int offset = mctx->byte_count & 0x3f; 537 const unsigned int offset = mctx->byte_count & 0x3f;
538 char *p = (char *)mctx->block + offset; 538 char *p = (char *)mctx->block + offset;
539 int padding = 56 - (offset + 1); 539 int padding = 56 - (offset + 1);
540 540
541 541
560 memset(mctx, 0, sizeof(*mctx)); 560 memset(mctx, 0, sizeof(*mctx));
561 return TRUE; 561 return TRUE;
562 } 562 }
563 563
564 static void 564 static void
565 md4_uninit(GaimCipherContext *context) { 565 md4_uninit(PurpleCipherContext *context) {
566 struct MD4_Context *md4_context; 566 struct MD4_Context *md4_context;
567 567
568 gaim_cipher_context_reset(context, NULL); 568 purple_cipher_context_reset(context, NULL);
569 569
570 md4_context = gaim_cipher_context_get_data(context); 570 md4_context = purple_cipher_context_get_data(context);
571 memset(md4_context, 0, sizeof(md4_context)); 571 memset(md4_context, 0, sizeof(md4_context));
572 572
573 g_free(md4_context); 573 g_free(md4_context);
574 md4_context = NULL; 574 md4_context = NULL;
575 } 575 }
576 576
577 static GaimCipherOps MD4Ops = { 577 static PurpleCipherOps MD4Ops = {
578 NULL, /* Set option */ 578 NULL, /* Set option */
579 NULL, /* Get option */ 579 NULL, /* Get option */
580 md4_init, /* init */ 580 md4_init, /* init */
581 md4_reset, /* reset */ 581 md4_reset, /* reset */
582 md4_uninit, /* uninit */ 582 md4_uninit, /* uninit */
896 * Fill a DES context with subkeys calculated from a 64bit key. 896 * Fill a DES context with subkeys calculated from a 64bit key.
897 * Does not check parity bits, but simply ignore them. 897 * Does not check parity bits, but simply ignore them.
898 * Does not check for weak keys. 898 * Does not check for weak keys.
899 **/ 899 **/
900 static void 900 static void
901 des_set_key (GaimCipherContext *context, const guchar * key) 901 des_set_key (PurpleCipherContext *context, const guchar * key)
902 { 902 {
903 struct _des_ctx *ctx = gaim_cipher_context_get_data(context); 903 struct _des_ctx *ctx = purple_cipher_context_get_data(context);
904 int i; 904 int i;
905 905
906 des_key_schedule (key, ctx->encrypt_subkeys); 906 des_key_schedule (key, ctx->encrypt_subkeys);
907 907
908 for(i=0; i<32; i+=2) 908 for(i=0; i<32; i+=2)
943 943
944 return 0; 944 return 0;
945 } 945 }
946 946
947 static gint 947 static gint
948 des_encrypt(GaimCipherContext *context, const guchar data[], 948 des_encrypt(PurpleCipherContext *context, const guchar data[],
949 size_t len, guchar output[], size_t *outlen) { 949 size_t len, guchar output[], size_t *outlen) {
950 int offset = 0; 950 int offset = 0;
951 int i = 0; 951 int i = 0;
952 int tmp; 952 int tmp;
953 guint8 buf[8] = {0,0,0,0,0,0,0,0}; 953 guint8 buf[8] = {0,0,0,0,0,0,0,0};
954 while(offset+8<=len) { 954 while(offset+8<=len) {
955 des_ecb_crypt(gaim_cipher_context_get_data(context), 955 des_ecb_crypt(purple_cipher_context_get_data(context),
956 data+offset, 956 data+offset,
957 output+offset, 957 output+offset,
958 0); 958 0);
959 offset+=8; 959 offset+=8;
960 } 960 }
964 tmp = offset; 964 tmp = offset;
965 while(tmp<len) { 965 while(tmp<len) {
966 buf[i++] = data[tmp]; 966 buf[i++] = data[tmp];
967 tmp++; 967 tmp++;
968 } 968 }
969 des_ecb_crypt(gaim_cipher_context_get_data(context), 969 des_ecb_crypt(purple_cipher_context_get_data(context),
970 buf, 970 buf,
971 output+offset, 971 output+offset,
972 0); 972 0);
973 } 973 }
974 return 0; 974 return 0;
975 } 975 }
976 976
977 static void 977 static void
978 des_init(GaimCipherContext *context, gpointer extra) { 978 des_init(PurpleCipherContext *context, gpointer extra) {
979 struct _des_ctx *mctx; 979 struct _des_ctx *mctx;
980 mctx = g_new0(struct _des_ctx, 1); 980 mctx = g_new0(struct _des_ctx, 1);
981 gaim_cipher_context_set_data(context, mctx); 981 purple_cipher_context_set_data(context, mctx);
982 } 982 }
983 983
984 static void 984 static void
985 des_uninit(GaimCipherContext *context) { 985 des_uninit(PurpleCipherContext *context) {
986 struct _des_ctx *des_context; 986 struct _des_ctx *des_context;
987 987
988 des_context = gaim_cipher_context_get_data(context); 988 des_context = purple_cipher_context_get_data(context);
989 memset(des_context, 0, sizeof(des_context)); 989 memset(des_context, 0, sizeof(des_context));
990 990
991 g_free(des_context); 991 g_free(des_context);
992 des_context = NULL; 992 des_context = NULL;
993 } 993 }
994 994
995 static GaimCipherOps DESOps = { 995 static PurpleCipherOps DESOps = {
996 NULL, /* Set option */ 996 NULL, /* Set option */
997 NULL, /* Get option */ 997 NULL, /* Get option */
998 des_init, /* init */ 998 des_init, /* init */
999 NULL, /* reset */ 999 NULL, /* reset */
1000 des_uninit, /* uninit */ 1000 des_uninit, /* uninit */
1085 sha1_ctx->H[3] += D; 1085 sha1_ctx->H[3] += D;
1086 sha1_ctx->H[4] += E; 1086 sha1_ctx->H[4] += E;
1087 } 1087 }
1088 1088
1089 static void 1089 static void
1090 sha1_set_opt(GaimCipherContext *context, const gchar *name, void *value) { 1090 sha1_set_opt(PurpleCipherContext *context, const gchar *name, void *value) {
1091 struct SHA1Context *ctx; 1091 struct SHA1Context *ctx;
1092 1092
1093 ctx = gaim_cipher_context_get_data(context); 1093 ctx = purple_cipher_context_get_data(context);
1094 1094
1095 if(!strcmp(name, "sizeHi")) { 1095 if(!strcmp(name, "sizeHi")) {
1096 ctx->sizeHi = GPOINTER_TO_INT(value); 1096 ctx->sizeHi = GPOINTER_TO_INT(value);
1097 } else if(!strcmp(name, "sizeLo")) { 1097 } else if(!strcmp(name, "sizeLo")) {
1098 ctx->sizeLo = GPOINTER_TO_INT(value); 1098 ctx->sizeLo = GPOINTER_TO_INT(value);
1100 ctx->lenW = GPOINTER_TO_INT(value); 1100 ctx->lenW = GPOINTER_TO_INT(value);
1101 } 1101 }
1102 } 1102 }
1103 1103
1104 static void * 1104 static void *
1105 sha1_get_opt(GaimCipherContext *context, const gchar *name) { 1105 sha1_get_opt(PurpleCipherContext *context, const gchar *name) {
1106 struct SHA1Context *ctx; 1106 struct SHA1Context *ctx;
1107 1107
1108 ctx = gaim_cipher_context_get_data(context); 1108 ctx = purple_cipher_context_get_data(context);
1109 1109
1110 if(!strcmp(name, "sizeHi")) { 1110 if(!strcmp(name, "sizeHi")) {
1111 return GINT_TO_POINTER(ctx->sizeHi); 1111 return GINT_TO_POINTER(ctx->sizeHi);
1112 } else if(!strcmp(name, "sizeLo")) { 1112 } else if(!strcmp(name, "sizeLo")) {
1113 return GINT_TO_POINTER(ctx->sizeLo); 1113 return GINT_TO_POINTER(ctx->sizeLo);
1117 1117
1118 return NULL; 1118 return NULL;
1119 } 1119 }
1120 1120
1121 static void 1121 static void
1122 sha1_init(GaimCipherContext *context, void *extra) { 1122 sha1_init(PurpleCipherContext *context, void *extra) {
1123 struct SHA1Context *sha1_ctx; 1123 struct SHA1Context *sha1_ctx;
1124 1124
1125 sha1_ctx = g_new0(struct SHA1Context, 1); 1125 sha1_ctx = g_new0(struct SHA1Context, 1);
1126 1126
1127 gaim_cipher_context_set_data(context, sha1_ctx); 1127 purple_cipher_context_set_data(context, sha1_ctx);
1128 1128
1129 gaim_cipher_context_reset(context, extra); 1129 purple_cipher_context_reset(context, extra);
1130 } 1130 }
1131 1131
1132 static void 1132 static void
1133 sha1_reset(GaimCipherContext *context, void *extra) { 1133 sha1_reset(PurpleCipherContext *context, void *extra) {
1134 struct SHA1Context *sha1_ctx; 1134 struct SHA1Context *sha1_ctx;
1135 gint i; 1135 gint i;
1136 1136
1137 sha1_ctx = gaim_cipher_context_get_data(context); 1137 sha1_ctx = purple_cipher_context_get_data(context);
1138 1138
1139 g_return_if_fail(sha1_ctx); 1139 g_return_if_fail(sha1_ctx);
1140 1140
1141 sha1_ctx->lenW = 0; 1141 sha1_ctx->lenW = 0;
1142 sha1_ctx->sizeHi = 0; 1142 sha1_ctx->sizeHi = 0;
1151 for(i = 0; i < 80; i++) 1151 for(i = 0; i < 80; i++)
1152 sha1_ctx->W[i] = 0; 1152 sha1_ctx->W[i] = 0;
1153 } 1153 }
1154 1154
1155 static void 1155 static void
1156 sha1_uninit(GaimCipherContext *context) { 1156 sha1_uninit(PurpleCipherContext *context) {
1157 struct SHA1Context *sha1_ctx; 1157 struct SHA1Context *sha1_ctx;
1158 1158
1159 gaim_cipher_context_reset(context, NULL); 1159 purple_cipher_context_reset(context, NULL);
1160 1160
1161 sha1_ctx = gaim_cipher_context_get_data(context); 1161 sha1_ctx = purple_cipher_context_get_data(context);
1162 1162
1163 memset(sha1_ctx, 0, sizeof(struct SHA1Context)); 1163 memset(sha1_ctx, 0, sizeof(struct SHA1Context));
1164 1164
1165 g_free(sha1_ctx); 1165 g_free(sha1_ctx);
1166 sha1_ctx = NULL; 1166 sha1_ctx = NULL;
1167 } 1167 }
1168 1168
1169 1169
1170 static void 1170 static void
1171 sha1_append(GaimCipherContext *context, const guchar *data, size_t len) { 1171 sha1_append(PurpleCipherContext *context, const guchar *data, size_t len) {
1172 struct SHA1Context *sha1_ctx; 1172 struct SHA1Context *sha1_ctx;
1173 gint i; 1173 gint i;
1174 1174
1175 sha1_ctx = gaim_cipher_context_get_data(context); 1175 sha1_ctx = purple_cipher_context_get_data(context);
1176 1176
1177 g_return_if_fail(sha1_ctx); 1177 g_return_if_fail(sha1_ctx);
1178 1178
1179 for(i = 0; i < len; i++) { 1179 for(i = 0; i < len; i++) {
1180 sha1_ctx->W[sha1_ctx->lenW / 4] <<= 8; 1180 sha1_ctx->W[sha1_ctx->lenW / 4] <<= 8;
1189 sha1_ctx->sizeHi += (sha1_ctx->sizeLo < 8); 1189 sha1_ctx->sizeHi += (sha1_ctx->sizeLo < 8);
1190 } 1190 }
1191 } 1191 }
1192 1192
1193 static gboolean 1193 static gboolean
1194 sha1_digest(GaimCipherContext *context, size_t in_len, guchar digest[20], 1194 sha1_digest(PurpleCipherContext *context, size_t in_len, guchar digest[20],
1195 size_t *out_len) 1195 size_t *out_len)
1196 { 1196 {
1197 struct SHA1Context *sha1_ctx; 1197 struct SHA1Context *sha1_ctx;
1198 guchar pad0x80 = 0x80, pad0x00 = 0x00; 1198 guchar pad0x80 = 0x80, pad0x00 = 0x00;
1199 guchar padlen[8]; 1199 guchar padlen[8];
1200 gint i; 1200 gint i;
1201 1201
1202 g_return_val_if_fail(in_len >= 20, FALSE); 1202 g_return_val_if_fail(in_len >= 20, FALSE);
1203 1203
1204 sha1_ctx = gaim_cipher_context_get_data(context); 1204 sha1_ctx = purple_cipher_context_get_data(context);
1205 1205
1206 g_return_val_if_fail(sha1_ctx, FALSE); 1206 g_return_val_if_fail(sha1_ctx, FALSE);
1207 1207
1208 padlen[0] = (guchar)((sha1_ctx->sizeHi >> 24) & 255); 1208 padlen[0] = (guchar)((sha1_ctx->sizeHi >> 24) & 255);
1209 padlen[1] = (guchar)((sha1_ctx->sizeHi >> 16) & 255); 1209 padlen[1] = (guchar)((sha1_ctx->sizeHi >> 16) & 255);
1213 padlen[5] = (guchar)((sha1_ctx->sizeLo >> 16) & 255); 1213 padlen[5] = (guchar)((sha1_ctx->sizeLo >> 16) & 255);
1214 padlen[6] = (guchar)((sha1_ctx->sizeLo >> 8) & 255); 1214 padlen[6] = (guchar)((sha1_ctx->sizeLo >> 8) & 255);
1215 padlen[7] = (guchar)((sha1_ctx->sizeLo >> 0) & 255); 1215 padlen[7] = (guchar)((sha1_ctx->sizeLo >> 0) & 255);
1216 1216
1217 /* pad with a 1, then zeroes, then length */ 1217 /* pad with a 1, then zeroes, then length */
1218 gaim_cipher_context_append(context, &pad0x80, 1); 1218 purple_cipher_context_append(context, &pad0x80, 1);
1219 while(sha1_ctx->lenW != 56) 1219 while(sha1_ctx->lenW != 56)
1220 gaim_cipher_context_append(context, &pad0x00, 1); 1220 purple_cipher_context_append(context, &pad0x00, 1);
1221 gaim_cipher_context_append(context, padlen, 8); 1221 purple_cipher_context_append(context, padlen, 8);
1222 1222
1223 for(i = 0; i < 20; i++) { 1223 for(i = 0; i < 20; i++) {
1224 digest[i] = (guchar)(sha1_ctx->H[i / 4] >> 24); 1224 digest[i] = (guchar)(sha1_ctx->H[i / 4] >> 24);
1225 sha1_ctx->H[i / 4] <<= 8; 1225 sha1_ctx->H[i / 4] <<= 8;
1226 } 1226 }
1227 1227
1228 gaim_cipher_context_reset(context, NULL); 1228 purple_cipher_context_reset(context, NULL);
1229 1229
1230 if(out_len) 1230 if(out_len)
1231 *out_len = 20; 1231 *out_len = 20;
1232 1232
1233 return TRUE; 1233 return TRUE;
1234 } 1234 }
1235 1235
1236 static GaimCipherOps SHA1Ops = { 1236 static PurpleCipherOps SHA1Ops = {
1237 sha1_set_opt, /* Set Option */ 1237 sha1_set_opt, /* Set Option */
1238 sha1_get_opt, /* Get Option */ 1238 sha1_get_opt, /* Get Option */
1239 sha1_init, /* init */ 1239 sha1_init, /* init */
1240 sha1_reset, /* reset */ 1240 sha1_reset, /* reset */
1241 sha1_uninit, /* uninit */ 1241 sha1_uninit, /* uninit */
1251 }; 1251 };
1252 1252
1253 /******************************************************************************* 1253 /*******************************************************************************
1254 * Structs 1254 * Structs
1255 ******************************************************************************/ 1255 ******************************************************************************/
1256 struct _GaimCipher { 1256 struct _PurpleCipher {
1257 gchar *name; 1257 gchar *name;
1258 GaimCipherOps *ops; 1258 PurpleCipherOps *ops;
1259 guint ref; 1259 guint ref;
1260 }; 1260 };
1261 1261
1262 struct _GaimCipherContext { 1262 struct _PurpleCipherContext {
1263 GaimCipher *cipher; 1263 PurpleCipher *cipher;
1264 gpointer data; 1264 gpointer data;
1265 }; 1265 };
1266 1266
1267 /****************************************************************************** 1267 /******************************************************************************
1268 * Globals 1268 * Globals
1269 *****************************************************************************/ 1269 *****************************************************************************/
1270 static GList *ciphers = NULL; 1270 static GList *ciphers = NULL;
1271 1271
1272 /****************************************************************************** 1272 /******************************************************************************
1273 * GaimCipher API 1273 * PurpleCipher API
1274 *****************************************************************************/ 1274 *****************************************************************************/
1275 const gchar * 1275 const gchar *
1276 gaim_cipher_get_name(GaimCipher *cipher) { 1276 purple_cipher_get_name(PurpleCipher *cipher) {
1277 g_return_val_if_fail(cipher, NULL); 1277 g_return_val_if_fail(cipher, NULL);
1278 1278
1279 return cipher->name; 1279 return cipher->name;
1280 } 1280 }
1281 1281
1282 guint 1282 guint
1283 gaim_cipher_get_capabilities(GaimCipher *cipher) { 1283 purple_cipher_get_capabilities(PurpleCipher *cipher) {
1284 GaimCipherOps *ops = NULL; 1284 PurpleCipherOps *ops = NULL;
1285 guint caps = 0; 1285 guint caps = 0;
1286 1286
1287 g_return_val_if_fail(cipher, 0); 1287 g_return_val_if_fail(cipher, 0);
1288 1288
1289 ops = cipher->ops; 1289 ops = cipher->ops;
1290 g_return_val_if_fail(ops, 0); 1290 g_return_val_if_fail(ops, 0);
1291 1291
1292 if(ops->set_option) 1292 if(ops->set_option)
1293 caps |= GAIM_CIPHER_CAPS_SET_OPT; 1293 caps |= PURPLE_CIPHER_CAPS_SET_OPT;
1294 if(ops->get_option) 1294 if(ops->get_option)
1295 caps |= GAIM_CIPHER_CAPS_GET_OPT; 1295 caps |= PURPLE_CIPHER_CAPS_GET_OPT;
1296 if(ops->init) 1296 if(ops->init)
1297 caps |= GAIM_CIPHER_CAPS_INIT; 1297 caps |= PURPLE_CIPHER_CAPS_INIT;
1298 if(ops->reset) 1298 if(ops->reset)
1299 caps |= GAIM_CIPHER_CAPS_RESET; 1299 caps |= PURPLE_CIPHER_CAPS_RESET;
1300 if(ops->uninit) 1300 if(ops->uninit)
1301 caps |= GAIM_CIPHER_CAPS_UNINIT; 1301 caps |= PURPLE_CIPHER_CAPS_UNINIT;
1302 if(ops->set_iv) 1302 if(ops->set_iv)
1303 caps |= GAIM_CIPHER_CAPS_SET_IV; 1303 caps |= PURPLE_CIPHER_CAPS_SET_IV;
1304 if(ops->append) 1304 if(ops->append)
1305 caps |= GAIM_CIPHER_CAPS_APPEND; 1305 caps |= PURPLE_CIPHER_CAPS_APPEND;
1306 if(ops->digest) 1306 if(ops->digest)
1307 caps |= GAIM_CIPHER_CAPS_DIGEST; 1307 caps |= PURPLE_CIPHER_CAPS_DIGEST;
1308 if(ops->encrypt) 1308 if(ops->encrypt)
1309 caps |= GAIM_CIPHER_CAPS_ENCRYPT; 1309 caps |= PURPLE_CIPHER_CAPS_ENCRYPT;
1310 if(ops->decrypt) 1310 if(ops->decrypt)
1311 caps |= GAIM_CIPHER_CAPS_DECRYPT; 1311 caps |= PURPLE_CIPHER_CAPS_DECRYPT;
1312 if(ops->set_salt) 1312 if(ops->set_salt)
1313 caps |= GAIM_CIPHER_CAPS_SET_SALT; 1313 caps |= PURPLE_CIPHER_CAPS_SET_SALT;
1314 if(ops->get_salt_size) 1314 if(ops->get_salt_size)
1315 caps |= GAIM_CIPHER_CAPS_GET_SALT_SIZE; 1315 caps |= PURPLE_CIPHER_CAPS_GET_SALT_SIZE;
1316 if(ops->set_key) 1316 if(ops->set_key)
1317 caps |= GAIM_CIPHER_CAPS_SET_KEY; 1317 caps |= PURPLE_CIPHER_CAPS_SET_KEY;
1318 if(ops->get_key_size) 1318 if(ops->get_key_size)
1319 caps |= GAIM_CIPHER_CAPS_GET_KEY_SIZE; 1319 caps |= PURPLE_CIPHER_CAPS_GET_KEY_SIZE;
1320 1320
1321 return caps; 1321 return caps;
1322 } 1322 }
1323 1323
1324 gboolean 1324 gboolean
1325 gaim_cipher_digest_region(const gchar *name, const guchar *data, 1325 purple_cipher_digest_region(const gchar *name, const guchar *data,
1326 size_t data_len, size_t in_len, 1326 size_t data_len, size_t in_len,
1327 guchar digest[], size_t *out_len) 1327 guchar digest[], size_t *out_len)
1328 { 1328 {
1329 GaimCipher *cipher; 1329 PurpleCipher *cipher;
1330 GaimCipherContext *context; 1330 PurpleCipherContext *context;
1331 gboolean ret = FALSE; 1331 gboolean ret = FALSE;
1332 1332
1333 g_return_val_if_fail(name, FALSE); 1333 g_return_val_if_fail(name, FALSE);
1334 g_return_val_if_fail(data, FALSE); 1334 g_return_val_if_fail(data, FALSE);
1335 1335
1336 cipher = gaim_ciphers_find_cipher(name); 1336 cipher = purple_ciphers_find_cipher(name);
1337 1337
1338 g_return_val_if_fail(cipher, FALSE); 1338 g_return_val_if_fail(cipher, FALSE);
1339 1339
1340 if(!cipher->ops->append || !cipher->ops->digest) { 1340 if(!cipher->ops->append || !cipher->ops->digest) {
1341 gaim_debug_info("cipher", "gaim_cipher_region failed: " 1341 purple_debug_info("cipher", "purple_cipher_region failed: "
1342 "the %s cipher does not support appending and or " 1342 "the %s cipher does not support appending and or "
1343 "digesting.", cipher->name); 1343 "digesting.", cipher->name);
1344 return FALSE; 1344 return FALSE;
1345 } 1345 }
1346 1346
1347 context = gaim_cipher_context_new(cipher, NULL); 1347 context = purple_cipher_context_new(cipher, NULL);
1348 gaim_cipher_context_append(context, data, data_len); 1348 purple_cipher_context_append(context, data, data_len);
1349 ret = gaim_cipher_context_digest(context, in_len, digest, out_len); 1349 ret = purple_cipher_context_digest(context, in_len, digest, out_len);
1350 gaim_cipher_context_destroy(context); 1350 purple_cipher_context_destroy(context);
1351 1351
1352 return ret; 1352 return ret;
1353 } 1353 }
1354 1354
1355 /****************************************************************************** 1355 /******************************************************************************
1356 * GaimCiphers API 1356 * PurpleCiphers API
1357 *****************************************************************************/ 1357 *****************************************************************************/
1358 GaimCipher * 1358 PurpleCipher *
1359 gaim_ciphers_find_cipher(const gchar *name) { 1359 purple_ciphers_find_cipher(const gchar *name) {
1360 GaimCipher *cipher; 1360 PurpleCipher *cipher;
1361 GList *l; 1361 GList *l;
1362 1362
1363 g_return_val_if_fail(name, NULL); 1363 g_return_val_if_fail(name, NULL);
1364 1364
1365 for(l = ciphers; l; l = l->next) { 1365 for(l = ciphers; l; l = l->next) {
1366 cipher = GAIM_CIPHER(l->data); 1366 cipher = PURPLE_CIPHER(l->data);
1367 1367
1368 if(!g_ascii_strcasecmp(cipher->name, name)) 1368 if(!g_ascii_strcasecmp(cipher->name, name))
1369 return cipher; 1369 return cipher;
1370 } 1370 }
1371 1371
1372 return NULL; 1372 return NULL;
1373 } 1373 }
1374 1374
1375 GaimCipher * 1375 PurpleCipher *
1376 gaim_ciphers_register_cipher(const gchar *name, GaimCipherOps *ops) { 1376 purple_ciphers_register_cipher(const gchar *name, PurpleCipherOps *ops) {
1377 GaimCipher *cipher = NULL; 1377 PurpleCipher *cipher = NULL;
1378 1378
1379 g_return_val_if_fail(name, NULL); 1379 g_return_val_if_fail(name, NULL);
1380 g_return_val_if_fail(ops, NULL); 1380 g_return_val_if_fail(ops, NULL);
1381 g_return_val_if_fail(!gaim_ciphers_find_cipher(name), NULL); 1381 g_return_val_if_fail(!purple_ciphers_find_cipher(name), NULL);
1382 1382
1383 cipher = g_new0(GaimCipher, 1); 1383 cipher = g_new0(PurpleCipher, 1);
1384 GAIM_DBUS_REGISTER_POINTER(cipher, GaimCipher); 1384 PURPLE_DBUS_REGISTER_POINTER(cipher, PurpleCipher);
1385 1385
1386 cipher->name = g_strdup(name); 1386 cipher->name = g_strdup(name);
1387 cipher->ops = ops; 1387 cipher->ops = ops;
1388 1388
1389 ciphers = g_list_append(ciphers, cipher); 1389 ciphers = g_list_append(ciphers, cipher);
1390 1390
1391 gaim_signal_emit(gaim_ciphers_get_handle(), "cipher-added", cipher); 1391 purple_signal_emit(purple_ciphers_get_handle(), "cipher-added", cipher);
1392 1392
1393 return cipher; 1393 return cipher;
1394 } 1394 }
1395 1395
1396 gboolean 1396 gboolean
1397 gaim_ciphers_unregister_cipher(GaimCipher *cipher) { 1397 purple_ciphers_unregister_cipher(PurpleCipher *cipher) {
1398 g_return_val_if_fail(cipher, FALSE); 1398 g_return_val_if_fail(cipher, FALSE);
1399 g_return_val_if_fail(cipher->ref == 0, FALSE); 1399 g_return_val_if_fail(cipher->ref == 0, FALSE);
1400 1400
1401 gaim_signal_emit(gaim_ciphers_get_handle(), "cipher-removed", cipher); 1401 purple_signal_emit(purple_ciphers_get_handle(), "cipher-removed", cipher);
1402 1402
1403 ciphers = g_list_remove(ciphers, cipher); 1403 ciphers = g_list_remove(ciphers, cipher);
1404 1404
1405 g_free(cipher->name); 1405 g_free(cipher->name);
1406 1406
1407 GAIM_DBUS_UNREGISTER_POINTER(cipher); 1407 PURPLE_DBUS_UNREGISTER_POINTER(cipher);
1408 g_free(cipher); 1408 g_free(cipher);
1409 1409
1410 return TRUE; 1410 return TRUE;
1411 } 1411 }
1412 1412
1413 GList * 1413 GList *
1414 gaim_ciphers_get_ciphers() { 1414 purple_ciphers_get_ciphers() {
1415 return ciphers; 1415 return ciphers;
1416 } 1416 }
1417 1417
1418 /****************************************************************************** 1418 /******************************************************************************
1419 * GaimCipher Subsystem API 1419 * PurpleCipher Subsystem API
1420 *****************************************************************************/ 1420 *****************************************************************************/
1421 gpointer 1421 gpointer
1422 gaim_ciphers_get_handle() { 1422 purple_ciphers_get_handle() {
1423 static gint handle; 1423 static gint handle;
1424 1424
1425 return &handle; 1425 return &handle;
1426 } 1426 }
1427 1427
1428 void 1428 void
1429 gaim_ciphers_init() { 1429 purple_ciphers_init() {
1430 gpointer handle; 1430 gpointer handle;
1431 1431
1432 handle = gaim_ciphers_get_handle(); 1432 handle = purple_ciphers_get_handle();
1433 1433
1434 gaim_signal_register(handle, "cipher-added", 1434 purple_signal_register(handle, "cipher-added",
1435 gaim_marshal_VOID__POINTER, NULL, 1, 1435 purple_marshal_VOID__POINTER, NULL, 1,
1436 gaim_value_new(GAIM_TYPE_SUBTYPE, 1436 purple_value_new(PURPLE_TYPE_SUBTYPE,
1437 GAIM_SUBTYPE_CIPHER)); 1437 PURPLE_SUBTYPE_CIPHER));
1438 gaim_signal_register(handle, "cipher-removed", 1438 purple_signal_register(handle, "cipher-removed",
1439 gaim_marshal_VOID__POINTER, NULL, 1, 1439 purple_marshal_VOID__POINTER, NULL, 1,
1440 gaim_value_new(GAIM_TYPE_SUBTYPE, 1440 purple_value_new(PURPLE_TYPE_SUBTYPE,
1441 GAIM_SUBTYPE_CIPHER)); 1441 PURPLE_SUBTYPE_CIPHER));
1442 1442
1443 gaim_ciphers_register_cipher("md5", &MD5Ops); 1443 purple_ciphers_register_cipher("md5", &MD5Ops);
1444 gaim_ciphers_register_cipher("sha1", &SHA1Ops); 1444 purple_ciphers_register_cipher("sha1", &SHA1Ops);
1445 gaim_ciphers_register_cipher("md4", &MD4Ops); 1445 purple_ciphers_register_cipher("md4", &MD4Ops);
1446 gaim_ciphers_register_cipher("des", &DESOps); 1446 purple_ciphers_register_cipher("des", &DESOps);
1447 } 1447 }
1448 1448
1449 void 1449 void
1450 gaim_ciphers_uninit() { 1450 purple_ciphers_uninit() {
1451 GaimCipher *cipher; 1451 PurpleCipher *cipher;
1452 GList *l, *ll; 1452 GList *l, *ll;
1453 1453
1454 for(l = ciphers; l; l = ll) { 1454 for(l = ciphers; l; l = ll) {
1455 ll = l->next; 1455 ll = l->next;
1456 1456
1457 cipher = GAIM_CIPHER(l->data); 1457 cipher = PURPLE_CIPHER(l->data);
1458 gaim_ciphers_unregister_cipher(cipher); 1458 purple_ciphers_unregister_cipher(cipher);
1459 1459
1460 ciphers = g_list_remove(ciphers, cipher); 1460 ciphers = g_list_remove(ciphers, cipher);
1461 } 1461 }
1462 1462
1463 g_list_free(ciphers); 1463 g_list_free(ciphers);
1464 1464
1465 gaim_signals_unregister_by_instance(gaim_ciphers_get_handle()); 1465 purple_signals_unregister_by_instance(purple_ciphers_get_handle());
1466 } 1466 }
1467 /****************************************************************************** 1467 /******************************************************************************
1468 * GaimCipherContext API 1468 * PurpleCipherContext API
1469 *****************************************************************************/ 1469 *****************************************************************************/
1470 void 1470 void
1471 gaim_cipher_context_set_option(GaimCipherContext *context, const gchar *name, 1471 purple_cipher_context_set_option(PurpleCipherContext *context, const gchar *name,
1472 gpointer value) 1472 gpointer value)
1473 { 1473 {
1474 GaimCipher *cipher = NULL; 1474 PurpleCipher *cipher = NULL;
1475 1475
1476 g_return_if_fail(context); 1476 g_return_if_fail(context);
1477 g_return_if_fail(name); 1477 g_return_if_fail(name);
1478 1478
1479 cipher = context->cipher; 1479 cipher = context->cipher;
1480 g_return_if_fail(cipher); 1480 g_return_if_fail(cipher);
1481 1481
1482 if(cipher->ops && cipher->ops->set_option) 1482 if(cipher->ops && cipher->ops->set_option)
1483 cipher->ops->set_option(context, name, value); 1483 cipher->ops->set_option(context, name, value);
1484 else 1484 else
1485 gaim_debug_info("cipher", "the %s cipher does not support the " 1485 purple_debug_info("cipher", "the %s cipher does not support the "
1486 "set_option operation\n", cipher->name); 1486 "set_option operation\n", cipher->name);
1487 } 1487 }
1488 1488
1489 gpointer 1489 gpointer
1490 gaim_cipher_context_get_option(GaimCipherContext *context, const gchar *name) { 1490 purple_cipher_context_get_option(PurpleCipherContext *context, const gchar *name) {
1491 GaimCipher *cipher = NULL; 1491 PurpleCipher *cipher = NULL;
1492 1492
1493 g_return_val_if_fail(context, NULL); 1493 g_return_val_if_fail(context, NULL);
1494 g_return_val_if_fail(name, NULL); 1494 g_return_val_if_fail(name, NULL);
1495 1495
1496 cipher = context->cipher; 1496 cipher = context->cipher;
1497 g_return_val_if_fail(cipher, NULL); 1497 g_return_val_if_fail(cipher, NULL);
1498 1498
1499 if(cipher->ops && cipher->ops->get_option) 1499 if(cipher->ops && cipher->ops->get_option)
1500 return cipher->ops->get_option(context, name); 1500 return cipher->ops->get_option(context, name);
1501 else { 1501 else {
1502 gaim_debug_info("cipher", "the %s cipher does not support the " 1502 purple_debug_info("cipher", "the %s cipher does not support the "
1503 "get_option operation\n", cipher->name); 1503 "get_option operation\n", cipher->name);
1504 1504
1505 return NULL; 1505 return NULL;
1506 } 1506 }
1507 } 1507 }
1508 1508
1509 GaimCipherContext * 1509 PurpleCipherContext *
1510 gaim_cipher_context_new(GaimCipher *cipher, void *extra) { 1510 purple_cipher_context_new(PurpleCipher *cipher, void *extra) {
1511 GaimCipherContext *context = NULL; 1511 PurpleCipherContext *context = NULL;
1512 1512
1513 g_return_val_if_fail(cipher, NULL); 1513 g_return_val_if_fail(cipher, NULL);
1514 1514
1515 cipher->ref++; 1515 cipher->ref++;
1516 1516
1517 context = g_new0(GaimCipherContext, 1); 1517 context = g_new0(PurpleCipherContext, 1);
1518 context->cipher = cipher; 1518 context->cipher = cipher;
1519 1519
1520 if(cipher->ops->init) 1520 if(cipher->ops->init)
1521 cipher->ops->init(context, extra); 1521 cipher->ops->init(context, extra);
1522 1522
1523 return context; 1523 return context;
1524 } 1524 }
1525 1525
1526 GaimCipherContext * 1526 PurpleCipherContext *
1527 gaim_cipher_context_new_by_name(const gchar *name, void *extra) { 1527 purple_cipher_context_new_by_name(const gchar *name, void *extra) {
1528 GaimCipher *cipher; 1528 PurpleCipher *cipher;
1529 1529
1530 g_return_val_if_fail(name, NULL); 1530 g_return_val_if_fail(name, NULL);
1531 1531
1532 cipher = gaim_ciphers_find_cipher(name); 1532 cipher = purple_ciphers_find_cipher(name);
1533 1533
1534 g_return_val_if_fail(cipher, NULL); 1534 g_return_val_if_fail(cipher, NULL);
1535 1535
1536 return gaim_cipher_context_new(cipher, extra); 1536 return purple_cipher_context_new(cipher, extra);
1537 } 1537 }
1538 1538
1539 void 1539 void
1540 gaim_cipher_context_reset(GaimCipherContext *context, void *extra) { 1540 purple_cipher_context_reset(PurpleCipherContext *context, void *extra) {
1541 GaimCipher *cipher = NULL; 1541 PurpleCipher *cipher = NULL;
1542 1542
1543 g_return_if_fail(context); 1543 g_return_if_fail(context);
1544 1544
1545 cipher = context->cipher; 1545 cipher = context->cipher;
1546 g_return_if_fail(cipher); 1546 g_return_if_fail(cipher);
1548 if(cipher->ops && cipher->ops->reset) 1548 if(cipher->ops && cipher->ops->reset)
1549 context->cipher->ops->reset(context, extra); 1549 context->cipher->ops->reset(context, extra);
1550 } 1550 }
1551 1551
1552 void 1552 void
1553 gaim_cipher_context_destroy(GaimCipherContext *context) { 1553 purple_cipher_context_destroy(PurpleCipherContext *context) {
1554 GaimCipher *cipher = NULL; 1554 PurpleCipher *cipher = NULL;
1555 1555
1556 g_return_if_fail(context); 1556 g_return_if_fail(context);
1557 1557
1558 cipher = context->cipher; 1558 cipher = context->cipher;
1559 g_return_if_fail(cipher); 1559 g_return_if_fail(cipher);
1567 g_free(context); 1567 g_free(context);
1568 context = NULL; 1568 context = NULL;
1569 } 1569 }
1570 1570
1571 void 1571 void
1572 gaim_cipher_context_set_iv(GaimCipherContext *context, guchar *iv, size_t len) 1572 purple_cipher_context_set_iv(PurpleCipherContext *context, guchar *iv, size_t len)
1573 { 1573 {
1574 GaimCipher *cipher = NULL; 1574 PurpleCipher *cipher = NULL;
1575 1575
1576 g_return_if_fail(context); 1576 g_return_if_fail(context);
1577 g_return_if_fail(iv); 1577 g_return_if_fail(iv);
1578 1578
1579 cipher = context->cipher; 1579 cipher = context->cipher;
1580 g_return_if_fail(cipher); 1580 g_return_if_fail(cipher);
1581 1581
1582 if(cipher->ops && cipher->ops->set_iv) 1582 if(cipher->ops && cipher->ops->set_iv)
1583 cipher->ops->set_iv(context, iv, len); 1583 cipher->ops->set_iv(context, iv, len);
1584 else 1584 else
1585 gaim_debug_info("cipher", "the %s cipher does not support the set" 1585 purple_debug_info("cipher", "the %s cipher does not support the set"
1586 "initialization vector operation\n", cipher->name); 1586 "initialization vector operation\n", cipher->name);
1587 } 1587 }
1588 1588
1589 void 1589 void
1590 gaim_cipher_context_append(GaimCipherContext *context, const guchar *data, 1590 purple_cipher_context_append(PurpleCipherContext *context, const guchar *data,
1591 size_t len) 1591 size_t len)
1592 { 1592 {
1593 GaimCipher *cipher = NULL; 1593 PurpleCipher *cipher = NULL;
1594 1594
1595 g_return_if_fail(context); 1595 g_return_if_fail(context);
1596 1596
1597 cipher = context->cipher; 1597 cipher = context->cipher;
1598 g_return_if_fail(cipher); 1598 g_return_if_fail(cipher);
1599 1599
1600 if(cipher->ops && cipher->ops->append) 1600 if(cipher->ops && cipher->ops->append)
1601 cipher->ops->append(context, data, len); 1601 cipher->ops->append(context, data, len);
1602 else 1602 else
1603 gaim_debug_info("cipher", "the %s cipher does not support the append " 1603 purple_debug_info("cipher", "the %s cipher does not support the append "
1604 "operation\n", cipher->name); 1604 "operation\n", cipher->name);
1605 } 1605 }
1606 1606
1607 gboolean 1607 gboolean
1608 gaim_cipher_context_digest(GaimCipherContext *context, size_t in_len, 1608 purple_cipher_context_digest(PurpleCipherContext *context, size_t in_len,
1609 guchar digest[], size_t *out_len) 1609 guchar digest[], size_t *out_len)
1610 { 1610 {
1611 GaimCipher *cipher = NULL; 1611 PurpleCipher *cipher = NULL;
1612 1612
1613 g_return_val_if_fail(context, FALSE); 1613 g_return_val_if_fail(context, FALSE);
1614 1614
1615 cipher = context->cipher; 1615 cipher = context->cipher;
1616 g_return_val_if_fail(context, FALSE); 1616 g_return_val_if_fail(context, FALSE);
1617 1617
1618 if(cipher->ops && cipher->ops->digest) 1618 if(cipher->ops && cipher->ops->digest)
1619 return cipher->ops->digest(context, in_len, digest, out_len); 1619 return cipher->ops->digest(context, in_len, digest, out_len);
1620 else { 1620 else {
1621 gaim_debug_info("cipher", "the %s cipher does not support the digest " 1621 purple_debug_info("cipher", "the %s cipher does not support the digest "
1622 "operation\n", cipher->name); 1622 "operation\n", cipher->name);
1623 return FALSE; 1623 return FALSE;
1624 } 1624 }
1625 } 1625 }
1626 1626
1627 gboolean 1627 gboolean
1628 gaim_cipher_context_digest_to_str(GaimCipherContext *context, size_t in_len, 1628 purple_cipher_context_digest_to_str(PurpleCipherContext *context, size_t in_len,
1629 gchar digest_s[], size_t *out_len) 1629 gchar digest_s[], size_t *out_len)
1630 { 1630 {
1631 /* 8k is a bit excessive, will tweak later. */ 1631 /* 8k is a bit excessive, will tweak later. */
1632 guchar digest[BUF_LEN * 4]; 1632 guchar digest[BUF_LEN * 4];
1633 gint n = 0; 1633 gint n = 0;
1634 size_t dlen = 0; 1634 size_t dlen = 0;
1635 1635
1636 g_return_val_if_fail(context, FALSE); 1636 g_return_val_if_fail(context, FALSE);
1637 g_return_val_if_fail(digest_s, FALSE); 1637 g_return_val_if_fail(digest_s, FALSE);
1638 1638
1639 if(!gaim_cipher_context_digest(context, sizeof(digest), digest, &dlen)) 1639 if(!purple_cipher_context_digest(context, sizeof(digest), digest, &dlen))
1640 return FALSE; 1640 return FALSE;
1641 1641
1642 /* in_len must be greater than dlen * 2 so we have room for the NUL. */ 1642 /* in_len must be greater than dlen * 2 so we have room for the NUL. */
1643 if(in_len <= dlen * 2) 1643 if(in_len <= dlen * 2)
1644 return FALSE; 1644 return FALSE;
1653 1653
1654 return TRUE; 1654 return TRUE;
1655 } 1655 }
1656 1656
1657 gint 1657 gint
1658 gaim_cipher_context_encrypt(GaimCipherContext *context, const guchar data[], 1658 purple_cipher_context_encrypt(PurpleCipherContext *context, const guchar data[],
1659 size_t len, guchar output[], size_t *outlen) 1659 size_t len, guchar output[], size_t *outlen)
1660 { 1660 {
1661 GaimCipher *cipher = NULL; 1661 PurpleCipher *cipher = NULL;
1662 1662
1663 g_return_val_if_fail(context, -1); 1663 g_return_val_if_fail(context, -1);
1664 1664
1665 cipher = context->cipher; 1665 cipher = context->cipher;
1666 g_return_val_if_fail(cipher, -1); 1666 g_return_val_if_fail(cipher, -1);
1667 1667
1668 if(cipher->ops && cipher->ops->encrypt) 1668 if(cipher->ops && cipher->ops->encrypt)
1669 return cipher->ops->encrypt(context, data, len, output, outlen); 1669 return cipher->ops->encrypt(context, data, len, output, outlen);
1670 else { 1670 else {
1671 gaim_debug_info("cipher", "the %s cipher does not support the encrypt" 1671 purple_debug_info("cipher", "the %s cipher does not support the encrypt"
1672 "operation\n", cipher->name); 1672 "operation\n", cipher->name);
1673 1673
1674 if(outlen) 1674 if(outlen)
1675 *outlen = -1; 1675 *outlen = -1;
1676 1676
1677 return -1; 1677 return -1;
1678 } 1678 }
1679 } 1679 }
1680 1680
1681 gint 1681 gint
1682 gaim_cipher_context_decrypt(GaimCipherContext *context, const guchar data[], 1682 purple_cipher_context_decrypt(PurpleCipherContext *context, const guchar data[],
1683 size_t len, guchar output[], size_t *outlen) 1683 size_t len, guchar output[], size_t *outlen)
1684 { 1684 {
1685 GaimCipher *cipher = NULL; 1685 PurpleCipher *cipher = NULL;
1686 1686
1687 g_return_val_if_fail(context, -1); 1687 g_return_val_if_fail(context, -1);
1688 1688
1689 cipher = context->cipher; 1689 cipher = context->cipher;
1690 g_return_val_if_fail(cipher, -1); 1690 g_return_val_if_fail(cipher, -1);
1691 1691
1692 if(cipher->ops && cipher->ops->decrypt) 1692 if(cipher->ops && cipher->ops->decrypt)
1693 return cipher->ops->decrypt(context, data, len, output, outlen); 1693 return cipher->ops->decrypt(context, data, len, output, outlen);
1694 else { 1694 else {
1695 gaim_debug_info("cipher", "the %s cipher does not support the decrypt" 1695 purple_debug_info("cipher", "the %s cipher does not support the decrypt"
1696 "operation\n", cipher->name); 1696 "operation\n", cipher->name);
1697 1697
1698 if(outlen) 1698 if(outlen)
1699 *outlen = -1; 1699 *outlen = -1;
1700 1700
1701 return -1; 1701 return -1;
1702 } 1702 }
1703 } 1703 }
1704 1704
1705 void 1705 void
1706 gaim_cipher_context_set_salt(GaimCipherContext *context, guchar *salt) { 1706 purple_cipher_context_set_salt(PurpleCipherContext *context, guchar *salt) {
1707 GaimCipher *cipher = NULL; 1707 PurpleCipher *cipher = NULL;
1708 1708
1709 g_return_if_fail(context); 1709 g_return_if_fail(context);
1710 1710
1711 cipher = context->cipher; 1711 cipher = context->cipher;
1712 g_return_if_fail(cipher); 1712 g_return_if_fail(cipher);
1713 1713
1714 if(cipher->ops && cipher->ops->set_salt) 1714 if(cipher->ops && cipher->ops->set_salt)
1715 cipher->ops->set_salt(context, salt); 1715 cipher->ops->set_salt(context, salt);
1716 else 1716 else
1717 gaim_debug_info("cipher", "the %s cipher does not support the " 1717 purple_debug_info("cipher", "the %s cipher does not support the "
1718 "set_salt operation\n", cipher->name); 1718 "set_salt operation\n", cipher->name);
1719 } 1719 }
1720 1720
1721 size_t 1721 size_t
1722 gaim_cipher_context_get_salt_size(GaimCipherContext *context) { 1722 purple_cipher_context_get_salt_size(PurpleCipherContext *context) {
1723 GaimCipher *cipher = NULL; 1723 PurpleCipher *cipher = NULL;
1724 1724
1725 g_return_val_if_fail(context, -1); 1725 g_return_val_if_fail(context, -1);
1726 1726
1727 cipher = context->cipher; 1727 cipher = context->cipher;
1728 g_return_val_if_fail(cipher, -1); 1728 g_return_val_if_fail(cipher, -1);
1729 1729
1730 if(cipher->ops && cipher->ops->get_salt_size) 1730 if(cipher->ops && cipher->ops->get_salt_size)
1731 return cipher->ops->get_salt_size(context); 1731 return cipher->ops->get_salt_size(context);
1732 else { 1732 else {
1733 gaim_debug_info("cipher", "the %s cipher does not support the " 1733 purple_debug_info("cipher", "the %s cipher does not support the "
1734 "get_salt_size operation\n", cipher->name); 1734 "get_salt_size operation\n", cipher->name);
1735 1735
1736 return -1; 1736 return -1;
1737 } 1737 }
1738 } 1738 }
1739 1739
1740 void 1740 void
1741 gaim_cipher_context_set_key(GaimCipherContext *context, const guchar *key) { 1741 purple_cipher_context_set_key(PurpleCipherContext *context, const guchar *key) {
1742 GaimCipher *cipher = NULL; 1742 PurpleCipher *cipher = NULL;
1743 1743
1744 g_return_if_fail(context); 1744 g_return_if_fail(context);
1745 1745
1746 cipher = context->cipher; 1746 cipher = context->cipher;
1747 g_return_if_fail(cipher); 1747 g_return_if_fail(cipher);
1748 1748
1749 if(cipher->ops && cipher->ops->set_key) 1749 if(cipher->ops && cipher->ops->set_key)
1750 cipher->ops->set_key(context, key); 1750 cipher->ops->set_key(context, key);
1751 else 1751 else
1752 gaim_debug_info("cipher", "the %s cipher does not support the " 1752 purple_debug_info("cipher", "the %s cipher does not support the "
1753 "set_key operation\n", cipher->name); 1753 "set_key operation\n", cipher->name);
1754 } 1754 }
1755 1755
1756 size_t 1756 size_t
1757 gaim_cipher_context_get_key_size(GaimCipherContext *context) { 1757 purple_cipher_context_get_key_size(PurpleCipherContext *context) {
1758 GaimCipher *cipher = NULL; 1758 PurpleCipher *cipher = NULL;
1759 1759
1760 g_return_val_if_fail(context, -1); 1760 g_return_val_if_fail(context, -1);
1761 1761
1762 cipher = context->cipher; 1762 cipher = context->cipher;
1763 g_return_val_if_fail(cipher, -1); 1763 g_return_val_if_fail(cipher, -1);
1764 1764
1765 if(cipher->ops && cipher->ops->get_key_size) 1765 if(cipher->ops && cipher->ops->get_key_size)
1766 return cipher->ops->get_key_size(context); 1766 return cipher->ops->get_key_size(context);
1767 else { 1767 else {
1768 gaim_debug_info("cipher", "the %s cipher does not support the " 1768 purple_debug_info("cipher", "the %s cipher does not support the "
1769 "get_key_size operation\n", cipher->name); 1769 "get_key_size operation\n", cipher->name);
1770 1770
1771 return -1; 1771 return -1;
1772 } 1772 }
1773 } 1773 }
1774 1774
1775 void 1775 void
1776 gaim_cipher_context_set_data(GaimCipherContext *context, gpointer data) { 1776 purple_cipher_context_set_data(PurpleCipherContext *context, gpointer data) {
1777 g_return_if_fail(context); 1777 g_return_if_fail(context);
1778 1778
1779 context->data = data; 1779 context->data = data;
1780 } 1780 }
1781 1781
1782 gpointer 1782 gpointer
1783 gaim_cipher_context_get_data(GaimCipherContext *context) { 1783 purple_cipher_context_get_data(PurpleCipherContext *context) {
1784 g_return_val_if_fail(context, NULL); 1784 g_return_val_if_fail(context, NULL);
1785 1785
1786 return context->data; 1786 return context->data;
1787 } 1787 }
1788 1788
1789 gchar *gaim_cipher_http_digest_calculate_session_key( 1789 gchar *purple_cipher_http_digest_calculate_session_key(
1790 const gchar *algorithm, 1790 const gchar *algorithm,
1791 const gchar *username, 1791 const gchar *username,
1792 const gchar *realm, 1792 const gchar *realm,
1793 const gchar *password, 1793 const gchar *password,
1794 const gchar *nonce, 1794 const gchar *nonce,
1795 const gchar *client_nonce) 1795 const gchar *client_nonce)
1796 { 1796 {
1797 GaimCipher *cipher; 1797 PurpleCipher *cipher;
1798 GaimCipherContext *context; 1798 PurpleCipherContext *context;
1799 gchar hash[33]; /* We only support MD5. */ 1799 gchar hash[33]; /* We only support MD5. */
1800 1800
1801 g_return_val_if_fail(username != NULL, NULL); 1801 g_return_val_if_fail(username != NULL, NULL);
1802 g_return_val_if_fail(realm != NULL, NULL); 1802 g_return_val_if_fail(realm != NULL, NULL);
1803 g_return_val_if_fail(password != NULL, NULL); 1803 g_return_val_if_fail(password != NULL, NULL);
1807 g_return_val_if_fail(algorithm == NULL || 1807 g_return_val_if_fail(algorithm == NULL ||
1808 *algorithm == '\0' || 1808 *algorithm == '\0' ||
1809 strcasecmp(algorithm, "MD5") || 1809 strcasecmp(algorithm, "MD5") ||
1810 strcasecmp(algorithm, "MD5-sess"), NULL); 1810 strcasecmp(algorithm, "MD5-sess"), NULL);
1811 1811
1812 cipher = gaim_ciphers_find_cipher("md5"); 1812 cipher = purple_ciphers_find_cipher("md5");
1813 g_return_val_if_fail(cipher != NULL, NULL); 1813 g_return_val_if_fail(cipher != NULL, NULL);
1814 1814
1815 context = gaim_cipher_context_new(cipher, NULL); 1815 context = purple_cipher_context_new(cipher, NULL);
1816 1816
1817 gaim_cipher_context_append(context, (guchar *)username, strlen(username)); 1817 purple_cipher_context_append(context, (guchar *)username, strlen(username));
1818 gaim_cipher_context_append(context, (guchar *)":", 1); 1818 purple_cipher_context_append(context, (guchar *)":", 1);
1819 gaim_cipher_context_append(context, (guchar *)realm, strlen(realm)); 1819 purple_cipher_context_append(context, (guchar *)realm, strlen(realm));
1820 gaim_cipher_context_append(context, (guchar *)":", 1); 1820 purple_cipher_context_append(context, (guchar *)":", 1);
1821 gaim_cipher_context_append(context, (guchar *)password, strlen(password)); 1821 purple_cipher_context_append(context, (guchar *)password, strlen(password));
1822 1822
1823 if (algorithm != NULL && !strcasecmp(algorithm, "MD5-sess")) 1823 if (algorithm != NULL && !strcasecmp(algorithm, "MD5-sess"))
1824 { 1824 {
1825 guchar digest[16]; 1825 guchar digest[16];
1826 1826
1827 if (client_nonce == NULL) 1827 if (client_nonce == NULL)
1828 { 1828 {
1829 gaim_cipher_context_destroy(context); 1829 purple_cipher_context_destroy(context);
1830 gaim_debug_error("cipher", "Required client_nonce missing for MD5-sess digest calculation."); 1830 purple_debug_error("cipher", "Required client_nonce missing for MD5-sess digest calculation.");
1831 return NULL; 1831 return NULL;
1832 } 1832 }
1833 1833
1834 gaim_cipher_context_digest(context, sizeof(digest), digest, NULL); 1834 purple_cipher_context_digest(context, sizeof(digest), digest, NULL);
1835 gaim_cipher_context_destroy(context); 1835 purple_cipher_context_destroy(context);
1836 1836
1837 context = gaim_cipher_context_new(cipher, NULL); 1837 context = purple_cipher_context_new(cipher, NULL);
1838 gaim_cipher_context_append(context, digest, sizeof(digest)); 1838 purple_cipher_context_append(context, digest, sizeof(digest));
1839 gaim_cipher_context_append(context, (guchar *)":", 1); 1839 purple_cipher_context_append(context, (guchar *)":", 1);
1840 gaim_cipher_context_append(context, (guchar *)nonce, strlen(nonce)); 1840 purple_cipher_context_append(context, (guchar *)nonce, strlen(nonce));
1841 gaim_cipher_context_append(context, (guchar *)":", 1); 1841 purple_cipher_context_append(context, (guchar *)":", 1);
1842 gaim_cipher_context_append(context, (guchar *)client_nonce, strlen(client_nonce)); 1842 purple_cipher_context_append(context, (guchar *)client_nonce, strlen(client_nonce));
1843 } 1843 }
1844 1844
1845 gaim_cipher_context_digest_to_str(context, sizeof(hash), hash, NULL); 1845 purple_cipher_context_digest_to_str(context, sizeof(hash), hash, NULL);
1846 gaim_cipher_context_destroy(context); 1846 purple_cipher_context_destroy(context);
1847 1847
1848 return g_strdup(hash); 1848 return g_strdup(hash);
1849 } 1849 }
1850 1850
1851 gchar *gaim_cipher_http_digest_calculate_response( 1851 gchar *purple_cipher_http_digest_calculate_response(
1852 const gchar *algorithm, 1852 const gchar *algorithm,
1853 const gchar *method, 1853 const gchar *method,
1854 const gchar *digest_uri, 1854 const gchar *digest_uri,
1855 const gchar *qop, 1855 const gchar *qop,
1856 const gchar *entity, 1856 const gchar *entity,
1857 const gchar *nonce, 1857 const gchar *nonce,
1858 const gchar *nonce_count, 1858 const gchar *nonce_count,
1859 const gchar *client_nonce, 1859 const gchar *client_nonce,
1860 const gchar *session_key) 1860 const gchar *session_key)
1861 { 1861 {
1862 GaimCipher *cipher; 1862 PurpleCipher *cipher;
1863 GaimCipherContext *context; 1863 PurpleCipherContext *context;
1864 static gchar hash2[33]; /* We only support MD5. */ 1864 static gchar hash2[33]; /* We only support MD5. */
1865 1865
1866 g_return_val_if_fail(method != NULL, NULL); 1866 g_return_val_if_fail(method != NULL, NULL);
1867 g_return_val_if_fail(digest_uri != NULL, NULL); 1867 g_return_val_if_fail(digest_uri != NULL, NULL);
1868 g_return_val_if_fail(nonce != NULL, NULL); 1868 g_return_val_if_fail(nonce != NULL, NULL);
1878 g_return_val_if_fail(qop == NULL || 1878 g_return_val_if_fail(qop == NULL ||
1879 *qop == '\0' || 1879 *qop == '\0' ||
1880 strcasecmp(qop, "auth") || 1880 strcasecmp(qop, "auth") ||
1881 strcasecmp(qop, "auth-int"), NULL); 1881 strcasecmp(qop, "auth-int"), NULL);
1882 1882
1883 cipher = gaim_ciphers_find_cipher("md5"); 1883 cipher = purple_ciphers_find_cipher("md5");
1884 g_return_val_if_fail(cipher != NULL, NULL); 1884 g_return_val_if_fail(cipher != NULL, NULL);
1885 1885
1886 context = gaim_cipher_context_new(cipher, NULL); 1886 context = purple_cipher_context_new(cipher, NULL);
1887 1887
1888 gaim_cipher_context_append(context, (guchar *)method, strlen(method)); 1888 purple_cipher_context_append(context, (guchar *)method, strlen(method));
1889 gaim_cipher_context_append(context, (guchar *)":", 1); 1889 purple_cipher_context_append(context, (guchar *)":", 1);
1890 gaim_cipher_context_append(context, (guchar *)digest_uri, strlen(digest_uri)); 1890 purple_cipher_context_append(context, (guchar *)digest_uri, strlen(digest_uri));
1891 1891
1892 if (qop != NULL && !strcasecmp(qop, "auth-int")) 1892 if (qop != NULL && !strcasecmp(qop, "auth-int"))
1893 { 1893 {
1894 GaimCipherContext *context2; 1894 PurpleCipherContext *context2;
1895 gchar entity_hash[33]; 1895 gchar entity_hash[33];
1896 1896
1897 if (entity == NULL) 1897 if (entity == NULL)
1898 { 1898 {
1899 gaim_cipher_context_destroy(context); 1899 purple_cipher_context_destroy(context);
1900 gaim_debug_error("cipher", "Required entity missing for auth-int digest calculation."); 1900 purple_debug_error("cipher", "Required entity missing for auth-int digest calculation.");
1901 return NULL; 1901 return NULL;
1902 } 1902 }
1903 1903
1904 context2 = gaim_cipher_context_new(cipher, NULL); 1904 context2 = purple_cipher_context_new(cipher, NULL);
1905 gaim_cipher_context_append(context2, (guchar *)entity, strlen(entity)); 1905 purple_cipher_context_append(context2, (guchar *)entity, strlen(entity));
1906 gaim_cipher_context_digest_to_str(context2, sizeof(entity_hash), entity_hash, NULL); 1906 purple_cipher_context_digest_to_str(context2, sizeof(entity_hash), entity_hash, NULL);
1907 gaim_cipher_context_destroy(context2); 1907 purple_cipher_context_destroy(context2);
1908 1908
1909 gaim_cipher_context_append(context, (guchar *)":", 1); 1909 purple_cipher_context_append(context, (guchar *)":", 1);
1910 gaim_cipher_context_append(context, (guchar *)entity_hash, strlen(entity_hash)); 1910 purple_cipher_context_append(context, (guchar *)entity_hash, strlen(entity_hash));
1911 } 1911 }
1912 1912
1913 gaim_cipher_context_digest_to_str(context, sizeof(hash2), hash2, NULL); 1913 purple_cipher_context_digest_to_str(context, sizeof(hash2), hash2, NULL);
1914 gaim_cipher_context_destroy(context); 1914 purple_cipher_context_destroy(context);
1915 1915
1916 context = gaim_cipher_context_new(cipher, NULL); 1916 context = purple_cipher_context_new(cipher, NULL);
1917 gaim_cipher_context_append(context, (guchar *)session_key, strlen(session_key)); 1917 purple_cipher_context_append(context, (guchar *)session_key, strlen(session_key));
1918 gaim_cipher_context_append(context, (guchar *)":", 1); 1918 purple_cipher_context_append(context, (guchar *)":", 1);
1919 gaim_cipher_context_append(context, (guchar *)nonce, strlen(nonce)); 1919 purple_cipher_context_append(context, (guchar *)nonce, strlen(nonce));
1920 gaim_cipher_context_append(context, (guchar *)":", 1); 1920 purple_cipher_context_append(context, (guchar *)":", 1);
1921 1921
1922 if (qop != NULL && *qop != '\0') 1922 if (qop != NULL && *qop != '\0')
1923 { 1923 {
1924 if (nonce_count == NULL) 1924 if (nonce_count == NULL)
1925 { 1925 {
1926 gaim_cipher_context_destroy(context); 1926 purple_cipher_context_destroy(context);
1927 gaim_debug_error("cipher", "Required nonce_count missing for digest calculation."); 1927 purple_debug_error("cipher", "Required nonce_count missing for digest calculation.");
1928 return NULL; 1928 return NULL;
1929 } 1929 }
1930 1930
1931 if (client_nonce == NULL) 1931 if (client_nonce == NULL)
1932 { 1932 {
1933 gaim_cipher_context_destroy(context); 1933 purple_cipher_context_destroy(context);
1934 gaim_debug_error("cipher", "Required client_nonce missing for digest calculation."); 1934 purple_debug_error("cipher", "Required client_nonce missing for digest calculation.");
1935 return NULL; 1935 return NULL;
1936 } 1936 }
1937 1937
1938 gaim_cipher_context_append(context, (guchar *)nonce_count, strlen(nonce_count)); 1938 purple_cipher_context_append(context, (guchar *)nonce_count, strlen(nonce_count));
1939 gaim_cipher_context_append(context, (guchar *)":", 1); 1939 purple_cipher_context_append(context, (guchar *)":", 1);
1940 gaim_cipher_context_append(context, (guchar *)client_nonce, strlen(client_nonce)); 1940 purple_cipher_context_append(context, (guchar *)client_nonce, strlen(client_nonce));
1941 gaim_cipher_context_append(context, (guchar *)":", 1); 1941 purple_cipher_context_append(context, (guchar *)":", 1);
1942 1942
1943 gaim_cipher_context_append(context, (guchar *)qop, strlen(qop)); 1943 purple_cipher_context_append(context, (guchar *)qop, strlen(qop));
1944 1944
1945 gaim_cipher_context_append(context, (guchar *)":", 1); 1945 purple_cipher_context_append(context, (guchar *)":", 1);
1946 } 1946 }
1947 1947
1948 gaim_cipher_context_append(context, (guchar *)hash2, strlen(hash2)); 1948 purple_cipher_context_append(context, (guchar *)hash2, strlen(hash2));
1949 gaim_cipher_context_digest_to_str(context, sizeof(hash2), hash2, NULL); 1949 purple_cipher_context_digest_to_str(context, sizeof(hash2), hash2, NULL);
1950 gaim_cipher_context_destroy(context); 1950 purple_cipher_context_destroy(context);
1951 1951
1952 return g_strdup(hash2); 1952 return g_strdup(hash2);
1953 } 1953 }