OLMKit: Add [OLMUtility ed25519Verify]
This commit is contained in:
parent
f29eabde8b
commit
45ecaaedd1
2 changed files with 80 additions and 0 deletions
|
@ -10,6 +10,20 @@
|
|||
|
||||
@interface OLMUtility : NSObject
|
||||
|
||||
/**
|
||||
Verify an ed25519 signature.
|
||||
|
||||
@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;
|
||||
|
||||
+ (NSMutableData*) randomBytesOfLength:(NSUInteger)length;
|
||||
|
||||
@end
|
||||
|
|
|
@ -8,8 +8,74 @@
|
|||
|
||||
#import "OLMUtility.h"
|
||||
|
||||
#include "olm/olm.h"
|
||||
|
||||
@interface OLMUtility()
|
||||
|
||||
@property (nonatomic) OlmUtility *utility;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OLMUtility
|
||||
|
||||
- (void) dealloc {
|
||||
olm_clear_utility(_utility);
|
||||
free(_utility);
|
||||
}
|
||||
|
||||
- (BOOL) initializeUtilityMemory {
|
||||
size_t utilitySize = olm_utility_size();
|
||||
_utility = malloc(utilitySize);
|
||||
NSParameterAssert(_utility != nil);
|
||||
if (!_utility) {
|
||||
return NO;
|
||||
}
|
||||
_utility = olm_utility(_utility);
|
||||
NSParameterAssert(_utility != nil);
|
||||
if (!_utility) {
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (instancetype) init {
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return nil;
|
||||
}
|
||||
BOOL success = [self initializeUtilityMemory];
|
||||
if (!success) {
|
||||
return nil;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (BOOL)ed25519Verify:(NSString *)key message:(NSString *)message signature:(NSString *)signature error:(NSError *__autoreleasing *)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,
|
||||
signatureData.bytes, signatureData.length
|
||||
);
|
||||
|
||||
if (result < 0) {
|
||||
if (error) {
|
||||
NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: [NSString stringWithUTF8String:olm_utility_last_error(_utility)]};
|
||||
|
||||
// @TODO
|
||||
*error = [[NSError alloc] initWithDomain:@"OLMKitErrorDomain" code:0 userInfo:userInfo];
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
else {
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
|
||||
+ (NSMutableData*) randomBytesOfLength:(NSUInteger)length {
|
||||
NSMutableData *randomData = [NSMutableData dataWithLength:length];
|
||||
if (!randomData) {
|
||||
|
|
Loading…
Reference in a new issue