Add own profile key to multidevice provisioning message

// FREEBIE
This commit is contained in:
Michael Kirk 2017-08-26 14:35:33 -04:00
parent 1f3d2d1ed6
commit 46919e4702
5 changed files with 29 additions and 5 deletions

View file

@ -3,8 +3,10 @@
//
#import "OWSLinkDeviceViewController.h"
#import "Cryptography.h"
#import "OWSDeviceProvisioningURLParser.h"
#import "OWSLinkedDevicesTableViewController.h"
#import "OWSProfileManager.h"
#import <SignalServiceKit/ECKeyPair+OWSPrivateKey.h>
#import <SignalServiceKit/OWSDeviceProvisioner.h>
#import <SignalServiceKit/OWSIdentityManager.h>
@ -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.");

View file

@ -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;

View file

@ -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]

View file

@ -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;

View file

@ -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];