Implement mnemonic verification

pull/55/head
Niels Andriesse 6 years ago
parent 9dac9027c9
commit 2f0ac9e59e

@ -38,7 +38,6 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate {
let result = UILabel() let result = UILabel()
result.textColor = Theme.primaryColor result.textColor = Theme.primaryColor
result.font = UIFont.ows_dynamicTypeCaption1Clamped result.font = UIFont.ows_dynamicTypeCaption1Clamped
result.text = "word word word"
result.numberOfLines = 0 result.numberOfLines = 0
result.lineBreakMode = .byWordWrapping result.lineBreakMode = .byWordWrapping
result.textAlignment = .center result.textAlignment = .center
@ -101,6 +100,10 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate {
} }
}() }()
mnemonicLabel.isHidden = (mode == .master) mnemonicLabel.isHidden = (mode == .master)
if mode == .slave {
let hexEncodedPublicKey = OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey
mnemonicLabel.text = Mnemonic.encode(hexEncodedString: hexEncodedPublicKey).split(separator: " ")[0..<3].joined(separator: " ")
}
let buttonHeight = cancelButton.button.titleLabel!.font.pointSize * 48 / 17 let buttonHeight = cancelButton.button.titleLabel!.font.pointSize * 48 / 17
authorizeButton.set(.height, to: buttonHeight) authorizeButton.set(.height, to: buttonHeight)
cancelButton.set(.height, to: buttonHeight) cancelButton.set(.height, to: buttonHeight)
@ -114,13 +117,14 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate {
// MARK: Device Linking // MARK: Device Linking
func requestUserAuthorization(for deviceLink: DeviceLink) { func requestUserAuthorization(for deviceLink: DeviceLink) {
self.deviceLink = deviceLink self.deviceLink = deviceLink
self.topSpacer.isHidden = true topSpacer.isHidden = true
self.spinner.stopAnimating() spinner.stopAnimating()
self.spinner.isHidden = true spinner.isHidden = true
self.titleLabel.text = NSLocalizedString("Linking Request Received", comment: "") titleLabel.text = NSLocalizedString("Linking Request Received", comment: "")
self.subtitleLabel.text = NSLocalizedString("Please check that the words below match the words shown on the device being linked.", comment: "") subtitleLabel.text = NSLocalizedString("Please check that the words below match the words shown on the device being linked.", comment: "")
self.mnemonicLabel.isHidden = false mnemonicLabel.text = Mnemonic.encode(hexEncodedString: deviceLink.slave.hexEncodedPublicKey).split(separator: " ")[0..<3].joined(separator: " ")
self.authorizeButton.isHidden = false mnemonicLabel.isHidden = false
authorizeButton.isHidden = false
} }
@objc private func authorizeDeviceLink() { @objc private func authorizeDeviceLink() {

@ -8,6 +8,7 @@ NS_SWIFT_NAME(DeviceLinkMessage)
@property (nonatomic, readonly) NSData *masterSignature; // nil for device linking requests @property (nonatomic, readonly) NSData *masterSignature; // nil for device linking requests
@property (nonatomic, readonly) NSData *slaveSignature; @property (nonatomic, readonly) NSData *slaveSignature;
- (instancetype)initInThread:(TSThread *)thread masterHexEncodedPublicKey:(NSString *)masterHexEncodedPublicKey slaveHexEncodedPublicKey:(NSString *)slaveHexEncodedPublicKey masterSignature:(NSData *)masterSignature slaveSignature:(NSData *)slaveSignature; - (instancetype)initInThread:(TSThread *)thread masterHexEncodedPublicKey:(NSString *)masterHexEncodedPublicKey slaveHexEncodedPublicKey:(NSString *)slaveHexEncodedPublicKey
masterSignature:(NSData *)masterSignature slaveSignature:(NSData *)slaveSignature;
@end @end

@ -7,7 +7,8 @@
@implementation LKDeviceLinkMessage @implementation LKDeviceLinkMessage
- (instancetype)initInThread:(TSThread *)thread masterHexEncodedPublicKey:(NSString *)masterHexEncodedPublicKey slaveHexEncodedPublicKey:(NSString *)slaveHexEncodedPublicKey masterSignature:(NSData *)masterSignature slaveSignature:(NSData *)slaveSignature { - (instancetype)initInThread:(TSThread *)thread masterHexEncodedPublicKey:(NSString *)masterHexEncodedPublicKey slaveHexEncodedPublicKey:(NSString *)slaveHexEncodedPublicKey
masterSignature:(NSData *)masterSignature slaveSignature:(NSData *)slaveSignature {
self = [self initOutgoingMessageWithTimestamp:NSDate.ows_millisecondTimeStamp inThread:thread messageBody:@"" attachmentIds:[NSMutableArray<NSString *> new] self = [self initOutgoingMessageWithTimestamp:NSDate.ows_millisecondTimeStamp inThread:thread messageBody:@"" attachmentIds:[NSMutableArray<NSString *> new]
expiresInSeconds:0 expireStartedAt:0 isVoiceMessage:NO groupMetaMessage:TSGroupMetaMessageUnspecified quotedMessage:nil contactShare:nil linkPreview:nil]; expiresInSeconds:0 expireStartedAt:0 isVoiceMessage:NO groupMetaMessage:TSGroupMetaMessageUnspecified quotedMessage:nil contactShare:nil linkPreview:nil];
if (self) { if (self) {
@ -28,7 +29,7 @@
NSError *error; NSError *error;
SSKProtoLokiDeviceLinkMessage *deviceLinkMessage = [deviceLinkMessageBuilder buildAndReturnError:&error]; SSKProtoLokiDeviceLinkMessage *deviceLinkMessage = [deviceLinkMessageBuilder buildAndReturnError:&error];
if (error || deviceLinkMessage == nil) { if (error || deviceLinkMessage == nil) {
OWSFailDebug(@"Failed to build device linking message for: %@ due to error: %@", self.masterHexEncodedPublicKey, error); OWSFailDebug(@"Failed to build device link message due to error: %@", error);
} }
SSKProtoContentBuilder *contentBuilder = [super contentBuilder:recipient]; SSKProtoContentBuilder *contentBuilder = [super contentBuilder:recipient];
[contentBuilder setLokiDeviceLinkMessage:deviceLinkMessage]; [contentBuilder setLokiDeviceLinkMessage:deviceLinkMessage];

Loading…
Cancel
Save