summaryrefslogtreecommitdiff
path: root/usr/src/lib/libkmf/plugins/kmf_openssl
diff options
context:
space:
mode:
authorwyllys <none@none>2007-12-07 07:06:20 -0800
committerwyllys <none@none>2007-12-07 07:06:20 -0800
commit73cc0e021f4115db3085cd78083c42c8be4559e3 (patch)
tree7648a15e2f5accfb53c0df88ba5df4b981e10b8f /usr/src/lib/libkmf/plugins/kmf_openssl
parent961238584cd954f50886f48af3948979875c7ed8 (diff)
downloadillumos-gate-73cc0e021f4115db3085cd78083c42c8be4559e3.tar.gz
6634339 kmf_find_key returns error when searching for raw (RSA) public key
Diffstat (limited to 'usr/src/lib/libkmf/plugins/kmf_openssl')
-rw-r--r--usr/src/lib/libkmf/plugins/kmf_openssl/common/openssl_spi.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/usr/src/lib/libkmf/plugins/kmf_openssl/common/openssl_spi.c b/usr/src/lib/libkmf/plugins/kmf_openssl/common/openssl_spi.c
index 1e7a166065..78f9af1665 100644
--- a/usr/src/lib/libkmf/plugins/kmf_openssl/common/openssl_spi.c
+++ b/usr/src/lib/libkmf/plugins/kmf_openssl/common/openssl_spi.c
@@ -1416,6 +1416,8 @@ ssl_write_key(KMF_HANDLE *kmfh, KMF_ENCODE_FORMAT format, BIO *out,
return (KMF_ERR_BAD_PARAMETER);
switch (format) {
+ case KMF_FORMAT_RAWKEY:
+ /* same as ASN.1 */
case KMF_FORMAT_ASN1:
if (pkey->type == EVP_PKEY_RSA) {
rsa = EVP_PKEY_get1_RSA(pkey);
@@ -2953,6 +2955,8 @@ OpenSSL_FindKey(KMF_HANDLE_T handle,
if (rv == KMF_OK && (*numkeys) == 0)
rv = KMF_ERR_KEY_NOT_FOUND;
+ else if (rv == KMF_ERR_KEY_NOT_FOUND && (*numkeys) > 0)
+ rv = KMF_OK;
return (rv);
}
@@ -5133,7 +5137,6 @@ OpenSSL_StoreKey(KMF_HANDLE_T handle, int numattr,
}
}
} else if (rawkey != NULL) {
- /* RAW keys are always private */
if (rawkey->keytype == KMF_RSA) {
pkey = ImportRawRSAKey(&rawkey->rawdata.rsa);
} else if (rawkey->keytype == KMF_DSA) {
@@ -5142,8 +5145,14 @@ OpenSSL_StoreKey(KMF_HANDLE_T handle, int numattr,
rv = KMF_ERR_BAD_PARAMETER;
}
if (pkey != NULL) {
+ KMF_KEY_CLASS kclass = KMF_ASYM_PRI;
+
+ rv = kmf_get_attr(KMF_KEYCLASS_ATTR, attrlist, numattr,
+ (void *)&kclass, NULL);
+ if (rv != KMF_OK)
+ rv = KMF_OK;
rv = ssl_write_key(kmfh, format, out,
- &cred, pkey, TRUE);
+ &cred, pkey, (kclass == KMF_ASYM_PRI));
EVP_PKEY_free(pkey);
}
}