version 1.27, 2006/08/03 03:34:42 |
version 1.28, 2014/01/09 23:20:00 |
|
|
#include "cipher.h" |
#include "cipher.h" |
#include "kex.h" |
#include "kex.h" |
#include "ssh2.h" |
#include "ssh2.h" |
|
#include "digest.h" |
|
#include "log.h" |
|
|
void |
void |
kexgex_hash( |
kexgex_hash( |
const EVP_MD *evp_md, |
int hash_alg, |
char *client_version_string, |
char *client_version_string, |
char *server_version_string, |
char *server_version_string, |
char *ckexinit, int ckexinitlen, |
char *ckexinit, int ckexinitlen, |
|
|
u_char **hash, u_int *hashlen) |
u_char **hash, u_int *hashlen) |
{ |
{ |
Buffer b; |
Buffer b; |
static u_char digest[EVP_MAX_MD_SIZE]; |
static u_char digest[SSH_DIGEST_MAX_LENGTH]; |
EVP_MD_CTX md; |
|
|
|
buffer_init(&b); |
buffer_init(&b); |
buffer_put_cstring(&b, client_version_string); |
buffer_put_cstring(&b, client_version_string); |
|
|
#ifdef DEBUG_KEXDH |
#ifdef DEBUG_KEXDH |
buffer_dump(&b); |
buffer_dump(&b); |
#endif |
#endif |
|
if (ssh_digest_buffer(hash_alg, &b, digest, sizeof(digest)) != 0) |
|
fatal("%s: ssh_digest_buffer failed", __func__); |
|
|
EVP_DigestInit(&md, evp_md); |
|
EVP_DigestUpdate(&md, buffer_ptr(&b), buffer_len(&b)); |
|
EVP_DigestFinal(&md, digest, NULL); |
|
|
|
buffer_free(&b); |
buffer_free(&b); |
*hash = digest; |
|
*hashlen = EVP_MD_size(evp_md); |
#ifdef DEBUG_KEX |
#ifdef DEBUG_KEXDH |
dump_digest("hash", digest, ssh_digest_bytes(hash_alg)); |
dump_digest("hash", digest, *hashlen); |
|
#endif |
#endif |
|
*hash = digest; |
|
*hashlen = ssh_digest_bytes(hash_alg); |
} |
} |