diff options
Diffstat (limited to 'secure/lib/libtelnet/kerberos.c')
-rw-r--r-- | secure/lib/libtelnet/kerberos.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/secure/lib/libtelnet/kerberos.c b/secure/lib/libtelnet/kerberos.c index aa9b418..7c5771c 100644 --- a/secure/lib/libtelnet/kerberos.c +++ b/secure/lib/libtelnet/kerberos.c @@ -227,9 +227,10 @@ kerberos4_send(ap) register int i; des_key_sched(cred.session, sched); - des_set_random_generator_seed(cred.session); - des_new_random_key(challenge); - des_ecb_encrypt(challenge, session_key, sched, 1); + des_init_random_number_generator(cred.session); + des_new_random_key(session_key); + des_ecb_encrypt(session_key, session_key, sched, 0); + des_ecb_encrypt(session_key, challenge, sched, 0); /* * Increment the challenge by 1, and encrypt it for * later comparison. @@ -322,6 +323,11 @@ kerberos4_is(ap, data, cnt) break; } + /* + * Initialize the random number generator since it's + * used later on by the encryption routine. + */ + des_init_random_number_generator(session_key); des_key_sched(session_key, sched); bcopy((void *)data, (void *)datablock, sizeof(Block)); /* @@ -339,7 +345,7 @@ kerberos4_is(ap, data, cnt) * increment by one, re-encrypt it and send it back. */ des_ecb_encrypt(datablock, challenge, sched, 0); - for (r = 7; r >= 0; r++) { + for (r = 7; r >= 0; r--) { register int t; t = (unsigned int)challenge[r] + 1; challenge[r] = t; /* ignore overflow */ |