void DigestTests::testDigestKey() { CK_RV rv; CK_SESSION_HANDLE hSession = CK_INVALID_HANDLE; CK_MECHANISM mechanism = { CKM_SHA512, NULL_PTR, 0 }; CK_BYTE data[] = {"Text to digest"}; // Just make sure that we finalize any previous tests CRYPTOKI_F_PTR( C_Finalize(NULL_PTR) ); rv = CRYPTOKI_F_PTR( C_DigestKey(hSession, (CK_OBJECT_HANDLE)123UL) ); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = CRYPTOKI_F_PTR( C_Initialize(NULL_PTR) ); CPPUNIT_ASSERT(rv == CKR_OK); rv = CRYPTOKI_F_PTR( C_OpenSession(m_initializedTokenSlotID, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession) ); CPPUNIT_ASSERT(rv == CKR_OK); // Create the generic secret key to digest CK_BBOOL bFalse = CK_FALSE; CK_BBOOL bTrue = CK_TRUE; CK_OBJECT_CLASS secretClass = CKO_SECRET_KEY; CK_KEY_TYPE genKeyType = CKK_GENERIC_SECRET; CK_ATTRIBUTE attribs[] = { { CKA_CLASS, &secretClass, sizeof(secretClass) }, { CKA_KEY_TYPE, &genKeyType, sizeof(genKeyType) }, { CKA_TOKEN, &bFalse, sizeof(bFalse) }, { CKA_PRIVATE, &bFalse, sizeof(bFalse) }, { CKA_EXTRACTABLE, &bTrue, sizeof(bTrue) }, { CKA_SENSITIVE, &bFalse, sizeof(bFalse) }, { CKA_VALUE, data, sizeof(data) - 1 } }; CK_OBJECT_HANDLE hKey; hKey = CK_INVALID_HANDLE; rv = CRYPTOKI_F_PTR( C_CreateObject(hSession, attribs, sizeof(attribs)/sizeof(CK_ATTRIBUTE), &hKey) ); CPPUNIT_ASSERT(rv == CKR_OK); CPPUNIT_ASSERT(hKey != CK_INVALID_HANDLE); rv = CRYPTOKI_F_PTR( C_DigestKey(CK_INVALID_HANDLE, hKey) ); CPPUNIT_ASSERT(rv == CKR_SESSION_HANDLE_INVALID); rv = CRYPTOKI_F_PTR( C_DigestKey(hSession, hKey) ); CPPUNIT_ASSERT(rv == CKR_OPERATION_NOT_INITIALIZED); rv = CRYPTOKI_F_PTR( C_DigestInit(hSession, &mechanism) ); CPPUNIT_ASSERT(rv == CKR_OK); rv = CRYPTOKI_F_PTR( C_DigestKey(hSession, CK_INVALID_HANDLE) ); CPPUNIT_ASSERT(rv == CKR_KEY_HANDLE_INVALID); rv = CRYPTOKI_F_PTR( C_DigestKey(hSession, hKey) ); CPPUNIT_ASSERT(rv == CKR_OK); }
HRESULT Library_security_pkcs11_native_Microsoft_SPOT_Cryptoki_CryptokiDigest::DigestKeyInternal___VOID__SystemSecurityCryptographyCryptoKey( CLR_RT_StackFrame& stack ) { TINYCLR_HEADER(); CLR_RT_HeapBlock* pThis = stack.This(); CLR_RT_HeapBlock* phKey = stack.Arg1().Dereference(); CLR_RT_HeapBlock* pSession = pThis[Library_security_pkcs11_native_Microsoft_SPOT_Cryptoki_SessionContainer::FIELD__m_session].Dereference(); CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hKey; FAULT_ON_NULL_ARG(phKey); FAULT_ON_NULL(pSession); hSession = (CK_SESSION_HANDLE)pSession[Library_security_pkcs11_native_Microsoft_SPOT_Cryptoki_Session::FIELD__m_handle].NumericByRef().s4; if(hSession == CK_SESSION_HANDLE_INVALID) TINYCLR_SET_AND_LEAVE(CLR_E_OBJECT_DISPOSED); hKey = (CK_OBJECT_HANDLE)phKey[Library_security_pkcs11_native_Microsoft_SPOT_Cryptoki_CryptokiObject::FIELD__m_handle].NumericByRef().s4; CRYPTOKI_CHECK_RESULT(stack, C_DigestKey(hSession, hKey)); TINYCLR_NOCLEANUP(); }