Skip to content

Commit 280032d

Browse files
Merge pull request #80 from cconlon/X509CheckPrivateKey
JNI/JCE: fix pointer use in JNI X509CheckPrivateKey()
2 parents ddddfc6 + d8ed437 commit 280032d

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

jni/jni_jce_wolfsslkeystore.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ JNIEXPORT jboolean JNICALL Java_com_wolfssl_provider_jce_WolfSSLKeyStore_X509Che
4242
int keyDerSz = 0;
4343
byte* certDer = NULL;
4444
byte* keyDer = NULL;
45+
byte* pkcs8KeyDer = NULL;
4546
WOLFSSL_X509* x509 = NULL;
4647
WOLFSSL_EVP_PKEY* key = NULL;
4748
WOLFSSL_PKCS8_PRIV_KEY_INFO* keyInfo = NULL;
@@ -58,6 +59,9 @@ JNIEXPORT jboolean JNICALL Java_com_wolfssl_provider_jce_WolfSSLKeyStore_X509Che
5859

5960
keyDer = (byte*)(*env)->GetByteArrayElements(env, pkcs8KeyDerArr, NULL);
6061
keyDerSz = (*env)->GetArrayLength(env, pkcs8KeyDerArr);
62+
/* Keep original keyDer pointer for free later, wolfSSL_d2i_PKCS8_PKEY
63+
* will change/advance the pointer. */
64+
pkcs8KeyDer = keyDer;
6165

6266
if (certDer == NULL || certDerSz <= 0 || keyDer == NULL || keyDerSz <= 0) {
6367
fprintf(stderr, "Native X509CheckPrivateKey() bad args");
@@ -75,7 +79,8 @@ JNIEXPORT jboolean JNICALL Java_com_wolfssl_provider_jce_WolfSSLKeyStore_X509Che
7579
}
7680

7781
if (ret == WOLFSSL_SUCCESS) {
78-
keyInfo = wolfSSL_d2i_PKCS8_PKEY(NULL, (const byte**)&keyDer, keyDerSz);
82+
keyInfo = wolfSSL_d2i_PKCS8_PKEY(NULL, (const byte**)&pkcs8KeyDer,
83+
keyDerSz);
7984
if (keyInfo == NULL) {
8085
fprintf(stderr, "Native wolfSSL_d2i_PKCS8_PKEY() failed");
8186
ret = WOLFSSL_FAILURE;

0 commit comments

Comments
 (0)