Mercurial > pidgin.yaz
comparison src/protocols/yahoo/crypt.c @ 10687:b256ce6b85b8
[gaim-migrate @ 12235]
grim says this is really fixed this time.
committer: Tailor Script <tailor@pidgin.im>
author | Etan Reisner <pidgin@unreliablesource.net> |
---|---|
date | Sat, 12 Mar 2005 01:10:37 +0000 |
parents | 72a5babfa8b4 |
children | 923b78741964 |
comparison
equal
deleted
inserted
replaced
10686:212946f774c0 | 10687:b256ce6b85b8 |
---|---|
47 int needed = 3 + strlen (salt) + 1 + 26 + 1; | 47 int needed = 3 + strlen (salt) + 1 + 26 + 1; |
48 | 48 |
49 size_t salt_len; | 49 size_t salt_len; |
50 size_t key_len; | 50 size_t key_len; |
51 size_t cnt; | 51 size_t cnt; |
52 | |
52 char *cp; | 53 char *cp; |
53 | 54 |
54 if (buflen < needed) { | 55 if (buflen < needed) { |
55 buflen = needed; | 56 buflen = needed; |
56 if ((buffer = g_realloc(buffer, buflen)) == NULL) | 57 if ((buffer = g_realloc(buffer, buflen)) == NULL) |
98 | 99 |
99 /* Add key again. */ | 100 /* Add key again. */ |
100 gaim_cipher_context_append(context2, key, key_len); | 101 gaim_cipher_context_append(context2, key, key_len); |
101 | 102 |
102 /* Now get result of this (16 bytes) and add it to the other context. */ | 103 /* Now get result of this (16 bytes) and add it to the other context. */ |
103 gaim_cipher_context_digest(context2, NULL, digest); | 104 gaim_cipher_context_digest(context2, sizeof(digest), digest, NULL); |
104 | 105 |
105 /* Add for any character in the key one byte of the alternate sum. */ | 106 /* Add for any character in the key one byte of the alternate sum. */ |
106 for (cnt = key_len; cnt > 16; cnt -= 16) | 107 for (cnt = key_len; cnt > 16; cnt -= 16) |
107 gaim_cipher_context_append(context1, digest, 16); | 108 gaim_cipher_context_append(context1, digest, 16); |
108 gaim_cipher_context_append(context1, digest, cnt); | 109 gaim_cipher_context_append(context1, digest, cnt); |
118 for (cnt = key_len; cnt > 0; cnt >>= 1) | 119 for (cnt = key_len; cnt > 0; cnt >>= 1) |
119 gaim_cipher_context_append(context1, | 120 gaim_cipher_context_append(context1, |
120 (cnt & 1) != 0 ? digest : (guint8 *)key, 1); | 121 (cnt & 1) != 0 ? digest : (guint8 *)key, 1); |
121 | 122 |
122 /* Create intermediate result. */ | 123 /* Create intermediate result. */ |
123 gaim_cipher_context_digest(context1, NULL, digest); | 124 gaim_cipher_context_digest(context1, sizeof(digest), digest, NULL); |
124 | 125 |
125 /* Now comes another weirdness. In fear of password crackers here | 126 /* Now comes another weirdness. In fear of password crackers here |
126 * comes a quite long loop which just processes the output of the | 127 * comes a quite long loop which just processes the output of the |
127 * previous round again. We cannot ignore this here. | 128 * previous round again. We cannot ignore this here. |
128 */ | 129 */ |
149 gaim_cipher_context_append(context2, digest, 16); | 150 gaim_cipher_context_append(context2, digest, 16); |
150 else | 151 else |
151 gaim_cipher_context_append(context2, key, key_len); | 152 gaim_cipher_context_append(context2, key, key_len); |
152 | 153 |
153 /* Create intermediate result. */ | 154 /* Create intermediate result. */ |
154 gaim_cipher_context_digest(context2, NULL, digest); | 155 gaim_cipher_context_digest(context2, sizeof(digest), digest, NULL); |
155 } | 156 } |
156 | 157 |
157 /* Now we can construct the result string. It consists of three parts. */ | 158 /* Now we can construct the result string. It consists of three parts. */ |
158 strncpy(buffer, md5_salt_prefix, MAX (0, buflen)); | 159 strncpy(buffer, md5_salt_prefix, MAX (0, buflen)); |
159 cp = buffer + strlen(buffer); | 160 cp = buffer + strlen(buffer); |
195 * attaching to processes or reading core dumps cannot get any | 196 * attaching to processes or reading core dumps cannot get any |
196 * information. We do it in this way to clear correct_words[] | 197 * information. We do it in this way to clear correct_words[] |
197 * inside the MD5 implementation as well. | 198 * inside the MD5 implementation as well. |
198 */ | 199 */ |
199 gaim_cipher_context_reset(context1, NULL); | 200 gaim_cipher_context_reset(context1, NULL); |
200 gaim_cipher_context_digest(context1, NULL, digest); | 201 gaim_cipher_context_digest(context1, sizeof(digest), digest, NULL); |
201 gaim_cipher_context_destroy(context1); | 202 gaim_cipher_context_destroy(context1); |
202 gaim_cipher_context_destroy(context2); | 203 gaim_cipher_context_destroy(context2); |
203 | 204 |
204 return buffer; | 205 return buffer; |
205 } | 206 } |