fix desktop linking for some users

// FREEBIE
pull/1/head
Michael Kirk 8 years ago
parent b4312a5619
commit ce2a4422e3

@ -86,9 +86,8 @@ NS_ASSUME_NONNULL_BEGIN
return nil; return nil;
} }
// allow space for message + padding any incomplete block // allow space for message + padding any incomplete block. PKCS7 padding will always add at least one byte.
NSUInteger blockCount = ceil((double)dataToEncrypt.length / (double)kCCBlockSizeAES128); size_t ciphertextBufferSize = dataToEncrypt.length + kCCBlockSizeAES128;
size_t ciphertextBufferSize = blockCount * kCCBlockSizeAES128;
// message format is (iv || ciphertext) // message format is (iv || ciphertext)
NSMutableData *encryptedMessage = [NSMutableData dataWithLength:iv.length + ciphertextBufferSize]; NSMutableData *encryptedMessage = [NSMutableData dataWithLength:iv.length + ciphertextBufferSize];
@ -118,7 +117,7 @@ NS_ASSUME_NONNULL_BEGIN
return nil; return nil;
} }
return [encryptedMessage copy]; return [encryptedMessage subdataWithRange:NSMakeRange(0, iv.length + bytesEncrypted)];
} }
- (NSData *)macForMessage:(NSData *)message withKey:(NSData *)macKey - (NSData *)macForMessage:(NSData *)message withKey:(NSData *)macKey

@ -61,7 +61,7 @@ NS_ASSUME_NONNULL_BEGIN
OWSProvisioningCipher *cipher = [[OWSProvisioningCipher alloc] initWithTheirPublicKey:self.theirPublicKey]; OWSProvisioningCipher *cipher = [[OWSProvisioningCipher alloc] initWithTheirPublicKey:self.theirPublicKey];
NSData *_Nullable encryptedProvisionMessage = [cipher encrypt:plainTextProvisionMessage]; NSData *_Nullable encryptedProvisionMessage = [cipher encrypt:plainTextProvisionMessage];
if (encryptedProvisionMessage == nil) { if (encryptedProvisionMessage == nil) {
DDLogError(@"Failed to encrypt provision message"); OWSFail(@"Failed to encrypt provision message");
return nil; return nil;
} }

@ -1,4 +1,6 @@
// Copyright © 2016 Open Whisper Systems. All rights reserved. //
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import "OWSDeviceProvisioner.h" #import "OWSDeviceProvisioner.h"
#import "OWSDeviceProvisioningCodeService.h" #import "OWSDeviceProvisioningCodeService.h"
@ -62,6 +64,7 @@
NSData *myPublicKey = [nullKey copy]; NSData *myPublicKey = [nullKey copy];
NSData *myPrivateKey = [nullKey copy]; NSData *myPrivateKey = [nullKey copy];
NSData *theirPublicKey = [nullKey copy]; NSData *theirPublicKey = [nullKey copy];
NSData *profileKey = [nullKey copy];
NSString *accountIdentifier; NSString *accountIdentifier;
NSString *theirEphemeralDeviceId; NSString *theirEphemeralDeviceId;
@ -72,6 +75,7 @@
theirPublicKey:theirPublicKey theirPublicKey:theirPublicKey
theirEphemeralDeviceId:theirEphemeralDeviceId theirEphemeralDeviceId:theirEphemeralDeviceId
accountIdentifier:accountIdentifier accountIdentifier:accountIdentifier
profileKey:profileKey
provisioningCodeService:[[OWSFakeDeviceProvisioningCodeService alloc] initWithNetworkManager:networkManager] provisioningCodeService:[[OWSFakeDeviceProvisioningCodeService alloc] initWithNetworkManager:networkManager]
provisioningService:[[OWSFakeDeviceProvisioningService alloc] initWithNetworkManager:networkManager]]; provisioningService:[[OWSFakeDeviceProvisioningService alloc] initWithNetworkManager:networkManager]];

@ -131,4 +131,25 @@
XCTAssertEqualObjects(expectedOutput, actualOutput); XCTAssertEqualObjects(expectedOutput, actualOutput);
} }
- (void)testPadding
{
NSUInteger kBlockSize = 16;
for (int i = 0; i <= kBlockSize; i++) {
NSData *message = [Cryptography generateRandomBytes:i];
NSData *theirPublicKey = [self knownPublicKey];
ECKeyPair *ourKeyPair = [self knownKeyPair];
NSData *initializationVector = [self knownInitializationVector];
OWSProvisioningCipher *cipher = [[OWSProvisioningCipher alloc] initWithTheirPublicKey:theirPublicKey
ourKeyPair:ourKeyPair
initializationVector:initializationVector];
NSData *actualOutput = [cipher encrypt:message];
XCTAssertNotNil(actualOutput, @"failed for message length: %d", i);
}
}
@end @end

Loading…
Cancel
Save