@@ -2118,15 +2118,17 @@ JNIEXPORT jbyteArray JNICALL Java_com_ibm_crypto_plus_provider_ock_NativeInterfa
21182118 jbyteArray secretBytes = NULL;
21192119 unsigned char * secretBytesNative = NULL;
21202120 jboolean isCopy = 0;
2121- jbyteArray retSecretBytes = NULL;
21222121 size_t secret_key_len = 0;
2122+ int rc = 0;
21232123
2124-
2125- if( debug ) gslogFunctionEntry(functionName);
2124+ if (debug) {
2125+ gslogFunctionEntry(functionName);
2126+ }
21262127
21272128 gen_ctx = ICC_EVP_PKEY_CTX_new(ockCtx,(ICC_EVP_PKEY *) ockPrivXecKey,NULL); /* Set private key */
2128- if(gen_ctx == NULL) throwOCKException(env, 0, "NULL from ICC_EVP_PKEY_CTX_new");
2129- else {
2129+ if (NULL == gen_ctx) {
2130+ throwOCKException(env, 0, "NULL from ICC_EVP_PKEY_CTX_new");
2131+ } else {
21302132 ICC_EVP_PKEY_derive_init(ockCtx, gen_ctx);
21312133 ICC_EVP_PKEY_derive_set_peer(ockCtx, gen_ctx, ockPubXecKey); /* Set public key */
21322134 if (secretBufferSize > 0) {
@@ -2135,28 +2137,43 @@ JNIEXPORT jbyteArray JNICALL Java_com_ibm_crypto_plus_provider_ock_NativeInterfa
21352137 ICC_EVP_PKEY_derive(ockCtx, gen_ctx, NULL, &secret_key_len); /* Get secret key size */
21362138 }
21372139 secretBytes = (*env)->NewByteArray(env, secret_key_len); /* Create Java secret bytes array with size */
2138- if( secretBytes == NULL ) throwOCKException(env, 0, "NewByteArray failed");
2139- else {
2140+ if (NULL == secretBytes) {
2141+ throwOCKException(env, 0, "NewByteArray failed");
2142+ } else {
21402143 secretBytesNative = (unsigned char*)((*env)->GetPrimitiveArrayCritical(env, secretBytes, &isCopy));
2141- if( secretBytesNative == NULL ) throwOCKException(env, 0, "NULL from GetPrimitiveArrayCritical");
2142- else {
2143- ICC_EVP_PKEY_derive(ockCtx, gen_ctx, secretBytesNative, &secret_key_len);
2144- retSecretBytes = secretBytes;
2145- if( secretBytesNative != NULL ) (*env)->ReleasePrimitiveArrayCritical(env, secretBytes, secretBytesNative, 0);
2146- if((secretBytes != NULL) && (retSecretBytes == NULL)) (*env)->DeleteLocalRef(env, secretBytes);
2147- if( debug ) gslogFunctionExit(functionName);
2148- return retSecretBytes;
2144+ if (NULL == secretBytesNative) {
2145+ throwOCKException(env, 0, "NULL from GetPrimitiveArrayCritical");
2146+ } else {
2147+ rc = ICC_EVP_PKEY_derive(ockCtx, gen_ctx, secretBytesNative, &secret_key_len);
2148+ if (ICC_OSSL_SUCCESS != rc ) {
2149+ throwOCKException(env, 0, "ICC_EVP_PKEY_derive failed to derive a key");
2150+ }
2151+ ICC_EVP_PKEY_CTX_free(ockCtx, gen_ctx);
2152+ (*env)->ReleasePrimitiveArrayCritical(env, secretBytes, secretBytesNative, 0);
2153+ if (debug) {
2154+ gslogFunctionExit(functionName);
2155+ }
2156+ return secretBytes;
21492157 }
21502158 }
2151- if (gen_ctx != NULL) {
2152- ICC_EVP_PKEY_CTX_free(ockCtx,gen_ctx);
2153- gen_ctx = NULL;
2154- }
21552159 }
21562160
2157- if( secretBytesNative != NULL ) (*env)->ReleasePrimitiveArrayCritical(env, secretBytes, secretBytesNative, 0);
2158- if((secretBytes != NULL) && (retSecretBytes == NULL)) (*env)->DeleteLocalRef(env, secretBytes);
2159- if( debug ) gslogFunctionExit(functionName);
2161+ if (NULL != gen_ctx) {
2162+ ICC_EVP_PKEY_CTX_free(ockCtx, gen_ctx);
2163+ }
2164+
2165+ if (NULL != secretBytesNative) {
2166+ (*env)->ReleasePrimitiveArrayCritical(env, secretBytes, secretBytesNative, 0);
2167+ }
2168+
2169+ if (NULL != secretBytes) {
2170+ (*env)->DeleteLocalRef(env, secretBytes);
2171+ }
2172+
2173+ if (debug) {
2174+ gslogFunctionExit(functionName);
2175+ }
2176+
21602177 return NULL;
21612178}
21622179
0 commit comments