1d059297112922cabb0c674840589be8db821fd9aAdam Langley/* $OpenBSD: kex.h,v 1.71 2015/02/16 22:13:32 djm Exp $ */ 2bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 3bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/* 4bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 5bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 6bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Redistribution and use in source and binary forms, with or without 7bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * modification, are permitted provided that the following conditions 8bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * are met: 9bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 1. Redistributions of source code must retain the above copyright 10bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * notice, this list of conditions and the following disclaimer. 11bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 2. Redistributions in binary form must reproduce the above copyright 12bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * notice, this list of conditions and the following disclaimer in the 13bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * documentation and/or other materials provided with the distribution. 14bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 15bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman */ 26bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifndef KEX_H 27bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEX_H 28bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 29d059297112922cabb0c674840589be8db821fd9aAdam Langley#include "mac.h" 30d059297112922cabb0c674840589be8db821fd9aAdam Langley#include "buffer.h" /* XXX for typedef */ 31d059297112922cabb0c674840589be8db821fd9aAdam Langley#include "key.h" /* XXX for typedef */ 32d059297112922cabb0c674840589be8db821fd9aAdam Langley 33d059297112922cabb0c674840589be8db821fd9aAdam Langley#ifdef WITH_LEAKMALLOC 34d059297112922cabb0c674840589be8db821fd9aAdam Langley#include "leakmalloc.h" 35bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 36bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 37d059297112922cabb0c674840589be8db821fd9aAdam Langley#ifdef WITH_OPENSSL 38d059297112922cabb0c674840589be8db821fd9aAdam Langley# ifdef OPENSSL_HAS_ECC 39d059297112922cabb0c674840589be8db821fd9aAdam Langley# include <openssl/ec.h> 40d059297112922cabb0c674840589be8db821fd9aAdam Langley# else /* OPENSSL_HAS_ECC */ 41d059297112922cabb0c674840589be8db821fd9aAdam Langley# define EC_KEY void 42d059297112922cabb0c674840589be8db821fd9aAdam Langley# define EC_GROUP void 43d059297112922cabb0c674840589be8db821fd9aAdam Langley# define EC_POINT void 44d059297112922cabb0c674840589be8db821fd9aAdam Langley# endif /* OPENSSL_HAS_ECC */ 45d059297112922cabb0c674840589be8db821fd9aAdam Langley#else /* WITH_OPENSSL */ 46d059297112922cabb0c674840589be8db821fd9aAdam Langley# define EC_KEY void 47d059297112922cabb0c674840589be8db821fd9aAdam Langley# define EC_GROUP void 48d059297112922cabb0c674840589be8db821fd9aAdam Langley# define EC_POINT void 49d059297112922cabb0c674840589be8db821fd9aAdam Langley#endif /* WITH_OPENSSL */ 50d059297112922cabb0c674840589be8db821fd9aAdam Langley 51bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEX_COOKIE_LEN 16 52bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 53bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEX_DH1 "diffie-hellman-group1-sha1" 54bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEX_DH14 "diffie-hellman-group14-sha1" 55bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEX_DHGEX_SHA1 "diffie-hellman-group-exchange-sha1" 56bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEX_DHGEX_SHA256 "diffie-hellman-group-exchange-sha256" 57bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEX_RESUME "resume@appgate.com" 58d059297112922cabb0c674840589be8db821fd9aAdam Langley#define KEX_ECDH_SHA2_NISTP256 "ecdh-sha2-nistp256" 59d059297112922cabb0c674840589be8db821fd9aAdam Langley#define KEX_ECDH_SHA2_NISTP384 "ecdh-sha2-nistp384" 60d059297112922cabb0c674840589be8db821fd9aAdam Langley#define KEX_ECDH_SHA2_NISTP521 "ecdh-sha2-nistp521" 61d059297112922cabb0c674840589be8db821fd9aAdam Langley#define KEX_CURVE25519_SHA256 "curve25519-sha256@libssh.org" 62bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 63bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define COMP_NONE 0 64bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define COMP_ZLIB 1 65bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define COMP_DELAYED 2 66bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 67d059297112922cabb0c674840589be8db821fd9aAdam Langley#define CURVE25519_SIZE 32 68d059297112922cabb0c674840589be8db821fd9aAdam Langley 69bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanenum kex_init_proposals { 70bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_KEX_ALGS, 71bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_SERVER_HOST_KEY_ALGS, 72bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_ENC_ALGS_CTOS, 73bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_ENC_ALGS_STOC, 74bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_MAC_ALGS_CTOS, 75bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_MAC_ALGS_STOC, 76bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_COMP_ALGS_CTOS, 77bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_COMP_ALGS_STOC, 78bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_LANG_CTOS, 79bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_LANG_STOC, 80bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman PROPOSAL_MAX 81bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}; 82bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 83bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanenum kex_modes { 84bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman MODE_IN, 85bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman MODE_OUT, 86bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman MODE_MAX 87bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}; 88bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 89bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanenum kex_exchange { 90bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman KEX_DH_GRP1_SHA1, 91bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman KEX_DH_GRP14_SHA1, 92bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman KEX_DH_GEX_SHA1, 93bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman KEX_DH_GEX_SHA256, 94bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman KEX_ECDH_SHA2, 95d059297112922cabb0c674840589be8db821fd9aAdam Langley KEX_C25519_SHA256, 96bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman KEX_MAX 97bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}; 98bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 99bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#define KEX_INIT_SENT 0x0001 100bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 101d059297112922cabb0c674840589be8db821fd9aAdam Langleystruct sshenc { 102bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman char *name; 103d059297112922cabb0c674840589be8db821fd9aAdam Langley const struct sshcipher *cipher; 104bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman int enabled; 105bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_int key_len; 106d059297112922cabb0c674840589be8db821fd9aAdam Langley u_int iv_len; 107bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_int block_size; 108bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_char *key; 109bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_char *iv; 110bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}; 111d059297112922cabb0c674840589be8db821fd9aAdam Langleystruct sshcomp { 112d059297112922cabb0c674840589be8db821fd9aAdam Langley u_int type; 113bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman int enabled; 114bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman char *name; 115bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}; 116d059297112922cabb0c674840589be8db821fd9aAdam Langleystruct newkeys { 117d059297112922cabb0c674840589be8db821fd9aAdam Langley struct sshenc enc; 118d059297112922cabb0c674840589be8db821fd9aAdam Langley struct sshmac mac; 119d059297112922cabb0c674840589be8db821fd9aAdam Langley struct sshcomp comp; 120bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}; 121d059297112922cabb0c674840589be8db821fd9aAdam Langley 122d059297112922cabb0c674840589be8db821fd9aAdam Langleystruct ssh; 123d059297112922cabb0c674840589be8db821fd9aAdam Langley 124d059297112922cabb0c674840589be8db821fd9aAdam Langleystruct kex { 125bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_char *session_id; 126d059297112922cabb0c674840589be8db821fd9aAdam Langley size_t session_id_len; 127d059297112922cabb0c674840589be8db821fd9aAdam Langley struct newkeys *newkeys[MODE_MAX]; 128bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman u_int we_need; 129d059297112922cabb0c674840589be8db821fd9aAdam Langley u_int dh_need; 130bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman int server; 131bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman char *name; 132bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman int hostkey_type; 133d059297112922cabb0c674840589be8db821fd9aAdam Langley int hostkey_nid; 134d059297112922cabb0c674840589be8db821fd9aAdam Langley u_int kex_type; 135bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman int roaming; 136d059297112922cabb0c674840589be8db821fd9aAdam Langley struct sshbuf *my; 137d059297112922cabb0c674840589be8db821fd9aAdam Langley struct sshbuf *peer; 138bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman sig_atomic_t done; 139d059297112922cabb0c674840589be8db821fd9aAdam Langley u_int flags; 140d059297112922cabb0c674840589be8db821fd9aAdam Langley int hash_alg; 141d059297112922cabb0c674840589be8db821fd9aAdam Langley int ec_nid; 142bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman char *client_version_string; 143bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman char *server_version_string; 144d059297112922cabb0c674840589be8db821fd9aAdam Langley int (*verify_host_key)(struct sshkey *, struct ssh *); 145d059297112922cabb0c674840589be8db821fd9aAdam Langley struct sshkey *(*load_host_public_key)(int, int, struct ssh *); 146d059297112922cabb0c674840589be8db821fd9aAdam Langley struct sshkey *(*load_host_private_key)(int, int, struct ssh *); 147d059297112922cabb0c674840589be8db821fd9aAdam Langley int (*host_key_index)(struct sshkey *, int, struct ssh *); 148d059297112922cabb0c674840589be8db821fd9aAdam Langley int (*sign)(struct sshkey *, struct sshkey *, 149d059297112922cabb0c674840589be8db821fd9aAdam Langley u_char **, size_t *, const u_char *, size_t, u_int); 150d059297112922cabb0c674840589be8db821fd9aAdam Langley int (*kex[KEX_MAX])(struct ssh *); 151d059297112922cabb0c674840589be8db821fd9aAdam Langley /* kex specific state */ 152d059297112922cabb0c674840589be8db821fd9aAdam Langley DH *dh; /* DH */ 153d059297112922cabb0c674840589be8db821fd9aAdam Langley u_int min, max, nbits; /* GEX */ 154d059297112922cabb0c674840589be8db821fd9aAdam Langley EC_KEY *ec_client_key; /* ECDH */ 155d059297112922cabb0c674840589be8db821fd9aAdam Langley const EC_GROUP *ec_group; /* ECDH */ 156d059297112922cabb0c674840589be8db821fd9aAdam Langley u_char c25519_client_key[CURVE25519_SIZE]; /* 25519 */ 157d059297112922cabb0c674840589be8db821fd9aAdam Langley u_char c25519_client_pubkey[CURVE25519_SIZE]; /* 25519 */ 158bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}; 159bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 160bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanint kex_names_valid(const char *); 161d059297112922cabb0c674840589be8db821fd9aAdam Langleychar *kex_alg_list(char); 162d059297112922cabb0c674840589be8db821fd9aAdam Langley 163d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_new(struct ssh *, char *[PROPOSAL_MAX], struct kex **); 164d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_setup(struct ssh *, char *[PROPOSAL_MAX]); 165d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid kex_free_newkeys(struct newkeys *); 166d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid kex_free(struct kex *); 167d059297112922cabb0c674840589be8db821fd9aAdam Langley 168d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_buf2prop(struct sshbuf *, int *, char ***); 169d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_prop2buf(struct sshbuf *, char *proposal[PROPOSAL_MAX]); 170d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid kex_prop_free(char **); 171d059297112922cabb0c674840589be8db821fd9aAdam Langley 172d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_send_kexinit(struct ssh *); 173d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_input_kexinit(int, u_int32_t, void *); 174d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_derive_keys(struct ssh *, u_char *, u_int, const struct sshbuf *); 175d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_derive_keys_bn(struct ssh *, u_char *, u_int, const BIGNUM *); 176d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_send_newkeys(struct ssh *); 177d059297112922cabb0c674840589be8db821fd9aAdam Langley 178d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexdh_client(struct ssh *); 179d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexdh_server(struct ssh *); 180d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexgex_client(struct ssh *); 181d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexgex_server(struct ssh *); 182d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexecdh_client(struct ssh *); 183d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexecdh_server(struct ssh *); 184d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexc25519_client(struct ssh *); 185d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexc25519_server(struct ssh *); 186d059297112922cabb0c674840589be8db821fd9aAdam Langley 187d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_dh_hash(const char *, const char *, 188d059297112922cabb0c674840589be8db821fd9aAdam Langley const u_char *, size_t, const u_char *, size_t, const u_char *, size_t, 189d059297112922cabb0c674840589be8db821fd9aAdam Langley const BIGNUM *, const BIGNUM *, const BIGNUM *, u_char *, size_t *); 190d059297112922cabb0c674840589be8db821fd9aAdam Langley 191d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexgex_hash(int, const char *, const char *, 192d059297112922cabb0c674840589be8db821fd9aAdam Langley const u_char *, size_t, const u_char *, size_t, const u_char *, size_t, 193d059297112922cabb0c674840589be8db821fd9aAdam Langley int, int, int, 194d059297112922cabb0c674840589be8db821fd9aAdam Langley const BIGNUM *, const BIGNUM *, const BIGNUM *, 195d059297112922cabb0c674840589be8db821fd9aAdam Langley const BIGNUM *, const BIGNUM *, 196d059297112922cabb0c674840589be8db821fd9aAdam Langley u_char *, size_t *); 197d059297112922cabb0c674840589be8db821fd9aAdam Langley 198d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_ecdh_hash(int, const EC_GROUP *, const char *, const char *, 199d059297112922cabb0c674840589be8db821fd9aAdam Langley const u_char *, size_t, const u_char *, size_t, const u_char *, size_t, 200d059297112922cabb0c674840589be8db821fd9aAdam Langley const EC_POINT *, const EC_POINT *, const BIGNUM *, u_char *, size_t *); 201d059297112922cabb0c674840589be8db821fd9aAdam Langley 202d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kex_c25519_hash(int, const char *, const char *, const char *, size_t, 203d059297112922cabb0c674840589be8db821fd9aAdam Langley const char *, size_t, const u_char *, size_t, const u_char *, const u_char *, 204d059297112922cabb0c674840589be8db821fd9aAdam Langley const u_char *, size_t, u_char *, size_t *); 205d059297112922cabb0c674840589be8db821fd9aAdam Langley 206d059297112922cabb0c674840589be8db821fd9aAdam Langleyvoid kexc25519_keygen(u_char key[CURVE25519_SIZE], u_char pub[CURVE25519_SIZE]) 207d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((__bounded__(__minbytes__, 1, CURVE25519_SIZE))) 208d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((__bounded__(__minbytes__, 2, CURVE25519_SIZE))); 209d059297112922cabb0c674840589be8db821fd9aAdam Langleyint kexc25519_shared_key(const u_char key[CURVE25519_SIZE], 210d059297112922cabb0c674840589be8db821fd9aAdam Langley const u_char pub[CURVE25519_SIZE], struct sshbuf *out) 211d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((__bounded__(__minbytes__, 1, CURVE25519_SIZE))) 212d059297112922cabb0c674840589be8db821fd9aAdam Langley __attribute__((__bounded__(__minbytes__, 2, CURVE25519_SIZE))); 213d059297112922cabb0c674840589be8db821fd9aAdam Langley 214d059297112922cabb0c674840589be8db821fd9aAdam Langleyint 215bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanderive_ssh1_session_id(BIGNUM *, BIGNUM *, u_int8_t[8], u_int8_t[16]); 216bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 217bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) || defined(DEBUG_KEXECDH) 218bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanvoid dump_digest(char *, u_char *, int); 219bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 220bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman 221d059297112922cabb0c674840589be8db821fd9aAdam Langley#if !defined(WITH_OPENSSL) || !defined(OPENSSL_HAS_ECC) 222d059297112922cabb0c674840589be8db821fd9aAdam Langley# undef EC_KEY 223d059297112922cabb0c674840589be8db821fd9aAdam Langley# undef EC_GROUP 224d059297112922cabb0c674840589be8db821fd9aAdam Langley# undef EC_POINT 225d059297112922cabb0c674840589be8db821fd9aAdam Langley#endif 226d059297112922cabb0c674840589be8db821fd9aAdam Langley 227bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif 228