version 1.2, 2000/04/12 07:03:06 |
version 1.2.2.2, 2000/11/08 21:30:51 |
|
|
* 2. Redistributions in binary form must reproduce the above copyright |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
|
* must display the following acknowledgement: |
|
* This product includes software developed by Markus Friedl. |
|
* 4. The name of the author may not be used to endorse or promote products |
|
* derived from this software without specific prior written permission. |
|
* |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
|
#ifndef KEX_H |
#ifndef KEX_H |
#define KEX_H |
#define KEX_H |
|
|
#define KEX_DH1 "diffie-hellman-group1-sha1" |
#define KEX_DH1 "diffie-hellman-group1-sha1" |
#define KEX_DSS "ssh-dss" |
#define KEX_DHGEX "diffie-hellman-group-exchange-sha1" |
|
#define KEX_DSS "ssh-dss" |
|
|
enum kex_init_proposals { |
enum kex_init_proposals { |
PROPOSAL_KEX_ALGS, |
PROPOSAL_KEX_ALGS, |
|
|
MODE_MAX |
MODE_MAX |
}; |
}; |
|
|
|
enum kex_exchange { |
|
DH_GRP1_SHA1, |
|
DH_GEX_SHA1 |
|
}; |
|
|
typedef struct Kex Kex; |
typedef struct Kex Kex; |
typedef struct Mac Mac; |
typedef struct Mac Mac; |
typedef struct Comp Comp; |
typedef struct Comp Comp; |
typedef struct Enc Enc; |
typedef struct Enc Enc; |
|
|
struct Enc { |
struct Enc { |
int type; |
char *name; |
|
Cipher *cipher; |
int enabled; |
int enabled; |
int block_size; |
|
unsigned char *key; |
unsigned char *key; |
unsigned char *iv; |
unsigned char *iv; |
int key_len; |
|
int iv_len; |
|
char *name; |
|
}; |
}; |
struct Mac { |
struct Mac { |
EVP_MD *md; |
char *name; |
int enabled; |
int enabled; |
|
EVP_MD *md; |
int mac_len; |
int mac_len; |
unsigned char *key; |
unsigned char *key; |
int key_len; |
int key_len; |
char *name; |
|
}; |
}; |
struct Comp { |
struct Comp { |
int type; |
int type; |
|
|
int server; |
int server; |
char *name; |
char *name; |
char *hostkeyalg; |
char *hostkeyalg; |
|
int kex_type; |
}; |
}; |
|
|
Buffer *kex_init(char *myproposal[PROPOSAL_MAX]); |
Buffer *kex_init(char *myproposal[PROPOSAL_MAX]); |
int dh_pub_is_valid(DH *dh, BIGNUM *dh_pub); |
void |
DH *dh_new_group1(); |
kex_exchange_kexinit( |
Kex *kex_choose_conf(char *cprop[PROPOSAL_MAX], char *sprop[PROPOSAL_MAX], int server); |
Buffer *my_kexinit, Buffer *peer_kexint, |
|
char *peer_proposal[PROPOSAL_MAX]); |
|
Kex * |
|
kex_choose_conf(char *cprop[PROPOSAL_MAX], |
|
char *sprop[PROPOSAL_MAX], int server); |
int kex_derive_keys(Kex *k, unsigned char *hash, BIGNUM *shared_secret); |
int kex_derive_keys(Kex *k, unsigned char *hash, BIGNUM *shared_secret); |
void bignum_print(BIGNUM *b); |
|
void packet_set_kex(Kex *k); |
void packet_set_kex(Kex *k); |
|
int dh_pub_is_valid(DH *dh, BIGNUM *dh_pub); |
|
DH *dh_new_group_asc(const char *, const char *); |
|
DH *dh_new_group(BIGNUM *, BIGNUM *); |
|
DH *dh_new_group1(); |
|
|
unsigned char * |
unsigned char * |
kex_hash( |
kex_hash( |
|
|
BIGNUM *server_dh_pub, |
BIGNUM *server_dh_pub, |
BIGNUM *shared_secret); |
BIGNUM *shared_secret); |
|
|
|
unsigned char * |
|
kex_hash_gex( |
|
char *client_version_string, |
|
char *server_version_string, |
|
char *ckexinit, int ckexinitlen, |
|
char *skexinit, int skexinitlen, |
|
char *serverhostkeyblob, int sbloblen, |
|
int minbits, BIGNUM *prime, BIGNUM *gen, |
|
BIGNUM *client_dh_pub, |
|
BIGNUM *server_dh_pub, |
|
BIGNUM *shared_secret); |
#endif |
#endif |