From fac3d6b34b285c50bbd75f34026cf58fb4d3e20c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20W=C3=A4ckerlin?= Date: Fri, 17 Sep 2010 08:59:48 +0000 Subject: [PATCH] now it compiles again; refs #7 --- COPYING | 2 +- INSTALL | 2 +- configure.in | 4 +- src/cryptoki.hxx | 110 +++++++++++++++++------------------ test/makefile.am | 22 ------- test/sharedpointer_test.cxx | 111 ------------------------------------ 6 files changed, 55 insertions(+), 196 deletions(-) delete mode 100644 test/makefile.am delete mode 100644 test/sharedpointer_test.cxx diff --git a/COPYING b/COPYING index 6fb8e91..6168a39 120000 --- a/COPYING +++ b/COPYING @@ -1 +1 @@ -/opt/local/share/automake-1.11/COPYING \ No newline at end of file +/usr/share/automake-1.11/COPYING \ No newline at end of file diff --git a/INSTALL b/INSTALL index 7a6487f..cbd1c80 120000 --- a/INSTALL +++ b/INSTALL @@ -1 +1 @@ -/opt/local/share/automake-1.11/INSTALL \ No newline at end of file +/usr/share/automake-1.11/INSTALL \ No newline at end of file diff --git a/configure.in b/configure.in index 2c9e374..5e79bdb 100644 --- a/configure.in +++ b/configure.in @@ -2,7 +2,7 @@ AC_INIT([README]) SRC_DIR=src -TST_DIR=test +TST_DIR= DOC_DIR=doc m4_define(x_packagename, libpcscxx) @@ -23,7 +23,7 @@ AM_INIT_AUTOMAKE($PACKAGENAME, $MAJOR.$MINOR.$LEAST, [marc@waeckerlin.org]) # files to create AC_CONFIG_FILES([makefile - src/makefile test/makefile + src/makefile doc/doxyfile doc/examples/makefile doc/makefile src/libpcscxx.pc debian/changelog]) diff --git a/src/cryptoki.hxx b/src/cryptoki.hxx index 933bf41..bdb85dd 100644 --- a/src/cryptoki.hxx +++ b/src/cryptoki.hxx @@ -1350,13 +1350,13 @@ namespace cryptoki { friend class Session; CK_OBJECT_HANDLE _object; - Session& _session; + Session* _session; CK_RV _res; bool check(CK_RV result, const std::string& context="") { CRYPTOKI_LOG("log"); _res = result; - if (_session._slot._init->_exc && !*this) + if (_session->_slot._init->_exc && !*this) if (!context.empty()) throw access_error(context+": "+error()); else @@ -1367,20 +1367,12 @@ namespace cryptoki { Object(); // forbidden Object(Session& session, CK_OBJECT_HANDLE obj): - _session(session), _object(obj), _res(CKR_OK) { + _session(&session), _object(obj), _res(CKR_OK) { CRYPTOKI_LOG("log"); } public: - Object& operator=(Object& o) { - CRYPTOKI_LOG("log"); - _object = o._object; - _session = o._session; - _res = o._res; - return *this; - } - /*! @name Comfortable Access Use these methods in favour of the Low Level Cryptoki @@ -1426,7 +1418,7 @@ namespace cryptoki { /*! @return error text of last cryptoki call */ std::string error() { CRYPTOKI_LOG("log"); - return _session._slot._init->error(_res); + return _session->_slot._init->error(_res); } //@} @@ -1442,7 +1434,7 @@ namespace cryptoki { bool copyobject() { CRYPTOKI_LOG("log"); //! calls @c C_CopyObject - return check(_session._slot._init->_fn->C_CopyObject(_session._session, CK_OBJECT_HANDLE, + return check(_session->_slot._init->_fn->C_CopyObject(_session->_session, CK_OBJECT_HANDLE, CK_ATTRIBUTE_PTR, CK_ULONG, CK_OBJECT_HANDLE_PTR), CRYPTOKI_FN_LOG("C_CopyObject")); } @@ -1456,8 +1448,8 @@ namespace cryptoki { CRYPTOKI_LOG("decryptinit: type="<_fn->C_DecryptInit - (_session._session, &mech, _object), + return check(_session->_slot._init->_fn->C_DecryptInit + (_session->_session, &mech, _object), CRYPTOKI_FN_LOG("C_DecryptInit")); } @@ -1468,14 +1460,14 @@ namespace cryptoki { CK_ULONG size(0); // two calls, first to get minimum buffer length CRYPTOKI_LOG("get size"); //! calls @c C_Decrypt - check(_session._slot._init->_fn->C_Decrypt - (_session._session, + check(_session->_slot._init->_fn->C_Decrypt + (_session->_session, (unsigned char*)&in[0], in.size(), 0, &size), CRYPTOKI_FN_LOG("C_Decrypt")); CRYPTOKI_LOG("maximum size is "<_fn->C_Decrypt - (_session._session, + check(_session->_slot._init->_fn->C_Decrypt + (_session->_session, (unsigned char*)&in[0], in.size(), (unsigned char*)&res[0], &size), CRYPTOKI_FN_LOG("C_Decrypt")); @@ -1490,8 +1482,8 @@ namespace cryptoki { res.resize(in.size()); CK_ULONG size(res.size()); //! @todo check if size is ok //! calls @c C_DecryptDigestUpdate - check(_session._slot._init->_fn->C_DecryptDigestUpdate - (_session._session, + check(_session->_slot._init->_fn->C_DecryptDigestUpdate + (_session->_session, (unsigned char*)&in[0], in.size(), (unsigned char*)&res[0], &size), CRYPTOKI_FN_LOG("C_DecryptDigestUpdate")); @@ -1502,8 +1494,8 @@ namespace cryptoki { bool decryptfinal() { CRYPTOKI_LOG("log"); //! calls @c C_DecryptFinal - return check(_session._slot._init->_fn->C_DecryptFinal - (_session._session, 0, 0), + return check(_session->_slot._init->_fn->C_DecryptFinal + (_session->_session, 0, 0), CRYPTOKI_FN_LOG("C_DecryptFinal")); //! @todo does this work? } @@ -1514,8 +1506,8 @@ namespace cryptoki { res.resize(in.size()); CK_ULONG size(res.size()); //! @todo check if size is ok //! calls @c C_DecryptUpdate - check(_session._slot._init->_fn->C_DecryptUpdate - (_session._session, + check(_session->_slot._init->_fn->C_DecryptUpdate + (_session->_session, (unsigned char*)&in[0], in.size(), (unsigned char*)&res[0], &size), CRYPTOKI_FN_LOG("C_DecryptUpdate")); @@ -1529,8 +1521,8 @@ namespace cryptoki { res.resize(in.size()); CK_ULONG size(res.size()); //! @todo check if size is ok //! calls @c C_DecryptVerifyUpdate - check(_session._slot._init->_fn->C_DecryptVerifyUpdate - (_session._session, + check(_session->_slot._init->_fn->C_DecryptVerifyUpdate + (_session->_session, (unsigned char*)&in[0], in.size(), (unsigned char*)&res[0], &size), CRYPTOKI_FN_LOG("C_DecryptVerifyUpdate")); @@ -1543,7 +1535,7 @@ namespace cryptoki { bool derivekey() { CRYPTOKI_LOG("log"); //! calls @c C_DeriveKey - return check(_session._slot._init->_fn->C_DeriveKey(_session._session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, + return check(_session->_slot._init->_fn->C_DeriveKey(_session->_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, CK_ATTRIBUTE_PTR, CK_ULONG, CK_OBJECT_HANDLE_PTR), CRYPTOKI_FN_LOG("C_DeriveKey")); } @@ -1552,8 +1544,8 @@ namespace cryptoki { bool destroy() { CRYPTOKI_LOG("log"); //! calls @c C_DestroyObject - return check(_session._slot._init->_fn->C_DestroyObject - (_session._session, _object), + return check(_session->_slot._init->_fn->C_DestroyObject + (_session->_session, _object), CRYPTOKI_FN_LOG("C_DestroyObject")); } @@ -1563,7 +1555,7 @@ namespace cryptoki { bool digestkey() { CRYPTOKI_LOG("log"); //! calls @c C_DigestKey - return check(_session._slot._init->_fn->C_DigestKey(_session._session, CK_OBJECT_HANDLE), + return check(_session->_slot._init->_fn->C_DigestKey(_session->_session, CK_OBJECT_HANDLE), CRYPTOKI_FN_LOG("C_DigestKey")); } @endcode */ @@ -1576,8 +1568,8 @@ namespace cryptoki { CRYPTOKI_LOG("encryptinit: type="<_fn->C_EncryptInit - (_session._session, &mech, _object), + return check(_session->_slot._init->_fn->C_EncryptInit + (_session->_session, &mech, _object), CRYPTOKI_FN_LOG("C_EncryptInit")); } @@ -1587,14 +1579,14 @@ namespace cryptoki { CK_ULONG size(0); // two calls, first to get minimum buffer length CRYPTOKI_LOG("get size"); //! calls @c C_Encrypt - check(_session._slot._init->_fn->C_Encrypt - (_session._session, + check(_session->_slot._init->_fn->C_Encrypt + (_session->_session, (unsigned char*)&in[0], in.size(), 0, &size), CRYPTOKI_FN_LOG("C_Decrypt")); CRYPTOKI_LOG("maximum size is "<_fn->C_Encrypt - (_session._session, + check(_session->_slot._init->_fn->C_Encrypt + (_session->_session, (unsigned char*)&in[0], in.size(), (unsigned char*)&res[0], &size), CRYPTOKI_FN_LOG("C_Encrypt")); @@ -1607,7 +1599,7 @@ namespace cryptoki { bool encryptfinal() { CRYPTOKI_LOG("log"); //! calls @c C_EncryptFinal - return check(_session._slot._init->_fn->C_EncryptFinal(_session._session, CK_BYTE_PTR, CK_ULONG_PTR), + return check(_session->_slot._init->_fn->C_EncryptFinal(_session->_session, CK_BYTE_PTR, CK_ULONG_PTR), CRYPTOKI_FN_LOG("C_EncryptFinal")); } @endcode */ @@ -1618,8 +1610,8 @@ namespace cryptoki { res.resize(in.size()); CK_ULONG size(res.size()); //! @todo check if size is ok //! calls @c C_EncryptUpdate - check(_session._slot._init->_fn->C_EncryptUpdate - (_session._session, + check(_session->_slot._init->_fn->C_EncryptUpdate + (_session->_session, (unsigned char*)&in[0], in.size(), (unsigned char*)&res[0], &size), CRYPTOKI_FN_LOG("C_EncryptUpdate")); @@ -1632,7 +1624,7 @@ namespace cryptoki { bool generatekey() { CRYPTOKI_LOG("log"); //! calls @c C_GenerateKey - return check(_session._slot._init->_fn->C_GenerateKey(_session._session, CK_MECHANISM_PTR, CK_ATTRIBUTE_PTR, + return check(_session->_slot._init->_fn->C_GenerateKey(_session->_session, CK_MECHANISM_PTR, CK_ATTRIBUTE_PTR, CK_ULONG, CK_OBJECT_HANDLE_PTR), CRYPTOKI_FN_LOG("C_GenerateKey")); } @@ -1644,7 +1636,7 @@ namespace cryptoki { bool generatekeypair() { CRYPTOKI_LOG("log"); //! calls @c C_GenerateKeyPair - return check(_session._slot._init->_fn->C_GenerateKeyPair(_session._session, CK_MECHANISM_PTR, CK_ATTRIBUTE_PTR, + return check(_session->_slot._init->_fn->C_GenerateKeyPair(_session->_session, CK_MECHANISM_PTR, CK_ATTRIBUTE_PTR, CK_ULONG, CK_ATTRIBUTE_PTR, CK_ULONG, CK_OBJECT_HANDLE_PTR, CK_OBJECT_HANDLE_PTR), CRYPTOKI_FN_LOG("C_GenerateKeyPair")); @@ -1664,8 +1656,8 @@ namespace cryptoki { Attribute res; CK_ATTRIBUTE attr((CK_ATTRIBUTE){a, 0, 0}); //! calls @c C_GetAttributeValue - if (!check(_session._slot._init->_fn->C_GetAttributeValue - (_session._session, _object, &attr, 1), + if (!check(_session->_slot._init->_fn->C_GetAttributeValue + (_session->_session, _object, &attr, 1), CRYPTOKI_FN_LOG("C_GetAttributeValue")) || !(long)attr.ulValueLen>0l) //! Without exception handling, size and type must be checked too. @@ -1673,8 +1665,8 @@ namespace cryptoki { try { attr.pValue = malloc(attr.ulValueLen); attr.pValue = memset(attr.pValue, 0, attr.ulValueLen); - if (check(_session._slot._init->_fn->C_GetAttributeValue - (_session._session, _object, &attr, 1), + if (check(_session->_slot._init->_fn->C_GetAttributeValue + (_session->_session, _object, &attr, 1), CRYPTOKI_FN_LOG("C_GetAttributeValue"))) /*! @todo There's no @c CKA_WRAP_TEMPLATE in Open Cryptoki. From the Specs: «In the special case @@ -1789,8 +1781,8 @@ namespace cryptoki { attr = (CK_ATTRIBUTE){*it, 0, 0}; try { //! calls @c C_GetAttributeValue - if (_session._slot._init->_fn->C_GetAttributeValue - (_session._session, _object, &attr, 1) + if (_session->_slot._init->_fn->C_GetAttributeValue + (_session->_session, _object, &attr, 1) == CKR_ATTRIBUTE_TYPE_INVALID || _res == CKR_ATTRIBUTE_SENSITIVE) { continue; //! Ignores unsupported Attributes. @@ -1799,8 +1791,8 @@ namespace cryptoki { if ((long)attr.ulValueLen>0l) { attr.pValue = malloc(attr.ulValueLen); attr.pValue = memset(attr.pValue, 0, attr.ulValueLen); - if (check(_session._slot._init->_fn->C_GetAttributeValue - (_session._session, _object, &attr, 1), + if (check(_session->_slot._init->_fn->C_GetAttributeValue + (_session->_session, _object, &attr, 1), CRYPTOKI_FN_LOG("C_GetAttributeValue"))) /*! @todo There's no @c CKA_WRAP_TEMPLATE in Open Cryptoki. From the Specs: «In the special @@ -1861,7 +1853,7 @@ namespace cryptoki { bool getobjectsize() { CRYPTOKI_LOG("log"); //! calls @c C_GetObjectSize - return check(_session._slot._init->_fn->C_GetObjectSize(_session._session, CK_OBJECT_HANDLE, CK_ULONG_PTR), + return check(_session->_slot._init->_fn->C_GetObjectSize(_session->_session, CK_OBJECT_HANDLE, CK_ULONG_PTR), CRYPTOKI_FN_LOG("C_GetObjectSize")); } @endcode */ @@ -1872,7 +1864,7 @@ namespace cryptoki { bool setattributevalue() { CRYPTOKI_LOG("log"); //! calls @c C_SetAttributeValue - return check(_session._slot._init->_fn->C_SetAttributeValue(_session._session, CK_OBJECT_HANDLE, + return check(_session->_slot._init->_fn->C_SetAttributeValue(_session->_session, CK_OBJECT_HANDLE, CK_ATTRIBUTE_PTR, CK_ULONG), CRYPTOKI_FN_LOG("C_SetAttributeValue")); } @@ -1883,7 +1875,7 @@ namespace cryptoki { bool setoperationstate() { CRYPTOKI_LOG("log"); //! calls @c C_SetOperationState - return check(_session._slot._init->_fn->C_SetOperationState(_session._session, CK_BYTE_PTR, CK_ULONG, + return check(_session->_slot._init->_fn->C_SetOperationState(_session->_session, CK_BYTE_PTR, CK_ULONG, CK_OBJECT_HANDLE, CK_OBJECT_HANDLE), CRYPTOKI_FN_LOG("C_SetOperationState")); } @@ -1894,7 +1886,7 @@ namespace cryptoki { bool signinit() { CRYPTOKI_LOG("log"); //! calls @c C_SignInit - return check(_session._slot._init->_fn->C_SignInit(_session._session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), + return check(_session->_slot._init->_fn->C_SignInit(_session->_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), CRYPTOKI_FN_LOG("C_SignInit")); } @endcode */ @@ -1905,7 +1897,7 @@ namespace cryptoki { bool signrecoverinit() { CRYPTOKI_LOG("log"); //! calls @c C_SignRecoverInit - return check(_session._slot._init->_fn->C_SignRecoverInit(_session._session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), + return check(_session->_slot._init->_fn->C_SignRecoverInit(_session->_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), CRYPTOKI_FN_LOG("C_SignRecoverInit")); } @endcode */ @@ -1915,7 +1907,7 @@ namespace cryptoki { bool unwrapkey() { CRYPTOKI_LOG("log"); //! calls @c C_UnwrapKey - return check(_session._slot._init->_fn->C_UnwrapKey(_session._session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, + return check(_session->_slot._init->_fn->C_UnwrapKey(_session->_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, CK_BYTE_PTR, CK_ULONG, CK_ATTRIBUTE_PTR, CK_ULONG, CK_OBJECT_HANDLE_PTR), CRYPTOKI_FN_LOG("C_UnwrapKey")); @@ -1927,7 +1919,7 @@ namespace cryptoki { bool verifyinit() { CRYPTOKI_LOG("log"); //! calls @c C_VerifyInit - return check(_session._slot._init->_fn->C_VerifyInit(_session._session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), + return check(_session->_slot._init->_fn->C_VerifyInit(_session->_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), CRYPTOKI_FN_LOG("C_VerifyInit")); } @endcode */ @@ -1938,7 +1930,7 @@ namespace cryptoki { bool verifyrecoverinit() { CRYPTOKI_LOG("log"); //! calls @c C_VerifyRecoverInit - return check(_session._slot._init->_fn->C_VerifyRecoverInit(_session._session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), + return check(_session->_slot._init->_fn->C_VerifyRecoverInit(_session->_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE), CRYPTOKI_FN_LOG("C_VerifyRecoverInit")); } @endcode */ @@ -1949,7 +1941,7 @@ namespace cryptoki { bool wrapkey() { CRYPTOKI_LOG("log"); //! calls @c C_WrapKey - return check(_session._slot._init->_fn->C_WrapKey(_session._session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, + return check(_session->_slot._init->_fn->C_WrapKey(_session->_session, CK_MECHANISM_PTR, CK_OBJECT_HANDLE, CK_OBJECT_HANDLE, CK_BYTE_PTR, CK_ULONG_PTR), CRYPTOKI_FN_LOG("C_WrapKey")); } diff --git a/test/makefile.am b/test/makefile.am deleted file mode 100644 index 684953a..0000000 --- a/test/makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -## @id $Id$ - -## 1 2 3 4 5 6 7 8 -## 45678901234567890123456789012345678901234567890123456789012345678901234567890 - -AM_CXXFLAGS = -I ${top_srcdir}/src -AM_LDFLAGS = -L${top_builddir}/src -LDADD = -lcppunit - -if MAC -AM_LDFLAGS += -L/opt/local/lib -AM_CPPFLAGS += -I/opt/local/include -endif - -check_PROGRAMS = sharedpointer_test -TESTS=${check_PROGRAMS} - -sharedpointer_test_SOURCES = sharedpointer_test.cxx -sharedpointer_test_LDFLAGS = -L${top_builddir}/src -lcryptoki++ - -CLEANFILES = $(check_PROGRAMS:%=%.xml) -MAINTAINERCLEANFILES = makefile.in diff --git a/test/sharedpointer_test.cxx b/test/sharedpointer_test.cxx deleted file mode 100644 index a25d579..0000000 --- a/test/sharedpointer_test.cxx +++ /dev/null @@ -1,111 +0,0 @@ -/*! @file - - @id $Id$ -*/ -// 1 2 3 4 5 6 7 8 -// 45678901234567890123456789012345678901234567890123456789012345678901234567890 - -#include -#include -#include -#include -#include -#include -#include - -using namespace cryptoki; - -template class SharedPointerInside: public SharedPointer { - public: - SharedPointerInside() {} - SharedPointerInside(const SharedPointerInside& o): - SharedPointer(o) {} - SharedPointerInside(T* p): SharedPointer(p) {} - ~SharedPointerInside() { - SmartResource::destruct(); - } - SharedPointerInside& operator=(const SharedPointerInside& o) { - return reset(o), *this; - } - SharedPointerInside& operator=(T* p) { - return reset(p), *this; - } - int cnt() { - return SharedPointer::cnt(); - } - static int freed() { - return _free; - } - protected: - void free() { - ++_free; - SharedPointer::free(); - } - private: - static int _free; -}; - -template int SharedPointerInside::_free(0); - -class SharedPointerTest: public CppUnit::TestFixture { - public: - void check() { - { - SharedPointerInside i, j(new int); - CPPUNIT_ASSERT_EQUAL(0, SharedPointerInside::freed()); - CPPUNIT_ASSERT_EQUAL(1, i.cnt()); - CPPUNIT_ASSERT_EQUAL(1, j.cnt()); - i = j; - CPPUNIT_ASSERT_EQUAL(1, SharedPointerInside::freed()); - CPPUNIT_ASSERT_EQUAL(i.get(), j.get()); - CPPUNIT_ASSERT_EQUAL(2, i.cnt()); - CPPUNIT_ASSERT_EQUAL(2, j.cnt()); - *i = 5; - CPPUNIT_ASSERT_EQUAL(1, SharedPointerInside::freed()); - CPPUNIT_ASSERT_EQUAL(5, *j); - CPPUNIT_ASSERT_EQUAL(2, i.cnt()); - CPPUNIT_ASSERT_EQUAL(2, j.cnt()); - int* old(j.get()); - i = new int(6); - CPPUNIT_ASSERT_EQUAL(1, SharedPointerInside::freed()); - CPPUNIT_ASSERT_EQUAL(5, *j); - CPPUNIT_ASSERT_EQUAL(6, *i); - CPPUNIT_ASSERT(i.get()!=j.get()); - CPPUNIT_ASSERT_EQUAL(1, i.cnt()); - CPPUNIT_ASSERT_EQUAL(1, j.cnt()); - i = new int(8); - CPPUNIT_ASSERT_EQUAL(2, SharedPointerInside::freed()); - CPPUNIT_ASSERT_EQUAL(5, *j); - CPPUNIT_ASSERT_EQUAL(8, *i); - CPPUNIT_ASSERT(i.get()!=j.get()); - CPPUNIT_ASSERT_EQUAL(1, i.cnt()); - CPPUNIT_ASSERT_EQUAL(1, j.cnt()); - { - SharedPointerInside k(j); - CPPUNIT_ASSERT_EQUAL(1, i.cnt()); - CPPUNIT_ASSERT_EQUAL(2, j.cnt()); - CPPUNIT_ASSERT_EQUAL(2, k.cnt()); - } - CPPUNIT_ASSERT_EQUAL(2, SharedPointerInside::freed()); - CPPUNIT_ASSERT_EQUAL(1, i.cnt()); - CPPUNIT_ASSERT_EQUAL(1, j.cnt()); - } - CPPUNIT_ASSERT_EQUAL(4, SharedPointerInside::freed()); - } - CPPUNIT_TEST_SUITE(SharedPointerTest); - CPPUNIT_TEST(check); - CPPUNIT_TEST_SUITE_END(); - -}; -CPPUNIT_TEST_SUITE_REGISTRATION(SharedPointerTest); - -int main(int argc, char** argv) try { - std::ofstream ofs((*argv+std::string(".xml")).c_str()); - CppUnit::TextUi::TestRunner runner; - runner.setOutputter(new CppUnit::XmlOutputter(&runner.result(), ofs)); - runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); - return runner.run() ? 0 : 1; - } catch (std::exception& e) { - std::cerr<<"***Exception: "<