Merge branch 'vendor/OPENSSH'
[dragonfly.git] / crypto / openssh / kex.h
index 20ff45a..3b4d4b5 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: kex.h,v 1.49 2010/02/26 20:29:54 djm Exp $ */
+/* $OpenBSD: kex.h,v 1.52 2010/09/22 05:01:29 djm Exp $ */
 
 /*
  * Copyright (c) 2000, 2001 Markus Friedl.  All rights reserved.
@@ -29,6 +29,9 @@
 #include <signal.h>
 #include <openssl/evp.h>
 #include <openssl/hmac.h>
+#ifdef OPENSSL_HAS_ECC
+#include <openssl/ec.h>
+#endif
 
 #define KEX_COOKIE_LEN 16
 
@@ -37,6 +40,8 @@
 #define        KEX_DHGEX_SHA1          "diffie-hellman-group-exchange-sha1"
 #define        KEX_DHGEX_SHA256        "diffie-hellman-group-exchange-sha256"
 #define        KEX_RESUME              "resume@appgate.com"
+/* The following represents the family of ECDH methods */
+#define        KEX_ECDH_SHA2_STEM      "ecdh-sha2-"
 
 #define COMP_NONE      0
 #define COMP_ZLIB      1
@@ -67,6 +72,7 @@ enum kex_exchange {
        KEX_DH_GRP14_SHA1,
        KEX_DH_GEX_SHA1,
        KEX_DH_GEX_SHA256,
+       KEX_ECDH_SHA2,
        KEX_MAX
 };
 
@@ -132,6 +138,8 @@ struct Kex {
        void    (*kex[KEX_MAX])(Kex *);
 };
 
+int     kex_names_valid(const char *);
+
 void kex_prop2buf(Buffer *, char *proposal[PROPOSAL_MAX]);
 
 Kex    *kex_setup(char *[PROPOSAL_MAX]);
@@ -147,6 +155,8 @@ void         kexdh_client(Kex *);
 void    kexdh_server(Kex *);
 void    kexgex_client(Kex *);
 void    kexgex_server(Kex *);
+void    kexecdh_client(Kex *);
+void    kexecdh_server(Kex *);
 
 void
 kex_dh_hash(char *, char *, char *, int, char *, int, u_char *, int,
@@ -155,11 +165,22 @@ void
 kexgex_hash(const EVP_MD *, char *, char *, char *, int, char *,
     int, u_char *, int, int, int, int, BIGNUM *, BIGNUM *, BIGNUM *,
     BIGNUM *, BIGNUM *, u_char **, u_int *);
+#ifdef OPENSSL_HAS_ECC
+void
+kex_ecdh_hash(const EVP_MD *, const EC_GROUP *, char *, char *, char *, int,
+    char *, int, u_char *, int, const EC_POINT *, const EC_POINT *,
+    const BIGNUM *, u_char **, u_int *);
+int    kex_ecdh_name_to_nid(const char *);
+const EVP_MD *kex_ecdh_name_to_evpmd(const char *);
+#else
+# define kex_ecdh_name_to_nid(x) (-1)
+# define kex_ecdh_name_to_evpmd(x) (NULL)
+#endif
 
 void
 derive_ssh1_session_id(BIGNUM *, BIGNUM *, u_int8_t[8], u_int8_t[16]);
 
-#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH)
+#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) || defined(DEBUG_KEXECDH)
 void   dump_digest(char *, u_char *, int);
 #endif