@@ -190,7 +190,6 @@ Java_com_wolfssl_wolfcrypt_Dh_wc_1DhGenerateKeyPair(
190190 word32 pubSz = size ;
191191 int lBitPriv = 0 , lBitPub = 0 ;
192192 byte lBit [1 ] = { 0x00 };
193- int exceptionThrown = 0 ;
194193
195194 key = (DhKey * ) getNativeStruct (env , this );
196195 if ((* env )-> ExceptionOccurred (env )) {
@@ -245,44 +244,47 @@ Java_com_wolfssl_wolfcrypt_Dh_wc_1DhGenerateKeyPair(
245244 }
246245
247246 jbyteArray privateKey = (* env )-> NewByteArray (env , lBitPriv + privSz );
248- jbyteArray publicKey = (* env )-> NewByteArray (env , lBitPub + pubSz );
247+ jbyteArray publicKey = NULL ;
248+ if (!privateKey ) {
249+ (* env )-> ExceptionClear (env );
250+ throwOutOfMemoryException (env , "Failed to allocate privateKey" );
251+ }
252+
253+ if (!(* env )-> ExceptionOccurred (env )) {
254+ publicKey = (* env )-> NewByteArray (env , lBitPub + pubSz );
255+ if (!publicKey ) {
256+ (* env )-> ExceptionClear (env );
257+ throwOutOfMemoryException (env , "Failed to allocate publicKey" );
258+ }
259+ }
249260
250- if (privateKey ) {
261+ if (!( * env ) -> ExceptionOccurred ( env ) ) {
251262 if (lBitPriv ) {
252263 (* env )-> SetByteArrayRegion (env , privateKey , 0 , 1 ,
253- (const jbyte * )lBit );
264+ (const jbyte * )lBit );
254265 (* env )-> SetByteArrayRegion (env , privateKey , 1 , privSz ,
255- (const jbyte * )priv );
256- } else {
266+ (const jbyte * )priv );
267+ }
268+ else {
257269 (* env )-> SetByteArrayRegion (env , privateKey , 0 , privSz ,
258- (const jbyte * )priv );
270+ (const jbyte * )priv );
259271 }
260-
261272 setByteArrayMember (env , this , "privateKey" , privateKey );
262- if ((* env )-> ExceptionOccurred (env )) {
263- /* if exception raised, skip any additional JNI functions */
264- exceptionThrown = 1 ;
265- }
266-
267- } else {
268- throwWolfCryptException (env , "Failed to allocate privateKey" );
269- exceptionThrown = 1 ;
270273 }
271274
272- if (publicKey && (exceptionThrown == 0 )) {
275+ /* if exception raised, skip any additional JNI functions */
276+ if (!(* env )-> ExceptionOccurred (env )) {
273277 if (lBitPub ) {
274- (* env )-> SetByteArrayRegion (env , publicKey , 0 , 1 ,
275- (const jbyte * )lBit );
276- (* env )-> SetByteArrayRegion (env , publicKey , 1 , pubSz ,
277- (const jbyte * )pub );
278- } else {
279- (* env )-> SetByteArrayRegion (env , publicKey , 0 , pubSz ,
280- (const jbyte * )pub );
278+ (* env )-> SetByteArrayRegion (env , publicKey , 0 ,
279+ 1 , (const jbyte * )lBit );
280+ (* env )-> SetByteArrayRegion (env , publicKey , 1 ,
281+ pubSz , (const jbyte * )pub );
282+ }
283+ else {
284+ (* env )-> SetByteArrayRegion (env , publicKey , 0 ,
285+ pubSz , (const jbyte * )pub );
281286 }
282-
283287 setByteArrayMember (env , this , "publicKey" , publicKey );
284- } else {
285- throwWolfCryptException (env , "Failed to allocate publicKey" );
286288 }
287289 } else {
288290 throwWolfCryptExceptionFromError (env , ret );
@@ -296,11 +298,21 @@ Java_com_wolfssl_wolfcrypt_Dh_wc_1DhGenerateKeyPair(
296298 LogHex (pub , 0 , pubSz );
297299
298300 if (priv != NULL ) {
301+ #if (LIBWOLFSSL_VERSION_HEX >= 0x05008004 ) && \
302+ !defined(WOLFSSL_NO_FORCE_ZERO )
303+ wc_ForceZero (priv , privSz );
304+ #else
299305 XMEMSET (priv , 0 , privSz );
306+ #endif
300307 XFREE (priv , NULL , DYNAMIC_TYPE_TMP_BUFFER );
301308 }
302309 if (pub != NULL ) {
310+ #if (LIBWOLFSSL_VERSION_HEX >= 0x05008004 ) && \
311+ !defined(WOLFSSL_NO_FORCE_ZERO )
312+ wc_ForceZero (pub , pubSz );
313+ #else
303314 XMEMSET (pub , 0 , pubSz );
315+ #endif
304316 XFREE (pub , NULL , DYNAMIC_TYPE_TMP_BUFFER );
305317 }
306318#else
@@ -417,7 +429,12 @@ Java_com_wolfssl_wolfcrypt_Dh_wc_1DhAgree(
417429 LogHex (secret , 0 , secretSz );
418430
419431 if (secret != NULL ) {
432+ #if (LIBWOLFSSL_VERSION_HEX >= 0x05008004 ) && \
433+ !defined(WOLFSSL_NO_FORCE_ZERO )
434+ wc_ForceZero (secret , secretSz );
435+ #else
420436 XMEMSET (secret , 0 , secretSz );
437+ #endif
421438 XFREE (secret , NULL , DYNAMIC_TYPE_TMP_BUFFER );
422439 }
423440
@@ -856,7 +873,12 @@ Java_com_wolfssl_wolfcrypt_Dh_wc_1DhExportKeyPair(
856873
857874 pub = (byte * )XMALLOC (pubSz , NULL , DYNAMIC_TYPE_TMP_BUFFER );
858875 if (pub == NULL ) {
876+ #if (LIBWOLFSSL_VERSION_HEX >= 0x05008004 ) && \
877+ !defined(WOLFSSL_NO_FORCE_ZERO )
878+ wc_ForceZero (priv , privSz );
879+ #else
859880 XMEMSET (priv , 0 , privSz );
881+ #endif
860882 XFREE (priv , NULL , DYNAMIC_TYPE_TMP_BUFFER );
861883 throwOutOfMemoryException (env , "Failed to allocate public key buffer" );
862884 return NULL ;
@@ -902,11 +924,21 @@ Java_com_wolfssl_wolfcrypt_Dh_wc_1DhExportKeyPair(
902924
903925 /* Clean up */
904926 if (priv != NULL ) {
927+ #if (LIBWOLFSSL_VERSION_HEX >= 0x05008004 ) && \
928+ !defined(WOLFSSL_NO_FORCE_ZERO )
929+ wc_ForceZero (priv , privSz );
930+ #else
905931 XMEMSET (priv , 0 , privSz );
932+ #endif
906933 XFREE (priv , NULL , DYNAMIC_TYPE_TMP_BUFFER );
907934 }
908935 if (pub != NULL ) {
936+ #if (LIBWOLFSSL_VERSION_HEX >= 0x05008004 ) && \
937+ !defined(WOLFSSL_NO_FORCE_ZERO )
938+ wc_ForceZero (pub , pubSz );
939+ #else
909940 XMEMSET (pub , 0 , pubSz );
941+ #endif
910942 XFREE (pub , NULL , DYNAMIC_TYPE_TMP_BUFFER );
911943 }
912944
@@ -1187,7 +1219,12 @@ Java_com_wolfssl_wolfcrypt_Dh_wc_1DhPrivateKeyEncode(
11871219
11881220 /* Clean up */
11891221 if (der != NULL ) {
1222+ #if (LIBWOLFSSL_VERSION_HEX >= 0x05008004 ) && \
1223+ !defined(WOLFSSL_NO_FORCE_ZERO )
1224+ wc_ForceZero (der , derSz );
1225+ #else
11901226 XMEMSET (der , 0 , derSz );
1227+ #endif
11911228 XFREE (der , NULL , DYNAMIC_TYPE_TMP_BUFFER );
11921229 }
11931230
0 commit comments