From a9be04fa4b53e7012406a9a89596e94b65947c20 Mon Sep 17 00:00:00 2001 From: manuroe Date: Mon, 17 Oct 2016 15:47:52 +0200 Subject: OLMKit: Add [OLMUtility sha256:] --- xcode/OLMKit/OLMUtility.h | 8 ++++++++ xcode/OLMKit/OLMUtility.m | 21 ++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/xcode/OLMKit/OLMUtility.h b/xcode/OLMKit/OLMUtility.h index a8a3743..1952b8e 100644 --- a/xcode/OLMKit/OLMUtility.h +++ b/xcode/OLMKit/OLMUtility.h @@ -10,6 +10,14 @@ @interface OLMUtility : NSObject +/** + Calculate the SHA-256 hash of the input and encodes it as base64. + + @param message the message to hash. + @return the base64-encoded hash value. + */ +- (NSString*)sha256:(NSData*)message; + /** Verify an ed25519 signature. diff --git a/xcode/OLMKit/OLMUtility.m b/xcode/OLMKit/OLMUtility.m index 041da2f..292fc21 100644 --- a/xcode/OLMKit/OLMUtility.m +++ b/xcode/OLMKit/OLMUtility.m @@ -50,6 +50,25 @@ return self; } +- (NSString *)sha256:(NSData *)message { + size_t length = olm_sha256_length(_utility); + + NSMutableData *shaData = [NSMutableData dataWithLength:length]; + if (!shaData) { + return nil; + } + + size_t result = olm_sha256(_utility, message.bytes, message.length, shaData.mutableBytes, shaData.length); + if (result == olm_error()) { + const char *error = olm_utility_last_error(_utility); + NSAssert(NO, @"olm_sha256 error: %s", error); + return nil; + } + + NSString *sha = [[NSString alloc] initWithData:shaData encoding:NSUTF8StringEncoding]; + return sha; +} + - (BOOL)verifyEd25519Signature:(NSString*)signature key:(NSString*)key message:(NSData*)message error:(NSError**)error { NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding]; @@ -61,7 +80,7 @@ signatureData.bytes, signatureData.length ); - if (result < 0 || result == (size_t)-1) { + if (result == olm_error()) { if (error) { NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: [NSString stringWithUTF8String:olm_utility_last_error(_utility)]}; -- cgit v1.2.3