src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_crypt.c
changeset 58489 2faeaa5933a6
parent 55332 f492567244ab
child 58679 9c3209ff7550
equal deleted inserted replaced
58488:165b193b30dd 58489:2faeaa5933a6
    70 (JNIEnv *env, jobject obj, jlong jSessionHandle,
    70 (JNIEnv *env, jobject obj, jlong jSessionHandle,
    71  jobject jMechanism, jlong jKeyHandle)
    71  jobject jMechanism, jlong jKeyHandle)
    72 {
    72 {
    73     CK_SESSION_HANDLE ckSessionHandle;
    73     CK_SESSION_HANDLE ckSessionHandle;
    74     CK_MECHANISM_PTR ckpMechanism = NULL;
    74     CK_MECHANISM_PTR ckpMechanism = NULL;
       
    75     CK_MECHANISM_PTR ckpTemp;
    75     CK_OBJECT_HANDLE ckKeyHandle;
    76     CK_OBJECT_HANDLE ckKeyHandle;
    76     CK_RV rv;
    77     CK_RV rv;
    77 
    78 
    78     CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
    79     CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
    79     if (ckpFunctions == NULL) { return; }
    80     if (ckpFunctions == NULL) { return; }
    80 
    81 
    81     ckSessionHandle = jLongToCKULong(jSessionHandle);
    82     ckSessionHandle = jLongToCKULong(jSessionHandle);
    82     ckKeyHandle = jLongToCKULong(jKeyHandle);
    83     ckKeyHandle = jLongToCKULong(jKeyHandle);
    83     ckpMechanism = jMechanismToCKMechanismPtr(env, jMechanism);
    84     ckpMechanism = jMechanismToCKMechanismPtr(env, jMechanism);
       
    85     TRACE1("DEBUG C_EncryptInit: created pMech = %p\n",
       
    86             ckpMechanism);
       
    87 
    84     if ((*env)->ExceptionCheck(env)) { return; }
    88     if ((*env)->ExceptionCheck(env)) { return; }
    85 
    89 
    86     rv = (*ckpFunctions->C_EncryptInit)(ckSessionHandle, ckpMechanism,
    90     rv = (*ckpFunctions->C_EncryptInit)(ckSessionHandle, ckpMechanism,
    87                                         ckKeyHandle);
    91                                         ckKeyHandle);
    88 
    92 
    89     // if OAEP, then cannot free here
    93     if (ckpMechanism->mechanism == CKM_AES_GCM) {
       
    94         if (rv == CKR_ARGUMENTS_BAD || rv == CKR_MECHANISM_PARAM_INVALID) {
       
    95             // retry with CKM_GCM_PARAMS structure in pkcs11t.h
       
    96             TRACE0("DEBUG C_EncryptInit: retry with CK_GCM_PARAMS\n");
       
    97             ckpTemp = updateGCMParams(env, ckpMechanism);
       
    98             if (ckpTemp != NULL) { // only re-call if conversion succeeds
       
    99                 ckpMechanism = ckpTemp;
       
   100                 rv = (*ckpFunctions->C_EncryptInit)(ckSessionHandle, ckpMechanism,
       
   101                         ckKeyHandle);
       
   102             }
       
   103         }
       
   104     }
       
   105 
       
   106     TRACE1("DEBUG C_EncryptInit: freed pMech = %p\n", ckpMechanism);
    90     freeCKMechanismPtr(ckpMechanism);
   107     freeCKMechanismPtr(ckpMechanism);
    91 
       
    92     if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
   108     if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
       
   109 
       
   110     TRACE0("FINISHED\n");
    93 }
   111 }
    94 #endif
   112 #endif
    95 
   113 
    96 #ifdef P11_ENABLE_C_ENCRYPT
   114 #ifdef P11_ENABLE_C_ENCRYPT
    97 /*
   115 /*
   290 (JNIEnv *env, jobject obj, jlong jSessionHandle,
   308 (JNIEnv *env, jobject obj, jlong jSessionHandle,
   291  jobject jMechanism, jlong jKeyHandle)
   309  jobject jMechanism, jlong jKeyHandle)
   292 {
   310 {
   293     CK_SESSION_HANDLE ckSessionHandle;
   311     CK_SESSION_HANDLE ckSessionHandle;
   294     CK_MECHANISM_PTR ckpMechanism = NULL;
   312     CK_MECHANISM_PTR ckpMechanism = NULL;
       
   313     CK_MECHANISM_PTR ckpTemp;
   295     CK_OBJECT_HANDLE ckKeyHandle;
   314     CK_OBJECT_HANDLE ckKeyHandle;
   296     CK_RV rv;
   315     CK_RV rv;
   297 
   316 
   298     CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
   317     CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
   299     if (ckpFunctions == NULL) { return; }
   318     if (ckpFunctions == NULL) { return; }
   300 
   319 
   301     ckSessionHandle = jLongToCKULong(jSessionHandle);
   320     ckSessionHandle = jLongToCKULong(jSessionHandle);
   302     ckKeyHandle = jLongToCKULong(jKeyHandle);
   321     ckKeyHandle = jLongToCKULong(jKeyHandle);
   303     ckpMechanism = jMechanismToCKMechanismPtr(env, jMechanism);
   322     ckpMechanism = jMechanismToCKMechanismPtr(env, jMechanism);
       
   323     TRACE1("DEBUG C_DecryptInit: created pMech = %p\n",
       
   324             ckpMechanism);
       
   325 
   304     if ((*env)->ExceptionCheck(env)) { return; }
   326     if ((*env)->ExceptionCheck(env)) { return; }
   305 
   327 
   306     rv = (*ckpFunctions->C_DecryptInit)(ckSessionHandle, ckpMechanism,
   328     rv = (*ckpFunctions->C_DecryptInit)(ckSessionHandle, ckpMechanism,
   307                                         ckKeyHandle);
   329                                         ckKeyHandle);
   308 
   330 
   309     // if OAEP, then cannot free here
   331     if (ckpMechanism->mechanism == CKM_AES_GCM) {
       
   332         if (rv == CKR_ARGUMENTS_BAD || rv == CKR_MECHANISM_PARAM_INVALID) {
       
   333             // retry with CKM_GCM_PARAMS structure in pkcs11t.h
       
   334             TRACE0("DEBUG C_DecryptInit: retry with CK_GCM_PARAMS\n");
       
   335             ckpTemp = updateGCMParams(env, ckpMechanism);
       
   336             if (ckpTemp != NULL) { // only re-call if conversion succeeds
       
   337                 ckpMechanism = ckpTemp;
       
   338                 rv = (*ckpFunctions->C_DecryptInit)(ckSessionHandle, ckpMechanism,
       
   339                         ckKeyHandle);
       
   340             }
       
   341         }
       
   342     }
       
   343 
       
   344     TRACE1("DEBUG C_DecryptInit: freed pMech = %p\n", ckpMechanism);
   310     freeCKMechanismPtr(ckpMechanism);
   345     freeCKMechanismPtr(ckpMechanism);
   311 
       
   312     if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
   346     if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
       
   347 
       
   348     TRACE0("FINISHED\n");
   313 }
   349 }
   314 #endif
   350 #endif
   315 
   351 
   316 #ifdef P11_ENABLE_C_DECRYPT
   352 #ifdef P11_ENABLE_C_DECRYPT
   317 /*
   353 /*