diff options
author | manuroe <manu@matrix.org> | 2016-10-17 15:47:52 +0200 |
---|---|---|
committer | manuroe <manu@matrix.org> | 2016-10-17 15:47:52 +0200 |
commit | a9be04fa4b53e7012406a9a89596e94b65947c20 (patch) | |
tree | 7815c6b2b1f276aecb32e91aba8f9ce80b03cc74 | |
parent | 4a2aac5800dacb3de935f6594e4d213087cb7cb5 (diff) |
OLMKit: Add [OLMUtility sha256:]
-rw-r--r-- | xcode/OLMKit/OLMUtility.h | 8 | ||||
-rw-r--r-- | xcode/OLMKit/OLMUtility.m | 21 |
2 files changed, 28 insertions, 1 deletions
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 @@ -11,6 +11,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. @param signature the base64-encoded signature to be checked. 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)]}; |