From 03ae28e0873486649421b9428c4407851a89241c Mon Sep 17 00:00:00 2001 From: ylecollen Date: Tue, 10 Jan 2017 14:45:20 +0100 Subject: [PATCH] Update after a new review --- .../java/org/matrix/olm/OlmAccountTest.java | 7 +------ .../java/org/matrix/olm/OlmSessionTest.java | 20 +++++-------------- .../java/org/matrix/olm/OlmUtilityTest.java | 14 +++---------- .../org/matrix/olm/CommonSerializeUtils.java | 8 +------- .../main/java/org/matrix/olm/OlmAccount.java | 9 +-------- .../main/java/org/matrix/olm/OlmUtility.java | 12 ++++------- .../olm-sdk/src/main/jni/olm_account.cpp | 4 +++- .../main/jni/olm_inbound_group_session.cpp | 4 ++-- .../main/jni/olm_outbound_group_session.cpp | 2 +- .../olm-sdk/src/main/jni/olm_session.cpp | 14 +++++++------ .../olm-sdk/src/main/jni/olm_utility.cpp | 16 +++++---------- 11 files changed, 34 insertions(+), 76 deletions(-) diff --git a/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmAccountTest.java b/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmAccountTest.java index d474f12..ffbbca1 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmAccountTest.java +++ b/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmAccountTest.java @@ -389,17 +389,12 @@ public class OlmAccountTest { assertTrue(e.getMessage(),false); } - boolean sessionRetCode = true; - try { - sessionRetCode = olmAccount.removeOneTimeKeys(null); + olmAccount.removeOneTimeKeys(null); } catch (Exception e) { assertTrue(e.getMessage(), false); } - // test against no matching keys - assertFalse(sessionRetCode); - olmAccount.releaseAccount(); } diff --git a/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmSessionTest.java b/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmSessionTest.java index bb24f7a..e08b151 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmSessionTest.java +++ b/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmSessionTest.java @@ -174,13 +174,11 @@ public class OlmSessionTest { assertTrue(clearMsg.equals(decryptedMsg)); // clean objects.. - boolean res = false; try { - res = bobAccount.removeOneTimeKeys(bobSession); + bobAccount.removeOneTimeKeys(bobSession); } catch (Exception e) { assertTrue(e.getMessage(), false); } - assertTrue(res); // release accounts bobAccount.releaseAccount(); @@ -402,13 +400,11 @@ public class OlmSessionTest { assertTrue(clearMsg1.equals(decryptedMsg1)); // clean objects.. - boolean res = false; try { - res = bobAccount.removeOneTimeKeys(bobSession); + bobAccount.removeOneTimeKeys(bobSession); } catch (Exception e) { assertTrue(e.getMessage(), false); } - assertTrue(res); bobAccount.releaseAccount(); aliceAccount.releaseAccount(); @@ -585,13 +581,11 @@ public class OlmSessionTest { //assertTrue(false==bobSession.matchesInboundSessionFrom(bobIdentityKey, encryptedAliceToBobMsg1.mCipherText)); // release objects - boolean res = false; try { - res = bobAccount.removeOneTimeKeys(bobSession); + bobAccount.removeOneTimeKeys(bobSession); } catch (Exception e) { assertTrue(e.getMessage(), false); } - assertTrue(res); aliceAccount.releaseAccount(); bobAccount.releaseAccount(); @@ -782,13 +776,11 @@ public class OlmSessionTest { assertTrue(clearMsg3.equals(decryptedMsg3)); // clean objects.. - boolean res = false; try { - res = bobAccount.removeOneTimeKeys(bobSession); + bobAccount.removeOneTimeKeys(bobSession); } catch (Exception e) { assertTrue(e.getMessage(), false); } - assertTrue(res); bobAccount.releaseAccount(); aliceAccount.releaseAccount(); @@ -1002,13 +994,11 @@ public class OlmSessionTest { assertTrue(!aliceSession.matchesInboundSessionFrom(null,null)); // release objects - boolean res = false; try { - res = bobAccount.removeOneTimeKeys(bobSession); + bobAccount.removeOneTimeKeys(bobSession); } catch (Exception e) { assertTrue(e.getMessage(), false); } - assertTrue(res); aliceAccount.releaseAccount(); bobAccount.releaseAccount(); diff --git a/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmUtilityTest.java b/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmUtilityTest.java index cc14e7c..b560bff 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmUtilityTest.java +++ b/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmUtilityTest.java @@ -104,42 +104,34 @@ public class OlmUtilityTest { } // verify signature - boolean isVerified; - - isVerified = false; errorMsg = null; try { - isVerified = utility.verifyEd25519Signature(messageSignature, fingerPrintKey, message); + utility.verifyEd25519Signature(messageSignature, fingerPrintKey, message); } catch (Exception e) { errorMsg = e.getMessage(); } - assertTrue(isVerified); assertTrue(TextUtils.isEmpty(errorMsg)); // check a bad signature is detected => errorMsg = BAD_MESSAGE_MAC String badSignature = "Bad signature Bad signature Bad signature.."; - isVerified = false; errorMsg = null; try { - isVerified = utility.verifyEd25519Signature(badSignature, fingerPrintKey, message); + utility.verifyEd25519Signature(badSignature, fingerPrintKey, message); } catch (Exception e) { errorMsg = e.getMessage(); } - assertFalse(isVerified); assertTrue(!TextUtils.isEmpty(errorMsg)); // check bad fingerprint size => errorMsg = INVALID_BASE64 String badSizeFingerPrintKey = fingerPrintKey.substring(fingerPrintKey.length()/2); - isVerified = false; errorMsg = null; try { - isVerified = utility.verifyEd25519Signature(messageSignature, badSizeFingerPrintKey, message); + utility.verifyEd25519Signature(messageSignature, badSizeFingerPrintKey, message); } catch (Exception e) { errorMsg = e.getMessage(); } - assertFalse(isVerified); assertTrue(!TextUtils.isEmpty(errorMsg)); utility.releaseUtility(); diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/CommonSerializeUtils.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/CommonSerializeUtils.java index 93a85fd..229963f 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/CommonSerializeUtils.java +++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/CommonSerializeUtils.java @@ -70,17 +70,11 @@ abstract class CommonSerializeUtils { key = keyAsString.getBytes("UTF-8"); pickledData = pickledDataAsString.getBytes("UTF-8"); + deserialize(pickledData, key); } catch (Exception e) { throw new OlmException(OlmException.EXCEPTION_CODE_ACCOUNT_DESERIALIZATION, e.getMessage()); } - if (null == key) { - throw new OlmException(OlmException.EXCEPTION_CODE_ACCOUNT_DESERIALIZATION, OlmException.EXCEPTION_MSG_INVALID_PARAMS_DESERIALIZATION+" key"); - } else if (null == pickledData) { - throw new OlmException(OlmException.EXCEPTION_CODE_ACCOUNT_DESERIALIZATION, OlmException.EXCEPTION_MSG_INVALID_PARAMS_DESERIALIZATION+" pickle"); - } - - deserialize(pickledData, key); Log.d(LOG_TAG,"## deserializeObject(): success"); } diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java index 9ebaaf1..26c3e60 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java +++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java @@ -242,23 +242,16 @@ public class OlmAccount extends CommonSerializeUtils implements Serializable { /** * Remove the "one time keys" that the session used from the account. * @param aSession session instance - * @return true if the operation succeeded. * @throws OlmException the failure reason */ - public boolean removeOneTimeKeys(OlmSession aSession) throws OlmException { - boolean res = false; - + public void removeOneTimeKeys(OlmSession aSession) throws OlmException { if (null != aSession) { try { removeOneTimeKeysJni(aSession.getOlmSessionId()); - res = true; - Log.d(LOG_TAG,"## removeOneTimeKeysForSession(): result=" + res); } catch (Exception e) { throw new OlmException(OlmException.EXCEPTION_CODE_ACCOUNT_REMOVE_ONE_TIME_KEYS, e.getMessage()); } } - - return res; } /** diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java index 12f3663..bf9ef90 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java +++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java @@ -73,17 +73,14 @@ public class OlmUtility { /** * Verify an ed25519 signature.
- * If the signature is verified, the method returns true. If false is returned, an error description is provided in aError. - * If the key was too small, aError is set to "OLM.INVALID_BASE64". - * If the signature was invalid, aError is set to "OLM.BAD_MESSAGE_MAC".
+ * An exception is thrown if the operation fails. * @param aSignature the base64-encoded message signature to be checked. * @param aFingerprintKey the ed25519 key (fingerprint key) * @param aMessage the signed message - * @return true if the signature is verified, false otherwise * @exception OlmException the failure reason */ - public boolean verifyEd25519Signature(String aSignature, String aFingerprintKey, String aMessage) throws OlmException { - String errorMessage = null; + public void verifyEd25519Signature(String aSignature, String aFingerprintKey, String aMessage) throws OlmException { + String errorMessage; try { if (TextUtils.isEmpty(aSignature) || TextUtils.isEmpty(aFingerprintKey) || TextUtils.isEmpty(aMessage)) { @@ -94,13 +91,12 @@ public class OlmUtility { } } catch (Exception e) { Log.e(LOG_TAG, "## verifyEd25519Signature(): failed " + e.getMessage()); + errorMessage = e.getMessage(); } if (!TextUtils.isEmpty(errorMessage)) { throw new OlmException(OlmException.EXCEPTION_CODE_UTILITY_VERIFY_SIGNATURE, errorMessage); } - - return true; } /** diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp index 6e62f50..40081ac 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp +++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp @@ -92,6 +92,7 @@ JNIEXPORT jlong OLM_ACCOUNT_FUNC_DEF(createNewAccountJni)(JNIEnv *env, jobject t if (randomBuffPtr) { + memset(randomBuffPtr, 0, randomSize); free(randomBuffPtr); } } @@ -286,6 +287,7 @@ JNIEXPORT void OLM_ACCOUNT_FUNC_DEF(generateOneTimeKeysJni)(JNIEnv *env, jobject if (randomBufferPtr) { + memset(randomBufferPtr, 0, randomLength); free(randomBufferPtr); } } @@ -642,7 +644,7 @@ JNIEXPORT jlong OLM_ACCOUNT_FUNC_DEF(deserializeJni)(JNIEnv *env, jobject thiz, size_t pickledLength = (size_t)env->GetArrayLength(aSerializedDataBuffer); size_t keyLength = (size_t)env->GetArrayLength(aKeyBuffer); LOGD(" ## deserializeJni(): pickledLength=%lu keyLength=%lu",static_cast(pickledLength), static_cast(keyLength)); - LOGD(" ## deserializeJni(): pickled=%s",(char const *)pickledPtr); + LOGD(" ## deserializeJni(): pickled=%.*s", static_cast (pickledLength), (char const *)pickledPtr); size_t result = olm_unpickle_account(accountPtr, (void const *)keyPtr, diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp index 14e338b..23910bb 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp +++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp @@ -254,7 +254,7 @@ JNIEXPORT jbyteArray OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEn else { memcpy(tempEncryptedPtr, encryptedMsgPtr, encryptedMsgLength); - LOGD(" ## decryptMessageJni(): encryptedMsgLength=%lu encryptedMsg=%s",static_cast(encryptedMsgLength),encryptedMsgPtr); + LOGD(" ## decryptMessageJni(): encryptedMsgLength=%lu encryptedMsg=%.*s",static_cast(encryptedMsgLength), static_cast(encryptedMsgLength), encryptedMsgPtr); // get max plaintext length size_t maxPlainTextLength = olm_group_decrypt_max_plaintext_length(sessionPtr, @@ -464,7 +464,7 @@ JNIEXPORT jlong OLM_INBOUND_GROUP_SESSION_FUNC_DEF(deserializeJni)(JNIEnv *env, size_t pickledLength = (size_t)env->GetArrayLength(aSerializedDataBuffer); size_t keyLength = (size_t)env->GetArrayLength(aKeyBuffer); LOGD(" ## deserializeJni(): pickledLength=%lu keyLength=%lu",static_cast(pickledLength), static_cast(keyLength)); - LOGD(" ## deserializeJni(): pickled=%s",(char const *)pickledPtr); + LOGD(" ## deserializeJni(): pickled=%.*s", static_cast(pickledLength), (char const *)pickledPtr); size_t result = olm_unpickle_inbound_group_session(sessionPtr, (void const *)keyPtr, diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_outbound_group_session.cpp b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_outbound_group_session.cpp index 689f1b4..a821709 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_outbound_group_session.cpp +++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_outbound_group_session.cpp @@ -506,7 +506,7 @@ JNIEXPORT jlong OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(deserializeJni)(JNIEnv *env, size_t pickledLength = (size_t)env->GetArrayLength(aSerializedDataBuffer); size_t keyLength = (size_t)env->GetArrayLength(aKeyBuffer); LOGD(" ## deserializeJni(): pickledLength=%lu keyLength=%lu",static_cast(pickledLength), static_cast(keyLength)); - LOGD(" ## deserializeJni(): pickled=%s",(char const *)pickledPtr); + LOGD(" ## deserializeJni(): pickled=%.*s", static_cast(pickledLength), (char const *)pickledPtr); size_t result = olm_unpickle_outbound_group_session(sessionPtr, (void const *)keyPtr, diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_session.cpp b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_session.cpp index 034e0e8..5ca49db 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_session.cpp +++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_session.cpp @@ -143,7 +143,7 @@ JNIEXPORT void OLM_SESSION_FUNC_DEF(initOutboundSessionJni)(JNIEnv *env, jobject { size_t theirIdentityKeyLength = (size_t)env->GetArrayLength(aTheirIdentityKeyBuffer); size_t theirOneTimeKeyLength = (size_t)env->GetArrayLength(aTheirOneTimeKeyBuffer); - LOGD("## initOutboundSessionJni(): identityKey=%s oneTimeKey=%s",theirIdentityKeyPtr,theirOneTimeKeyPtr); + LOGD("## initOutboundSessionJni(): identityKey=%.*s oneTimeKey=%.*s", static_cast(theirIdentityKeyLength), theirIdentityKeyPtr, static_cast(theirOneTimeKeyLength), theirOneTimeKeyPtr); size_t sessionResult = olm_create_outbound_session(sessionPtr, accountPtr, @@ -175,6 +175,7 @@ JNIEXPORT void OLM_SESSION_FUNC_DEF(initOutboundSessionJni)(JNIEnv *env, jobject if (randomBuffPtr) { + memset(randomBuffPtr, 0, randomSize); free(randomBuffPtr); } } @@ -231,7 +232,7 @@ JNIEXPORT void OLM_SESSION_FUNC_DEF(initInboundSessionJni)(JNIEnv *env, jobject else { size_t messageLength = (size_t)env->GetArrayLength(aOneTimeKeyMsgBuffer); - LOGD("## initInboundSessionJni(): messageLength=%lu message=%s", static_cast(messageLength), messagePtr); + LOGD("## initInboundSessionJni(): messageLength=%lu message=%.*s", static_cast(messageLength), static_cast(messageLength), messagePtr); sessionResult = olm_create_inbound_session(sessionPtr, accountPtr, (void*)messagePtr , messageLength); @@ -309,7 +310,7 @@ JNIEXPORT void OLM_SESSION_FUNC_DEF(initInboundSessionFromIdKeyJni)(JNIEnv *env, size_t messageLength = (size_t)env->GetArrayLength(aOneTimeKeyMsgBuffer); size_t theirIdentityKeyLength = (size_t)env->GetArrayLength(aTheirIdentityKeyBuffer); - LOGD("## initInboundSessionFromIdKeyJni(): message=%s messageLength=%lu",messagePtr,static_cast(messageLength)); + LOGD("## initInboundSessionFromIdKeyJni(): message=%.*s messageLength=%lu", static_cast(messageLength), messagePtr, static_cast(messageLength)); sessionResult = olm_create_inbound_session_from(sessionPtr, accountPtr, theirIdentityKeyPtr, theirIdentityKeyLength, (void*)messagePtr , messageLength); if (sessionResult == olm_error()) @@ -571,6 +572,7 @@ JNIEXPORT jbyteArray OLM_SESSION_FUNC_DEF(encryptMessageJni)(JNIEnv *env, jobjec free(encryptedMsgPtr); } + memset(randomBuffPtr, 0, randomLength); free(randomBuffPtr); } } @@ -659,7 +661,7 @@ JNIEXPORT jbyteArray OLM_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *env, jobjec // create a dedicated temp buffer to be used in next Olm API calls tempEncryptedPtr = static_cast(malloc(encryptedMsgLength*sizeof(uint8_t))); memcpy(tempEncryptedPtr, encryptedMsgPtr, encryptedMsgLength); - LOGD("## decryptMessageJni(): MsgType=%lu encryptedMsgLength=%lu encryptedMsg=%s",static_cast(encryptedMsgType),static_cast(encryptedMsgLength),encryptedMsgPtr); + LOGD("## decryptMessageJni(): MsgType=%lu encryptedMsgLength=%lu encryptedMsg=%.*s",static_cast(encryptedMsgType),static_cast(encryptedMsgLength), static_cast(encryptedMsgLength), encryptedMsgPtr); // get max plaintext length size_t maxPlainTextLength = olm_decrypt_max_plaintext_length(sessionPtr, @@ -846,7 +848,7 @@ JNIEXPORT jbyteArray OLM_SESSION_FUNC_DEF(serializeJni)(JNIEnv *env, jobject thi } else { - LOGD(" ## serializeJni(): success - result=%lu pickled starts with %s", static_cast(result), static_cast(pickledPtr)); + LOGD(" ## serializeJni(): success - result=%lu pickled=%.*s", static_cast(result), static_cast(pickledLength), static_cast(pickledPtr)); returnValue = env->NewByteArray(pickledLength); env->SetByteArrayRegion(returnValue, 0 , pickledLength, (jbyte*)pickledPtr); @@ -916,7 +918,7 @@ JNIEXPORT jlong OLM_SESSION_FUNC_DEF(deserializeJni)(JNIEnv *env, jobject thiz, size_t pickledLength = (size_t)env->GetArrayLength(aSerializedDataBuffer); size_t keyLength = (size_t)env->GetArrayLength(aKeyBuffer); LOGD(" ## deserializeJni(): pickledLength=%lu keyLength=%lu",static_cast(pickledLength), static_cast(keyLength)); - LOGD(" ## deserializeJni(): pickled=%s",(char const *)pickledPtr); + LOGD(" ## deserializeJni(): pickled=%.*s",static_cast(pickledLength), (char const *)pickledPtr); size_t result = olm_unpickle_session(sessionPtr, (void const *)keyPtr, diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_utility.cpp b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_utility.cpp index c4ac9fd..f6fe719 100644 --- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_utility.cpp +++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_utility.cpp @@ -78,9 +78,6 @@ JNIEXPORT void OLM_UTILITY_FUNC_DEF(releaseUtilityJni)(JNIEnv *env, jobject thiz /** * Verify an ed25519 signature. - * If the key was too small then the message will be "OLM.INVALID_BASE64". - * If the signature was invalid then the message will be "OLM.BAD_MESSAGE_MAC". - * * @param aSignature the base64-encoded message signature to be checked. * @param aKey the ed25519 key (fingerprint key) * @param aMessage the message which was signed @@ -122,7 +119,7 @@ JNIEXPORT jstring OLM_UTILITY_FUNC_DEF(verifyEd25519SignatureJni)(JNIEnv *env, j size_t keyLength = (size_t)env->GetArrayLength(aKeyBuffer); size_t messageLength = (size_t)env->GetArrayLength(aMessageBuffer); LOGD(" ## verifyEd25519SignatureJni(): signatureLength=%lu keyLength=%lu messageLength=%lu",static_cast(signatureLength),static_cast(keyLength),static_cast(messageLength)); - LOGD(" ## verifyEd25519SignatureJni(): key=%s",keyPtr); + LOGD(" ## verifyEd25519SignatureJni(): key=%.*s", static_cast(keyLength), keyPtr); size_t result = olm_ed25519_verify(utilityPtr, (void const *)keyPtr, @@ -194,7 +191,7 @@ JNIEXPORT jbyteArray OLM_UTILITY_FUNC_DEF(sha256Jni)(JNIEnv *env, jobject thiz, // get lengths size_t messageLength = (size_t)env->GetArrayLength(aMessageToHashBuffer); size_t hashLength = olm_sha256_length(utilityPtr); - void* hashValuePtr = malloc((hashLength+1)*sizeof(uint8_t)); + void* hashValuePtr = malloc((hashLength)*sizeof(uint8_t)); if (!hashValuePtr) { @@ -213,12 +210,9 @@ JNIEXPORT jbyteArray OLM_UTILITY_FUNC_DEF(sha256Jni)(JNIEnv *env, jobject thiz, } else { - // update length - (static_cast(hashValuePtr))[result] = static_cast('\0'); - LOGD("## sha256Jni(): success - result=%lu hashValue=%s",static_cast(result), (char*)hashValuePtr); - - sha256Ret = env->NewByteArray(result); - env->SetByteArrayRegion(sha256Ret, 0 , result, (jbyte*)hashValuePtr); + LOGD("## sha256Jni(): success - result=%lu hashValue=%.*s",static_cast(result), static_cast(result), (char*)hashValuePtr); + sha256Ret = env->NewByteArray(result); + env->SetByteArrayRegion(sha256Ret, 0 , result, (jbyte*)hashValuePtr); } free(hashValuePtr);