version 1.23, 2006/08/03 03:34:42 |
version 1.24, 2014/01/09 23:20:00 |
|
|
#include "key.h" |
#include "key.h" |
#include "cipher.h" |
#include "cipher.h" |
#include "kex.h" |
#include "kex.h" |
|
#include "digest.h" |
|
#include "log.h" |
|
|
void |
void |
kex_dh_hash( |
kex_dh_hash( |
|
|
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]; |
const EVP_MD *evp_md = EVP_sha1(); |
|
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_KEX |
#ifdef DEBUG_KEX |
buffer_dump(&b); |
buffer_dump(&b); |
#endif |
#endif |
EVP_DigestInit(&md, evp_md); |
if (ssh_digest_buffer(SSH_DIGEST_SHA1, &b, digest, sizeof(digest)) != 0) |
EVP_DigestUpdate(&md, buffer_ptr(&b), buffer_len(&b)); |
fatal("%s: ssh_digest_buffer failed", __func__); |
EVP_DigestFinal(&md, digest, NULL); |
|
|
|
buffer_free(&b); |
buffer_free(&b); |
|
|
#ifdef DEBUG_KEX |
#ifdef DEBUG_KEX |
dump_digest("hash", digest, EVP_MD_size(evp_md)); |
dump_digest("hash", digest, ssh_digest_bytes(SSH_DIGEST_SHA1)); |
#endif |
#endif |
*hash = digest; |
*hash = digest; |
*hashlen = EVP_MD_size(evp_md); |
*hashlen = ssh_digest_bytes(SSH_DIGEST_SHA1); |
} |
} |