#define _KEX_H_
#include "includes.h"
+#include "algo.h"
void send_msg_kexinit();
void recv_msg_kexinit();
-void send_dh_kex();
-void recv_msg_kexdh_init();
void send_msg_newkeys();
void recv_msg_newkeys();
-void kexinitialise();
+void kexfirstinitialise();
+void gen_kexdh_vals(mp_int *dh_pub, mp_int *dh_priv);
+void kexdh_comb_key(mp_int *dh_pub_us, mp_int *dh_priv, mp_int *dh_pub_them,
+ sign_key *hostkey);
+
+void recv_msg_kexdh_init(); /* server */
+
+void send_msg_kexdh_init(); /* client */
+void recv_msg_kexdh_reply(); /* client */
+
+extern const unsigned char dh_p_val[];
+#define DH_P_LEN 128 /* The length of the dh_p_val array */
+
+extern const int DH_G_VAL; /* == 2 */
struct KEXState {
unsigned sentnewkeys : 1; /* set once we've send/recv'ed MSG_NEWKEYS*/
unsigned recvnewkeys : 1;
+ unsigned donefirstkex : 1; /* Set to 1 after the first kex has completed,
+ ie the transport layer has been set up */
+
long lastkextime; /* time of the last kex */
unsigned int datatrans; /* data transmitted since last kex */
unsigned int datarecv; /* data received since last kex */