| Index: nss/lib/dev/ckhelper.c
|
| diff --git a/nss/lib/dev/ckhelper.c b/nss/lib/dev/ckhelper.c
|
| index 0ca56547d1a373c0b29c091b57d230c1620e3d28..4f39726531095b243ff0d2938de5a86849d69796 100644
|
| --- a/nss/lib/dev/ckhelper.c
|
| +++ b/nss/lib/dev/ckhelper.c
|
| @@ -16,51 +16,49 @@ extern const NSSError NSS_ERROR_DEVICE_ERROR;
|
|
|
| static const CK_BBOOL s_true = CK_TRUE;
|
| NSS_IMPLEMENT_DATA const NSSItem
|
| -g_ck_true = { (CK_VOID_PTR)&s_true, sizeof(s_true) };
|
| + g_ck_true = { (CK_VOID_PTR)&s_true, sizeof(s_true) };
|
|
|
| static const CK_BBOOL s_false = CK_FALSE;
|
| NSS_IMPLEMENT_DATA const NSSItem
|
| -g_ck_false = { (CK_VOID_PTR)&s_false, sizeof(s_false) };
|
| + g_ck_false = { (CK_VOID_PTR)&s_false, sizeof(s_false) };
|
|
|
| static const CK_OBJECT_CLASS s_class_cert = CKO_CERTIFICATE;
|
| NSS_IMPLEMENT_DATA const NSSItem
|
| -g_ck_class_cert = { (CK_VOID_PTR)&s_class_cert, sizeof(s_class_cert) };
|
| + g_ck_class_cert = { (CK_VOID_PTR)&s_class_cert, sizeof(s_class_cert) };
|
|
|
| static const CK_OBJECT_CLASS s_class_pubkey = CKO_PUBLIC_KEY;
|
| NSS_IMPLEMENT_DATA const NSSItem
|
| -g_ck_class_pubkey = { (CK_VOID_PTR)&s_class_pubkey, sizeof(s_class_pubkey) };
|
| + g_ck_class_pubkey = { (CK_VOID_PTR)&s_class_pubkey, sizeof(s_class_pubkey) };
|
|
|
| static const CK_OBJECT_CLASS s_class_privkey = CKO_PRIVATE_KEY;
|
| NSS_IMPLEMENT_DATA const NSSItem
|
| -g_ck_class_privkey = { (CK_VOID_PTR)&s_class_privkey, sizeof(s_class_privkey) };
|
| + g_ck_class_privkey = { (CK_VOID_PTR)&s_class_privkey, sizeof(s_class_privkey) };
|
|
|
| static PRBool
|
| -is_string_attribute (
|
| - CK_ATTRIBUTE_TYPE aType
|
| -)
|
| +is_string_attribute(
|
| + CK_ATTRIBUTE_TYPE aType)
|
| {
|
| PRBool isString;
|
| switch (aType) {
|
| - case CKA_LABEL:
|
| - case CKA_NSS_EMAIL:
|
| - isString = PR_TRUE;
|
| - break;
|
| - default:
|
| - isString = PR_FALSE;
|
| - break;
|
| + case CKA_LABEL:
|
| + case CKA_NSS_EMAIL:
|
| + isString = PR_TRUE;
|
| + break;
|
| + default:
|
| + isString = PR_FALSE;
|
| + break;
|
| }
|
| return isString;
|
| }
|
|
|
| -NSS_IMPLEMENT PRStatus
|
| -nssCKObject_GetAttributes (
|
| - CK_OBJECT_HANDLE object,
|
| - CK_ATTRIBUTE_PTR obj_template,
|
| - CK_ULONG count,
|
| - NSSArena *arenaOpt,
|
| - nssSession *session,
|
| - NSSSlot *slot
|
| -)
|
| +NSS_IMPLEMENT PRStatus
|
| +nssCKObject_GetAttributes(
|
| + CK_OBJECT_HANDLE object,
|
| + CK_ATTRIBUTE_PTR obj_template,
|
| + CK_ULONG count,
|
| + NSSArena *arenaOpt,
|
| + nssSession *session,
|
| + NSSSlot *slot)
|
| {
|
| nssArenaMark *mark = NULL;
|
| CK_SESSION_HANDLE hSession;
|
| @@ -69,114 +67,111 @@ nssCKObject_GetAttributes (
|
| PRStatus nssrv;
|
| PRBool alloced = PR_FALSE;
|
| void *epv = nssSlot_GetCryptokiEPV(slot);
|
| - hSession = session->handle;
|
| + hSession = session->handle;
|
| if (arenaOpt) {
|
| - mark = nssArena_Mark(arenaOpt);
|
| - if (!mark) {
|
| - goto loser;
|
| - }
|
| + mark = nssArena_Mark(arenaOpt);
|
| + if (!mark) {
|
| + goto loser;
|
| + }
|
| }
|
| nssSession_EnterMonitor(session);
|
| /* XXX kinda hacky, if the storage size is already in the first template
|
| * item, then skip the alloc portion
|
| */
|
| if (obj_template[0].ulValueLen == 0) {
|
| - /* Get the storage size needed for each attribute */
|
| - ckrv = CKAPI(epv)->C_GetAttributeValue(hSession,
|
| - object, obj_template, count);
|
| - if (ckrv != CKR_OK &&
|
| - ckrv != CKR_ATTRIBUTE_TYPE_INVALID &&
|
| - ckrv != CKR_ATTRIBUTE_SENSITIVE)
|
| - {
|
| - nssSession_ExitMonitor(session);
|
| - nss_SetError(NSS_ERROR_DEVICE_ERROR);
|
| - goto loser;
|
| - }
|
| - /* Allocate memory for each attribute. */
|
| - for (i=0; i<count; i++) {
|
| - CK_ULONG ulValueLen = obj_template[i].ulValueLen;
|
| - if (ulValueLen == 0 || ulValueLen == (CK_ULONG) -1) {
|
| - obj_template[i].pValue = NULL;
|
| - obj_template[i].ulValueLen = 0;
|
| - continue;
|
| - }
|
| - if (is_string_attribute(obj_template[i].type)) {
|
| - ulValueLen++;
|
| - }
|
| - obj_template[i].pValue = nss_ZAlloc(arenaOpt, ulValueLen);
|
| - if (!obj_template[i].pValue) {
|
| - nssSession_ExitMonitor(session);
|
| - goto loser;
|
| - }
|
| - }
|
| - alloced = PR_TRUE;
|
| + /* Get the storage size needed for each attribute */
|
| + ckrv = CKAPI(epv)->C_GetAttributeValue(hSession,
|
| + object, obj_template, count);
|
| + if (ckrv != CKR_OK &&
|
| + ckrv != CKR_ATTRIBUTE_TYPE_INVALID &&
|
| + ckrv != CKR_ATTRIBUTE_SENSITIVE) {
|
| + nssSession_ExitMonitor(session);
|
| + nss_SetError(NSS_ERROR_DEVICE_ERROR);
|
| + goto loser;
|
| + }
|
| + /* Allocate memory for each attribute. */
|
| + for (i = 0; i < count; i++) {
|
| + CK_ULONG ulValueLen = obj_template[i].ulValueLen;
|
| + if (ulValueLen == 0 || ulValueLen == (CK_ULONG)-1) {
|
| + obj_template[i].pValue = NULL;
|
| + obj_template[i].ulValueLen = 0;
|
| + continue;
|
| + }
|
| + if (is_string_attribute(obj_template[i].type)) {
|
| + ulValueLen++;
|
| + }
|
| + obj_template[i].pValue = nss_ZAlloc(arenaOpt, ulValueLen);
|
| + if (!obj_template[i].pValue) {
|
| + nssSession_ExitMonitor(session);
|
| + goto loser;
|
| + }
|
| + }
|
| + alloced = PR_TRUE;
|
| }
|
| /* Obtain the actual attribute values. */
|
| ckrv = CKAPI(epv)->C_GetAttributeValue(hSession,
|
| object, obj_template, count);
|
| nssSession_ExitMonitor(session);
|
| - if (ckrv != CKR_OK &&
|
| + if (ckrv != CKR_OK &&
|
| ckrv != CKR_ATTRIBUTE_TYPE_INVALID &&
|
| - ckrv != CKR_ATTRIBUTE_SENSITIVE)
|
| - {
|
| - nss_SetError(NSS_ERROR_DEVICE_ERROR);
|
| - goto loser;
|
| + ckrv != CKR_ATTRIBUTE_SENSITIVE) {
|
| + nss_SetError(NSS_ERROR_DEVICE_ERROR);
|
| + goto loser;
|
| }
|
| if (alloced && arenaOpt) {
|
| - nssrv = nssArena_Unmark(arenaOpt, mark);
|
| - if (nssrv != PR_SUCCESS) {
|
| - goto loser;
|
| - }
|
| - }
|
| -
|
| - if (count > 1 && ((ckrv == CKR_ATTRIBUTE_TYPE_INVALID) ||
|
| - (ckrv == CKR_ATTRIBUTE_SENSITIVE))) {
|
| - /* old tokens would keep the length of '0' and not deal with any
|
| - * of the attributes we passed. For those tokens read them one at
|
| - * a time */
|
| - for (i=0; i < count; i++) {
|
| - if ((obj_template[i].ulValueLen == 0)
|
| - || (obj_template[i].ulValueLen == -1)) {
|
| - obj_template[i].ulValueLen=0;
|
| - (void) nssCKObject_GetAttributes(object,&obj_template[i], 1,
|
| - arenaOpt, session, slot);
|
| - }
|
| - }
|
| + nssrv = nssArena_Unmark(arenaOpt, mark);
|
| + if (nssrv != PR_SUCCESS) {
|
| + goto loser;
|
| + }
|
| + }
|
| +
|
| + if (count > 1 && ((ckrv == CKR_ATTRIBUTE_TYPE_INVALID) ||
|
| + (ckrv == CKR_ATTRIBUTE_SENSITIVE))) {
|
| + /* old tokens would keep the length of '0' and not deal with any
|
| + * of the attributes we passed. For those tokens read them one at
|
| + * a time */
|
| + for (i = 0; i < count; i++) {
|
| + if ((obj_template[i].ulValueLen == 0) ||
|
| + (obj_template[i].ulValueLen == -1)) {
|
| + obj_template[i].ulValueLen = 0;
|
| + (void)nssCKObject_GetAttributes(object, &obj_template[i], 1,
|
| + arenaOpt, session, slot);
|
| + }
|
| + }
|
| }
|
| return PR_SUCCESS;
|
| loser:
|
| if (alloced) {
|
| - if (arenaOpt) {
|
| - /* release all arena memory allocated before the failure. */
|
| - (void)nssArena_Release(arenaOpt, mark);
|
| - } else {
|
| - CK_ULONG j;
|
| - /* free each heap object that was allocated before the failure. */
|
| - for (j=0; j<i; j++) {
|
| - nss_ZFreeIf(obj_template[j].pValue);
|
| - }
|
| - }
|
| + if (arenaOpt) {
|
| + /* release all arena memory allocated before the failure. */
|
| + (void)nssArena_Release(arenaOpt, mark);
|
| + } else {
|
| + CK_ULONG j;
|
| + /* free each heap object that was allocated before the failure. */
|
| + for (j = 0; j < i; j++) {
|
| + nss_ZFreeIf(obj_template[j].pValue);
|
| + }
|
| + }
|
| }
|
| return PR_FAILURE;
|
| }
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssCKObject_GetAttributeItem (
|
| - CK_OBJECT_HANDLE object,
|
| - CK_ATTRIBUTE_TYPE attribute,
|
| - NSSArena *arenaOpt,
|
| - nssSession *session,
|
| - NSSSlot *slot,
|
| - NSSItem *rvItem
|
| -)
|
| +nssCKObject_GetAttributeItem(
|
| + CK_OBJECT_HANDLE object,
|
| + CK_ATTRIBUTE_TYPE attribute,
|
| + NSSArena *arenaOpt,
|
| + nssSession *session,
|
| + NSSSlot *slot,
|
| + NSSItem *rvItem)
|
| {
|
| CK_ATTRIBUTE attr = { 0, NULL, 0 };
|
| PRStatus nssrv;
|
| attr.type = attribute;
|
| - nssrv = nssCKObject_GetAttributes(object, &attr, 1,
|
| + nssrv = nssCKObject_GetAttributes(object, &attr, 1,
|
| arenaOpt, session, slot);
|
| if (nssrv != PR_SUCCESS) {
|
| - return nssrv;
|
| + return nssrv;
|
| }
|
| rvItem->data = (void *)attr.pValue;
|
| rvItem->size = (PRUint32)attr.ulValueLen;
|
| @@ -184,13 +179,12 @@ nssCKObject_GetAttributeItem (
|
| }
|
|
|
| NSS_IMPLEMENT PRBool
|
| -nssCKObject_IsAttributeTrue (
|
| - CK_OBJECT_HANDLE object,
|
| - CK_ATTRIBUTE_TYPE attribute,
|
| - nssSession *session,
|
| - NSSSlot *slot,
|
| - PRStatus *rvStatus
|
| -)
|
| +nssCKObject_IsAttributeTrue(
|
| + CK_OBJECT_HANDLE object,
|
| + CK_ATTRIBUTE_TYPE attribute,
|
| + nssSession *session,
|
| + NSSSlot *slot,
|
| + PRStatus *rvStatus)
|
| {
|
| CK_BBOOL bool;
|
| CK_ATTRIBUTE_PTR attr;
|
| @@ -200,50 +194,48 @@ nssCKObject_IsAttributeTrue (
|
| attr = &atemplate;
|
| NSS_CK_SET_ATTRIBUTE_VAR(attr, attribute, bool);
|
| nssSession_EnterMonitor(session);
|
| - ckrv = CKAPI(epv)->C_GetAttributeValue(session->handle, object,
|
| + ckrv = CKAPI(epv)->C_GetAttributeValue(session->handle, object,
|
| &atemplate, 1);
|
| nssSession_ExitMonitor(session);
|
| if (ckrv != CKR_OK) {
|
| - *rvStatus = PR_FAILURE;
|
| - return PR_FALSE;
|
| + *rvStatus = PR_FAILURE;
|
| + return PR_FALSE;
|
| }
|
| *rvStatus = PR_SUCCESS;
|
| return (PRBool)(bool == CK_TRUE);
|
| }
|
|
|
| -NSS_IMPLEMENT PRStatus
|
| -nssCKObject_SetAttributes (
|
| - CK_OBJECT_HANDLE object,
|
| - CK_ATTRIBUTE_PTR obj_template,
|
| - CK_ULONG count,
|
| - nssSession *session,
|
| - NSSSlot *slot
|
| -)
|
| +NSS_IMPLEMENT PRStatus
|
| +nssCKObject_SetAttributes(
|
| + CK_OBJECT_HANDLE object,
|
| + CK_ATTRIBUTE_PTR obj_template,
|
| + CK_ULONG count,
|
| + nssSession *session,
|
| + NSSSlot *slot)
|
| {
|
| CK_RV ckrv;
|
| void *epv = nssSlot_GetCryptokiEPV(slot);
|
| nssSession_EnterMonitor(session);
|
| - ckrv = CKAPI(epv)->C_SetAttributeValue(session->handle, object,
|
| + ckrv = CKAPI(epv)->C_SetAttributeValue(session->handle, object,
|
| obj_template, count);
|
| nssSession_ExitMonitor(session);
|
| if (ckrv == CKR_OK) {
|
| - return PR_SUCCESS;
|
| + return PR_SUCCESS;
|
| } else {
|
| - return PR_FAILURE;
|
| + return PR_FAILURE;
|
| }
|
| }
|
|
|
| NSS_IMPLEMENT PRBool
|
| -nssCKObject_IsTokenObjectTemplate (
|
| - CK_ATTRIBUTE_PTR objectTemplate,
|
| - CK_ULONG otsize
|
| -)
|
| +nssCKObject_IsTokenObjectTemplate(
|
| + CK_ATTRIBUTE_PTR objectTemplate,
|
| + CK_ULONG otsize)
|
| {
|
| CK_ULONG ul;
|
| - for (ul=0; ul<otsize; ul++) {
|
| - if (objectTemplate[ul].type == CKA_TOKEN) {
|
| - return (*((CK_BBOOL*)objectTemplate[ul].pValue) == CK_TRUE);
|
| - }
|
| + for (ul = 0; ul < otsize; ul++) {
|
| + if (objectTemplate[ul].type == CKA_TOKEN) {
|
| + return (*((CK_BBOOL *)objectTemplate[ul].pValue) == CK_TRUE);
|
| + }
|
| }
|
| return PR_FALSE;
|
| }
|
| @@ -253,32 +245,31 @@ nss_cert_type_from_ck_attrib(CK_ATTRIBUTE_PTR attrib)
|
| {
|
| CK_CERTIFICATE_TYPE ckCertType;
|
| if (!attrib->pValue) {
|
| - /* default to PKIX */
|
| - return NSSCertificateType_PKIX;
|
| + /* default to PKIX */
|
| + return NSSCertificateType_PKIX;
|
| }
|
| ckCertType = *((CK_ULONG *)attrib->pValue);
|
| switch (ckCertType) {
|
| - case CKC_X_509:
|
| - return NSSCertificateType_PKIX;
|
| - default:
|
| - break;
|
| + case CKC_X_509:
|
| + return NSSCertificateType_PKIX;
|
| + default:
|
| + break;
|
| }
|
| return NSSCertificateType_Unknown;
|
| }
|
|
|
| /* incoming pointers must be valid */
|
| NSS_IMPLEMENT PRStatus
|
| -nssCryptokiCertificate_GetAttributes (
|
| - nssCryptokiObject *certObject,
|
| - nssSession *sessionOpt,
|
| - NSSArena *arenaOpt,
|
| - NSSCertificateType *certTypeOpt,
|
| - NSSItem *idOpt,
|
| - NSSDER *encodingOpt,
|
| - NSSDER *issuerOpt,
|
| - NSSDER *serialOpt,
|
| - NSSDER *subjectOpt
|
| -)
|
| +nssCryptokiCertificate_GetAttributes(
|
| + nssCryptokiObject *certObject,
|
| + nssSession *sessionOpt,
|
| + NSSArena *arenaOpt,
|
| + NSSCertificateType *certTypeOpt,
|
| + NSSItem *idOpt,
|
| + NSSDER *encodingOpt,
|
| + NSSDER *issuerOpt,
|
| + NSSDER *serialOpt,
|
| + NSSDER *subjectOpt)
|
| {
|
| PRStatus status;
|
| PRUint32 i;
|
| @@ -290,27 +281,27 @@ nssCryptokiCertificate_GetAttributes (
|
| /* Set up a template of all options chosen by caller */
|
| NSS_CK_TEMPLATE_START(cert_template, attr, template_size);
|
| if (certTypeOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_CERTIFICATE_TYPE);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_CERTIFICATE_TYPE);
|
| }
|
| if (idOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_ID);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_ID);
|
| }
|
| if (encodingOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_VALUE);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_VALUE);
|
| }
|
| if (issuerOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_ISSUER);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_ISSUER);
|
| }
|
| if (serialOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_SERIAL_NUMBER);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_SERIAL_NUMBER);
|
| }
|
| if (subjectOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_SUBJECT);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_SUBJECT);
|
| }
|
| NSS_CK_TEMPLATE_FINISH(cert_template, attr, template_size);
|
| if (template_size == 0) {
|
| - /* caller didn't want anything */
|
| - return PR_SUCCESS;
|
| + /* caller didn't want anything */
|
| + return PR_SUCCESS;
|
| }
|
|
|
| status = nssToken_GetCachedObjectAttributes(certObject->token, arenaOpt,
|
| @@ -318,77 +309,90 @@ nssCryptokiCertificate_GetAttributes (
|
| cert_template, template_size);
|
| if (status != PR_SUCCESS) {
|
|
|
| - session = sessionOpt ?
|
| - sessionOpt :
|
| - nssToken_GetDefaultSession(certObject->token);
|
| - if (!session) {
|
| - nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
|
| - return PR_FAILURE;
|
| - }
|
| -
|
| - slot = nssToken_GetSlot(certObject->token);
|
| - status = nssCKObject_GetAttributes(certObject->handle,
|
| - cert_template, template_size,
|
| - arenaOpt, session, slot);
|
| - nssSlot_Destroy(slot);
|
| - if (status != PR_SUCCESS) {
|
| - return status;
|
| - }
|
| - }
|
| -
|
| - i=0;
|
| + session = sessionOpt ? sessionOpt
|
| + : nssToken_GetDefaultSession(certObject->token);
|
| + if (!session) {
|
| + nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
|
| + return PR_FAILURE;
|
| + }
|
| +
|
| + slot = nssToken_GetSlot(certObject->token);
|
| + status = nssCKObject_GetAttributes(certObject->handle,
|
| + cert_template, template_size,
|
| + arenaOpt, session, slot);
|
| + nssSlot_Destroy(slot);
|
| + if (status != PR_SUCCESS) {
|
| + return status;
|
| + }
|
| + }
|
| +
|
| + i = 0;
|
| if (certTypeOpt) {
|
| - *certTypeOpt = nss_cert_type_from_ck_attrib(&cert_template[i]); i++;
|
| + *certTypeOpt = nss_cert_type_from_ck_attrib(&cert_template[i]);
|
| + i++;
|
| }
|
| if (idOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], idOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], idOpt);
|
| + i++;
|
| }
|
| if (encodingOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], encodingOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], encodingOpt);
|
| + i++;
|
| }
|
| if (issuerOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], issuerOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], issuerOpt);
|
| + i++;
|
| }
|
| if (serialOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], serialOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], serialOpt);
|
| + i++;
|
| }
|
| if (subjectOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], subjectOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_ITEM(&cert_template[i], subjectOpt);
|
| + i++;
|
| }
|
| return PR_SUCCESS;
|
| }
|
|
|
| -static nssTrustLevel
|
| -get_nss_trust (
|
| - CK_TRUST ckt
|
| -)
|
| +static nssTrustLevel
|
| +get_nss_trust(
|
| + CK_TRUST ckt)
|
| {
|
| nssTrustLevel t;
|
| switch (ckt) {
|
| - case CKT_NSS_NOT_TRUSTED: t = nssTrustLevel_NotTrusted; break;
|
| - case CKT_NSS_TRUSTED_DELEGATOR: t = nssTrustLevel_TrustedDelegator;
|
| - break;
|
| - case CKT_NSS_VALID_DELEGATOR: t = nssTrustLevel_ValidDelegator; break;
|
| - case CKT_NSS_TRUSTED: t = nssTrustLevel_Trusted; break;
|
| - case CKT_NSS_MUST_VERIFY_TRUST: t = nssTrustLevel_MustVerify; break;
|
| - case CKT_NSS_TRUST_UNKNOWN:
|
| - default:
|
| - t = nssTrustLevel_Unknown; break;
|
| + case CKT_NSS_NOT_TRUSTED:
|
| + t = nssTrustLevel_NotTrusted;
|
| + break;
|
| + case CKT_NSS_TRUSTED_DELEGATOR:
|
| + t = nssTrustLevel_TrustedDelegator;
|
| + break;
|
| + case CKT_NSS_VALID_DELEGATOR:
|
| + t = nssTrustLevel_ValidDelegator;
|
| + break;
|
| + case CKT_NSS_TRUSTED:
|
| + t = nssTrustLevel_Trusted;
|
| + break;
|
| + case CKT_NSS_MUST_VERIFY_TRUST:
|
| + t = nssTrustLevel_MustVerify;
|
| + break;
|
| + case CKT_NSS_TRUST_UNKNOWN:
|
| + default:
|
| + t = nssTrustLevel_Unknown;
|
| + break;
|
| }
|
| return t;
|
| }
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssCryptokiTrust_GetAttributes (
|
| - nssCryptokiObject *trustObject,
|
| - nssSession *sessionOpt,
|
| - NSSItem *sha1_hash,
|
| - nssTrustLevel *serverAuth,
|
| - nssTrustLevel *clientAuth,
|
| - nssTrustLevel *codeSigning,
|
| - nssTrustLevel *emailProtection,
|
| - PRBool *stepUpApproved
|
| -)
|
| +nssCryptokiTrust_GetAttributes(
|
| + nssCryptokiObject *trustObject,
|
| + nssSession *sessionOpt,
|
| + NSSItem *sha1_hash,
|
| + nssTrustLevel *serverAuth,
|
| + nssTrustLevel *clientAuth,
|
| + nssTrustLevel *codeSigning,
|
| + nssTrustLevel *emailProtection,
|
| + PRBool *stepUpApproved)
|
| {
|
| PRStatus status;
|
| NSSSlot *slot;
|
| @@ -406,42 +410,41 @@ nssCryptokiTrust_GetAttributes (
|
|
|
| /* Use the trust object to find the trust settings */
|
| NSS_CK_TEMPLATE_START(trust_template, attr, trust_size);
|
| - NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TOKEN, isToken);
|
| - NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TRUST_SERVER_AUTH, saTrust);
|
| - NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TRUST_CLIENT_AUTH, caTrust);
|
| + NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TOKEN, isToken);
|
| + NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TRUST_SERVER_AUTH, saTrust);
|
| + NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TRUST_CLIENT_AUTH, caTrust);
|
| NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TRUST_EMAIL_PROTECTION, epTrust);
|
| - NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TRUST_CODE_SIGNING, csTrust);
|
| + NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TRUST_CODE_SIGNING, csTrust);
|
| NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_TRUST_STEP_UP_APPROVED, stepUp);
|
| sha1_hash_attr = attr;
|
| - NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_CERT_SHA1_HASH, sha1_hash);
|
| + NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_CERT_SHA1_HASH, sha1_hash);
|
| NSS_CK_TEMPLATE_FINISH(trust_template, attr, trust_size);
|
|
|
| status = nssToken_GetCachedObjectAttributes(trustObject->token, NULL,
|
| - trustObject,
|
| + trustObject,
|
| CKO_NSS_TRUST,
|
| trust_template, trust_size);
|
| if (status != PR_SUCCESS) {
|
| - session = sessionOpt ?
|
| - sessionOpt :
|
| - nssToken_GetDefaultSession(trustObject->token);
|
| - if (!session) {
|
| - nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
|
| - return PR_FAILURE;
|
| - }
|
| -
|
| - slot = nssToken_GetSlot(trustObject->token);
|
| - status = nssCKObject_GetAttributes(trustObject->handle,
|
| - trust_template, trust_size,
|
| - NULL, session, slot);
|
| - nssSlot_Destroy(slot);
|
| - if (status != PR_SUCCESS) {
|
| - return status;
|
| - }
|
| + session = sessionOpt ? sessionOpt
|
| + : nssToken_GetDefaultSession(trustObject->token);
|
| + if (!session) {
|
| + nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
|
| + return PR_FAILURE;
|
| + }
|
| +
|
| + slot = nssToken_GetSlot(trustObject->token);
|
| + status = nssCKObject_GetAttributes(trustObject->handle,
|
| + trust_template, trust_size,
|
| + NULL, session, slot);
|
| + nssSlot_Destroy(slot);
|
| + if (status != PR_SUCCESS) {
|
| + return status;
|
| + }
|
| }
|
|
|
| if (sha1_hash_attr->ulValueLen == -1) {
|
| - /* The trust object does not have the CKA_CERT_SHA1_HASH attribute. */
|
| - sha1_hash_attr->ulValueLen = 0;
|
| + /* The trust object does not have the CKA_CERT_SHA1_HASH attribute. */
|
| + sha1_hash_attr->ulValueLen = 0;
|
| }
|
| sha1_hash->size = sha1_hash_attr->ulValueLen;
|
| *serverAuth = get_nss_trust(saTrust);
|
| @@ -453,16 +456,15 @@ nssCryptokiTrust_GetAttributes (
|
| }
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssCryptokiCRL_GetAttributes (
|
| - nssCryptokiObject *crlObject,
|
| - nssSession *sessionOpt,
|
| - NSSArena *arenaOpt,
|
| - NSSItem *encodingOpt,
|
| - NSSItem *subjectOpt,
|
| - CK_ULONG* crl_class,
|
| - NSSUTF8 **urlOpt,
|
| - PRBool *isKRLOpt
|
| -)
|
| +nssCryptokiCRL_GetAttributes(
|
| + nssCryptokiObject *crlObject,
|
| + nssSession *sessionOpt,
|
| + NSSArena *arenaOpt,
|
| + NSSItem *encodingOpt,
|
| + NSSItem *subjectOpt,
|
| + CK_ULONG *crl_class,
|
| + NSSUTF8 **urlOpt,
|
| + PRBool *isKRLOpt)
|
| {
|
| PRStatus status;
|
| NSSSlot *slot;
|
| @@ -477,69 +479,72 @@ nssCryptokiCRL_GetAttributes (
|
| NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_CLASS);
|
| }
|
| if (encodingOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_VALUE);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_VALUE);
|
| }
|
| if (urlOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_NSS_URL);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_NSS_URL);
|
| }
|
| if (isKRLOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_NSS_KRL);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_NSS_KRL);
|
| }
|
| if (subjectOpt) {
|
| - NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_SUBJECT);
|
| + NSS_CK_SET_ATTRIBUTE_NULL(attr, CKA_SUBJECT);
|
| }
|
| NSS_CK_TEMPLATE_FINISH(crl_template, attr, crl_size);
|
|
|
| status = nssToken_GetCachedObjectAttributes(crlObject->token, NULL,
|
| - crlObject,
|
| + crlObject,
|
| CKO_NSS_CRL,
|
| crl_template, crl_size);
|
| if (status != PR_SUCCESS) {
|
| - session = sessionOpt ?
|
| - sessionOpt :
|
| - nssToken_GetDefaultSession(crlObject->token);
|
| - if (session == NULL) {
|
| - nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
|
| - return PR_FAILURE;
|
| - }
|
| -
|
| - slot = nssToken_GetSlot(crlObject->token);
|
| - status = nssCKObject_GetAttributes(crlObject->handle,
|
| - crl_template, crl_size,
|
| - arenaOpt, session, slot);
|
| - nssSlot_Destroy(slot);
|
| - if (status != PR_SUCCESS) {
|
| - return status;
|
| - }
|
| - }
|
| -
|
| - i=0;
|
| + session = sessionOpt ? sessionOpt
|
| + : nssToken_GetDefaultSession(crlObject->token);
|
| + if (session == NULL) {
|
| + nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
|
| + return PR_FAILURE;
|
| + }
|
| +
|
| + slot = nssToken_GetSlot(crlObject->token);
|
| + status = nssCKObject_GetAttributes(crlObject->handle,
|
| + crl_template, crl_size,
|
| + arenaOpt, session, slot);
|
| + nssSlot_Destroy(slot);
|
| + if (status != PR_SUCCESS) {
|
| + return status;
|
| + }
|
| + }
|
| +
|
| + i = 0;
|
| if (crl_class) {
|
| - NSS_CK_ATTRIBUTE_TO_ULONG(&crl_template[i], *crl_class); i++;
|
| + NSS_CK_ATTRIBUTE_TO_ULONG(&crl_template[i], *crl_class);
|
| + i++;
|
| }
|
| if (encodingOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_ITEM(&crl_template[i], encodingOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_ITEM(&crl_template[i], encodingOpt);
|
| + i++;
|
| }
|
| if (urlOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_UTF8(&crl_template[i], *urlOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_UTF8(&crl_template[i], *urlOpt);
|
| + i++;
|
| }
|
| if (isKRLOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_BOOL(&crl_template[i], *isKRLOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_BOOL(&crl_template[i], *isKRLOpt);
|
| + i++;
|
| }
|
| if (subjectOpt) {
|
| - NSS_CK_ATTRIBUTE_TO_ITEM(&crl_template[i], subjectOpt); i++;
|
| + NSS_CK_ATTRIBUTE_TO_ITEM(&crl_template[i], subjectOpt);
|
| + i++;
|
| }
|
| return PR_SUCCESS;
|
| }
|
|
|
| NSS_IMPLEMENT PRStatus
|
| -nssCryptokiPrivateKey_SetCertificate (
|
| - nssCryptokiObject *keyObject,
|
| - nssSession *sessionOpt,
|
| - const NSSUTF8 *nickname,
|
| - NSSItem *id,
|
| - NSSDER *subject
|
| -)
|
| +nssCryptokiPrivateKey_SetCertificate(
|
| + nssCryptokiObject *keyObject,
|
| + nssSession *sessionOpt,
|
| + const NSSUTF8 *nickname,
|
| + NSSItem *id,
|
| + NSSDER *subject)
|
| {
|
| CK_RV ckrv;
|
| CK_ATTRIBUTE_PTR attr;
|
| @@ -558,20 +563,20 @@ nssCryptokiPrivateKey_SetCertificate (
|
| NSS_CK_TEMPLATE_FINISH(key_template, attr, key_size);
|
|
|
| if (sessionOpt) {
|
| - if (!nssSession_IsReadWrite(sessionOpt)) {
|
| - return PR_FAILURE;
|
| - }
|
| - session = sessionOpt;
|
| + if (!nssSession_IsReadWrite(sessionOpt)) {
|
| + return PR_FAILURE;
|
| + }
|
| + session = sessionOpt;
|
| } else if (defaultSession && nssSession_IsReadWrite(defaultSession)) {
|
| - session = defaultSession;
|
| + session = defaultSession;
|
| } else {
|
| - NSSSlot *slot = nssToken_GetSlot(token);
|
| - session = nssSlot_CreateSession(token->slot, NULL, PR_TRUE);
|
| - nssSlot_Destroy(slot);
|
| - if (!session) {
|
| - return PR_FAILURE;
|
| - }
|
| - createdSession = PR_TRUE;
|
| + NSSSlot *slot = nssToken_GetSlot(token);
|
| + session = nssSlot_CreateSession(token->slot, NULL, PR_TRUE);
|
| + nssSlot_Destroy(slot);
|
| + if (!session) {
|
| + return PR_FAILURE;
|
| + }
|
| + createdSession = PR_TRUE;
|
| }
|
|
|
| ckrv = CKAPI(epv)->C_SetAttributeValue(session->handle,
|
| @@ -580,9 +585,8 @@ nssCryptokiPrivateKey_SetCertificate (
|
| key_size);
|
|
|
| if (createdSession) {
|
| - nssSession_Destroy(session);
|
| + nssSession_Destroy(session);
|
| }
|
|
|
| return (ckrv == CKR_OK) ? PR_SUCCESS : PR_FAILURE;
|
| }
|
| -
|
|
|