From 46919e470295e007242f29cd949b10e2b2cd7fbd Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Sat, 26 Aug 2017 14:35:33 -0400 Subject: [PATCH] Add own profile key to multidevice provisioning message // FREEBIE --- .../src/ViewControllers/OWSLinkDeviceViewController.m | 11 ++++++++++- SignalServiceKit/src/Devices/OWSDeviceProvisioner.h | 10 +++++++--- SignalServiceKit/src/Devices/OWSDeviceProvisioner.m | 6 ++++++ SignalServiceKit/src/Devices/OWSProvisioningMessage.h | 1 + SignalServiceKit/src/Devices/OWSProvisioningMessage.m | 6 +++++- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Signal/src/ViewControllers/OWSLinkDeviceViewController.m b/Signal/src/ViewControllers/OWSLinkDeviceViewController.m index 1e5faf2da..bf56ec8a1 100644 --- a/Signal/src/ViewControllers/OWSLinkDeviceViewController.m +++ b/Signal/src/ViewControllers/OWSLinkDeviceViewController.m @@ -3,8 +3,10 @@ // #import "OWSLinkDeviceViewController.h" +#import "Cryptography.h" #import "OWSDeviceProvisioningURLParser.h" #import "OWSLinkedDevicesTableViewController.h" +#import "OWSProfileManager.h" #import #import #import @@ -38,6 +40,11 @@ NS_ASSUME_NONNULL_BEGIN = NSLocalizedString(@"LINK_NEW_DEVICE_TITLE", "Navigation title when scanning QR code to add new device."); } +- (OWSProfileManager *)profileManager +{ + return [OWSProfileManager sharedManager]; +} + - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; @@ -132,12 +139,14 @@ NS_ASSUME_NONNULL_BEGIN NSData *myPublicKey = identityKeyPair.publicKey; NSData *myPrivateKey = identityKeyPair.ows_privateKey; NSString *accountIdentifier = [TSAccountManager localNumber]; + NSData *myProfileKeyData = self.profileManager.localProfileKey.keyData; OWSDeviceProvisioner *provisioner = [[OWSDeviceProvisioner alloc] initWithMyPublicKey:myPublicKey myPrivateKey:myPrivateKey theirPublicKey:parser.publicKey theirEphemeralDeviceId:parser.ephemeralDeviceId - accountIdentifier:accountIdentifier]; + accountIdentifier:accountIdentifier + profileKey:myProfileKeyData]; [provisioner provisionWithSuccess:^{ DDLogInfo(@"Successfully provisioned device."); diff --git a/SignalServiceKit/src/Devices/OWSDeviceProvisioner.h b/SignalServiceKit/src/Devices/OWSDeviceProvisioner.h index a17621639..b9eef635a 100644 --- a/SignalServiceKit/src/Devices/OWSDeviceProvisioner.h +++ b/SignalServiceKit/src/Devices/OWSDeviceProvisioner.h @@ -1,4 +1,6 @@ -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// NS_ASSUME_NONNULL_BEGIN @@ -14,14 +16,16 @@ NS_ASSUME_NONNULL_BEGIN theirPublicKey:(NSData *)theirPublicKey theirEphemeralDeviceId:(NSString *)ephemeralDeviceId accountIdentifier:(NSString *)accountIdentifier + profileKey:(NSData *)profileKey provisioningCodeService:(OWSDeviceProvisioningCodeService *)provisioningCodeService provisioningService:(OWSDeviceProvisioningService *)provisioningService NS_DESIGNATED_INITIALIZER; - (instancetype)initWithMyPublicKey:(NSData *)myPublicKey myPrivateKey:(NSData *)myPrivateKey - theirPublicKey:(NSData *)theirEncodedPublicKey + theirPublicKey:(NSData *)theirPublicKey theirEphemeralDeviceId:(NSString *)ephemeralDeviceId - accountIdentifier:(NSString *)accountIdentifier; + accountIdentifier:(NSString *)accountIdentifier + profileKey:(NSData *)profileKey; - (void)provisionWithSuccess:(void (^)())successCallback failure:(void (^)(NSError *))failureCallback; diff --git a/SignalServiceKit/src/Devices/OWSDeviceProvisioner.m b/SignalServiceKit/src/Devices/OWSDeviceProvisioner.m index 05ff4be12..3b01291e4 100644 --- a/SignalServiceKit/src/Devices/OWSDeviceProvisioner.m +++ b/SignalServiceKit/src/Devices/OWSDeviceProvisioner.m @@ -13,6 +13,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSData *myPrivateKey; @property (nonatomic, readonly) NSData *theirPublicKey; @property (nonatomic, readonly) NSString *accountIdentifier; +@property (nonatomic, readonly) NSData *profileKey; @property (nonatomic, nullable) NSString *ephemeralDeviceId; @property (nonatomic, readonly) OWSDeviceProvisioningCodeService *provisioningCodeService; @property (nonatomic, readonly) OWSDeviceProvisioningService *provisioningService; @@ -26,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN theirPublicKey:(NSData *)theirPublicKey theirEphemeralDeviceId:(NSString *)ephemeralDeviceId accountIdentifier:(NSString *)accountIdentifier + profileKey:(NSData *)profileKey provisioningCodeService:(OWSDeviceProvisioningCodeService *)provisioningCodeService provisioningService:(OWSDeviceProvisioningService *)provisioningService { @@ -38,6 +40,7 @@ NS_ASSUME_NONNULL_BEGIN _myPrivateKey = myPrivateKey; _theirPublicKey = theirPublicKey; _accountIdentifier = accountIdentifier; + _profileKey = profileKey; _ephemeralDeviceId = ephemeralDeviceId; _provisioningCodeService = provisioningCodeService; _provisioningService = provisioningService; @@ -50,12 +53,14 @@ NS_ASSUME_NONNULL_BEGIN theirPublicKey:(NSData *)theirPublicKey theirEphemeralDeviceId:(NSString *)ephemeralDeviceId accountIdentifier:(NSString *)accountIdentifier + profileKey:(NSData *)profileKey { return [self initWithMyPublicKey:myPublicKey myPrivateKey:myPrivateKey theirPublicKey:theirPublicKey theirEphemeralDeviceId:ephemeralDeviceId accountIdentifier:accountIdentifier + profileKey:profileKey provisioningCodeService:[OWSDeviceProvisioningCodeService new] provisioningService:[OWSDeviceProvisioningService new]]; } @@ -80,6 +85,7 @@ NS_ASSUME_NONNULL_BEGIN myPrivateKey:self.myPrivateKey theirPublicKey:self.theirPublicKey accountIdentifier:self.accountIdentifier + profileKey:self.profileKey provisioningCode:provisioningCode]; [self.provisioningService provisionWithMessageBody:[message buildEncryptedMessageBody] diff --git a/SignalServiceKit/src/Devices/OWSProvisioningMessage.h b/SignalServiceKit/src/Devices/OWSProvisioningMessage.h index e32eae418..8d47f7c5f 100644 --- a/SignalServiceKit/src/Devices/OWSProvisioningMessage.h +++ b/SignalServiceKit/src/Devices/OWSProvisioningMessage.h @@ -8,6 +8,7 @@ NS_ASSUME_NONNULL_BEGIN myPrivateKey:(NSData *)myPrivateKey theirPublicKey:(NSData *)theirPublicKey accountIdentifier:(NSString *)accountIdentifier + profileKey:(NSData *)profileKey provisioningCode:(NSString *)provisioningCode; - (NSData *)buildEncryptedMessageBody; diff --git a/SignalServiceKit/src/Devices/OWSProvisioningMessage.m b/SignalServiceKit/src/Devices/OWSProvisioningMessage.m index eef05e9c0..7908a084c 100644 --- a/SignalServiceKit/src/Devices/OWSProvisioningMessage.m +++ b/SignalServiceKit/src/Devices/OWSProvisioningMessage.m @@ -15,6 +15,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSData *myPrivateKey; @property (nonatomic, readonly) NSString *accountIdentifier; @property (nonatomic, readonly) NSData *theirPublicKey; +@property (nonatomic, readonly) NSData *profileKey; @property (nonatomic, readonly) NSString *provisioningCode; @end @@ -25,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN myPrivateKey:(NSData *)myPrivateKey theirPublicKey:(NSData *)theirPublicKey accountIdentifier:(NSString *)accountIdentifier + profileKey:(NSData *)profileKey provisioningCode:(NSString *)provisioningCode { self = [super init]; @@ -34,8 +36,9 @@ NS_ASSUME_NONNULL_BEGIN _myPublicKey = myPublicKey; _myPrivateKey = myPrivateKey; - _accountIdentifier = accountIdentifier; _theirPublicKey = theirPublicKey; + _accountIdentifier = accountIdentifier; + _profileKey = profileKey; _provisioningCode = provisioningCode; return self; @@ -49,6 +52,7 @@ NS_ASSUME_NONNULL_BEGIN [messageBuilder setNumber:self.accountIdentifier]; [messageBuilder setProvisioningCode:self.provisioningCode]; [messageBuilder setUserAgent:@"OWI"]; + [messageBuilder setProfileKey:self.profileKey]; NSData *plainTextProvisionMessage = [[messageBuilder build] data];