Fix verifyEd25519Signature() API to properly return the error message in case signature verification failed

- update unit tests
This commit is contained in:
pedroGitt 2016-10-18 19:02:18 +02:00
parent a6913c49c2
commit 26d9934fc8
2 changed files with 29 additions and 10 deletions

View file

@ -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();
}

View file

@ -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);