wincng.c: only try to load keys corresponding to the algorithm
This commit is contained in:
parent
0c90b8bd9b
commit
a8d14c5dcf
44
src/wincng.c
44
src/wincng.c
@ -518,17 +518,20 @@ _libssh2_wincng_load_private(LIBSSH2_SESSION *session,
|
|||||||
const char *filename,
|
const char *filename,
|
||||||
const char *passphrase,
|
const char *passphrase,
|
||||||
unsigned char **ppbEncoded,
|
unsigned char **ppbEncoded,
|
||||||
unsigned long *pcbEncoded)
|
unsigned long *pcbEncoded,
|
||||||
|
bool tryLoadRSA, bool tryLoadDSA)
|
||||||
{
|
{
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
unsigned int datalen;
|
unsigned int datalen;
|
||||||
int ret;
|
int ret = -1;
|
||||||
|
|
||||||
ret = _libssh2_wincng_load_pem(session, filename, passphrase,
|
if (ret && tryLoadRSA) {
|
||||||
PEM_RSA_HEADER, PEM_RSA_FOOTER,
|
ret = _libssh2_wincng_load_pem(session, filename, passphrase,
|
||||||
&data, &datalen);
|
PEM_RSA_HEADER, PEM_RSA_FOOTER,
|
||||||
|
&data, &datalen);
|
||||||
|
}
|
||||||
|
|
||||||
if (ret) {
|
if (ret && tryLoadDSA) {
|
||||||
ret = _libssh2_wincng_load_pem(session, filename, passphrase,
|
ret = _libssh2_wincng_load_pem(session, filename, passphrase,
|
||||||
PEM_DSA_HEADER, PEM_DSA_FOOTER,
|
PEM_DSA_HEADER, PEM_DSA_FOOTER,
|
||||||
&data, &datalen);
|
&data, &datalen);
|
||||||
@ -548,20 +551,23 @@ _libssh2_wincng_load_private_memory(LIBSSH2_SESSION *session,
|
|||||||
size_t privatekeydata_len,
|
size_t privatekeydata_len,
|
||||||
const char *passphrase,
|
const char *passphrase,
|
||||||
unsigned char **ppbEncoded,
|
unsigned char **ppbEncoded,
|
||||||
unsigned long *pcbEncoded)
|
unsigned long *pcbEncoded,
|
||||||
|
bool tryLoadRSA, bool tryLoadDSA)
|
||||||
{
|
{
|
||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
unsigned int datalen;
|
unsigned int datalen;
|
||||||
int ret;
|
int ret = -1;
|
||||||
|
|
||||||
(void)passphrase;
|
(void)passphrase;
|
||||||
|
|
||||||
ret = _libssh2_pem_parse_memory(session,
|
if (ret && tryLoadRSA) {
|
||||||
PEM_RSA_HEADER, PEM_RSA_FOOTER,
|
ret = _libssh2_pem_parse_memory(session,
|
||||||
privatekeydata, privatekeydata_len,
|
PEM_RSA_HEADER, PEM_RSA_FOOTER,
|
||||||
&data, &datalen);
|
privatekeydata, privatekeydata_len,
|
||||||
|
&data, &datalen);
|
||||||
|
}
|
||||||
|
|
||||||
if (ret) {
|
if (ret && tryLoadDSA) {
|
||||||
ret = _libssh2_pem_parse_memory(session,
|
ret = _libssh2_pem_parse_memory(session,
|
||||||
PEM_DSA_HEADER, PEM_DSA_FOOTER,
|
PEM_DSA_HEADER, PEM_DSA_FOOTER,
|
||||||
privatekeydata, privatekeydata_len,
|
privatekeydata, privatekeydata_len,
|
||||||
@ -966,7 +972,7 @@ _libssh2_wincng_rsa_new_private(libssh2_rsa_ctx **rsa,
|
|||||||
|
|
||||||
ret = _libssh2_wincng_load_private(session, filename,
|
ret = _libssh2_wincng_load_private(session, filename,
|
||||||
(const char *)passphrase,
|
(const char *)passphrase,
|
||||||
&pbEncoded, &cbEncoded);
|
&pbEncoded, &cbEncoded, 1, 0);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1000,7 +1006,7 @@ _libssh2_wincng_rsa_new_private_frommemory(libssh2_rsa_ctx **rsa,
|
|||||||
|
|
||||||
ret = _libssh2_wincng_load_private_memory(session, filedata, filedata_len,
|
ret = _libssh2_wincng_load_private_memory(session, filedata, filedata_len,
|
||||||
(const char *)passphrase,
|
(const char *)passphrase,
|
||||||
&pbEncoded, &cbEncoded);
|
&pbEncoded, &cbEncoded, 1, 0);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1264,7 +1270,7 @@ _libssh2_wincng_dsa_new_private(libssh2_dsa_ctx **dsa,
|
|||||||
|
|
||||||
ret = _libssh2_wincng_load_private(session, filename,
|
ret = _libssh2_wincng_load_private(session, filename,
|
||||||
(const char *)passphrase,
|
(const char *)passphrase,
|
||||||
&pbEncoded, &cbEncoded);
|
&pbEncoded, &cbEncoded, 0, 1);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1296,7 +1302,7 @@ _libssh2_wincng_dsa_new_private_frommemory(libssh2_dsa_ctx **dsa,
|
|||||||
|
|
||||||
ret = _libssh2_wincng_load_private_memory(session, filedata, filedata_len,
|
ret = _libssh2_wincng_load_private_memory(session, filedata, filedata_len,
|
||||||
(const char *)passphrase,
|
(const char *)passphrase,
|
||||||
&pbEncoded, &cbEncoded);
|
&pbEncoded, &cbEncoded, 0, 1);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1538,7 +1544,7 @@ _libssh2_wincng_pub_priv_keyfile(LIBSSH2_SESSION *session,
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = _libssh2_wincng_load_private(session, privatekey, passphrase,
|
ret = _libssh2_wincng_load_private(session, privatekey, passphrase,
|
||||||
&pbEncoded, &cbEncoded);
|
&pbEncoded, &cbEncoded, 1, 1);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1577,7 +1583,7 @@ _libssh2_wincng_pub_priv_keyfilememory(LIBSSH2_SESSION *session,
|
|||||||
|
|
||||||
ret = _libssh2_wincng_load_private_memory(session, privatekeydata,
|
ret = _libssh2_wincng_load_private_memory(session, privatekeydata,
|
||||||
privatekeydata_len, passphrase,
|
privatekeydata_len, passphrase,
|
||||||
&pbEncoded, &cbEncoded);
|
&pbEncoded, &cbEncoded, 1, 1);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user