version 1.1, 2019/11/12 19:29:24 |
version 1.2, 2019/11/12 19:34:40 |
|
|
const u_char *data, size_t datalen, u_int compat) |
const u_char *data, size_t datalen, u_int compat) |
{ |
{ |
struct sshbuf *b = NULL; |
struct sshbuf *b = NULL; |
struct sshbuf *sigbuf = NULL; |
|
struct sshbuf *encoded = NULL; |
struct sshbuf *encoded = NULL; |
char *ktype = NULL; |
char *ktype = NULL; |
const u_char *sigblob; |
const u_char *sigblob; |
|
|
if ((b = sshbuf_from(signature, signaturelen)) == NULL) |
if ((b = sshbuf_from(signature, signaturelen)) == NULL) |
return SSH_ERR_ALLOC_FAIL; |
return SSH_ERR_ALLOC_FAIL; |
if (sshbuf_get_cstring(b, &ktype, NULL) != 0 || |
if (sshbuf_get_cstring(b, &ktype, NULL) != 0 || |
sshbuf_froms(b, &sigbuf) != 0 || |
sshbuf_get_string_direct(b, &sigblob, &len) != 0 || |
sshbuf_get_string_direct(sigbuf, &sigblob, &len) != 0 || |
sshbuf_get_u8(b, &sig_flags) != 0 || |
sshbuf_get_u8(sigbuf, &sig_flags) != 0 || |
sshbuf_get_u32(b, &sig_counter) != 0) { |
sshbuf_get_u32(sigbuf, &sig_counter) != 0) { |
|
r = SSH_ERR_INVALID_FORMAT; |
r = SSH_ERR_INVALID_FORMAT; |
goto out; |
goto out; |
} |
} |
|
|
free(m); |
free(m); |
} |
} |
sshbuf_free(b); |
sshbuf_free(b); |
sshbuf_free(sigbuf); |
|
sshbuf_free(encoded); |
sshbuf_free(encoded); |
free(ktype); |
free(ktype); |
return r; |
return r; |