]> andersk Git - openssh.git/commitdiff
- markus@cvs.openbsd.org 2002/03/14 16:38:26
authormouring <mouring>
Fri, 22 Mar 2002 01:10:21 +0000 (01:10 +0000)
committermouring <mouring>
Fri, 22 Mar 2002 01:10:21 +0000 (01:10 +0000)
     [sshd.c]
     split out ssh1 session key decryption; ok provos@

ChangeLog
sshd.c

index 6fa5267200c4ac8feb52a7cb9895542ccf418368..77388d65b95dc7c0c0c9b65693061e635f9e1c5c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,6 +12,9 @@
    - markus@cvs.openbsd.org 2002/03/14 15:24:27
      [sshconnect1.c]
      don't trust size sent by (rogue) server; noted by s.esser@e-matters.de
+   - markus@cvs.openbsd.org 2002/03/14 16:38:26
+     [sshd.c]
+     split out ssh1 session key decryption; ok provos@
 
 20020317
  - (tim) [configure.ac] Assume path given with --with-pid-dir=PATH is wanted,
diff --git a/sshd.c b/sshd.c
index ea929325196e4a0dbf21915973bcbec6fbe354f8..0fd902f904938611d040148083da9f448268b884 100644 (file)
--- a/sshd.c
+++ b/sshd.c
@@ -40,7 +40,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: sshd.c,v 1.228 2002/02/27 21:23:13 stevesk Exp $");
+RCSID("$OpenBSD: sshd.c,v 1.229 2002/03/14 16:38:26 markus Exp $");
 
 #include <openssl/dh.h>
 #include <openssl/bn.h>
@@ -1251,6 +1251,50 @@ main(int ac, char **av)
        exit(0);
 }
 
+/*
+ * Decrypt session_key_int using our private server key and private host key
+ * (key with larger modulus first).
+ */
+static int
+ssh1_session_key(BIGNUM *session_key_int)
+{
+       int rsafail = 0;
+
+       if (BN_cmp(sensitive_data.server_key->rsa->n, sensitive_data.ssh1_host_key->rsa->n) > 0) {
+               /* Server key has bigger modulus. */
+               if (BN_num_bits(sensitive_data.server_key->rsa->n) <
+                   BN_num_bits(sensitive_data.ssh1_host_key->rsa->n) + SSH_KEY_BITS_RESERVED) {
+                       fatal("do_connection: %s: server_key %d < host_key %d + SSH_KEY_BITS_RESERVED %d",
+                           get_remote_ipaddr(),
+                           BN_num_bits(sensitive_data.server_key->rsa->n),
+                           BN_num_bits(sensitive_data.ssh1_host_key->rsa->n),
+                           SSH_KEY_BITS_RESERVED);
+               }
+               if (rsa_private_decrypt(session_key_int, session_key_int,
+                   sensitive_data.server_key->rsa) <= 0)
+                       rsafail++;
+               if (rsa_private_decrypt(session_key_int, session_key_int,
+                   sensitive_data.ssh1_host_key->rsa) <= 0)
+                       rsafail++;
+       } else {
+               /* Host key has bigger modulus (or they are equal). */
+               if (BN_num_bits(sensitive_data.ssh1_host_key->rsa->n) <
+                   BN_num_bits(sensitive_data.server_key->rsa->n) + SSH_KEY_BITS_RESERVED) {
+                       fatal("do_connection: %s: host_key %d < server_key %d + SSH_KEY_BITS_RESERVED %d",
+                           get_remote_ipaddr(),
+                           BN_num_bits(sensitive_data.ssh1_host_key->rsa->n),
+                           BN_num_bits(sensitive_data.server_key->rsa->n),
+                           SSH_KEY_BITS_RESERVED);
+               }
+               if (rsa_private_decrypt(session_key_int, session_key_int,
+                   sensitive_data.ssh1_host_key->rsa) < 0)
+                       rsafail++;
+               if (rsa_private_decrypt(session_key_int, session_key_int,
+                   sensitive_data.server_key->rsa) < 0)
+                       rsafail++;
+       }
+       return (rsafail);
+}
 /*
  * SSH1 key exchange
  */
@@ -1366,43 +1410,8 @@ do_ssh1_kex(void)
        packet_set_protocol_flags(protocol_flags);
        packet_check_eom();
 
-       /*
-        * Decrypt it using our private server key and private host key (key
-        * with larger modulus first).
-        */
-       if (BN_cmp(sensitive_data.server_key->rsa->n, sensitive_data.ssh1_host_key->rsa->n) > 0) {
-               /* Server key has bigger modulus. */
-               if (BN_num_bits(sensitive_data.server_key->rsa->n) <
-                   BN_num_bits(sensitive_data.ssh1_host_key->rsa->n) + SSH_KEY_BITS_RESERVED) {
-                       fatal("do_connection: %s: server_key %d < host_key %d + SSH_KEY_BITS_RESERVED %d",
-                           get_remote_ipaddr(),
-                           BN_num_bits(sensitive_data.server_key->rsa->n),
-                           BN_num_bits(sensitive_data.ssh1_host_key->rsa->n),
-                           SSH_KEY_BITS_RESERVED);
-               }
-               if (rsa_private_decrypt(session_key_int, session_key_int,
-                   sensitive_data.server_key->rsa) <= 0)
-                       rsafail++;
-               if (rsa_private_decrypt(session_key_int, session_key_int,
-                   sensitive_data.ssh1_host_key->rsa) <= 0)
-                       rsafail++;
-       } else {
-               /* Host key has bigger modulus (or they are equal). */
-               if (BN_num_bits(sensitive_data.ssh1_host_key->rsa->n) <
-                   BN_num_bits(sensitive_data.server_key->rsa->n) + SSH_KEY_BITS_RESERVED) {
-                       fatal("do_connection: %s: host_key %d < server_key %d + SSH_KEY_BITS_RESERVED %d",
-                           get_remote_ipaddr(),
-                           BN_num_bits(sensitive_data.ssh1_host_key->rsa->n),
-                           BN_num_bits(sensitive_data.server_key->rsa->n),
-                           SSH_KEY_BITS_RESERVED);
-               }
-               if (rsa_private_decrypt(session_key_int, session_key_int,
-                   sensitive_data.ssh1_host_key->rsa) < 0)
-                       rsafail++;
-               if (rsa_private_decrypt(session_key_int, session_key_int,
-                   sensitive_data.server_key->rsa) < 0)
-                       rsafail++;
-       }
+       /* Decrypt session_key_int using host/server keys */
+       rsafail = ssh1_session_key(session_key_int);
        /*
         * Extract session key from the decrypted integer.  The key is in the
         * least significant 256 bits of the integer; the first byte of the
This page took 0.454341 seconds and 5 git commands to generate.