From 41a22174dc485fae14f7929d78e6a57b2d76544e Mon Sep 17 00:00:00 2001 From: okir Date: Thu, 17 Apr 2003 14:38:00 +0000 Subject: [PATCH] - bugfix for unwrap - support getattr(CKA_VALUE) for public key objects git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@1045 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/pkcs11/framework-pkcs15.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/pkcs11/framework-pkcs15.c b/src/pkcs11/framework-pkcs15.c index 3d4b81f9..eee51d73 100644 --- a/src/pkcs11/framework-pkcs15.c +++ b/src/pkcs11/framework-pkcs15.c @@ -1440,6 +1440,7 @@ pkcs15_prkey_unwrap(struct sc_pkcs11_session *ses, void *obj, debug(context, "Initiating key unwrap.\n"); /* See which of the alternative keys supports unwrap */ + prkey = (struct pkcs15_prkey_object *) obj; while (prkey && !(prkey->prv_info->usage & (SC_PKCS15_PRKEY_USAGE_DECRYPT|SC_PKCS15_PRKEY_USAGE_UNWRAP))) @@ -1452,7 +1453,6 @@ pkcs15_prkey_unwrap(struct sc_pkcs11_session *ses, void *obj, if (pMechanism->mechanism != CKM_RSA_PKCS) return CKR_MECHANISM_INVALID; - prkey = (struct pkcs15_prkey_object *) obj; rv = sc_pkcs15_decipher(fw_data->p15_card, prkey->prv_p15obj, SC_ALGORITHM_RSA_PAD_PKCS1, pData, ulDataLen, @@ -1572,6 +1572,16 @@ CK_RV pkcs15_pubkey_get_attribute(struct sc_pkcs11_session *session, return get_modulus_bits(pubkey->pub_data, attr); case CKA_PUBLIC_EXPONENT: return get_public_exponent(pubkey->pub_data, attr); + case CKA_VALUE: + if (pubkey->pub_data) { + check_attribute_buffer(attr, pubkey->pub_data->data.len); + memcpy(attr->pValue, pubkey->pub_data->data.value, + pubkey->pub_data->data.len); + } else if (cert && cert->cert_data) { + check_attribute_buffer(attr, cert->cert_data->data_len); + memcpy(attr->pValue, cert->cert_data->data, cert->cert_data->data_len); + } + break; default: return CKR_ATTRIBUTE_TYPE_INVALID; }