aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xcode/OLMKit/OLMUtility.h4
-rw-r--r--xcode/OLMKit/OLMUtility.m7
-rw-r--r--xcode/OLMKitTests/OLMKitTests.m20
3 files changed, 25 insertions, 6 deletions
diff --git a/xcode/OLMKit/OLMUtility.h b/xcode/OLMKit/OLMUtility.h
index eca9d3a..a8a3743 100644
--- a/xcode/OLMKit/OLMUtility.h
+++ b/xcode/OLMKit/OLMUtility.h
@@ -13,16 +13,16 @@
/**
Verify an ed25519 signature.
+ @param signature the base64-encoded signature to be checked.
@param key the ed25519 key.
@param message the message which was signed.
- @param signature the base64-encoded signature to be checked.
@param the result error if there is a problem with the verification.
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".
@return YES if valid.
*/
-- (BOOL)ed25519Verify:(NSString*)key message:(NSString*)message signature:(NSString*)signature error:(NSError**)error;
+- (BOOL)verifyEd25519Signature:(NSString*)signature key:(NSString*)key message:(NSData*)message error:(NSError**)error;
+ (NSMutableData*) randomBytesOfLength:(NSUInteger)length;
diff --git a/xcode/OLMKit/OLMUtility.m b/xcode/OLMKit/OLMUtility.m
index 1553a81..041da2f 100644
--- a/xcode/OLMKit/OLMUtility.m
+++ b/xcode/OLMKit/OLMUtility.m
@@ -50,19 +50,18 @@
return self;
}
-- (BOOL)ed25519Verify:(NSString *)key message:(NSString *)message signature:(NSString *)signature error:(NSError *__autoreleasing *)error {
+- (BOOL)verifyEd25519Signature:(NSString*)signature key:(NSString*)key message:(NSData*)message error:(NSError**)error {
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
- NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding];
NSData *signatureData = [signature dataUsingEncoding:NSUTF8StringEncoding];
size_t result = olm_ed25519_verify(_utility,
keyData.bytes, keyData.length,
- messageData.bytes, messageData.length,
+ message.bytes, message.length,
signatureData.bytes, signatureData.length
);
- if (result < 0) {
+ if (result < 0 || result == (size_t)-1) {
if (error) {
NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: [NSString stringWithUTF8String:olm_utility_last_error(_utility)]};
diff --git a/xcode/OLMKitTests/OLMKitTests.m b/xcode/OLMKitTests/OLMKitTests.m
index 5459c85..7edc062 100644
--- a/xcode/OLMKitTests/OLMKitTests.m
+++ b/xcode/OLMKitTests/OLMKitTests.m
@@ -157,5 +157,25 @@
XCTAssertEqualObjects(msg3, dMsg3);
}
+- (void)testEd25519Signing {
+
+ OLMUtility *olmUtility = [[OLMUtility alloc] init];
+ OLMAccount *alice = [[OLMAccount alloc] initNewAccount];
+
+ NSDictionary *aJSON = @{
+ @"key1": @"value1",
+ @"key2": @"value2"
+ };
+ NSData *message = [NSKeyedArchiver archivedDataWithRootObject:aJSON];
+ NSString *signature = [alice signMessage:message];
+
+
+ NSString *aliceEd25519Key = alice.identityKeys[@"ed25519"];
+
+ NSError *error;
+ BOOL result = [olmUtility verifyEd25519Signature:signature key:aliceEd25519Key message:message error:&error];
+ XCTAssert(result);
+ XCTAssertNil(error);
+}
@end