From b00eb56b7ffe5019bb33ad399d351b90f4715132 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Wed, 3 Dec 2008 00:20:13 +0000 Subject: Add basic key object support. No support yet for actual crypto ops. Not tested. Wanted to check it in so it doesn't get lost as it represents a lot of work. --- ckcapi-cert.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) (limited to 'ckcapi-cert.c') 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 -- cgit v1.2.3