void *hmacmd5_make_context(void);
void hmacmd5_free_context(void *handle);
-void hmacmd5_key(void *handle, unsigned char const *key, int len);
+void hmacmd5_key(void *handle, void const *key, int len);
void hmacmd5_do_hmac(void *handle, unsigned char const *blk, int len,
unsigned char *hmac);
/*
* Plugging in another KEX algorithm requires structural chaos,
* so it's hard to abstract them into nice little structures
- * like this. Hence, for the moment, this is just a
- * placeholder. I claim justification in the fact that OpenSSH
- * does this too :-)
+ * like this. Fortunately, all our KEXes are basically
+ * Diffie-Hellman at the moment, so in this structure I simply
+ * parametrise the DH exchange a bit.
*/
- char *name;
+ char *name, *groupname;
+ const unsigned char *pdata, *gdata;/* NULL means use group exchange */
+ int plen, glen;
};
struct ssh_signkey {
extern const struct ssh2_ciphers ssh2_des;
extern const struct ssh2_ciphers ssh2_aes;
extern const struct ssh2_ciphers ssh2_blowfish;
-extern const struct ssh_kex ssh_diffiehellman;
+extern const struct ssh_kex ssh_diffiehellman_group1;
+extern const struct ssh_kex ssh_diffiehellman_group14;
extern const struct ssh_kex ssh_diffiehellman_gex;
extern const struct ssh_signkey ssh_dss;
extern const struct ssh_signkey ssh_rsa;
/* Exports from portfwd.c */
extern const char *pfd_newconnect(Socket * s, char *hostname, int port,
- void *c, const Config *cfg);
+ void *c, const Config *cfg,
+ int addressfamily);
/* desthost == NULL indicates dynamic (SOCKS) port forwarding */
extern const char *pfd_addforward(char *desthost, int destport, char *srcaddr,
int port, void *backhandle,
- const Config *cfg);
+ const Config *cfg, void **sockdata,
+ int address_family);
extern void pfd_close(Socket s);
+extern void pfd_terminate(void *sockdata);
extern int pfd_send(Socket s, char *data, int len);
extern void pfd_confirm(Socket s);
extern void pfd_unthrottle(Socket s);
void diagbn(char *prefix, Bignum md);
#endif
-void *dh_setup_group1(void);
-void *dh_setup_group(Bignum pval, Bignum gval);
+void *dh_setup_group(const struct ssh_kex *kex);
+void *dh_setup_gex(Bignum pval, Bignum gval);
void dh_cleanup(void *);
Bignum dh_create_e(void *, int nbits);
Bignum dh_find_K(void *, Bignum f);