0N/A/*
3645N/A * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
0N/A */
0N/A
0N/A/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
0N/A *
0N/A * Redistribution and use in source and binary forms, with or without
0N/A * modification, are permitted provided that the following conditions are met:
0N/A *
0N/A * 1. Redistributions of source code must retain the above copyright notice,
0N/A * this list of conditions and the following disclaimer.
0N/A *
0N/A * 2. Redistributions in binary form must reproduce the above copyright notice,
0N/A * this list of conditions and the following disclaimer in the documentation
0N/A * and/or other materials provided with the distribution.
0N/A *
0N/A * 3. The end-user documentation included with the redistribution, if any, must
0N/A * include the following acknowledgment:
0N/A *
0N/A * "This product includes software developed by IAIK of Graz University of
0N/A * Technology."
0N/A *
0N/A * Alternately, this acknowledgment may appear in the software itself, if
0N/A * and wherever such third-party acknowledgments normally appear.
0N/A *
0N/A * 4. The names "Graz University of Technology" and "IAIK of Graz University of
0N/A * Technology" must not be used to endorse or promote products derived from
0N/A * this software without prior written permission.
0N/A *
0N/A * 5. Products derived from this software may not be called
0N/A * "IAIK PKCS Wrapper", nor may "IAIK" appear in their name, without prior
0N/A * written permission of Graz University of Technology.
0N/A *
0N/A * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
0N/A * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
0N/A * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
0N/A * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE LICENSOR BE
0N/A * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
0N/A * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
0N/A * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
0N/A * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
0N/A * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
0N/A * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
0N/A * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0N/A * POSSIBILITY OF SUCH DAMAGE.
0N/A */
0N/A
0N/A/*
0N/A * pkcs11wrapper.h
0N/A * 18.05.2001
0N/A *
0N/A * declaration of all functions used by pkcs11wrapper.c
0N/A *
0N/A * @author Karl Scheibelhofer <Karl.Scheibelhofer@iaik.at>
0N/A * @author Martin Schlaeffer <schlaeff@sbox.tugraz.at>
0N/A */
0N/A
0N/A/* disable asserts in product mode */
0N/A#ifndef DEBUG
0N/A #ifndef NDEBUG
0N/A #define NDEBUG
0N/A #endif
0N/A#endif
0N/A
0N/A/* extra PKCS#11 constants not in the standard include files */
0N/A
0N/A#define CKA_NETSCAPE_BASE (0x80000000 + 0x4E534350)
0N/A#define CKA_NETSCAPE_TRUST_BASE (CKA_NETSCAPE_BASE + 0x2000)
0N/A
0N/A#define CKA_NETSCAPE_TRUST_SERVER_AUTH (CKA_NETSCAPE_TRUST_BASE + 8)
0N/A#define CKA_NETSCAPE_TRUST_CLIENT_AUTH (CKA_NETSCAPE_TRUST_BASE + 9)
0N/A#define CKA_NETSCAPE_TRUST_CODE_SIGNING (CKA_NETSCAPE_TRUST_BASE + 10)
0N/A#define CKA_NETSCAPE_TRUST_EMAIL_PROTECTION (CKA_NETSCAPE_TRUST_BASE + 11)
0N/A
0N/A/*
0N/A
0N/A Define the PKCS#11 functions to include and exclude. Reduces the size
0N/A of the binary somewhat.
0N/A
0N/A This list needs to be kept in sync with the mapfile and PKCS11.java
0N/A
0N/A*/
0N/A
0N/A#define P11_ENABLE_C_INITIALIZE
0N/A#define P11_ENABLE_C_FINALIZE
0N/A#define P11_ENABLE_C_GETINFO
0N/A#define P11_ENABLE_C_GETSLOTLIST
0N/A#define P11_ENABLE_C_GETSLOTINFO
0N/A#define P11_ENABLE_C_GETTOKENINFO
0N/A#define P11_ENABLE_C_GETMECHANISMLIST
0N/A#define P11_ENABLE_C_GETMECHANISMINFO
0N/A#undef P11_ENABLE_C_INITTOKEN
0N/A#undef P11_ENABLE_C_INITPIN
0N/A#undef P11_ENABLE_C_SETPIN
0N/A#define P11_ENABLE_C_OPENSESSION
0N/A#define P11_ENABLE_C_CLOSESESSION
0N/A#undef P11_ENABLE_C_CLOSEALLSESSIONS
0N/A#define P11_ENABLE_C_GETSESSIONINFO
0N/A#undef P11_ENABLE_C_GETOPERATIONSTATE
0N/A#undef P11_ENABLE_C_SETOPERATIONSTATE
0N/A#define P11_ENABLE_C_LOGIN
0N/A#define P11_ENABLE_C_LOGOUT
0N/A#define P11_ENABLE_C_CREATEOBJECT
0N/A#define P11_ENABLE_C_COPYOBJECT
0N/A#define P11_ENABLE_C_DESTROYOBJECT
0N/A#undef P11_ENABLE_C_GETOBJECTSIZE
0N/A#define P11_ENABLE_C_GETATTRIBUTEVALUE
0N/A#define P11_ENABLE_C_SETATTRIBUTEVALUE
0N/A#define P11_ENABLE_C_FINDOBJECTSINIT
0N/A#define P11_ENABLE_C_FINDOBJECTS
0N/A#define P11_ENABLE_C_FINDOBJECTSFINAL
0N/A#define P11_ENABLE_C_ENCRYPTINIT
0N/A#define P11_ENABLE_C_ENCRYPT
0N/A#define P11_ENABLE_C_ENCRYPTUPDATE
0N/A#define P11_ENABLE_C_ENCRYPTFINAL
0N/A#define P11_ENABLE_C_DECRYPTINIT
0N/A#define P11_ENABLE_C_DECRYPT
0N/A#define P11_ENABLE_C_DECRYPTUPDATE
0N/A#define P11_ENABLE_C_DECRYPTFINAL
0N/A#define P11_ENABLE_C_DIGESTINIT
0N/A#define P11_ENABLE_C_DIGEST
0N/A#define P11_ENABLE_C_DIGESTUPDATE
0N/A#define P11_ENABLE_C_DIGESTKEY
0N/A#define P11_ENABLE_C_DIGESTFINAL
0N/A#define P11_ENABLE_C_SIGNINIT
0N/A#define P11_ENABLE_C_SIGN
0N/A#define P11_ENABLE_C_SIGNUPDATE
0N/A#define P11_ENABLE_C_SIGNFINAL
0N/A#define P11_ENABLE_C_SIGNRECOVERINIT
0N/A#define P11_ENABLE_C_SIGNRECOVER
0N/A#define P11_ENABLE_C_VERIFYINIT
0N/A#define P11_ENABLE_C_VERIFY
0N/A#define P11_ENABLE_C_VERIFYUPDATE
0N/A#define P11_ENABLE_C_VERIFYFINAL
0N/A#define P11_ENABLE_C_VERIFYRECOVERINIT
0N/A#define P11_ENABLE_C_VERIFYRECOVER
0N/A#undef P11_ENABLE_C_DIGESTENCRYPTUPDATE
0N/A#undef P11_ENABLE_C_DECRYPTDIGESTUPDATE
0N/A#undef P11_ENABLE_C_SIGNENCRYPTUPDATE
0N/A#undef P11_ENABLE_C_DECRYPTVERIFYUPDATE
0N/A#define P11_ENABLE_C_GENERATEKEY
0N/A#define P11_ENABLE_C_GENERATEKEYPAIR
0N/A#define P11_ENABLE_C_WRAPKEY
0N/A#define P11_ENABLE_C_UNWRAPKEY
0N/A#define P11_ENABLE_C_DERIVEKEY
0N/A#define P11_ENABLE_C_SEEDRANDOM
0N/A#define P11_ENABLE_C_GENERATERANDOM
0N/A#undef P11_ENABLE_C_GETFUNCTIONSTATUS
0N/A#undef P11_ENABLE_C_CANCELFUNCTION
0N/A#undef P11_ENABLE_C_WAITFORSLOTEVENT
0N/A
0N/A/* include the platform dependent part of the header */
0N/A#include "p11_md.h"
0N/A
0N/A#include "pkcs11.h"
3645N/A#include "pkcs-11v2-20a3.h"
0N/A#include <jni.h>
936N/A#include <jni_util.h>
0N/A
0N/A#define MAX_STACK_BUFFER_LEN (4 * 1024)
0N/A#define MAX_HEAP_BUFFER_LEN (64 * 1024)
0N/A
0N/A#define MAX_DIGEST_LEN (64)
0N/A
0N/A#ifndef min
0N/A#define min(a, b) (((a) < (b)) ? (a) : (b))
0N/A#endif
0N/A
0N/A#define ckBBoolToJBoolean(x) ((x == TRUE) ? JNI_TRUE : JNI_FALSE);
0N/A#define jBooleanToCKBBool(x) ((x == JNI_TRUE) ? TRUE : FALSE);
0N/A
0N/A#define ckByteToJByte(x) ((jbyte) x)
0N/A#define jByteToCKByte(x) ((CK_BYTE) x)
0N/A
0N/A#define ckLongToJLong(x) ((jlong) x)
0N/A#define jLongToCKLong(x) ((CK_LONG) x)
0N/A
0N/A#define ckULongToJLong(x) ((jlong) x)
0N/A#define jLongToCKULong(x) ((CK_ULONG) x)
0N/A
0N/A// For CK_UNAVAILABLE_INFORMATION, always return -1 to avoid 32/64 bit problems.
0N/A#define ckULongSpecialToJLong(x) (((x) == CK_UNAVAILABLE_INFORMATION) \
0N/A ? (jlong)-1 : ((jlong) x))
0N/A
0N/A#define ckCharToJChar(x) ((jchar) x)
0N/A#define jCharToCKChar(x) ((CK_CHAR) x)
0N/A
0N/A#define ckUTF8CharToJChar(x) ((jchar) x)
0N/A#define jCharToCKUTF8Char(x) ((CK_UTF8CHAR) x)
0N/A
0N/A#define ckFlageToJLong(x) ((jlong) x)
0N/A
0N/A#define ckVoidPtrToJObject(x) ((jobject) x)
0N/A#define jObjectToCKVoidPtr(x) ((CK_VOID_PTR) x)
0N/A
0N/A#define jIntToCKLong(x) ((CK_LONG) x)
0N/A#define jIntToCKULong(x) ((CK_ULONG) x)
0N/A#define ckLongToJInt(x) ((jint) x)
0N/A#define ckULongToJInt(x) ((jint) x)
0N/A#define ckULongToJSize(x) ((jsize) x)
0N/A#define unsignedIntToCKULong(x) ((CK_ULONG) x)
0N/A
0N/A#ifdef P11_DEBUG
0N/A#define TRACE0(s) { printf(s); fflush(stdout); }
0N/A#define TRACE1(s, p1) { printf(s, p1); fflush(stdout); }
0N/A#define TRACE2(s, p1, p2) { printf(s, p1, p2); fflush(stdout); }
0N/A#define TRACE3(s, p1, p2, p3) { printf(s, p1, p2, p3); fflush(stdout); }
0N/A#else
0N/A#define TRACE0(s)
0N/A#define TRACE1(s, p1)
0N/A#define TRACE2(s, p1, p2)
0N/A#define TRACE3(s, p1, p2, p3)
0N/A#define TRACE_INTEND
0N/A#define TRACE_UNINTEND
0N/A#endif
0N/A
0N/A#define CK_ASSERT_OK 0L
0N/A
0N/A#define CLASS_INFO "sun/security/pkcs11/wrapper/CK_INFO"
0N/A#define CLASS_VERSION "sun/security/pkcs11/wrapper/CK_VERSION"
0N/A#define CLASS_SLOT_INFO "sun/security/pkcs11/wrapper/CK_SLOT_INFO"
0N/A#define CLASS_TOKEN_INFO "sun/security/pkcs11/wrapper/CK_TOKEN_INFO"
0N/A#define CLASS_MECHANISM "sun/security/pkcs11/wrapper/CK_MECHANISM"
0N/A#define CLASS_MECHANISM_INFO "sun/security/pkcs11/wrapper/CK_MECHANISM_INFO"
0N/A#define CLASS_SESSION_INFO "sun/security/pkcs11/wrapper/CK_SESSION_INFO"
0N/A#define CLASS_ATTRIBUTE "sun/security/pkcs11/wrapper/CK_ATTRIBUTE"
0N/A#define CLASS_DATE "sun/security/pkcs11/wrapper/CK_DATE"
0N/A#define CLASS_PKCS11EXCEPTION "sun/security/pkcs11/wrapper/PKCS11Exception"
0N/A#define CLASS_PKCS11RUNTIMEEXCEPTION "sun/security/pkcs11/wrapper/PKCS11RuntimeException"
0N/A#define CLASS_FILE_NOT_FOUND_EXCEPTION "java/io/FileNotFoundException"
0N/A#define CLASS_IO_EXCEPTION "java/io/IOException"
0N/A#define CLASS_C_INITIALIZE_ARGS "sun/security/pkcs11/wrapper/CK_C_INITIALIZE_ARGS"
0N/A#define CLASS_CREATEMUTEX "sun/security/pkcs11/wrapper/CK_CREATEMUTEX"
0N/A#define CLASS_DESTROYMUTEX "sun/security/pkcs11/wrapper/CK_DESTROYMUTEX"
0N/A#define CLASS_LOCKMUTEX "sun/security/pkcs11/wrapper/CK_LOCKMUTEX"
0N/A#define CLASS_UNLOCKMUTEX "sun/security/pkcs11/wrapper/CK_UNLOCKMUTEX"
0N/A#define CLASS_NOTIFY "sun/security/pkcs11/wrapper/CK_NOTIFY"
0N/A
0N/A
0N/A/* mechanism parameter classes */
0N/A
0N/A#define CLASS_RSA_PKCS_OAEP_PARAMS "sun/security/pkcs11/wrapper/CK_RSA_PKCS_OAEP_PARAMS"
0N/A#define CLASS_MAC_GENERAL_PARAMS "sun/security/pkcs11/wrapper/CK_MAC_GENERAL_PARAMS"
0N/A#define CLASS_PBE_PARAMS "sun/security/pkcs11/wrapper/CK_PBE_PARAMS"
0N/A#define PBE_INIT_VECTOR_SIZE 8
0N/A#define CLASS_PKCS5_PBKD2_PARAMS "sun/security/pkcs11/wrapper/CK_PKCS5_PBKD2_PARAMS"
0N/A#define CLASS_EXTRACT_PARAMS "sun/security/pkcs11/wrapper/CK_EXTRACT_PARAMS"
0N/A
0N/A#define CLASS_RSA_PKCS_PSS_PARAMS "sun/security/pkcs11/wrapper/CK_RSA_PKCS_PSS_PARAMS"
0N/A#define CLASS_ECDH1_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_ECDH1_DERIVE_PARAMS"
0N/A#define CLASS_ECDH2_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_ECDH2_DERIVE_PARAMS"
0N/A#define CLASS_X9_42_DH1_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_X9_42_DH1_DERIVE_PARAMS"
0N/A#define CLASS_X9_42_DH2_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_X9_42_DH2_DERIVE_PARAMS"
0N/A
0N/A/*
0N/A#define CLASS_KEA_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_KEA_DERIVE_PARAMS"
0N/A#define CLASS_RC2_PARAMS "sun/security/pkcs11/wrapper/CK_RC2_PARAMS"
0N/A#define CLASS_RC2_CBC_PARAMS "sun/security/pkcs11/wrapper/CK_RC2_CBC_PARAMS"
0N/A#define CLASS_RC2_MAC_GENERAL_PARAMS "sun/security/pkcs11/wrapper/CK_RC2_MAC_GENERAL_PARAMS"
0N/A#define CLASS_RC5_PARAMS "sun/security/pkcs11/wrapper/CK_RC5_PARAMS"
0N/A#define CLASS_RC5_CBC_PARAMS "sun/security/pkcs11/wrapper/CK_RC5_CBC_PARAMS"
0N/A#define CLASS_RC5_MAC_GENERAL_PARAMS "sun/security/pkcs11/wrapper/CK_RC5_MAC_GENERAL_PARAMS"
0N/A#define CLASS_SKIPJACK_PRIVATE_WRAP_PARAMS "sun/security/pkcs11/wrapper/CK_SKIPJACK_PRIVATE_WRAP_PARAMS"
0N/A#define CLASS_SKIPJACK_RELAYX_PARAMS "sun/security/pkcs11/wrapper/CK_SKIPJACK_RELAYX_PARAMS"
0N/A#define CLASS_KEY_WRAP_SET_OAEP_PARAMS "sun/security/pkcs11/wrapper/CK_KEY_WRAP_SET_OAEP_PARAMS"
0N/A#define CLASS_KEY_DERIVATION_STRING_DATA "sun/security/pkcs11/wrapper/CK_KEY_DERIVATION_STRING_DATA"
0N/A*/
0N/A
0N/A#define CLASS_SSL3_RANDOM_DATA "sun/security/pkcs11/wrapper/CK_SSL3_RANDOM_DATA"
0N/A// CLASS_SSL3_RANDOM_DATA is used by CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS
0N/A#define CLASS_SSL3_KEY_MAT_OUT "sun/security/pkcs11/wrapper/CK_SSL3_KEY_MAT_OUT"
0N/A// CLASS_SSL3_KEY_MAT_OUT is used by CLASS_SSL3_KEY_MAT_PARAMS
0N/A#define CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS "sun/security/pkcs11/wrapper/CK_SSL3_MASTER_KEY_DERIVE_PARAMS"
0N/A#define CLASS_SSL3_KEY_MAT_PARAMS "sun/security/pkcs11/wrapper/CK_SSL3_KEY_MAT_PARAMS"
0N/A#define CLASS_TLS_PRF_PARAMS "sun/security/pkcs11/wrapper/CK_TLS_PRF_PARAMS"
3645N/A#define CLASS_AES_CTR_PARAMS "sun/security/pkcs11/wrapper/CK_AES_CTR_PARAMS"
0N/A
0N/A/* function to convert a PKCS#11 return value other than CK_OK into a Java Exception
0N/A * or to throw a PKCS11RuntimeException
0N/A */
0N/A
0N/Ajlong ckAssertReturnValueOK(JNIEnv *env, CK_RV returnValue);
0N/Avoid throwIOException(JNIEnv *env, const char *message);
936N/Avoid throwPKCS11RuntimeException(JNIEnv *env, const char *message);
0N/Avoid throwDisconnectedRuntimeException(JNIEnv *env);
0N/A
936N/A/* function to free CK_ATTRIBUTE array
936N/A */
936N/Avoid freeCKAttributeArray(CK_ATTRIBUTE_PTR attrPtr, int len);
936N/A
0N/A/* funktions to convert Java arrays to a CK-type array and the array length */
0N/A
0N/Avoid jBooleanArrayToCKBBoolArray(JNIEnv *env, const jbooleanArray jArray, CK_BBOOL **ckpArray, CK_ULONG_PTR ckLength);
0N/Avoid jByteArrayToCKByteArray(JNIEnv *env, const jbyteArray jArray, CK_BYTE_PTR *ckpArray, CK_ULONG_PTR ckLength);
0N/Avoid jLongArrayToCKULongArray(JNIEnv *env, const jlongArray jArray, CK_ULONG_PTR *ckpArray, CK_ULONG_PTR ckLength);
0N/Avoid jCharArrayToCKCharArray(JNIEnv *env, const jcharArray jArray, CK_CHAR_PTR *ckpArray, CK_ULONG_PTR ckLength);
0N/Avoid jCharArrayToCKUTF8CharArray(JNIEnv *env, const jcharArray jArray, CK_UTF8CHAR_PTR *ckpArray, CK_ULONG_PTR ckLength);
0N/Avoid jStringToCKUTF8CharArray(JNIEnv *env, const jstring jArray, CK_UTF8CHAR_PTR *ckpArray, CK_ULONG_PTR ckpLength);
0N/Avoid jAttributeArrayToCKAttributeArray(JNIEnv *env, jobjectArray jAArray, CK_ATTRIBUTE_PTR *ckpArray, CK_ULONG_PTR ckpLength);
0N/A/*void jObjectArrayToCKVoidPtrArray(JNIEnv *env, const jobjectArray jArray, CK_VOID_PTR_PTR ckpArray, CK_ULONG_PTR ckpLength); */
0N/A
0N/A
0N/A/* funktions to convert a CK-type array and the array length to a Java array */
0N/A
1428N/AjbyteArray ckByteArrayToJByteArray(JNIEnv *env, const CK_BYTE_PTR ckpArray, CK_ULONG ckLength);
0N/AjlongArray ckULongArrayToJLongArray(JNIEnv *env, const CK_ULONG_PTR ckpArray, CK_ULONG ckLength);
0N/AjcharArray ckCharArrayToJCharArray(JNIEnv *env, const CK_CHAR_PTR ckpArray, CK_ULONG length);
0N/AjcharArray ckUTF8CharArrayToJCharArray(JNIEnv *env, const CK_UTF8CHAR_PTR ckpArray, CK_ULONG ckLength);
0N/A
0N/A
0N/A/* funktions to convert a CK-type structure or a pointer to a CK-value to a Java object */
0N/A
0N/Ajobject ckBBoolPtrToJBooleanObject(JNIEnv *env, const CK_BBOOL* ckpValue);
0N/Ajobject ckULongPtrToJLongObject(JNIEnv *env, const CK_ULONG_PTR ckpValue);
0N/Ajobject ckDatePtrToJDateObject(JNIEnv *env, const CK_DATE *ckpValue);
0N/Ajobject ckVersionPtrToJVersion(JNIEnv *env, const CK_VERSION_PTR ckpVersion);
0N/Ajobject ckSessionInfoPtrToJSessionInfo(JNIEnv *env, const CK_SESSION_INFO_PTR ckpSessionInfo);
0N/Ajobject ckAttributePtrToJAttribute(JNIEnv *env, const CK_ATTRIBUTE_PTR ckpAttribute);
0N/A
0N/A
0N/A/* funktion to convert the CK-value used by the CK_ATTRIBUTE structure to a Java object */
0N/A
0N/Ajobject ckAttributeValueToJObject(JNIEnv *env, const CK_ATTRIBUTE_PTR ckpAttribute);
0N/A
0N/A
0N/A/* funktions to convert a Java object to a CK-type structure or a pointer to a CK-value */
0N/A
0N/ACK_BBOOL* jBooleanObjectToCKBBoolPtr(JNIEnv *env, jobject jObject);
0N/ACK_BYTE_PTR jByteObjectToCKBytePtr(JNIEnv *env, jobject jObject);
0N/ACK_ULONG* jIntegerObjectToCKULongPtr(JNIEnv *env, jobject jObject);
0N/ACK_ULONG* jLongObjectToCKULongPtr(JNIEnv *env, jobject jObject);
0N/ACK_CHAR_PTR jCharObjectToCKCharPtr(JNIEnv *env, jobject jObject);
0N/ACK_VERSION_PTR jVersionToCKVersionPtr(JNIEnv *env, jobject jVersion);
0N/ACK_DATE * jDateObjectPtrToCKDatePtr(JNIEnv *env, jobject jDate);
0N/ACK_ATTRIBUTE jAttributeToCKAttribute(JNIEnv *env, jobject jAttribute);
0N/A/*CK_MECHANISM jMechanismToCKMechanism(JNIEnv *env, jobject jMechanism);*/
0N/Avoid jMechanismToCKMechanism(JNIEnv *env, jobject jMechanism, CK_MECHANISM_PTR ckMechanismPtr);
0N/A
0N/A
0N/A/* funktions to convert Java objects used by the Mechanism and Attribute class to a CK-type structure */
0N/A
0N/Avoid jObjectToPrimitiveCKObjectPtrPtr(JNIEnv *env, jobject jObject, CK_VOID_PTR *ckpObjectPtr, CK_ULONG *pLength);
0N/Avoid jMechanismParameterToCKMechanismParameter(JNIEnv *env, jobject jParam, CK_VOID_PTR *ckpParamPtr, CK_ULONG *ckpLength);
0N/A
0N/A
0N/A/* functions to convert a specific Java mechanism parameter object to a CK-mechanism parameter structure */
0N/A
0N/ACK_RSA_PKCS_OAEP_PARAMS jRsaPkcsOaepParamToCKRsaPkcsOaepParam(JNIEnv *env, jobject jParam);
0N/ACK_KEA_DERIVE_PARAMS jKeaDeriveParamToCKKeaDeriveParam(JNIEnv *env, jobject jParam);
0N/ACK_RC2_CBC_PARAMS jRc2CbcParamToCKRc2CbcParam(JNIEnv *env, jobject jParam);
0N/ACK_RC2_MAC_GENERAL_PARAMS jRc2MacGeneralParamToCKRc2MacGeneralParam(JNIEnv *env, jobject jParam);
0N/ACK_RC5_PARAMS jRc5ParamToCKRc5Param(JNIEnv *env, jobject jParam);
0N/ACK_RC5_CBC_PARAMS jRc5CbcParamToCKRc5CbcParam(JNIEnv *env, jobject jParam);
0N/ACK_RC5_MAC_GENERAL_PARAMS jRc5MacGeneralParamToCKRc5MacGeneralParam(JNIEnv *env, jobject jParam);
0N/ACK_SKIPJACK_PRIVATE_WRAP_PARAMS jSkipjackPrivateWrapParamToCKSkipjackPrivateWrapParam(JNIEnv *env, jobject jParam);
0N/ACK_SKIPJACK_RELAYX_PARAMS jSkipjackRelayxParamToCKSkipjackRelayxParam(JNIEnv *env, jobject jParam);
0N/ACK_PBE_PARAMS jPbeParamToCKPbeParam(JNIEnv *env, jobject jParam);
0N/Avoid copyBackPBEInitializationVector(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
0N/ACK_PKCS5_PBKD2_PARAMS jPkcs5Pbkd2ParamToCKPkcs5Pbkd2Param(JNIEnv *env, jobject jParam);
0N/ACK_KEY_WRAP_SET_OAEP_PARAMS jKeyWrapSetOaepParamToCKKeyWrapSetOaepParam(JNIEnv *env, jobject jParam);
0N/Avoid copyBackSetUnwrappedKey(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
0N/ACK_SSL3_MASTER_KEY_DERIVE_PARAMS jSsl3MasterKeyDeriveParamToCKSsl3MasterKeyDeriveParam(JNIEnv *env, jobject jParam);
0N/Avoid copyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
0N/ACK_SSL3_KEY_MAT_PARAMS jSsl3KeyMatParamToCKSsl3KeyMatParam(JNIEnv *env, jobject jParam);
0N/Avoid copyBackSSLKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism);
0N/ACK_KEY_DERIVATION_STRING_DATA jKeyDerivationStringDataToCKKeyDerivationStringData(JNIEnv *env, jobject jParam);
0N/ACK_RSA_PKCS_PSS_PARAMS jRsaPkcsPssParamToCKRsaPkcsPssParam(JNIEnv *env, jobject jParam);
0N/ACK_ECDH1_DERIVE_PARAMS jEcdh1DeriveParamToCKEcdh1DeriveParam(JNIEnv *env, jobject jParam);
0N/ACK_ECDH2_DERIVE_PARAMS jEcdh2DeriveParamToCKEcdh2DeriveParam(JNIEnv *env, jobject jParam);
0N/ACK_X9_42_DH1_DERIVE_PARAMS jX942Dh1DeriveParamToCKX942Dh1DeriveParam(JNIEnv *env, jobject jParam);
0N/ACK_X9_42_DH2_DERIVE_PARAMS jX942Dh2DeriveParamToCKX942Dh2DeriveParam(JNIEnv *env, jobject jParam);
0N/A
0N/A
0N/A/* functions to convert the InitArgs object for calling the right Java mutex functions */
0N/A
0N/ACK_C_INITIALIZE_ARGS_PTR makeCKInitArgsAdapter(JNIEnv *env, jobject pInitArgs);
0N/A
0N/A#ifndef NO_CALLBACKS /* if the library should not make callbacks; e.g. no javai.lib or jvm.lib available */
0N/ACK_RV callJCreateMutex(CK_VOID_PTR_PTR ppMutex);
0N/ACK_RV callJDestroyMutex(CK_VOID_PTR pMutex);
0N/ACK_RV callJLockMutex(CK_VOID_PTR pMutex);
0N/ACK_RV callJUnlockMutex(CK_VOID_PTR pMutex);
0N/A#endif /* NO_CALLBACKS */
0N/A
0N/Avoid putModuleEntry(JNIEnv *env, jobject pkcs11Implementation, ModuleData *moduleData);
0N/AModuleData * removeModuleEntry(JNIEnv *env, jobject pkcs11Implementation);
0N/ACK_FUNCTION_LIST_PTR getFunctionList(JNIEnv *env, jobject pkcs11Implementation);
0N/A
0N/A/* A structure to encapsulate the required data for a Notify callback */
0N/Astruct NotifyEncapsulation {
0N/A
0N/A /* The object that implements the CK_NOTIFY interface and which should be
0N/A * notified.
0N/A */
0N/A jobject jNotifyObject;
0N/A
0N/A /* The data object to pass back to the Notify object upon callback. */
0N/A jobject jApplicationData;
0N/A};
0N/Atypedef struct NotifyEncapsulation NotifyEncapsulation;
0N/A
0N/A/* The function for handling notify callbacks. */
0N/ACK_RV notifyCallback(
0N/A CK_SESSION_HANDLE hSession, /* the session's handle */
0N/A CK_NOTIFICATION event,
0N/A CK_VOID_PTR pApplication /* passed to C_OpenSession */
0N/A);
0N/A
0N/A
0N/A/* A node of the list of notify callbacks. To be able to free the resources after use. */
0N/Astruct NotifyListNode {
0N/A
0N/A /* The handle of the session this notify object is attached to*/
0N/A CK_SESSION_HANDLE hSession;
0N/A
0N/A /* Reference to the Notify encapsulation object that was passed to C_OpenSession. */
0N/A NotifyEncapsulation *notifyEncapsulation;
0N/A
0N/A /* Pointer to the next node in the list. */
0N/A struct NotifyListNode *next;
0N/A
0N/A};
0N/Atypedef struct NotifyListNode NotifyListNode;
0N/A
0N/Avoid putNotifyEntry(JNIEnv *env, CK_SESSION_HANDLE hSession, NotifyEncapsulation *notifyEncapsulation);
0N/ANotifyEncapsulation * removeNotifyEntry(JNIEnv *env, CK_SESSION_HANDLE hSession);
0N/ANotifyEncapsulation * removeFirstNotifyEntry(JNIEnv *env);
0N/A
0N/Ajobject createLockObject(JNIEnv *env);
0N/Avoid destroyLockObject(JNIEnv *env, jobject jLockObject);
0N/A
0N/Aextern jfieldID pNativeDataID;
0N/Aextern jfieldID mech_mechanismID;
0N/Aextern jfieldID mech_pParameterID;
0N/A
0N/Aextern jclass jByteArrayClass;
0N/Aextern jclass jLongClass;
0N/A
0N/A#ifndef NO_CALLBACKS
0N/Aextern NotifyListNode *notifyListHead;
0N/Aextern jobject notifyListLock;
0N/A
0N/Aextern jobject jInitArgsObject;
0N/Aextern CK_C_INITIALIZE_ARGS_PTR ckpGlobalInitArgs;
0N/A#endif /* NO_CALLBACKS */
936N/A
936N/A#ifdef P11_MEMORYDEBUG
936N/A#include <stdlib.h>
936N/A
936N/A/* Simple malloc/free dumper */
936N/Avoid *p11malloc(size_t c, char *file, int line);
936N/Avoid p11free(void *p, char *file, int line);
936N/A
936N/A#define malloc(c) (p11malloc((c), __FILE__, __LINE__))
936N/A#define free(c) (p11free((c), __FILE__, __LINE__))
936N/A
936N/A#endif