session-ios/SessionProtocolKit/Utility/NSData+keyVersionByte.m

50 lines
1.3 KiB
Objective-C

//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import "NSData+keyVersionByte.h"
#import "AxolotlExceptions.h"
#import <SessionProtocolKit/SCKExceptionWrapper.h>
#import <SessionProtocolKit/OWSAsserts.h>
@implementation NSData (keyVersionByte)
const Byte DJB_TYPE = 0x05;
- (instancetype)prependKeyType {
if (self.length == 32) {
NSMutableData *data = [NSMutableData dataWithBytes:&DJB_TYPE length:1];
[data appendData:self.copy];
return data;
} else {
OWSLogDebug(@"key length: %lu", (unsigned long)self.length);
}
return self;
}
- (nullable instancetype)removeKeyTypeAndReturnError:(NSError **)outError
{
@try {
return self.throws_removeKeyType;
} @catch (NSException *exception) {
*outError = SCKExceptionWrapperErrorMake(exception);
return nil;
}
}
- (instancetype)throws_removeKeyType
{
if (self.length == 33) {
if ([[self subdataWithRange:NSMakeRange(0, 1)] isEqualToData:[NSData dataWithBytes:&DJB_TYPE length:1]]) {
return [self subdataWithRange:NSMakeRange(1, 32)];
} else{
@throw [NSException exceptionWithName:InvalidKeyException reason:@"Key type is incorrect" userInfo:@{}];
}
} else {
OWSLogDebug(@"key length: %lu", (unsigned long)self.length);
return self;
}
}
@end