summaryrefslogtreecommitdiff
path: root/ckcapi-cert.c
diff options
context:
space:
mode:
Diffstat (limited to 'ckcapi-cert.c')
-rw-r--r--ckcapi-cert.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/ckcapi-cert.c b/ckcapi-cert.c
index 6e51f3e..6d2dd53 100644
--- a/ckcapi-cert.c
+++ b/ckcapi-cert.c
@@ -106,7 +106,7 @@ cert_bool_attribute(CkCapiObjectData* objdata, CK_ATTRIBUTE_PTR attr)
return CKR_ATTRIBUTE_TYPE_INVALID;
};
- return ckcapi_return_data(attr->pValue, &attr->ulValueLen, &val, sizeof(CK_BBOOL));
+ return ckcapi_return_data(attr, &val, sizeof(CK_BBOOL));
}
static CK_RV
@@ -148,7 +148,7 @@ cert_ulong_attribute(CkCapiObjectData* objdata, CK_ATTRIBUTE_PTR attr)
return CKR_ATTRIBUTE_TYPE_INVALID;
};
- return ckcapi_return_data(attr->pValue, &attr->ulValueLen, &val, sizeof(CK_ULONG));
+ return ckcapi_return_data(attr, &val, sizeof(CK_ULONG));
}
static CK_RV
@@ -286,12 +286,9 @@ static const CkCapiObjectVtable cert_object_vtable = {
CK_RV
ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr)
{
- CK_VOID_PTR data = attr->pValue;
- CK_ULONG_PTR len = &attr->ulValueLen;
DWORD err;
ASSERT(cert);
- ASSERT(len);
ASSERT(attr);
switch(attr->type)
@@ -325,7 +322,7 @@ ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr)
return ckcapi_winerr_to_ckr(GetLastError());
}
- return ckcapi_return_string(data, len, utf16);
+ return ckcapi_return_string(attr, utf16);
}
break;
@@ -338,7 +335,7 @@ ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr)
*/
case CKA_ID:
if(!CertGetCertificateContextProperty(cert, CERT_KEY_IDENTIFIER_PROP_ID,
- data, (DWORD*)len))
+ attr->pValue, (DWORD*)&attr->ulValueLen))
{
err = GetLastError();
if(err == CRYPT_E_NOT_FOUND)
@@ -355,8 +352,8 @@ ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr)
* directly.
*/
case CKA_SUBJECT:
- return ckcapi_return_data(data, len, cert->pCertInfo->Subject.pbData,
- cert->pCertInfo->Subject.cbData);
+ return ckcapi_return_data(attr, cert->pCertInfo->Subject.pbData,
+ cert->pCertInfo->Subject.cbData);
/*
* DER-encoding of the certificate issuer name.
@@ -365,8 +362,8 @@ ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr)
* directly.
*/
case CKA_ISSUER:
- return ckcapi_return_data(data, len, cert->pCertInfo->Issuer.pbData,
- cert->pCertInfo->Issuer.cbData);
+ return ckcapi_return_data(attr, cert->pCertInfo->Issuer.pbData,
+ cert->pCertInfo->Issuer.cbData);
/*
* DER-encoding of the certificate serial number.
@@ -380,7 +377,8 @@ ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr)
*/
case CKA_SERIAL_NUMBER:
if(!CryptEncodeObject(X509_ASN_ENCODING, X509_MULTI_BYTE_INTEGER,
- &cert->pCertInfo->SerialNumber, data, len))
+ &cert->pCertInfo->SerialNumber,
+ attr->pValue, (DWORD*)&attr->ulValueLen))
{
err = GetLastError();
if(err == ERROR_FILE_NOT_FOUND)
@@ -395,7 +393,7 @@ ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr)
* We use CAPI's CERT_CONTEXT pbCertEncoded field directly.
*/
case CKA_VALUE:
- return ckcapi_return_data(data, len, cert->pbCertEncoded,
+ return ckcapi_return_data(attr, cert->pbCertEncoded,
cert->cbCertEncoded);
/*
@@ -406,29 +404,27 @@ ckcapi_cert_certificate_get_bytes(PCCERT_CONTEXT cert, CK_ATTRIBUTE_PTR attr)
* in full.
*/
case CKA_URL:
- break;
+ return CKR_ATTRIBUTE_TYPE_INVALID;
/*
* Checksum
* - TODO: Work out what to do here
*/
case CKA_CHECK_VALUE:
- break;
+ return CKR_ATTRIBUTE_TYPE_INVALID;
/*
* TODO: Should we support these?
*/
case CKA_HASH_OF_SUBJECT_PUBLIC_KEY:
case CKA_HASH_OF_ISSUER_PUBLIC_KEY:
- break;
+ return CKR_ATTRIBUTE_TYPE_INVALID;
/* Not supported */
default:
- break;
+ return CKR_ATTRIBUTE_TYPE_INVALID;
};
-
- return CKR_ATTRIBUTE_TYPE_INVALID;
}
PCCERT_CONTEXT