p11_sign.c revision 1428
936N/A * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. 0N/A/* Copyright (c) 2002 Graz University of Technology. All rights reserved. 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 * 1. Redistributions of source code must retain the above copyright notice, 0N/A * this list of conditions and the following disclaimer. 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 * 3. The end-user documentation included with the redistribution, if any, must 0N/A * include the following acknowledgment: 0N/A * "This product includes software developed by IAIK of Graz University of 0N/A * Alternately, this acknowledgment may appear in the software itself, if 0N/A * and wherever such third-party acknowledgments normally appear. 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 * 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 * 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 * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_SignInit 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jobject jMechanism CK_MECHANISM_PTR pMechanism 0N/A * @return jlong jKeyHandle CK_OBJECT_HANDLE hKey 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Signature: (J[B)[B 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jbyteArray jData CK_BYTE_PTR pData 0N/A * CK_ULONG ulDataLen 0N/A * @return jbyteArray jSignature CK_BYTE_PTR pSignature 0N/A * CK_ULONG_PTR pulSignatureLen 0N/A /* START standard code */ 0N/A /* first determine the length of the signature */ 0N/A /* now get the signature */ 0N/A /* END standard code */ 0N/A /* START workaround code for operation abort bug in pkcs#11 of Datakey and iButton */ 0N/A ckpSignature = (CK_BYTE_PTR) malloc(256 * sizeof(CK_BYTE)); 936N/A if (ckpSignature == NULL) { 936N/A JNU_ThrowOutOfMemoryError(env, 0); 0N/A rv = (*ckpFunctions->C_Sign)(ckSessionHandle, ckpData, ckDataLength, ckpSignature, &ckSignatureLength); 0N/A if (rv == CKR_BUFFER_TOO_SMALL) { 0N/A ckpSignature = (CK_BYTE_PTR) malloc(ckSignatureLength * sizeof(CK_BYTE)); 936N/A if (ckpSignature == NULL) { 936N/A JNU_ThrowOutOfMemoryError(env, 0); 0N/A rv = (*ckpFunctions->C_Sign)(ckSessionHandle, ckpData, ckDataLength, ckpSignature, &ckSignatureLength); 0N/A /* END workaround code */ 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_SignUpdate 0N/A * Signature: (J[BII)V 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jbyteArray jPart CK_BYTE_PTR pPart 0N/A * CK_ULONG ulPartLen 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_SignFinal 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @return jbyteArray jSignature CK_BYTE_PTR pSignature 0N/A * CK_ULONG_PTR pulSignatureLen 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_SignRecoverInit 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jobject jMechanism CK_MECHANISM_PTR pMechanism 0N/A * @return jlong jKeyHandle CK_OBJECT_HANDLE hKey 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_SignRecover 0N/A * Signature: (J[BII[BII)I 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jbyteArray jData CK_BYTE_PTR pData 0N/A * CK_ULONG ulDataLen 0N/A * @return jbyteArray jSignature CK_BYTE_PTR pSignature 0N/A * CK_ULONG_PTR pulSignatureLen 0N/A /* re-alloc larger buffer if it fits into our Java buffer */ 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_VerifyInit 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jobject jMechanism CK_MECHANISM_PTR pMechanism 0N/A * @return jlong jKeyHandle CK_OBJECT_HANDLE hKey 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Signature: (J[B[B)V 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jbyteArray jData CK_BYTE_PTR pData 0N/A * CK_ULONG ulDataLen 0N/A * @param jbyteArray jSignature CK_BYTE_PTR pSignature 0N/A * CK_ULONG_PTR pulSignatureLen 0N/A /* verify the signature */ 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_VerifyUpdate 0N/A * Signature: (J[BII)V 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jbyteArray jPart CK_BYTE_PTR pPart 0N/A * CK_ULONG ulPartLen 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_VerifyFinal 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jbyteArray jSignature CK_BYTE_PTR pSignature 0N/A * CK_ULONG ulSignatureLen 0N/A /* verify the signature */ 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_VerifyRecoverInit 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jobject jMechanism CK_MECHANISM_PTR pMechanism 0N/A * @return jlong jKeyHandle CK_OBJECT_HANDLE hKey 0N/A * Class: sun_security_pkcs11_wrapper_PKCS11 0N/A * Method: C_VerifyRecover 0N/A * Signature: (J[BII[BII)I 0N/A * Parametermapping: *PKCS11* 0N/A * @param jlong jSessionHandle CK_SESSION_HANDLE hSession 0N/A * @param jbyteArray jSignature CK_BYTE_PTR pSignature 0N/A * CK_ULONG ulSignatureLen 0N/A * @return jbyteArray jData CK_BYTE_PTR pData 0N/A * CK_ULONG_PTR pulDataLen 0N/A /* re-alloc larger buffer if it fits into our Java buffer */