version 1.14, 2000/12/15 17:30:14 |
version 1.15, 2000/12/19 23:17:56 |
|
|
kex_init(char *myproposal[PROPOSAL_MAX]) |
kex_init(char *myproposal[PROPOSAL_MAX]) |
{ |
{ |
int first_kex_packet_follows = 0; |
int first_kex_packet_follows = 0; |
unsigned char cookie[KEX_COOKIE_LEN]; |
u_char cookie[KEX_COOKIE_LEN]; |
u_int32_t rand = 0; |
u_int32_t rand = 0; |
int i; |
int i; |
Buffer *ki = xmalloc(sizeof(*ki)); |
Buffer *ki = xmalloc(sizeof(*ki)); |
|
|
} |
} |
|
|
void |
void |
dump_digest(unsigned char *digest, int len) |
dump_digest(u_char *digest, int len) |
{ |
{ |
int i; |
int i; |
for (i = 0; i< len; i++){ |
for (i = 0; i< len; i++){ |
|
|
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
} |
} |
|
|
unsigned char * |
u_char * |
kex_hash( |
kex_hash( |
char *client_version_string, |
char *client_version_string, |
char *server_version_string, |
char *server_version_string, |
|
|
BIGNUM *shared_secret) |
BIGNUM *shared_secret) |
{ |
{ |
Buffer b; |
Buffer b; |
static unsigned char digest[EVP_MAX_MD_SIZE]; |
static u_char digest[EVP_MAX_MD_SIZE]; |
EVP_MD *evp_md = EVP_sha1(); |
EVP_MD *evp_md = EVP_sha1(); |
EVP_MD_CTX md; |
EVP_MD_CTX md; |
|
|
|
|
return digest; |
return digest; |
} |
} |
|
|
unsigned char * |
u_char * |
kex_hash_gex( |
kex_hash_gex( |
char *client_version_string, |
char *client_version_string, |
char *server_version_string, |
char *server_version_string, |
|
|
BIGNUM *shared_secret) |
BIGNUM *shared_secret) |
{ |
{ |
Buffer b; |
Buffer b; |
static unsigned char digest[EVP_MAX_MD_SIZE]; |
static u_char digest[EVP_MAX_MD_SIZE]; |
EVP_MD *evp_md = EVP_sha1(); |
EVP_MD *evp_md = EVP_sha1(); |
EVP_MD_CTX md; |
EVP_MD_CTX md; |
|
|
|
|
return digest; |
return digest; |
} |
} |
|
|
unsigned char * |
u_char * |
derive_key(int id, int need, char unsigned *hash, BIGNUM *shared_secret) |
derive_key(int id, int need, u_char *hash, BIGNUM *shared_secret) |
{ |
{ |
Buffer b; |
Buffer b; |
EVP_MD *evp_md = EVP_sha1(); |
EVP_MD *evp_md = EVP_sha1(); |
|
|
char c = id; |
char c = id; |
int have; |
int have; |
int mdsz = evp_md->md_size; |
int mdsz = evp_md->md_size; |
unsigned char *digest = xmalloc(((need+mdsz-1)/mdsz)*mdsz); |
u_char *digest = xmalloc(((need+mdsz-1)/mdsz)*mdsz); |
|
|
buffer_init(&b); |
buffer_init(&b); |
buffer_put_bignum2(&b, shared_secret); |
buffer_put_bignum2(&b, shared_secret); |
|
|
} |
} |
|
|
int |
int |
kex_derive_keys(Kex *k, unsigned char *hash, BIGNUM *shared_secret) |
kex_derive_keys(Kex *k, u_char *hash, BIGNUM *shared_secret) |
{ |
{ |
int i; |
int i; |
int mode; |
int mode; |
int ctos; |
int ctos; |
unsigned char *keys[NKEYS]; |
u_char *keys[NKEYS]; |
|
|
for (i = 0; i < NKEYS; i++) |
for (i = 0; i < NKEYS; i++) |
keys[i] = derive_key('A'+i, k->we_need, hash, shared_secret); |
keys[i] = derive_key('A'+i, k->we_need, hash, shared_secret); |