@@ -362,13 +362,19 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1sign
362362 return WOLFSSL_FAILURE ;
363363 }
364364
365- keyBuf = (byte * )(* jenv )-> GetByteArrayElements (jenv , keyBytes , NULL );
365+ jboolean isCopy = JNI_FALSE ;
366+ keyBuf = (byte * )(* jenv )-> GetByteArrayElements (jenv , keyBytes , & isCopy );
366367 if ((* jenv )-> ExceptionOccurred (jenv )) {
367368 (* jenv )-> ExceptionClear (jenv );
368369 return WOLFSSL_FAILURE ;
369370 }
370371 keySz = (* jenv )-> GetArrayLength (jenv , keyBytes );
371372
373+ /* Debug: Log buffer information */
374+ fprintf (stderr , "[CRL_sign] DEBUG: keyBuf=%p, keySz=%d, keyBytes=%p, isCopy=%s\n" ,
375+ (void * )keyBuf , keySz , (void * )keyBytes ,
376+ (isCopy == JNI_TRUE ) ? "TRUE (copy)" : "FALSE (direct pointer)" );
377+
372378 if (keyBuf == NULL || keySz == 0 ) {
373379 ret = WOLFSSL_FAILURE ;
374380 }
@@ -399,6 +405,8 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1sign
399405 derBuf = keyBuf ;
400406 derSz = keySz ;
401407 ret = WOLFSSL_SUCCESS ;
408+ fprintf (stderr , "[CRL_sign] DEBUG: DER format - derBuf=%p (same as keyBuf=%p), derSz=%d\n" ,
409+ (void * )derBuf , (void * )keyBuf , derSz );
402410 }
403411 else {
404412 /* get needed buffer size */
@@ -433,39 +441,74 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1sign
433441 if (ret == WOLFSSL_SUCCESS ) {
434442 /* Use temp pointer since d2i_PrivateKey() modifies the buffer */
435443 rsaPrivBuf = derBuf ;
444+
445+ /* Debug: Save first few bytes to check if buffer is modified */
446+ byte debugFirstBytes [4 ] = {0 };
447+ if (derSz >= 4 ) {
448+ XMEMCPY (debugFirstBytes , derBuf , 4 );
449+ }
450+
451+ fprintf (stderr , "[CRL_sign] DEBUG: Before d2i_PrivateKey - rsaPrivBuf=%p, derBuf=%p, keyBuf=%p, "
452+ "first bytes: %02x %02x %02x %02x\n" ,
453+ (void * )rsaPrivBuf , (void * )derBuf , (void * )keyBuf ,
454+ debugFirstBytes [0 ], debugFirstBytes [1 ], debugFirstBytes [2 ], debugFirstBytes [3 ]);
436455
437456 priv = wolfSSL_d2i_PrivateKey ((int )keyType , NULL ,
438457 (const unsigned char * * )& rsaPrivBuf , derSz );
458+
459+ /* Debug: Check if buffer contents changed */
460+ byte debugAfterBytes [4 ] = {0 };
461+ if (derSz >= 4 && derBuf != NULL ) {
462+ XMEMCPY (debugAfterBytes , derBuf , 4 );
463+ }
464+
465+ fprintf (stderr , "[CRL_sign] DEBUG: After d2i_PrivateKey - rsaPrivBuf=%p (modified), derBuf=%p, keyBuf=%p, priv=%p, "
466+ "first bytes after: %02x %02x %02x %02x\n" ,
467+ (void * )rsaPrivBuf , (void * )derBuf , (void * )keyBuf , (void * )priv ,
468+ debugAfterBytes [0 ], debugAfterBytes [1 ], debugAfterBytes [2 ], debugAfterBytes [3 ]);
469+
439470 if (priv == NULL ) {
471+ fprintf (stderr , "[CRL_sign] DEBUG: d2i_PrivateKey returned NULL\n" );
440472 ret = WOLFSSL_FAILURE ;
441473 }
442474 }
443475
444476 /* sign WOLFSSL_X509_CRL with WOLFSSL_EVP_PKEY, returns size of signature
445477 * on success or negative on error */
446478 if (ret == WOLFSSL_SUCCESS ) {
479+ fprintf (stderr , "[CRL_sign] DEBUG: Calling wolfSSL_X509_CRL_sign - crl=%p, priv=%p, md=%p\n" ,
480+ (void * )crl , (void * )priv , (void * )md );
447481 ret = wolfSSL_X509_CRL_sign (crl , priv , md );
482+ fprintf (stderr , "[CRL_sign] DEBUG: wolfSSL_X509_CRL_sign returned %d\n" , ret );
448483 if (ret >= 0 ) {
449484 ret = WOLFSSL_SUCCESS ;
450485 }
451486 }
452487
488+ fprintf (stderr , "[CRL_sign] DEBUG: Cleanup - ret=%d, priv=%p, derBuf=%p, keyBuf=%p\n" ,
489+ ret , (void * )priv , (void * )derBuf , (void * )keyBuf );
490+
453491 if (priv != NULL ) {
454492 wolfSSL_EVP_PKEY_free (priv );
455493 }
456494 if (derBuf != NULL && derBuf != keyBuf ) {
495+ fprintf (stderr , "[CRL_sign] DEBUG: Freeing derBuf (allocated)\n" );
457496 XMEMSET (derBuf , 0 , derSz );
458497 XFREE (derBuf , NULL , DYNAMIC_TYPE_TMP_BUFFER );
459498 derBuf = NULL ;
499+ } else {
500+ fprintf (stderr , "[CRL_sign] DEBUG: Not freeing derBuf (points to keyBuf)\n" );
460501 }
461502 if (mdName != NULL ) {
462503 (* jenv )-> ReleaseStringUTFChars (jenv , digestAlg , mdName );
463504 }
464505 if (keyBuf != NULL ) {
506+ fprintf (stderr , "[CRL_sign] DEBUG: Releasing keyBuf\n" );
465507 (* jenv )-> ReleaseByteArrayElements (jenv , keyBytes , (jbyte * )keyBuf ,
466508 JNI_ABORT );
467509 }
468510
511+ fprintf (stderr , "[CRL_sign] DEBUG: Returning %d\n" , ret );
469512 return ret ;
470513#else
471514 (void )jenv ;
0 commit comments