pkcs11: Change how unavailable attributes like CKA_TRUSTED are handled
authorTobias Brunner <tobias@strongswan.org>
Thu, 20 May 2021 14:52:49 +0000 (16:52 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 14 Jun 2021 11:58:48 +0000 (13:58 +0200)
commit6537be9c8d56ba3f3855822c2f1b833f01a1bd25
treebcb8836b2318f36b9f3dc066fd6d91aee89acac1
parenta90716cd4d5bd6e580ef3a671ac37378c6c3acca
pkcs11: Change how unavailable attributes like CKA_TRUSTED are handled

If a PKCS#11 library/token doesn't provide one or more attributes via
C_GetAttributeValue(), we get back CKR_ATTRIBUTE_TYPE_INVALID (similar
for protected attributes where CKR_ATTRIBUTE_SENSITIVE is returned).
This is not an error as the spec demands that all attributes have been
processed with the unavailable attributes having set their length
field to CK_UNAVAILABLE_INFORMATION.

We use this to handle the CKA_TRUSTED attribute, which some tokens
apparently don't support.  We previously used a version check to remove
the attribute from the call but even the latest spec doesn't make the
attribute mandatory (it's just in a list of "common" attributes for
CKO_CERTIFICATE objects, without a default value), so there are current
tokens that don't support it and prevent us from enumerating certificates.
src/libstrongswan/plugins/pkcs11/pkcs11_creds.c
src/libstrongswan/plugins/pkcs11/pkcs11_library.c
src/libstrongswan/plugins/pkcs11/pkcs11_library.h
src/libstrongswan/plugins/pkcs11/pkcs11_manager.c
src/libstrongswan/plugins/pkcs11/pkcs11_private_key.c
src/libstrongswan/plugins/pkcs11/pkcs11_public_key.c