aboutsummaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorpedroGitt <pedro.contreiras@amdocs.com>2016-10-18 19:02:18 +0200
committerpedroGitt <pedro.contreiras@amdocs.com>2016-10-18 19:02:18 +0200
commit26d9934fc84f3da742e4c38f37ee50a9ddb5237b (patch)
tree43266ade9567cbcda83867282f22256ef14144d3 /java
parenta6913c49c26b54a4856f883daeb27970f9ab59a4 (diff)
Fix verifyEd25519Signature() API to properly return the error message in case signature verification failed
- update unit tests
Diffstat (limited to 'java')
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmUtilityTest.java14
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmUtility.java25
2 files changed, 29 insertions, 10 deletions
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 5175424..b500cdf 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
@@ -45,7 +45,7 @@ public class OlmUtilityTest {
@Test
public void test01VerifyEd25519Signing() {
String fingerPrintKey = null;
- String errorMsg = new String();
+ StringBuffer errorMsg = new StringBuffer();
String message = "{\"key1\":\"value1\",\"key2\":\"value2\"};";
// create account
@@ -67,10 +67,20 @@ public class OlmUtilityTest {
assertTrue("Exception MSg="+e.getMessage(), false);
}
- // instance utility
+ // instantiate utility object
OlmUtility utility = new OlmUtility();
+
+ // verify signature
+ errorMsg.append("init with anything");
boolean isVerified = utility.verifyEd25519Signature(messageSignature, fingerPrintKey, message, errorMsg);
assertTrue(isVerified);
+ assertTrue(String.valueOf(errorMsg).isEmpty());
+
+ // check a bad signature is detected and the error message is not empty
+ messageSignature = "Bad signature Bad signature Bad signature..";
+ isVerified = utility.verifyEd25519Signature(messageSignature, fingerPrintKey, message, errorMsg);
+ assertFalse(isVerified);
+ assertFalse(String.valueOf(errorMsg).isEmpty());
utility.releaseUtility();
}
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 e2a085d..a6e9c4f 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
@@ -71,14 +71,14 @@ public class OlmUtility implements Serializable {
* 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".<br>
* @param aSignature the base64-encoded message signature to be checked.
- * @param aFingerprintKey the ed25519 key
- * @param aMessage the message which was signed
+ * @param aFingerprintKey the ed25519 key (fingerprint key)
+ * @param aMessage the signed message
* @param aError error message description
* @return true if the signature is verified, false otherwise
*/
- public boolean verifyEd25519Signature(String aSignature, String aFingerprintKey, String aMessage, String aError) {
+ public boolean verifyEd25519Signature(String aSignature, String aFingerprintKey, String aMessage, StringBuffer aError) {
boolean retCode = false;
- OlmUtility retObj=null;
+ String errorRetValue = null;
if(null == aError) {
Log.e(LOG_TAG, "## verifyEd25519Signature(): invalid input error parameter");
@@ -86,17 +86,26 @@ public class OlmUtility implements Serializable {
else if(TextUtils.isEmpty(aSignature) || TextUtils.isEmpty(aFingerprintKey) || TextUtils.isEmpty(aMessage)){
Log.e(LOG_TAG, "## verifyEd25519Signature(): invalid input parameters");
} else {
- String errorRetValue = verifyEd25519SignatureJni(aSignature,aFingerprintKey, aMessage);
- if(null == errorRetValue) {
- aError="";
+ aError.setLength(0);
+
+ if( null == (errorRetValue = verifyEd25519SignatureJni(aSignature,aFingerprintKey, aMessage))) {
retCode = true;
} else {
- aError = errorRetValue;
+ aError.append(errorRetValue);
}
}
return retCode;
}
+
+ /**
+ * Verify an ed25519 signature.
+ * Return a human readable error message in case of verification failure.
+ * @param aSignature the base64-encoded message signature to be checked.
+ * @param aFingerprintKey the ed25519 key
+ * @param aMessage the signed message
+ * @return null if validation succeed, the error message string if operation failed
+ */
private native String verifyEd25519SignatureJni(String aSignature, String aFingerprintKey, String aMessage);