version 1.14, 2018/01/08 15:18:46 |
version 1.15, 2019/01/20 22:51:37 |
|
|
process_add(void) |
process_add(void) |
{ |
{ |
char *name, *pin; |
char *name, *pin; |
struct sshkey **keys; |
struct sshkey **keys = NULL; |
int r, i, nkeys; |
int r, i, nkeys; |
u_char *blob; |
u_char *blob; |
size_t blen; |
size_t blen; |
|
|
free(blob); |
free(blob); |
add_key(keys[i], name); |
add_key(keys[i], name); |
} |
} |
free(keys); |
|
} else { |
} else { |
if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0) |
if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0) |
fatal("%s: buffer error: %s", __func__, ssh_err(r)); |
fatal("%s: buffer error: %s", __func__, ssh_err(r)); |
|
if ((r = sshbuf_put_u32(msg, -nkeys)) != 0) |
|
fatal("%s: buffer error: %s", __func__, ssh_err(r)); |
} |
} |
|
free(keys); |
free(pin); |
free(pin); |
free(name); |
free(name); |
send_msg(msg); |
send_msg(msg); |
|
|
else { |
else { |
if ((found = lookup_key(key)) != NULL) { |
if ((found = lookup_key(key)) != NULL) { |
#ifdef WITH_OPENSSL |
#ifdef WITH_OPENSSL |
|
u_int xslen; |
int ret; |
int ret; |
|
|
slen = RSA_size(key->rsa); |
if (key->type == KEY_RSA) { |
signature = xmalloc(slen); |
slen = RSA_size(key->rsa); |
if ((ret = RSA_private_encrypt(dlen, data, signature, |
signature = xmalloc(slen); |
found->rsa, RSA_PKCS1_PADDING)) != -1) { |
ret = RSA_private_encrypt(dlen, data, signature, |
slen = ret; |
found->rsa, RSA_PKCS1_PADDING); |
ok = 0; |
if (ret != -1) { |
} |
slen = ret; |
|
ok = 0; |
|
} |
|
} else if (key->type == KEY_ECDSA) { |
|
xslen = ECDSA_size(key->ecdsa); |
|
signature = xmalloc(xslen); |
|
/* "The parameter type is ignored." */ |
|
ret = ECDSA_sign(-1, data, dlen, signature, |
|
&xslen, found->ecdsa); |
|
if (ret != 0) |
|
ok = 0; |
|
else |
|
error("%s: ECDSA_sign" |
|
" returns %d", __func__, ret); |
|
slen = xslen; |
|
} else |
|
error("%s: don't know how to sign with key " |
|
"type %d", __func__, (int)key->type); |
#endif /* WITH_OPENSSL */ |
#endif /* WITH_OPENSSL */ |
} |
} |
sshkey_free(key); |
sshkey_free(key); |