blob: b15ae48ed69f1a00b48523048b208abc83494b21 [file] [log] [blame]
/*
* Copyright (c) 2012 SURFnet
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*****************************************************************************
ObjectTests.h
Contains test cases to C_CreateObject, C_CopyObject, C_DestroyObject,
C_GetAttributeValue, C_SetAttributeValue, C_FindObjectsInit,
C_FindObjects, C_FindObjectsFinal, C_GenerateKeyPair
*****************************************************************************/
#ifndef _SOFTHSM_V2_OBJECTTESTS_H
#define _SOFTHSM_V2_OBJECTTESTS_H
#include "TestsBase.h"
#include <cppunit/extensions/HelperMacros.h>
class ObjectTests : public TestsBase
{
CPPUNIT_TEST_SUITE(ObjectTests);
CPPUNIT_TEST(testCreateObject);
CPPUNIT_TEST(testCopyObject);
CPPUNIT_TEST(testDestroyObject);
CPPUNIT_TEST(testGetObjectSize);
CPPUNIT_TEST(testGetAttributeValue);
CPPUNIT_TEST(testSetAttributeValue);
CPPUNIT_TEST(testFindObjects);
CPPUNIT_TEST(testGenerateKeys);
CPPUNIT_TEST(testCreateCertificates);
CPPUNIT_TEST(testDefaultDataAttributes);
CPPUNIT_TEST(testDefaultX509CertAttributes);
CPPUNIT_TEST(testDefaultRSAPubAttributes);
CPPUNIT_TEST(testDefaultRSAPrivAttributes);
CPPUNIT_TEST(testAlwaysNeverAttribute);
CPPUNIT_TEST(testSensitiveAttributes);
CPPUNIT_TEST(testGetInvalidAttribute);
CPPUNIT_TEST(testAllowedMechanisms);
CPPUNIT_TEST(testReAuthentication);
CPPUNIT_TEST(testTemplateAttribute);
CPPUNIT_TEST(testCreateSecretKey);
CPPUNIT_TEST_SUITE_END();
public:
void testCreateObject();
void testCopyObject();
void testDestroyObject();
void testGetObjectSize();
void testGetAttributeValue();
void testSetAttributeValue();
void testFindObjects();
void testGenerateKeys();
void testCreateCertificates();
void testDefaultDataAttributes();
void testDefaultX509CertAttributes();
void testDefaultRSAPubAttributes();
void testDefaultRSAPrivAttributes();
void testAlwaysNeverAttribute();
void testSensitiveAttributes();
void testGetInvalidAttribute();
void testReAuthentication();
void testAllowedMechanisms();
void testTemplateAttribute();
void testCreateSecretKey();
protected:
void checkCommonObjectAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_OBJECT_CLASS objectClass
);
void checkCommonStorageObjectAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_BBOOL bToken,
CK_BBOOL bPrivate,
CK_BBOOL bModifiable,
CK_UTF8CHAR_PTR pLabel, CK_ULONG ulLabelLen,
CK_BBOOL bCopyable,
CK_BBOOL bDestroyable
);
void checkDataObjectAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_UTF8CHAR_PTR pApplication, CK_ULONG ulApplicationLen,
CK_BYTE_PTR pObjectID, CK_ULONG ulObjectIdLen,
CK_BYTE_PTR pValue, CK_ULONG ulValueLen
);
void checkCommonCertificateObjectAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_CERTIFICATE_TYPE certType,
CK_BBOOL bTrusted,
CK_ULONG ulCertificateCategory,
CK_BYTE_PTR pCheckValue, CK_ULONG ulCheckValueLen,
CK_DATE startDate, CK_ULONG ulStartDateLen,
CK_DATE endDate, CK_ULONG ulEndDateLen
);
void checkX509CertificateObjectAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_BYTE_PTR pSubject, CK_ULONG ulSubjectLen,
CK_BYTE_PTR pId, CK_ULONG ulIdLen,
CK_BYTE_PTR pIssuer, CK_ULONG ulIssuerLen,
CK_BYTE_PTR pSerialNumber, CK_ULONG ulSerialNumberLen,
CK_BYTE_PTR pValue, CK_ULONG ulValueLen,
CK_BYTE_PTR pUrl, CK_ULONG ulUrlLen,
CK_BYTE_PTR pHashOfSubjectPublicKey, CK_ULONG ulHashOfSubjectPublicKeyLen,
CK_BYTE_PTR pHashOfIssuerPublicKey, CK_ULONG ulHashOfIssuerPublicKeyLen,
CK_ULONG ulJavaMidpSecurityDomain,
CK_MECHANISM_TYPE nameHashAlgorithm
);
void checkCommonKeyAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_KEY_TYPE keyType,
CK_BYTE_PTR pId, CK_ULONG ulIdLen,
CK_DATE startDate, CK_ULONG ulStartDateLen,
CK_DATE endDate, CK_ULONG ulEndDateLen,
CK_BBOOL bDerive,
CK_BBOOL bLocal,
CK_MECHANISM_TYPE keyMechanismType,
CK_MECHANISM_TYPE_PTR pAllowedMechanisms, CK_ULONG ulAllowedMechanismsLen /* len = count * sizeof(CK_MECHANISM_TYPE) */
);
void checkCommonPublicKeyAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_BYTE_PTR pSubject, CK_ULONG ulSubjectLen,
CK_BBOOL bEncrypt,
CK_BBOOL bVerify,
CK_BBOOL bVerifyRecover,
CK_BBOOL bWrap,
CK_BBOOL bTrusted,
CK_ATTRIBUTE_PTR pWrapTemplate, CK_ULONG ulWrapTemplateLen /* len = count * sizeof(CK_ATTRIBUTE) */
);
void checkCommonPrivateKeyAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_BYTE_PTR pSubject, CK_ULONG ulSubjectLen,
CK_BBOOL bSensitive,
CK_BBOOL bDecrypt,
CK_BBOOL bSign,
CK_BBOOL bSignRecover,
CK_BBOOL bUnwrap,
CK_BBOOL bExtractable,
CK_BBOOL bAlwaysSensitive,
CK_BBOOL bNeverExtractable,
CK_BBOOL bWrapWithTrusted,
CK_ATTRIBUTE_PTR pUnwrapTemplate, CK_ULONG ulUnwrapTemplateLen, /* len = count * sizeof(CK_ATTRIBUTE) */
CK_BBOOL bAlwaysAuthenticate
);
void checkCommonRSAPublicKeyAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_BYTE_PTR pModulus, CK_ULONG ulModulusLen,
CK_ULONG ulModulusBits,
CK_BYTE_PTR pPublicExponent, CK_ULONG ulPublicExponentLen
);
void checkCommonRSAPrivateKeyAttributes
( CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
CK_BYTE_PTR pModulus, CK_ULONG ulModulusLen,
CK_BYTE_PTR pPublicExponent, CK_ULONG ulPublicExponentLen,
CK_BYTE_PTR pPrivateExponent, CK_ULONG ulPrivateExponentLen,
CK_BYTE_PTR pPrime1, CK_ULONG ulPrime1Len,
CK_BYTE_PTR pPrime2, CK_ULONG ulPrime2Len,
CK_BYTE_PTR pExponent1, CK_ULONG ulExponent1Len,
CK_BYTE_PTR pExponent2, CK_ULONG ulExponent2Len,
CK_BYTE_PTR pCoefficient, CK_ULONG ulCoefficientLen
);
CK_RV createDataObjectMinimal(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hObject);
CK_RV createDataObjectMCD(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_BBOOL bModifiable, CK_BBOOL bCopyable, CK_BBOOL bDestroyable, CK_OBJECT_HANDLE &hObject);
CK_RV createDataObjectNormal(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hObject);
CK_RV createCertificateObjectIncomplete(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hObject);
CK_RV createCertificateObjectX509(CK_SESSION_HANDLE hSession, CK_BBOOL bToken, CK_BBOOL bPrivate, CK_OBJECT_HANDLE &hObject);
CK_RV generateRsaKeyPair(CK_SESSION_HANDLE hSession, CK_BBOOL bTokenPuk, CK_BBOOL bPrivatePuk, CK_BBOOL bTokenPrk, CK_BBOOL bPrivatePrk, CK_OBJECT_HANDLE &hPuk, CK_OBJECT_HANDLE &hPrk);
};
#endif // !_SOFTHSM_V2_OBJECTTESTS_H