version 1.115, 2019/11/18 16:10:05 |
version 1.116, 2019/11/25 00:51:37 |
|
|
|
|
int |
int |
mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen, |
mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen, |
const u_char *data, size_t datalen, const char *sigalg, u_int compat) |
const u_char *data, size_t datalen, const char *sigalg, u_int compat, |
|
struct sshkey_sig_details **sig_detailsp) |
{ |
{ |
struct sshbuf *m; |
struct sshbuf *m; |
u_int encoded_ret = 0; |
u_int encoded_ret = 0; |
int r; |
int r; |
|
u_char sig_details_present, flags; |
|
u_int counter; |
|
|
debug3("%s entering", __func__); |
debug3("%s entering", __func__); |
|
|
|
if (sig_detailsp != NULL) |
|
*sig_detailsp = NULL; |
if ((m = sshbuf_new()) == NULL) |
if ((m = sshbuf_new()) == NULL) |
fatal("%s: sshbuf_new failed", __func__); |
fatal("%s: sshbuf_new failed", __func__); |
if ((r = sshkey_puts(key, m)) != 0 || |
if ((r = sshkey_puts(key, m)) != 0 || |
|
|
mm_request_receive_expect(pmonitor->m_recvfd, |
mm_request_receive_expect(pmonitor->m_recvfd, |
MONITOR_ANS_KEYVERIFY, m); |
MONITOR_ANS_KEYVERIFY, m); |
|
|
if ((r = sshbuf_get_u32(m, &encoded_ret)) != 0) |
if ((r = sshbuf_get_u32(m, &encoded_ret)) != 0 || |
|
(r = sshbuf_get_u8(m, &sig_details_present)) != 0) |
fatal("%s: buffer error: %s", __func__, ssh_err(r)); |
fatal("%s: buffer error: %s", __func__, ssh_err(r)); |
|
if (sig_details_present && encoded_ret == 0) { |
|
if ((r = sshbuf_get_u32(m, &counter)) != 0 || |
|
(r = sshbuf_get_u8(m, &flags)) != 0) |
|
fatal("%s: buffer error: %s", __func__, ssh_err(r)); |
|
if (sig_detailsp != NULL) { |
|
*sig_detailsp = xcalloc(1, sizeof(**sig_detailsp)); |
|
(*sig_detailsp)->sk_counter = counter; |
|
(*sig_detailsp)->sk_flags = flags; |
|
} |
|
} |
|
|
sshbuf_free(m); |
sshbuf_free(m); |
|
|