version 1.12, 2022/10/28 00:41:52 |
version 1.13, 2022/10/28 00:43:08 |
|
|
return 0; |
return 0; |
} |
} |
|
|
int |
static int |
ssh_ed25519_sk_verify(const struct sshkey *key, |
ssh_ed25519_sk_verify(const struct sshkey *key, |
const u_char *signature, size_t signaturelen, |
const u_char *sig, size_t siglen, |
const u_char *data, size_t datalen, u_int compat, |
const u_char *data, size_t dlen, const char *alg, u_int compat, |
struct sshkey_sig_details **detailsp) |
struct sshkey_sig_details **detailsp) |
{ |
{ |
struct sshbuf *b = NULL; |
struct sshbuf *b = NULL; |
|
|
if (key == NULL || |
if (key == NULL || |
sshkey_type_plain(key->type) != KEY_ED25519_SK || |
sshkey_type_plain(key->type) != KEY_ED25519_SK || |
key->ed25519_pk == NULL || |
key->ed25519_pk == NULL || |
signature == NULL || signaturelen == 0) |
sig == NULL || siglen == 0) |
return SSH_ERR_INVALID_ARGUMENT; |
return SSH_ERR_INVALID_ARGUMENT; |
|
|
if ((b = sshbuf_from(signature, signaturelen)) == NULL) |
if ((b = sshbuf_from(sig, siglen)) == 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_get_string_direct(b, &sigblob, &len) != 0 || |
sshbuf_get_string_direct(b, &sigblob, &len) != 0 || |
|
|
} |
} |
if (ssh_digest_memory(SSH_DIGEST_SHA256, key->sk_application, |
if (ssh_digest_memory(SSH_DIGEST_SHA256, key->sk_application, |
strlen(key->sk_application), apphash, sizeof(apphash)) != 0 || |
strlen(key->sk_application), apphash, sizeof(apphash)) != 0 || |
ssh_digest_memory(SSH_DIGEST_SHA256, data, datalen, |
ssh_digest_memory(SSH_DIGEST_SHA256, data, dlen, |
msghash, sizeof(msghash)) != 0) { |
msghash, sizeof(msghash)) != 0) { |
r = SSH_ERR_INVALID_ARGUMENT; |
r = SSH_ERR_INVALID_ARGUMENT; |
goto out; |
goto out; |
|
|
/* .ssh_deserialize_public = */ ssh_ed25519_sk_deserialize_public, |
/* .ssh_deserialize_public = */ ssh_ed25519_sk_deserialize_public, |
/* .generate = */ NULL, |
/* .generate = */ NULL, |
/* .copy_public = */ ssh_ed25519_sk_copy_public, |
/* .copy_public = */ ssh_ed25519_sk_copy_public, |
|
/* .sign = */ NULL, |
|
/* .verify = */ ssh_ed25519_sk_verify, |
}; |
}; |
|
|
const struct sshkey_impl sshkey_ed25519_sk_impl = { |
const struct sshkey_impl sshkey_ed25519_sk_impl = { |