version 1.64, 2017/12/18 23:14:34 |
version 1.65, 2018/02/07 05:17:56 |
|
|
const u_char *data, size_t datalen, const char *alg_ident) |
const u_char *data, size_t datalen, const char *alg_ident) |
{ |
{ |
u_char digest[SSH_DIGEST_MAX_LENGTH], *sig = NULL; |
u_char digest[SSH_DIGEST_MAX_LENGTH], *sig = NULL; |
size_t slen; |
size_t slen = 0; |
u_int dlen, len; |
u_int dlen, len; |
int nid, hash_alg, ret = SSH_ERR_INTERNAL_ERROR; |
int nid, hash_alg, ret = SSH_ERR_INTERNAL_ERROR; |
struct sshbuf *b = NULL; |
struct sshbuf *b = NULL; |
|
|
ret = 0; |
ret = 0; |
out: |
out: |
explicit_bzero(digest, sizeof(digest)); |
explicit_bzero(digest, sizeof(digest)); |
if (sig != NULL) { |
freezero(sig, slen); |
explicit_bzero(sig, slen); |
|
free(sig); |
|
} |
|
sshbuf_free(b); |
sshbuf_free(b); |
return ret; |
return ret; |
} |
} |
|
|
{ |
{ |
char *sigtype = NULL; |
char *sigtype = NULL; |
int hash_alg, ret = SSH_ERR_INTERNAL_ERROR; |
int hash_alg, ret = SSH_ERR_INTERNAL_ERROR; |
size_t len, diff, modlen, dlen; |
size_t len = 0, diff, modlen, dlen; |
struct sshbuf *b = NULL; |
struct sshbuf *b = NULL; |
u_char digest[SSH_DIGEST_MAX_LENGTH], *osigblob, *sigblob = NULL; |
u_char digest[SSH_DIGEST_MAX_LENGTH], *osigblob, *sigblob = NULL; |
|
|
|
|
ret = openssh_RSA_verify(hash_alg, digest, dlen, sigblob, len, |
ret = openssh_RSA_verify(hash_alg, digest, dlen, sigblob, len, |
key->rsa); |
key->rsa); |
out: |
out: |
if (sigblob != NULL) { |
freezero(sigblob, len); |
explicit_bzero(sigblob, len); |
|
free(sigblob); |
|
} |
|
free(sigtype); |
free(sigtype); |
sshbuf_free(b); |
sshbuf_free(b); |
explicit_bzero(digest, sizeof(digest)); |
explicit_bzero(digest, sizeof(digest)); |
|
|
} |
} |
ret = 0; |
ret = 0; |
done: |
done: |
if (decrypted) { |
freezero(decrypted, rsasize); |
explicit_bzero(decrypted, rsasize); |
|
free(decrypted); |
|
} |
|
return ret; |
return ret; |
} |
} |