/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef _PKCS11URI_H_ #define _PKCS11URI_H_ 1 #include "seccomon.h" /* Path attributes defined in RFC7512. */ #define PK11URI_PATTR_TOKEN "token" #define PK11URI_PATTR_MANUFACTURER "manufacturer" #define PK11URI_PATTR_SERIAL "serial" #define PK11URI_PATTR_MODEL "model" #define PK11URI_PATTR_LIBRARY_MANUFACTURER "library-manufacturer" #define PK11URI_PATTR_LIBRARY_DESCRIPTION "library-description" #define PK11URI_PATTR_LIBRARY_VERSION "library-version" #define PK11URI_PATTR_OBJECT "object" #define PK11URI_PATTR_TYPE "type" #define PK11URI_PATTR_ID "id" #define PK11URI_PATTR_SLOT_MANUFACTURER "slot-manufacturer" #define PK11URI_PATTR_SLOT_DESCRIPTION "slot-description" #define PK11URI_PATTR_SLOT_ID "slot-id" /* Query attributes defined in RFC7512. */ #define PK11URI_QATTR_PIN_SOURCE "pin-source" #define PK11URI_QATTR_PIN_VALUE "pin-value" #define PK11URI_QATTR_MODULE_NAME "module-name" #define PK11URI_QATTR_MODULE_PATH "module-path" SEC_BEGIN_PROTOS /* A PK11URI object is an immutable structure that holds path and * query attributes of a PKCS#11 URI. */ struct PK11URIStr; typedef struct PK11URIStr PK11URI; struct PK11URIAttributeStr { const char *name; const char *value; }; typedef struct PK11URIAttributeStr PK11URIAttribute; /* Create a new PK11URI object from a set of attributes. */ extern PK11URI *PK11URI_CreateURI(const PK11URIAttribute *pattrs, size_t num_pattrs, const PK11URIAttribute *qattrs, size_t num_qattrs); /* Parse PKCS#11 URI and return a new PK11URI object. */ extern PK11URI *PK11URI_ParseURI(const char *string); /* Format a PK11URI object to a string. */ extern char *PK11URI_FormatURI(PLArenaPool *arena, PK11URI *uri); /* Destroy a PK11URI object. */ extern void PK11URI_DestroyURI(PK11URI *uri); /* Retrieve a path attribute with the given name. This function can be used only * when we can assume that the attribute value is a string (such as "label" or * "type"). If it can be a binary blob (such as "id"), use * PK11URI_GetPathAttributeItem. */ extern const char *PK11URI_GetPathAttribute(PK11URI *uri, const char *name); /* Retrieve a query attribute with the given name. This function can be used * only when we can assume that the attribute value is a string (such as * "module-name"). If it can be a binary blob, use * PK11URI_GetQueryAttributeItem.*/ extern const char *PK11URI_GetQueryAttribute(PK11URI *uri, const char *name); /* Retrieve a path attribute with the given name as a SECItem. */ extern const SECItem *PK11URI_GetPathAttributeItem(PK11URI *uri, const char *name); /* Retrieve a query attribute with the given name as a SECItem. */ extern const SECItem *PK11URI_GetQueryAttributeItem(PK11URI *uri, const char *name); SEC_END_PROTOS #endif /* _PKCS11URI_H_ */