pk11keys.c revision 9a7670889e9c36ec355371e6b02f2d9084f040dc
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Use is subject to license terms.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Copyright (c) 1995-2000 Intel Corporation. All rights reserved.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#pragma ident "%Z%%M% %I% %E% SMI"
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwcreate_pk11_session(CK_SESSION_HANDLE *sessionp, CK_MECHANISM_TYPE wanted_mech,
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw pSlotList = (CK_SLOT_ID_PTR) malloc(pulCount * sizeof (CK_SLOT_ID));
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw for (i = 0; i < pulCount; i++) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw rv = C_GetMechanismInfo(pSlotList[i], wanted_mech, &info);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Name: PKCS_AddTemplate
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Description:
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Adds a CK_ATTRIBUTE value to an existing array of CK_ATTRIBUTES. Will
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * not expand the array beyond the maximum specified size.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Returns:
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * TRUE - Attribute value succesfully added.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * FALSE - Maximum array size would be exceded.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Convert an SPKI data record to PKCS#11
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * public key object.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Common object attributes */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Common key attributes */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Common public key attributes */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Key part array */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Parse the keyblob */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw mrReturn = ExtractSPKIData(pKey, AlgorithmId, KeyParts, &uNumKeyParts);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Fill in the common object attributes */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sizeof (ckObjClass)) ||
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sizeof (ckToken)) ||
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sizeof (ckPrivate))) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Fill in the common key attributes */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sizeof (ckKeyType)) ||
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sizeof (ckDerive))) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw /* Add common public key attributes */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sizeof (ckEncrypt)) ||
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sizeof (ckVerify)) ||
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sizeof (ckWrap))) {
switch (ckKeyType) {
case CKK_RSA:
goto cleanup;
case CKK_DSA:
goto cleanup;
for (i = 0; i < uNumKeyParts; i++) {
return (mrReturn);
static KMF_RETURN
sizeof (CK_ATTRIBUTE));
return (mrReturn);
ckNumTemplates = 0;
sizeof (ckObjClass)) ||
sizeof (ckKeyType))) {
return (KMF_ERR_INTERNAL);
return (ckRv);
return (KMF_ERR_BAD_KEY_FORMAT);
return (KMF_OK);
switch (AlgId) {
case KMF_ALGID_RSA:
case KMF_ALGID_MD5WithRSA:
case KMF_ALGID_MD2WithRSA:
case KMF_ALGID_SHA1WithRSA:
return (AlgMode);
return (KMF_ERR_BAD_ALGORITHM);
if (!pAlgMap)
return (KMF_ERR_BAD_ALGORITHM);
return (rv);
return (rv);
if (bTempKey)
return (KMF_ERR_INTERNAL);
if (bTempKey)
return (rv);
sizeof (CK_ATTRIBUTE));
if (!pAlgMap)
return (KMF_ERR_BAD_ALGORITHM);
return (rv);
return (rv);
ckNumTemplates = 0;
sizeof (CK_ULONG))) {
if (bTempKey)
return (KMF_ERR_INTERNAL);
if (bTempKey)
return (KMF_ERR_INTERNAL);
if (bTempKey)
return (KMF_ERR_BUFFER_SIZE);
for (i = 0; i < blocks; i++) {
if (bTempKey)
return (KMF_ERR_INTERNAL);
if (bTempKey)
return (KMF_ERR_INTERNAL);
if (bTempKey)
return (KMF_ERR_INTERNAL);
if (bTempKey)
return (KMF_ERR_INTERNAL);
if (bTempKey)
return (rv);
return (rv);
return (rv);
return (KMF_ERR_BAD_PARAMETER);
return (KMF_ERR_MEMORY);
return (rv);
return (rv);
ID);
ID);
for (i = 0; i < uNumKeyParts; i++) {
return (rv);