version 1.29, 2013/12/27 22:30:17 |
version 1.30, 2014/01/09 23:20:00 |
|
|
#include "compat.h" |
#include "compat.h" |
#include "log.h" |
#include "log.h" |
#include "key.h" |
#include "key.h" |
|
#include "digest.h" |
|
|
#define INTBLOB_LEN 20 |
#define INTBLOB_LEN 20 |
#define SIGBLOB_LEN (2*INTBLOB_LEN) |
#define SIGBLOB_LEN (2*INTBLOB_LEN) |
|
|
const u_char *data, u_int datalen) |
const u_char *data, u_int datalen) |
{ |
{ |
DSA_SIG *sig; |
DSA_SIG *sig; |
const EVP_MD *evp_md = EVP_sha1(); |
u_char digest[SSH_DIGEST_MAX_LENGTH], sigblob[SIGBLOB_LEN]; |
EVP_MD_CTX md; |
u_int rlen, slen, len, dlen = ssh_digest_bytes(SSH_DIGEST_SHA1); |
u_char digest[EVP_MAX_MD_SIZE], sigblob[SIGBLOB_LEN]; |
|
u_int rlen, slen, len, dlen; |
|
Buffer b; |
Buffer b; |
|
|
if (key == NULL || key_type_plain(key->type) != KEY_DSA || |
if (key == NULL || key_type_plain(key->type) != KEY_DSA || |
|
|
return -1; |
return -1; |
} |
} |
|
|
EVP_DigestInit(&md, evp_md); |
if (ssh_digest_memory(SSH_DIGEST_SHA1, data, datalen, |
EVP_DigestUpdate(&md, data, datalen); |
digest, sizeof(digest)) != 0) { |
EVP_DigestFinal(&md, digest, &dlen); |
error("%s: ssh_digest_memory failed", __func__); |
|
return -1; |
|
} |
|
|
sig = DSA_do_sign(digest, dlen, key->dsa); |
sig = DSA_do_sign(digest, dlen, key->dsa); |
memset(digest, 'd', sizeof(digest)); |
memset(digest, 'd', sizeof(digest)); |
|
|
const u_char *data, u_int datalen) |
const u_char *data, u_int datalen) |
{ |
{ |
DSA_SIG *sig; |
DSA_SIG *sig; |
const EVP_MD *evp_md = EVP_sha1(); |
u_char digest[SSH_DIGEST_MAX_LENGTH], *sigblob; |
EVP_MD_CTX md; |
u_int len, dlen = ssh_digest_bytes(SSH_DIGEST_SHA1); |
u_char digest[EVP_MAX_MD_SIZE], *sigblob; |
|
u_int len, dlen; |
|
int rlen, ret; |
int rlen, ret; |
Buffer b; |
Buffer b; |
|
|
|
|
free(sigblob); |
free(sigblob); |
|
|
/* sha1 the data */ |
/* sha1 the data */ |
EVP_DigestInit(&md, evp_md); |
if (ssh_digest_memory(SSH_DIGEST_SHA1, data, datalen, |
EVP_DigestUpdate(&md, data, datalen); |
digest, sizeof(digest)) != 0) { |
EVP_DigestFinal(&md, digest, &dlen); |
error("%s: digest_memory failed", __func__); |
|
return -1; |
|
} |
|
|
ret = DSA_do_verify(digest, dlen, sig, key->dsa); |
ret = DSA_do_verify(digest, dlen, sig, key->dsa); |
memset(digest, 'd', sizeof(digest)); |
memset(digest, 'd', sizeof(digest)); |