diff options
Diffstat (limited to 'key.c')
-rw-r--r-- | key.c | 50 |
1 files changed, 24 insertions, 26 deletions
@@ -32,7 +32,7 @@ | |||
32 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 32 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
33 | */ | 33 | */ |
34 | #include "includes.h" | 34 | #include "includes.h" |
35 | RCSID("$OpenBSD: key.c,v 1.19 2001/03/11 15:03:15 jakob Exp $"); | 35 | RCSID("$OpenBSD: key.c,v 1.20 2001/03/11 15:13:09 jakob Exp $"); |
36 | 36 | ||
37 | #include <openssl/evp.h> | 37 | #include <openssl/evp.h> |
38 | 38 | ||
@@ -236,46 +236,44 @@ key_fingerprint_bubblebabble(u_char* dgst_raw, size_t dgst_raw_len) | |||
236 | char vowels[] = { 'a', 'e', 'i', 'o', 'u', 'y' }; | 236 | char vowels[] = { 'a', 'e', 'i', 'o', 'u', 'y' }; |
237 | char consonants[] = { 'b', 'c', 'd', 'f', 'g', 'h', 'k', 'l', 'm', | 237 | char consonants[] = { 'b', 'c', 'd', 'f', 'g', 'h', 'k', 'l', 'm', |
238 | 'n', 'p', 'r', 's', 't', 'v', 'z', 'x' }; | 238 | 'n', 'p', 'r', 's', 't', 'v', 'z', 'x' }; |
239 | u_int rounds, idx, retval_idx, seed; | 239 | u_int i, j = 0, rounds, seed = 1; |
240 | char *retval; | 240 | char *retval; |
241 | 241 | ||
242 | rounds = (dgst_raw_len / 2) + 1; | 242 | rounds = (dgst_raw_len / 2) + 1; |
243 | retval = xmalloc(sizeof(char) * (rounds*6)); | 243 | retval = xmalloc(sizeof(char) * (rounds*6)); |
244 | seed = 1; | 244 | retval[j++] = 'x'; |
245 | retval_idx = 0; | 245 | for (i = 0; i < rounds; i++) { |
246 | retval[retval_idx++] = 'x'; | ||
247 | for (idx=0;idx<rounds;idx++) { | ||
248 | u_int idx0, idx1, idx2, idx3, idx4; | 246 | u_int idx0, idx1, idx2, idx3, idx4; |
249 | if ((idx + 1 < rounds) || (dgst_raw_len % 2 != 0)) { | 247 | if ((i + 1 < rounds) || (dgst_raw_len % 2 != 0)) { |
250 | idx0 = (((((u_int)(dgst_raw[2 * idx])) >> 6) & 3) + | 248 | idx0 = (((((u_int)(dgst_raw[2 * i])) >> 6) & 3) + |
251 | seed) % 6; | 249 | seed) % 6; |
252 | idx1 = (((u_int)(dgst_raw[2 * idx])) >> 2) & 15; | 250 | idx1 = (((u_int)(dgst_raw[2 * i])) >> 2) & 15; |
253 | idx2 = ((((u_int)(dgst_raw[2 * idx])) & 3) + | 251 | idx2 = ((((u_int)(dgst_raw[2 * i])) & 3) + |
254 | (seed / 6)) % 6; | 252 | (seed / 6)) % 6; |
255 | retval[retval_idx++] = vowels[idx0]; | 253 | retval[j++] = vowels[idx0]; |
256 | retval[retval_idx++] = consonants[idx1]; | 254 | retval[j++] = consonants[idx1]; |
257 | retval[retval_idx++] = vowels[idx2]; | 255 | retval[j++] = vowels[idx2]; |
258 | if ((idx + 1) < rounds) { | 256 | if ((i + 1) < rounds) { |
259 | idx3 = (((u_int)(dgst_raw[(2 * idx) + 1])) >> 4) & 15; | 257 | idx3 = (((u_int)(dgst_raw[(2 * i) + 1])) >> 4) & 15; |
260 | idx4 = (((u_int)(dgst_raw[(2 * idx) + 1]))) & 15; | 258 | idx4 = (((u_int)(dgst_raw[(2 * i) + 1]))) & 15; |
261 | retval[retval_idx++] = consonants[idx3]; | 259 | retval[j++] = consonants[idx3]; |
262 | retval[retval_idx++] = '-'; | 260 | retval[j++] = '-'; |
263 | retval[retval_idx++] = consonants[idx4]; | 261 | retval[j++] = consonants[idx4]; |
264 | seed = ((seed * 5) + | 262 | seed = ((seed * 5) + |
265 | ((((u_int)(dgst_raw[2 * idx])) * 7) + | 263 | ((((u_int)(dgst_raw[2 * i])) * 7) + |
266 | ((u_int)(dgst_raw[(2 * idx) + 1])))) % 36; | 264 | ((u_int)(dgst_raw[(2 * i) + 1])))) % 36; |
267 | } | 265 | } |
268 | } else { | 266 | } else { |
269 | idx0 = seed % 6; | 267 | idx0 = seed % 6; |
270 | idx1 = 16; | 268 | idx1 = 16; |
271 | idx2 = seed / 6; | 269 | idx2 = seed / 6; |
272 | retval[retval_idx++] = vowels[idx0]; | 270 | retval[j++] = vowels[idx0]; |
273 | retval[retval_idx++] = consonants[idx1]; | 271 | retval[j++] = consonants[idx1]; |
274 | retval[retval_idx++] = vowels[idx2]; | 272 | retval[j++] = vowels[idx2]; |
275 | } | 273 | } |
276 | } | 274 | } |
277 | retval[retval_idx++] = 'x'; | 275 | retval[j++] = 'x'; |
278 | retval[retval_idx++] = '\0'; | 276 | retval[j++] = '\0'; |
279 | return retval; | 277 | return retval; |
280 | } | 278 | } |
281 | 279 | ||