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

@ -7,7 +7,8 @@
@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]
expiresInSeconds:0 expireStartedAt:0 isVoiceMessage:NO groupMetaMessage:TSGroupMetaMessageUnspecified quotedMessage:nil contactShare:nil linkPreview:nil];
if (self) {
@ -28,7 +29,7 @@
NSError *error;
SSKProtoLokiDeviceLinkMessage *deviceLinkMessage = [deviceLinkMessageBuilder buildAndReturnError:&error];
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];
[contentBuilder setLokiDeviceLinkMessage:deviceLinkMessage];

Loading…
Cancel
Save