diff --git a/xcode/OLMKit/OLMUtility.h b/xcode/OLMKit/OLMUtility.h
index eca9d3afe459a4778fe94ca89f5c329c0e198bee..a8a37436f1066aeb3efbf2992e42ff058e23baf9 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 1553a813a37ba2168bbe0ad55294f4ac78ea6f0e..041da2fc147012ceecf62d10f486edc7fc71f7af 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 5459c8578920a2472ce0066fb02b1c9cd8a61829..7edc062712f32657d2f3d4ae19ff8d4b1c2b61ff 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