parent
6ec21ade9b
commit
9093be2b0d
|
@ -21,6 +21,7 @@
|
|||
459850C11D22C6F2006FFEDB /* PhoneNumberTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 459850C01D22C6F2006FFEDB /* PhoneNumberTest.m */; };
|
||||
45A856AC1D220BFF0056CD4D /* TSAttributesTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A856AB1D220BFF0056CD4D /* TSAttributesTest.m */; };
|
||||
45C6A09A1D2F029B007D8AC0 /* TSMessageTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C6A0991D2F029B007D8AC0 /* TSMessageTest.m */; };
|
||||
45D7243F1D67899F00E0CA54 /* OWSDeviceProvisionerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 45D7243E1D67899F00E0CA54 /* OWSDeviceProvisionerTest.m */; };
|
||||
51520592F83F2440F2DE4D67 /* libPods-TSKitiOSTestApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B8362AB8E280E0F64352F08A /* libPods-TSKitiOSTestApp.a */; };
|
||||
B6273DD61C13A2E500738558 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B6273DD51C13A2E500738558 /* main.m */; };
|
||||
B6273DD91C13A2E500738558 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6273DD81C13A2E500738558 /* AppDelegate.m */; };
|
||||
|
@ -58,6 +59,7 @@
|
|||
459FE0DA1D4AD49E00E1071A /* TSKitiOSTestApp-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "TSKitiOSTestApp-Prefix.pch"; sourceTree = "<group>"; };
|
||||
45A856AB1D220BFF0056CD4D /* TSAttributesTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSAttributesTest.m; sourceTree = "<group>"; };
|
||||
45C6A0991D2F029B007D8AC0 /* TSMessageTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSMessageTest.m; path = ../../../tests/Messages/Interactions/TSMessageTest.m; sourceTree = "<group>"; };
|
||||
45D7243E1D67899F00E0CA54 /* OWSDeviceProvisionerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSDeviceProvisionerTest.m; path = ../../../tests/Devices/OWSDeviceProvisionerTest.m; sourceTree = "<group>"; };
|
||||
B6273DD11C13A2E500738558 /* TSKitiOSTestApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TSKitiOSTestApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B6273DD51C13A2E500738558 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
B6273DD71C13A2E500738558 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||
|
@ -162,6 +164,14 @@
|
|||
name = Interactions;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
45D7243D1D67894100E0CA54 /* Devices */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
45D7243E1D67899F00E0CA54 /* OWSDeviceProvisionerTest.m */,
|
||||
);
|
||||
name = Devices;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5183572EFCE99F6F1791272A /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -230,10 +240,11 @@
|
|||
B6273DED1C13A2E500738558 /* TSKitiOSTestAppTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
45C6A0971D2F0254007D8AC0 /* Messages */,
|
||||
45458B691CC342B600A02153 /* Account */,
|
||||
45458B6B1CC342B600A02153 /* Attachments */,
|
||||
459850BF1D22C6C4006FFEDB /* Contacts */,
|
||||
45D7243D1D67894100E0CA54 /* Devices */,
|
||||
45C6A0971D2F0254007D8AC0 /* Messages */,
|
||||
45458B6D1CC342B600A02153 /* Storage */,
|
||||
45458B721CC342B600A02153 /* Util */,
|
||||
B6273DF01C13A2E500738558 /* Info.plist */,
|
||||
|
@ -453,6 +464,7 @@
|
|||
45458B781CC342B600A02153 /* TSStorageIdentityKeyStoreTests.m in Sources */,
|
||||
45458B751CC342B600A02153 /* SignedPreKeyDeletionTests.m in Sources */,
|
||||
45458B7B1CC342B600A02153 /* CryptographyTests.m in Sources */,
|
||||
45D7243F1D67899F00E0CA54 /* OWSDeviceProvisionerTest.m in Sources */,
|
||||
45458B791CC342B600A02153 /* TSStoragePreKeyStoreTests.m in Sources */,
|
||||
452EE6D51D4AC43300E934BA /* OWSOrphanedDataCleanerTest.m in Sources */,
|
||||
452EE6CF1D4A754C00E934BA /* TSThreadTest.m in Sources */,
|
||||
|
|
|
@ -1,9 +1,23 @@
|
|||
# Assumes you've installed protobug-objc
|
||||
# see: https://github.com/alexeyxo/protobuf-objc
|
||||
|
||||
all: signal_service_proto provisioning_protos
|
||||
|
||||
signal_service_proto:
|
||||
protoc --objc_out=../src/Messages/ \
|
||||
protoc \
|
||||
--plugin=/usr/local/bin/proto-gen-objc \
|
||||
--proto_path="${HOME}/src/WhisperSystems/protobuf-objc/src/compiler/" \
|
||||
--proto_path="${HOME}/src/WhisperSystems/protobuf-objc/src/compiler/google/protobuf/" \
|
||||
--proto_path='./' \
|
||||
--objc_out=../src/Messages/ \
|
||||
OWSSignalServiceProtos.proto
|
||||
|
||||
provisioning_protos:
|
||||
protoc \
|
||||
--plugin=/usr/local/bin/proto-gen-objc \
|
||||
--proto_path="${HOME}/src/WhisperSystems/protobuf-objc/src/compiler/" \
|
||||
--proto_path="${HOME}/src/WhisperSystems/protobuf-objc/src/compiler/google/protobuf/" \
|
||||
--proto_path='./' \
|
||||
--objc_out=../src/Devices/ \
|
||||
OWSProvisioningProtos.proto
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
package signalservice;
|
||||
|
||||
option java_package = "org.whispersystems.signalservice.internal.push";
|
||||
option java_outer_classname = "ProvisioningProtos";
|
||||
|
||||
import "objectivec-descriptor.proto";
|
||||
option (google.protobuf.objectivec_file_options).class_prefix = "OWSProvisioningProtos";
|
||||
|
||||
message ProvisionEnvelope {
|
||||
optional bytes publicKey = 1;
|
||||
optional bytes body = 2; // Encrypted ProvisionMessage
|
||||
}
|
||||
|
||||
message ProvisionMessage {
|
||||
optional bytes identityKeyPublic = 1;
|
||||
optional bytes identityKeyPrivate = 2;
|
||||
optional string number = 3;
|
||||
optional string provisioningCode = 4;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class OWSDeviceProvisioningCodeService;
|
||||
@class OWSDeviceProvisioningService;
|
||||
|
||||
@interface OWSDeviceProvisioner : NSObject
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
- (instancetype)initWithMyPublicKey:(NSData *)myPublicKey
|
||||
myPrivateKey:(NSData *)myPrivateKey
|
||||
theirPublicKey:(NSData *)theirPublicKey
|
||||
theirEphemeralDeviceId:(NSString *)ephemeralDeviceId
|
||||
accountIdentifier:(NSString *)accountIdentifier
|
||||
provisioningCodeService:(OWSDeviceProvisioningCodeService *)provisioningCodeService
|
||||
provisioningService:(OWSDeviceProvisioningService *)provisioningService NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (instancetype)initWithMyPublicKey:(NSData *)myPublicKey
|
||||
myPrivateKey:(NSData *)myPrivateKey
|
||||
theirPublicKey:(NSData *)theirEncodedPublicKey
|
||||
theirEphemeralDeviceId:(NSString *)ephemeralDeviceId
|
||||
accountIdentifier:(NSString *)accountIdentifier;
|
||||
|
||||
- (void)provisionWithSuccess:(void (^)())successCallback failure:(void (^)(NSError *))failureCallback;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,99 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "OWSDeviceProvisioner.h"
|
||||
#import "OWSDeviceProvisioningCodeService.h"
|
||||
#import "OWSDeviceProvisioningService.h"
|
||||
#import "OWSProvisioningMessage.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSDeviceProvisioner ()
|
||||
|
||||
@property (nonatomic, readonly) NSData *myPublicKey;
|
||||
@property (nonatomic, readonly) NSData *myPrivateKey;
|
||||
@property (nonatomic, readonly) NSData *theirPublicKey;
|
||||
@property (nonatomic, readonly) NSString *accountIdentifier;
|
||||
@property (nonatomic, nullable) NSString *ephemeralDeviceId;
|
||||
@property (nonatomic, readonly) OWSDeviceProvisioningCodeService *provisioningCodeService;
|
||||
@property (nonatomic, readonly) OWSDeviceProvisioningService *provisioningService;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSDeviceProvisioner
|
||||
|
||||
- (instancetype)initWithMyPublicKey:(NSData *)myPublicKey
|
||||
myPrivateKey:(NSData *)myPrivateKey
|
||||
theirPublicKey:(NSData *)theirPublicKey
|
||||
theirEphemeralDeviceId:(NSString *)ephemeralDeviceId
|
||||
accountIdentifier:(NSString *)accountIdentifier
|
||||
provisioningCodeService:(OWSDeviceProvisioningCodeService *)provisioningCodeService
|
||||
provisioningService:(OWSDeviceProvisioningService *)provisioningService
|
||||
{
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
_myPublicKey = myPublicKey;
|
||||
_myPrivateKey = myPrivateKey;
|
||||
_theirPublicKey = theirPublicKey;
|
||||
_accountIdentifier = accountIdentifier;
|
||||
_ephemeralDeviceId = ephemeralDeviceId;
|
||||
_provisioningCodeService = provisioningCodeService;
|
||||
_provisioningService = provisioningService;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithMyPublicKey:(NSData *)myPublicKey
|
||||
myPrivateKey:(NSData *)myPrivateKey
|
||||
theirPublicKey:(NSData *)theirPublicKey
|
||||
theirEphemeralDeviceId:(NSString *)ephemeralDeviceId
|
||||
accountIdentifier:(NSString *)accountIdentifier
|
||||
{
|
||||
return [self initWithMyPublicKey:myPublicKey
|
||||
myPrivateKey:myPrivateKey
|
||||
theirPublicKey:theirPublicKey
|
||||
theirEphemeralDeviceId:ephemeralDeviceId
|
||||
accountIdentifier:accountIdentifier
|
||||
provisioningCodeService:[OWSDeviceProvisioningCodeService new]
|
||||
provisioningService:[OWSDeviceProvisioningService new]];
|
||||
}
|
||||
|
||||
- (void)provisionWithSuccess:(void (^)())successCallback failure:(void (^)(NSError *_Nonnull))failureCallback
|
||||
{
|
||||
[self.provisioningCodeService requestProvisioningCodeWithSuccess:^(NSString *provisioningCode) {
|
||||
DDLogInfo(@"Retrieved provisioning code.");
|
||||
[self provisionWithCode:provisioningCode success:successCallback failure:failureCallback];
|
||||
}
|
||||
failure:^(NSError *error) {
|
||||
DDLogError(@"Failed to get provisioning code with error: %@", error);
|
||||
failureCallback(error);
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)provisionWithCode:(NSString *)provisioningCode
|
||||
success:(void (^)())successCallback
|
||||
failure:(void (^)(NSError *_Nonnull))failureCallback
|
||||
{
|
||||
OWSProvisioningMessage *message = [[OWSProvisioningMessage alloc] initWithMyPublicKey:self.myPublicKey
|
||||
myPrivateKey:self.myPrivateKey
|
||||
theirPublicKey:self.theirPublicKey
|
||||
accountIdentifier:self.accountIdentifier
|
||||
provisioningCode:provisioningCode];
|
||||
|
||||
[self.provisioningService provisionWithMessageBody:[message buildEncryptedMessageBody]
|
||||
ephemeralDeviceId:self.ephemeralDeviceId
|
||||
success:^{
|
||||
DDLogInfo(@"ProvisioningService SUCCEEDED");
|
||||
successCallback();
|
||||
}
|
||||
failure:^(NSError *error) {
|
||||
DDLogError(@"ProvisioningService FAILED with error:%@", error);
|
||||
failureCallback(error);
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSProvisioningCipher : NSObject
|
||||
|
||||
@property (nonatomic, readonly) NSData *ourPublicKey;
|
||||
|
||||
- (instancetype)initWithTheirPublicKey:(NSData *)theirPublicKey;
|
||||
- (NSData *)encrypt:(NSData *)plainText;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,103 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "OWSProvisioningCipher.h"
|
||||
#import <25519/Curve25519.h>
|
||||
#import <HKDFKit/HKDFKit.h>
|
||||
#import <SignalServiceKit/Cryptography.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSProvisioningCipher ()
|
||||
|
||||
@property (nonatomic, readonly) NSData *theirPublicKey;
|
||||
@property (nonatomic, readonly) ECKeyPair *ourKeyPair;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSProvisioningCipher
|
||||
|
||||
- (instancetype)initWithTheirPublicKey:(NSData *)theirPublicKey
|
||||
{
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
_theirPublicKey = theirPublicKey;
|
||||
_ourKeyPair = [Curve25519 generateKeyPair];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSData *)ourPublicKey
|
||||
{
|
||||
return self.ourKeyPair.publicKey;
|
||||
}
|
||||
|
||||
- (NSData *)encrypt:(NSData *)dataToEncrypt
|
||||
{
|
||||
NSData *sharedSecret =
|
||||
[Curve25519 generateSharedSecretFromPublicKey:self.theirPublicKey andKeyPair:self.ourKeyPair];
|
||||
|
||||
NSData *infoData = [@"TextSecure Provisioning Message" dataUsingEncoding:NSASCIIStringEncoding];
|
||||
NSData *nullSalt = [[NSMutableData dataWithLength:32] copy];
|
||||
NSData *derivedSecret = [HKDFKit deriveKey:sharedSecret info:infoData salt:nullSalt outputSize:64];
|
||||
NSData *cipherKey = [derivedSecret subdataWithRange:NSMakeRange(0, 32)];
|
||||
NSData *macKey = [derivedSecret subdataWithRange:NSMakeRange(32, 32)];
|
||||
NSAssert(cipherKey.length == 32, @"Cipher Key must be 32 bytes");
|
||||
NSAssert(macKey.length == 32, @"Mac Key must be 32 bytes");
|
||||
|
||||
u_int8_t versionByte[] = { 0x01 };
|
||||
NSMutableData *message = [NSMutableData dataWithBytes:&versionByte length:1];
|
||||
|
||||
NSData *cipherText = [self encrypt:dataToEncrypt withKey:cipherKey];
|
||||
[message appendData:cipherText];
|
||||
|
||||
NSData *mac = [self macForMessage:message withKey:macKey];
|
||||
[message appendData:mac];
|
||||
|
||||
return [message copy];
|
||||
}
|
||||
|
||||
- (NSData *)encrypt:(NSData *)dataToEncrypt withKey:(NSData *)cipherKey
|
||||
{
|
||||
NSData *iv = [Cryptography generateRandomBytes:kCCBlockSizeAES128];
|
||||
// allow space for message + padding any incomplete block
|
||||
size_t bufferSize = dataToEncrypt.length + kCCBlockSizeAES128;
|
||||
void *buffer = malloc(bufferSize);
|
||||
size_t bytesEncrypted = 0;
|
||||
|
||||
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
|
||||
kCCAlgorithmAES,
|
||||
kCCOptionPKCS7Padding,
|
||||
cipherKey.bytes,
|
||||
cipherKey.length,
|
||||
iv.bytes,
|
||||
dataToEncrypt.bytes,
|
||||
dataToEncrypt.length,
|
||||
buffer,
|
||||
bufferSize,
|
||||
&bytesEncrypted);
|
||||
|
||||
if (cryptStatus != kCCSuccess) {
|
||||
DDLogError(@"Encryption failed with status: %d", cryptStatus);
|
||||
}
|
||||
|
||||
NSMutableData *encryptedMessage = [[NSMutableData alloc] initWithData:iv];
|
||||
[encryptedMessage appendBytes:buffer length:bytesEncrypted];
|
||||
|
||||
return [encryptedMessage copy];
|
||||
}
|
||||
|
||||
- (NSData *)macForMessage:(NSData *)message withKey:(NSData *)macKey
|
||||
{
|
||||
uint8_t hmacBytes[CC_SHA256_DIGEST_LENGTH] = { 0 };
|
||||
CCHmac(kCCHmacAlgSHA256, macKey.bytes, macKey.length, message.bytes, message.length, hmacBytes);
|
||||
|
||||
return [NSData dataWithBytes:hmacBytes length:CC_SHA256_DIGEST_LENGTH];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSProvisioningMessage : NSObject
|
||||
|
||||
- (instancetype)initWithMyPublicKey:(NSData *)myPublicKey
|
||||
myPrivateKey:(NSData *)myPrivateKey
|
||||
theirPublicKey:(NSData *)theirPublicKey
|
||||
accountIdentifier:(NSString *)accountIdentifier
|
||||
provisioningCode:(NSString *)provisioningCode;
|
||||
|
||||
- (NSData *)buildEncryptedMessageBody;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,67 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "OWSProvisioningMessage.h"
|
||||
#import "OWSProvisioningCipher.h"
|
||||
#import "OWSProvisioningProtos.pb.h"
|
||||
#import <25519/Curve25519.h>
|
||||
#import <AxolotlKit/NSData+keyVersionByte.h>
|
||||
#import <HKDFKit/HKDFKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSProvisioningMessage ()
|
||||
|
||||
@property (nonatomic, readonly) NSData *myPublicKey;
|
||||
@property (nonatomic, readonly) NSData *myPrivateKey;
|
||||
@property (nonatomic, readonly) NSString *accountIdentifier;
|
||||
@property (nonatomic, readonly) NSData *theirPublicKey;
|
||||
@property (nonatomic, readonly) NSString *provisioningCode;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSProvisioningMessage
|
||||
|
||||
- (instancetype)initWithMyPublicKey:(NSData *)myPublicKey
|
||||
myPrivateKey:(NSData *)myPrivateKey
|
||||
theirPublicKey:(NSData *)theirPublicKey
|
||||
accountIdentifier:(NSString *)accountIdentifier
|
||||
provisioningCode:(NSString *)provisioningCode
|
||||
{
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
_myPublicKey = myPublicKey;
|
||||
_myPrivateKey = myPrivateKey;
|
||||
_accountIdentifier = accountIdentifier;
|
||||
_theirPublicKey = theirPublicKey;
|
||||
_provisioningCode = provisioningCode;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSData *)buildEncryptedMessageBody
|
||||
{
|
||||
OWSProvisioningProtosProvisionMessageBuilder *messageBuilder = [OWSProvisioningProtosProvisionMessageBuilder new];
|
||||
[messageBuilder setIdentityKeyPublic:self.myPublicKey];
|
||||
[messageBuilder setIdentityKeyPrivate:self.myPrivateKey];
|
||||
[messageBuilder setNumber:self.accountIdentifier];
|
||||
[messageBuilder setProvisioningCode:self.provisioningCode];
|
||||
|
||||
NSData *plainTextProvisionMessage = [[messageBuilder build] data];
|
||||
|
||||
OWSProvisioningCipher *cipher = [[OWSProvisioningCipher alloc] initWithTheirPublicKey:self.theirPublicKey];
|
||||
NSData *encryptedProvisionMessage = [cipher encrypt:plainTextProvisionMessage];
|
||||
|
||||
OWSProvisioningProtosProvisionEnvelopeBuilder *envelopeBuilder = [OWSProvisioningProtosProvisionEnvelopeBuilder new];
|
||||
// Note that this is a one-time-use *cipher* public key, not our Signal *identity* public key
|
||||
[envelopeBuilder setPublicKey:[cipher.ourPublicKey prependKeyType]];
|
||||
[envelopeBuilder setBody:encryptedProvisionMessage];
|
||||
|
||||
return [[envelopeBuilder build] data];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,205 @@
|
|||
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
|
||||
#import <ProtocolBuffers/ProtocolBuffers.h>
|
||||
|
||||
// @@protoc_insertion_point(imports)
|
||||
|
||||
@class OWSProvisioningProtosProvisionEnvelope;
|
||||
@class OWSProvisioningProtosProvisionEnvelopeBuilder;
|
||||
@class OWSProvisioningProtosProvisionMessage;
|
||||
@class OWSProvisioningProtosProvisionMessageBuilder;
|
||||
@class ObjectiveCFileOptions;
|
||||
@class ObjectiveCFileOptionsBuilder;
|
||||
@class PBDescriptorProto;
|
||||
@class PBDescriptorProtoBuilder;
|
||||
@class PBDescriptorProtoExtensionRange;
|
||||
@class PBDescriptorProtoExtensionRangeBuilder;
|
||||
@class PBEnumDescriptorProto;
|
||||
@class PBEnumDescriptorProtoBuilder;
|
||||
@class PBEnumOptions;
|
||||
@class PBEnumOptionsBuilder;
|
||||
@class PBEnumValueDescriptorProto;
|
||||
@class PBEnumValueDescriptorProtoBuilder;
|
||||
@class PBEnumValueOptions;
|
||||
@class PBEnumValueOptionsBuilder;
|
||||
@class PBFieldDescriptorProto;
|
||||
@class PBFieldDescriptorProtoBuilder;
|
||||
@class PBFieldOptions;
|
||||
@class PBFieldOptionsBuilder;
|
||||
@class PBFileDescriptorProto;
|
||||
@class PBFileDescriptorProtoBuilder;
|
||||
@class PBFileDescriptorSet;
|
||||
@class PBFileDescriptorSetBuilder;
|
||||
@class PBFileOptions;
|
||||
@class PBFileOptionsBuilder;
|
||||
@class PBMessageOptions;
|
||||
@class PBMessageOptionsBuilder;
|
||||
@class PBMethodDescriptorProto;
|
||||
@class PBMethodDescriptorProtoBuilder;
|
||||
@class PBMethodOptions;
|
||||
@class PBMethodOptionsBuilder;
|
||||
@class PBOneofDescriptorProto;
|
||||
@class PBOneofDescriptorProtoBuilder;
|
||||
@class PBServiceDescriptorProto;
|
||||
@class PBServiceDescriptorProtoBuilder;
|
||||
@class PBServiceOptions;
|
||||
@class PBServiceOptionsBuilder;
|
||||
@class PBSourceCodeInfo;
|
||||
@class PBSourceCodeInfoBuilder;
|
||||
@class PBSourceCodeInfoLocation;
|
||||
@class PBSourceCodeInfoLocationBuilder;
|
||||
@class PBUninterpretedOption;
|
||||
@class PBUninterpretedOptionBuilder;
|
||||
@class PBUninterpretedOptionNamePart;
|
||||
@class PBUninterpretedOptionNamePartBuilder;
|
||||
|
||||
|
||||
|
||||
@interface OWSProvisioningProtosOwsprovisioningProtosRoot : NSObject {
|
||||
}
|
||||
+ (PBExtensionRegistry*) extensionRegistry;
|
||||
+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
|
||||
@end
|
||||
|
||||
#define ProvisionEnvelope_publicKey @"publicKey"
|
||||
#define ProvisionEnvelope_body @"body"
|
||||
@interface OWSProvisioningProtosProvisionEnvelope : PBGeneratedMessage<GeneratedMessageProtocol> {
|
||||
@private
|
||||
BOOL hasPublicKey_:1;
|
||||
BOOL hasBody_:1;
|
||||
NSData* publicKey;
|
||||
NSData* body;
|
||||
}
|
||||
- (BOOL) hasPublicKey;
|
||||
- (BOOL) hasBody;
|
||||
@property (readonly, strong) NSData* publicKey;
|
||||
@property (readonly, strong) NSData* body;
|
||||
|
||||
+ (instancetype) defaultInstance;
|
||||
- (instancetype) defaultInstance;
|
||||
|
||||
- (BOOL) isInitialized;
|
||||
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) builder;
|
||||
+ (OWSProvisioningProtosProvisionEnvelopeBuilder*) builder;
|
||||
+ (OWSProvisioningProtosProvisionEnvelopeBuilder*) builderWithPrototype:(OWSProvisioningProtosProvisionEnvelope*) prototype;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) toBuilder;
|
||||
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromData:(NSData*) data;
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromInputStream:(NSInputStream*) input;
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromCodedInputStream:(PBCodedInputStream*) input;
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
|
||||
@end
|
||||
|
||||
@interface OWSProvisioningProtosProvisionEnvelopeBuilder : PBGeneratedMessageBuilder {
|
||||
@private
|
||||
OWSProvisioningProtosProvisionEnvelope* resultProvisionEnvelope;
|
||||
}
|
||||
|
||||
- (OWSProvisioningProtosProvisionEnvelope*) defaultInstance;
|
||||
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) clear;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) clone;
|
||||
|
||||
- (OWSProvisioningProtosProvisionEnvelope*) build;
|
||||
- (OWSProvisioningProtosProvisionEnvelope*) buildPartial;
|
||||
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) mergeFrom:(OWSProvisioningProtosProvisionEnvelope*) other;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
|
||||
|
||||
- (BOOL) hasPublicKey;
|
||||
- (NSData*) publicKey;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) setPublicKey:(NSData*) value;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) clearPublicKey;
|
||||
|
||||
- (BOOL) hasBody;
|
||||
- (NSData*) body;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) setBody:(NSData*) value;
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) clearBody;
|
||||
@end
|
||||
|
||||
#define ProvisionMessage_identityKeyPublic @"identityKeyPublic"
|
||||
#define ProvisionMessage_identityKeyPrivate @"identityKeyPrivate"
|
||||
#define ProvisionMessage_number @"number"
|
||||
#define ProvisionMessage_provisioningCode @"provisioningCode"
|
||||
@interface OWSProvisioningProtosProvisionMessage : PBGeneratedMessage<GeneratedMessageProtocol> {
|
||||
@private
|
||||
BOOL hasNumber_:1;
|
||||
BOOL hasProvisioningCode_:1;
|
||||
BOOL hasIdentityKeyPublic_:1;
|
||||
BOOL hasIdentityKeyPrivate_:1;
|
||||
NSString* number;
|
||||
NSString* provisioningCode;
|
||||
NSData* identityKeyPublic;
|
||||
NSData* identityKeyPrivate;
|
||||
}
|
||||
- (BOOL) hasIdentityKeyPublic;
|
||||
- (BOOL) hasIdentityKeyPrivate;
|
||||
- (BOOL) hasNumber;
|
||||
- (BOOL) hasProvisioningCode;
|
||||
@property (readonly, strong) NSData* identityKeyPublic;
|
||||
@property (readonly, strong) NSData* identityKeyPrivate;
|
||||
@property (readonly, strong) NSString* number;
|
||||
@property (readonly, strong) NSString* provisioningCode;
|
||||
|
||||
+ (instancetype) defaultInstance;
|
||||
- (instancetype) defaultInstance;
|
||||
|
||||
- (BOOL) isInitialized;
|
||||
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) builder;
|
||||
+ (OWSProvisioningProtosProvisionMessageBuilder*) builder;
|
||||
+ (OWSProvisioningProtosProvisionMessageBuilder*) builderWithPrototype:(OWSProvisioningProtosProvisionMessage*) prototype;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) toBuilder;
|
||||
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromData:(NSData*) data;
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromInputStream:(NSInputStream*) input;
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromCodedInputStream:(PBCodedInputStream*) input;
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
|
||||
@end
|
||||
|
||||
@interface OWSProvisioningProtosProvisionMessageBuilder : PBGeneratedMessageBuilder {
|
||||
@private
|
||||
OWSProvisioningProtosProvisionMessage* resultProvisionMessage;
|
||||
}
|
||||
|
||||
- (OWSProvisioningProtosProvisionMessage*) defaultInstance;
|
||||
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clear;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clone;
|
||||
|
||||
- (OWSProvisioningProtosProvisionMessage*) build;
|
||||
- (OWSProvisioningProtosProvisionMessage*) buildPartial;
|
||||
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) mergeFrom:(OWSProvisioningProtosProvisionMessage*) other;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
|
||||
|
||||
- (BOOL) hasIdentityKeyPublic;
|
||||
- (NSData*) identityKeyPublic;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) setIdentityKeyPublic:(NSData*) value;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clearIdentityKeyPublic;
|
||||
|
||||
- (BOOL) hasIdentityKeyPrivate;
|
||||
- (NSData*) identityKeyPrivate;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) setIdentityKeyPrivate:(NSData*) value;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clearIdentityKeyPrivate;
|
||||
|
||||
- (BOOL) hasNumber;
|
||||
- (NSString*) number;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) setNumber:(NSString*) value;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clearNumber;
|
||||
|
||||
- (BOOL) hasProvisioningCode;
|
||||
- (NSString*) provisioningCode;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) setProvisioningCode:(NSString*) value;
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clearProvisioningCode;
|
||||
@end
|
||||
|
||||
|
||||
// @@protoc_insertion_point(global_scope)
|
|
@ -0,0 +1,633 @@
|
|||
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
|
||||
#import "OWSProvisioningProtos.pb.h"
|
||||
// @@protoc_insertion_point(imports)
|
||||
|
||||
@implementation OWSProvisioningProtosOwsprovisioningProtosRoot
|
||||
static PBExtensionRegistry* extensionRegistry = nil;
|
||||
+ (PBExtensionRegistry*) extensionRegistry {
|
||||
return extensionRegistry;
|
||||
}
|
||||
|
||||
+ (void) initialize {
|
||||
if (self == [OWSProvisioningProtosOwsprovisioningProtosRoot class]) {
|
||||
PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
|
||||
[self registerAllExtensions:registry];
|
||||
[ObjectivecDescriptorRoot registerAllExtensions:registry];
|
||||
extensionRegistry = registry;
|
||||
}
|
||||
}
|
||||
+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
|
||||
}
|
||||
@end
|
||||
|
||||
@interface OWSProvisioningProtosProvisionEnvelope ()
|
||||
@property (strong) NSData* publicKey;
|
||||
@property (strong) NSData* body;
|
||||
@end
|
||||
|
||||
@implementation OWSProvisioningProtosProvisionEnvelope
|
||||
|
||||
- (BOOL) hasPublicKey {
|
||||
return !!hasPublicKey_;
|
||||
}
|
||||
- (void) setHasPublicKey:(BOOL) _value_ {
|
||||
hasPublicKey_ = !!_value_;
|
||||
}
|
||||
@synthesize publicKey;
|
||||
- (BOOL) hasBody {
|
||||
return !!hasBody_;
|
||||
}
|
||||
- (void) setHasBody:(BOOL) _value_ {
|
||||
hasBody_ = !!_value_;
|
||||
}
|
||||
@synthesize body;
|
||||
- (instancetype) init {
|
||||
if ((self = [super init])) {
|
||||
self.publicKey = [NSData data];
|
||||
self.body = [NSData data];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
static OWSProvisioningProtosProvisionEnvelope* defaultOWSProvisioningProtosProvisionEnvelopeInstance = nil;
|
||||
+ (void) initialize {
|
||||
if (self == [OWSProvisioningProtosProvisionEnvelope class]) {
|
||||
defaultOWSProvisioningProtosProvisionEnvelopeInstance = [[OWSProvisioningProtosProvisionEnvelope alloc] init];
|
||||
}
|
||||
}
|
||||
+ (instancetype) defaultInstance {
|
||||
return defaultOWSProvisioningProtosProvisionEnvelopeInstance;
|
||||
}
|
||||
- (instancetype) defaultInstance {
|
||||
return defaultOWSProvisioningProtosProvisionEnvelopeInstance;
|
||||
}
|
||||
- (BOOL) isInitialized {
|
||||
return YES;
|
||||
}
|
||||
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
|
||||
if (self.hasPublicKey) {
|
||||
[output writeData:1 value:self.publicKey];
|
||||
}
|
||||
if (self.hasBody) {
|
||||
[output writeData:2 value:self.body];
|
||||
}
|
||||
[self.unknownFields writeToCodedOutputStream:output];
|
||||
}
|
||||
- (SInt32) serializedSize {
|
||||
__block SInt32 size_ = memoizedSerializedSize;
|
||||
if (size_ != -1) {
|
||||
return size_;
|
||||
}
|
||||
|
||||
size_ = 0;
|
||||
if (self.hasPublicKey) {
|
||||
size_ += computeDataSize(1, self.publicKey);
|
||||
}
|
||||
if (self.hasBody) {
|
||||
size_ += computeDataSize(2, self.body);
|
||||
}
|
||||
size_ += self.unknownFields.serializedSize;
|
||||
memoizedSerializedSize = size_;
|
||||
return size_;
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromData:(NSData*) data {
|
||||
return (OWSProvisioningProtosProvisionEnvelope*)[[[OWSProvisioningProtosProvisionEnvelope builder] mergeFromData:data] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
|
||||
return (OWSProvisioningProtosProvisionEnvelope*)[[[OWSProvisioningProtosProvisionEnvelope builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromInputStream:(NSInputStream*) input {
|
||||
return (OWSProvisioningProtosProvisionEnvelope*)[[[OWSProvisioningProtosProvisionEnvelope builder] mergeFromInputStream:input] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
|
||||
return (OWSProvisioningProtosProvisionEnvelope*)[[[OWSProvisioningProtosProvisionEnvelope builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromCodedInputStream:(PBCodedInputStream*) input {
|
||||
return (OWSProvisioningProtosProvisionEnvelope*)[[[OWSProvisioningProtosProvisionEnvelope builder] mergeFromCodedInputStream:input] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionEnvelope*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
|
||||
return (OWSProvisioningProtosProvisionEnvelope*)[[[OWSProvisioningProtosProvisionEnvelope builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionEnvelopeBuilder*) builder {
|
||||
return [[OWSProvisioningProtosProvisionEnvelopeBuilder alloc] init];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionEnvelopeBuilder*) builderWithPrototype:(OWSProvisioningProtosProvisionEnvelope*) prototype {
|
||||
return [[OWSProvisioningProtosProvisionEnvelope builder] mergeFrom:prototype];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) builder {
|
||||
return [OWSProvisioningProtosProvisionEnvelope builder];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) toBuilder {
|
||||
return [OWSProvisioningProtosProvisionEnvelope builderWithPrototype:self];
|
||||
}
|
||||
- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
|
||||
if (self.hasPublicKey) {
|
||||
[output appendFormat:@"%@%@: %@\n", indent, @"publicKey", self.publicKey];
|
||||
}
|
||||
if (self.hasBody) {
|
||||
[output appendFormat:@"%@%@: %@\n", indent, @"body", self.body];
|
||||
}
|
||||
[self.unknownFields writeDescriptionTo:output withIndent:indent];
|
||||
}
|
||||
- (void) storeInDictionary:(NSMutableDictionary *)dictionary {
|
||||
if (self.hasPublicKey) {
|
||||
[dictionary setObject: self.publicKey forKey: @"publicKey"];
|
||||
}
|
||||
if (self.hasBody) {
|
||||
[dictionary setObject: self.body forKey: @"body"];
|
||||
}
|
||||
[self.unknownFields storeInDictionary:dictionary];
|
||||
}
|
||||
- (BOOL) isEqual:(id)other {
|
||||
if (other == self) {
|
||||
return YES;
|
||||
}
|
||||
if (![other isKindOfClass:[OWSProvisioningProtosProvisionEnvelope class]]) {
|
||||
return NO;
|
||||
}
|
||||
OWSProvisioningProtosProvisionEnvelope *otherMessage = other;
|
||||
return
|
||||
self.hasPublicKey == otherMessage.hasPublicKey &&
|
||||
(!self.hasPublicKey || [self.publicKey isEqual:otherMessage.publicKey]) &&
|
||||
self.hasBody == otherMessage.hasBody &&
|
||||
(!self.hasBody || [self.body isEqual:otherMessage.body]) &&
|
||||
(self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
|
||||
}
|
||||
- (NSUInteger) hash {
|
||||
__block NSUInteger hashCode = 7;
|
||||
if (self.hasPublicKey) {
|
||||
hashCode = hashCode * 31 + [self.publicKey hash];
|
||||
}
|
||||
if (self.hasBody) {
|
||||
hashCode = hashCode * 31 + [self.body hash];
|
||||
}
|
||||
hashCode = hashCode * 31 + [self.unknownFields hash];
|
||||
return hashCode;
|
||||
}
|
||||
@end
|
||||
|
||||
@interface OWSProvisioningProtosProvisionEnvelopeBuilder()
|
||||
@property (strong) OWSProvisioningProtosProvisionEnvelope* resultProvisionEnvelope;
|
||||
@end
|
||||
|
||||
@implementation OWSProvisioningProtosProvisionEnvelopeBuilder
|
||||
@synthesize resultProvisionEnvelope;
|
||||
- (instancetype) init {
|
||||
if ((self = [super init])) {
|
||||
self.resultProvisionEnvelope = [[OWSProvisioningProtosProvisionEnvelope alloc] init];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
- (PBGeneratedMessage*) internalGetResult {
|
||||
return resultProvisionEnvelope;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) clear {
|
||||
self.resultProvisionEnvelope = [[OWSProvisioningProtosProvisionEnvelope alloc] init];
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) clone {
|
||||
return [OWSProvisioningProtosProvisionEnvelope builderWithPrototype:resultProvisionEnvelope];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelope*) defaultInstance {
|
||||
return [OWSProvisioningProtosProvisionEnvelope defaultInstance];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelope*) build {
|
||||
[self checkInitialized];
|
||||
return [self buildPartial];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelope*) buildPartial {
|
||||
OWSProvisioningProtosProvisionEnvelope* returnMe = resultProvisionEnvelope;
|
||||
self.resultProvisionEnvelope = nil;
|
||||
return returnMe;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) mergeFrom:(OWSProvisioningProtosProvisionEnvelope*) other {
|
||||
if (other == [OWSProvisioningProtosProvisionEnvelope defaultInstance]) {
|
||||
return self;
|
||||
}
|
||||
if (other.hasPublicKey) {
|
||||
[self setPublicKey:other.publicKey];
|
||||
}
|
||||
if (other.hasBody) {
|
||||
[self setBody:other.body];
|
||||
}
|
||||
[self mergeUnknownFields:other.unknownFields];
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
|
||||
return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
|
||||
PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
|
||||
while (YES) {
|
||||
SInt32 tag = [input readTag];
|
||||
switch (tag) {
|
||||
case 0:
|
||||
[self setUnknownFields:[unknownFields build]];
|
||||
return self;
|
||||
default: {
|
||||
if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
|
||||
[self setUnknownFields:[unknownFields build]];
|
||||
return self;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 10: {
|
||||
[self setPublicKey:[input readData]];
|
||||
break;
|
||||
}
|
||||
case 18: {
|
||||
[self setBody:[input readData]];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- (BOOL) hasPublicKey {
|
||||
return resultProvisionEnvelope.hasPublicKey;
|
||||
}
|
||||
- (NSData*) publicKey {
|
||||
return resultProvisionEnvelope.publicKey;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) setPublicKey:(NSData*) value {
|
||||
resultProvisionEnvelope.hasPublicKey = YES;
|
||||
resultProvisionEnvelope.publicKey = value;
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) clearPublicKey {
|
||||
resultProvisionEnvelope.hasPublicKey = NO;
|
||||
resultProvisionEnvelope.publicKey = [NSData data];
|
||||
return self;
|
||||
}
|
||||
- (BOOL) hasBody {
|
||||
return resultProvisionEnvelope.hasBody;
|
||||
}
|
||||
- (NSData*) body {
|
||||
return resultProvisionEnvelope.body;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) setBody:(NSData*) value {
|
||||
resultProvisionEnvelope.hasBody = YES;
|
||||
resultProvisionEnvelope.body = value;
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionEnvelopeBuilder*) clearBody {
|
||||
resultProvisionEnvelope.hasBody = NO;
|
||||
resultProvisionEnvelope.body = [NSData data];
|
||||
return self;
|
||||
}
|
||||
@end
|
||||
|
||||
@interface OWSProvisioningProtosProvisionMessage ()
|
||||
@property (strong) NSData* identityKeyPublic;
|
||||
@property (strong) NSData* identityKeyPrivate;
|
||||
@property (strong) NSString* number;
|
||||
@property (strong) NSString* provisioningCode;
|
||||
@end
|
||||
|
||||
@implementation OWSProvisioningProtosProvisionMessage
|
||||
|
||||
- (BOOL) hasIdentityKeyPublic {
|
||||
return !!hasIdentityKeyPublic_;
|
||||
}
|
||||
- (void) setHasIdentityKeyPublic:(BOOL) _value_ {
|
||||
hasIdentityKeyPublic_ = !!_value_;
|
||||
}
|
||||
@synthesize identityKeyPublic;
|
||||
- (BOOL) hasIdentityKeyPrivate {
|
||||
return !!hasIdentityKeyPrivate_;
|
||||
}
|
||||
- (void) setHasIdentityKeyPrivate:(BOOL) _value_ {
|
||||
hasIdentityKeyPrivate_ = !!_value_;
|
||||
}
|
||||
@synthesize identityKeyPrivate;
|
||||
- (BOOL) hasNumber {
|
||||
return !!hasNumber_;
|
||||
}
|
||||
- (void) setHasNumber:(BOOL) _value_ {
|
||||
hasNumber_ = !!_value_;
|
||||
}
|
||||
@synthesize number;
|
||||
- (BOOL) hasProvisioningCode {
|
||||
return !!hasProvisioningCode_;
|
||||
}
|
||||
- (void) setHasProvisioningCode:(BOOL) _value_ {
|
||||
hasProvisioningCode_ = !!_value_;
|
||||
}
|
||||
@synthesize provisioningCode;
|
||||
- (instancetype) init {
|
||||
if ((self = [super init])) {
|
||||
self.identityKeyPublic = [NSData data];
|
||||
self.identityKeyPrivate = [NSData data];
|
||||
self.number = @"";
|
||||
self.provisioningCode = @"";
|
||||
}
|
||||
return self;
|
||||
}
|
||||
static OWSProvisioningProtosProvisionMessage* defaultOWSProvisioningProtosProvisionMessageInstance = nil;
|
||||
+ (void) initialize {
|
||||
if (self == [OWSProvisioningProtosProvisionMessage class]) {
|
||||
defaultOWSProvisioningProtosProvisionMessageInstance = [[OWSProvisioningProtosProvisionMessage alloc] init];
|
||||
}
|
||||
}
|
||||
+ (instancetype) defaultInstance {
|
||||
return defaultOWSProvisioningProtosProvisionMessageInstance;
|
||||
}
|
||||
- (instancetype) defaultInstance {
|
||||
return defaultOWSProvisioningProtosProvisionMessageInstance;
|
||||
}
|
||||
- (BOOL) isInitialized {
|
||||
return YES;
|
||||
}
|
||||
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
|
||||
if (self.hasIdentityKeyPublic) {
|
||||
[output writeData:1 value:self.identityKeyPublic];
|
||||
}
|
||||
if (self.hasIdentityKeyPrivate) {
|
||||
[output writeData:2 value:self.identityKeyPrivate];
|
||||
}
|
||||
if (self.hasNumber) {
|
||||
[output writeString:3 value:self.number];
|
||||
}
|
||||
if (self.hasProvisioningCode) {
|
||||
[output writeString:4 value:self.provisioningCode];
|
||||
}
|
||||
[self.unknownFields writeToCodedOutputStream:output];
|
||||
}
|
||||
- (SInt32) serializedSize {
|
||||
__block SInt32 size_ = memoizedSerializedSize;
|
||||
if (size_ != -1) {
|
||||
return size_;
|
||||
}
|
||||
|
||||
size_ = 0;
|
||||
if (self.hasIdentityKeyPublic) {
|
||||
size_ += computeDataSize(1, self.identityKeyPublic);
|
||||
}
|
||||
if (self.hasIdentityKeyPrivate) {
|
||||
size_ += computeDataSize(2, self.identityKeyPrivate);
|
||||
}
|
||||
if (self.hasNumber) {
|
||||
size_ += computeStringSize(3, self.number);
|
||||
}
|
||||
if (self.hasProvisioningCode) {
|
||||
size_ += computeStringSize(4, self.provisioningCode);
|
||||
}
|
||||
size_ += self.unknownFields.serializedSize;
|
||||
memoizedSerializedSize = size_;
|
||||
return size_;
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromData:(NSData*) data {
|
||||
return (OWSProvisioningProtosProvisionMessage*)[[[OWSProvisioningProtosProvisionMessage builder] mergeFromData:data] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
|
||||
return (OWSProvisioningProtosProvisionMessage*)[[[OWSProvisioningProtosProvisionMessage builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromInputStream:(NSInputStream*) input {
|
||||
return (OWSProvisioningProtosProvisionMessage*)[[[OWSProvisioningProtosProvisionMessage builder] mergeFromInputStream:input] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
|
||||
return (OWSProvisioningProtosProvisionMessage*)[[[OWSProvisioningProtosProvisionMessage builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromCodedInputStream:(PBCodedInputStream*) input {
|
||||
return (OWSProvisioningProtosProvisionMessage*)[[[OWSProvisioningProtosProvisionMessage builder] mergeFromCodedInputStream:input] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionMessage*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
|
||||
return (OWSProvisioningProtosProvisionMessage*)[[[OWSProvisioningProtosProvisionMessage builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionMessageBuilder*) builder {
|
||||
return [[OWSProvisioningProtosProvisionMessageBuilder alloc] init];
|
||||
}
|
||||
+ (OWSProvisioningProtosProvisionMessageBuilder*) builderWithPrototype:(OWSProvisioningProtosProvisionMessage*) prototype {
|
||||
return [[OWSProvisioningProtosProvisionMessage builder] mergeFrom:prototype];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) builder {
|
||||
return [OWSProvisioningProtosProvisionMessage builder];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) toBuilder {
|
||||
return [OWSProvisioningProtosProvisionMessage builderWithPrototype:self];
|
||||
}
|
||||
- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
|
||||
if (self.hasIdentityKeyPublic) {
|
||||
[output appendFormat:@"%@%@: %@\n", indent, @"identityKeyPublic", self.identityKeyPublic];
|
||||
}
|
||||
if (self.hasIdentityKeyPrivate) {
|
||||
[output appendFormat:@"%@%@: %@\n", indent, @"identityKeyPrivate", self.identityKeyPrivate];
|
||||
}
|
||||
if (self.hasNumber) {
|
||||
[output appendFormat:@"%@%@: %@\n", indent, @"number", self.number];
|
||||
}
|
||||
if (self.hasProvisioningCode) {
|
||||
[output appendFormat:@"%@%@: %@\n", indent, @"provisioningCode", self.provisioningCode];
|
||||
}
|
||||
[self.unknownFields writeDescriptionTo:output withIndent:indent];
|
||||
}
|
||||
- (void) storeInDictionary:(NSMutableDictionary *)dictionary {
|
||||
if (self.hasIdentityKeyPublic) {
|
||||
[dictionary setObject: self.identityKeyPublic forKey: @"identityKeyPublic"];
|
||||
}
|
||||
if (self.hasIdentityKeyPrivate) {
|
||||
[dictionary setObject: self.identityKeyPrivate forKey: @"identityKeyPrivate"];
|
||||
}
|
||||
if (self.hasNumber) {
|
||||
[dictionary setObject: self.number forKey: @"number"];
|
||||
}
|
||||
if (self.hasProvisioningCode) {
|
||||
[dictionary setObject: self.provisioningCode forKey: @"provisioningCode"];
|
||||
}
|
||||
[self.unknownFields storeInDictionary:dictionary];
|
||||
}
|
||||
- (BOOL) isEqual:(id)other {
|
||||
if (other == self) {
|
||||
return YES;
|
||||
}
|
||||
if (![other isKindOfClass:[OWSProvisioningProtosProvisionMessage class]]) {
|
||||
return NO;
|
||||
}
|
||||
OWSProvisioningProtosProvisionMessage *otherMessage = other;
|
||||
return
|
||||
self.hasIdentityKeyPublic == otherMessage.hasIdentityKeyPublic &&
|
||||
(!self.hasIdentityKeyPublic || [self.identityKeyPublic isEqual:otherMessage.identityKeyPublic]) &&
|
||||
self.hasIdentityKeyPrivate == otherMessage.hasIdentityKeyPrivate &&
|
||||
(!self.hasIdentityKeyPrivate || [self.identityKeyPrivate isEqual:otherMessage.identityKeyPrivate]) &&
|
||||
self.hasNumber == otherMessage.hasNumber &&
|
||||
(!self.hasNumber || [self.number isEqual:otherMessage.number]) &&
|
||||
self.hasProvisioningCode == otherMessage.hasProvisioningCode &&
|
||||
(!self.hasProvisioningCode || [self.provisioningCode isEqual:otherMessage.provisioningCode]) &&
|
||||
(self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
|
||||
}
|
||||
- (NSUInteger) hash {
|
||||
__block NSUInteger hashCode = 7;
|
||||
if (self.hasIdentityKeyPublic) {
|
||||
hashCode = hashCode * 31 + [self.identityKeyPublic hash];
|
||||
}
|
||||
if (self.hasIdentityKeyPrivate) {
|
||||
hashCode = hashCode * 31 + [self.identityKeyPrivate hash];
|
||||
}
|
||||
if (self.hasNumber) {
|
||||
hashCode = hashCode * 31 + [self.number hash];
|
||||
}
|
||||
if (self.hasProvisioningCode) {
|
||||
hashCode = hashCode * 31 + [self.provisioningCode hash];
|
||||
}
|
||||
hashCode = hashCode * 31 + [self.unknownFields hash];
|
||||
return hashCode;
|
||||
}
|
||||
@end
|
||||
|
||||
@interface OWSProvisioningProtosProvisionMessageBuilder()
|
||||
@property (strong) OWSProvisioningProtosProvisionMessage* resultProvisionMessage;
|
||||
@end
|
||||
|
||||
@implementation OWSProvisioningProtosProvisionMessageBuilder
|
||||
@synthesize resultProvisionMessage;
|
||||
- (instancetype) init {
|
||||
if ((self = [super init])) {
|
||||
self.resultProvisionMessage = [[OWSProvisioningProtosProvisionMessage alloc] init];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
- (PBGeneratedMessage*) internalGetResult {
|
||||
return resultProvisionMessage;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clear {
|
||||
self.resultProvisionMessage = [[OWSProvisioningProtosProvisionMessage alloc] init];
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clone {
|
||||
return [OWSProvisioningProtosProvisionMessage builderWithPrototype:resultProvisionMessage];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessage*) defaultInstance {
|
||||
return [OWSProvisioningProtosProvisionMessage defaultInstance];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessage*) build {
|
||||
[self checkInitialized];
|
||||
return [self buildPartial];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessage*) buildPartial {
|
||||
OWSProvisioningProtosProvisionMessage* returnMe = resultProvisionMessage;
|
||||
self.resultProvisionMessage = nil;
|
||||
return returnMe;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) mergeFrom:(OWSProvisioningProtosProvisionMessage*) other {
|
||||
if (other == [OWSProvisioningProtosProvisionMessage defaultInstance]) {
|
||||
return self;
|
||||
}
|
||||
if (other.hasIdentityKeyPublic) {
|
||||
[self setIdentityKeyPublic:other.identityKeyPublic];
|
||||
}
|
||||
if (other.hasIdentityKeyPrivate) {
|
||||
[self setIdentityKeyPrivate:other.identityKeyPrivate];
|
||||
}
|
||||
if (other.hasNumber) {
|
||||
[self setNumber:other.number];
|
||||
}
|
||||
if (other.hasProvisioningCode) {
|
||||
[self setProvisioningCode:other.provisioningCode];
|
||||
}
|
||||
[self mergeUnknownFields:other.unknownFields];
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
|
||||
return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
|
||||
PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
|
||||
while (YES) {
|
||||
SInt32 tag = [input readTag];
|
||||
switch (tag) {
|
||||
case 0:
|
||||
[self setUnknownFields:[unknownFields build]];
|
||||
return self;
|
||||
default: {
|
||||
if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
|
||||
[self setUnknownFields:[unknownFields build]];
|
||||
return self;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 10: {
|
||||
[self setIdentityKeyPublic:[input readData]];
|
||||
break;
|
||||
}
|
||||
case 18: {
|
||||
[self setIdentityKeyPrivate:[input readData]];
|
||||
break;
|
||||
}
|
||||
case 26: {
|
||||
[self setNumber:[input readString]];
|
||||
break;
|
||||
}
|
||||
case 34: {
|
||||
[self setProvisioningCode:[input readString]];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
- (BOOL) hasIdentityKeyPublic {
|
||||
return resultProvisionMessage.hasIdentityKeyPublic;
|
||||
}
|
||||
- (NSData*) identityKeyPublic {
|
||||
return resultProvisionMessage.identityKeyPublic;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) setIdentityKeyPublic:(NSData*) value {
|
||||
resultProvisionMessage.hasIdentityKeyPublic = YES;
|
||||
resultProvisionMessage.identityKeyPublic = value;
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clearIdentityKeyPublic {
|
||||
resultProvisionMessage.hasIdentityKeyPublic = NO;
|
||||
resultProvisionMessage.identityKeyPublic = [NSData data];
|
||||
return self;
|
||||
}
|
||||
- (BOOL) hasIdentityKeyPrivate {
|
||||
return resultProvisionMessage.hasIdentityKeyPrivate;
|
||||
}
|
||||
- (NSData*) identityKeyPrivate {
|
||||
return resultProvisionMessage.identityKeyPrivate;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) setIdentityKeyPrivate:(NSData*) value {
|
||||
resultProvisionMessage.hasIdentityKeyPrivate = YES;
|
||||
resultProvisionMessage.identityKeyPrivate = value;
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clearIdentityKeyPrivate {
|
||||
resultProvisionMessage.hasIdentityKeyPrivate = NO;
|
||||
resultProvisionMessage.identityKeyPrivate = [NSData data];
|
||||
return self;
|
||||
}
|
||||
- (BOOL) hasNumber {
|
||||
return resultProvisionMessage.hasNumber;
|
||||
}
|
||||
- (NSString*) number {
|
||||
return resultProvisionMessage.number;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) setNumber:(NSString*) value {
|
||||
resultProvisionMessage.hasNumber = YES;
|
||||
resultProvisionMessage.number = value;
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clearNumber {
|
||||
resultProvisionMessage.hasNumber = NO;
|
||||
resultProvisionMessage.number = @"";
|
||||
return self;
|
||||
}
|
||||
- (BOOL) hasProvisioningCode {
|
||||
return resultProvisionMessage.hasProvisioningCode;
|
||||
}
|
||||
- (NSString*) provisioningCode {
|
||||
return resultProvisionMessage.provisioningCode;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) setProvisioningCode:(NSString*) value {
|
||||
resultProvisionMessage.hasProvisioningCode = YES;
|
||||
resultProvisionMessage.provisioningCode = value;
|
||||
return self;
|
||||
}
|
||||
- (OWSProvisioningProtosProvisionMessageBuilder*) clearProvisioningCode {
|
||||
resultProvisionMessage.hasProvisioningCode = NO;
|
||||
resultProvisionMessage.provisioningCode = @"";
|
||||
return self;
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
// @@protoc_insertion_point(global_scope)
|
|
@ -0,0 +1,16 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class TSNetworkManager;
|
||||
|
||||
@interface OWSDeviceProvisioningCodeService : NSObject
|
||||
|
||||
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (void)requestProvisioningCodeWithSuccess:(void (^)(NSString *))successCallback
|
||||
failure:(void (^)(NSError *))failureCallback;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,58 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "OWSDeviceProvisioningCodeService.h"
|
||||
#import "OWSDeviceProvisioningCodeRequest.h"
|
||||
#import "TSNetworkManager.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSString *const OWSDeviceProvisioningCodeServiceProvisioningCodeKey = @"verificationCode";
|
||||
|
||||
@interface OWSDeviceProvisioningCodeService ()
|
||||
|
||||
@property (readonly) TSNetworkManager *networkManager;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSDeviceProvisioningCodeService
|
||||
|
||||
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager
|
||||
{
|
||||
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
_networkManager = networkManager;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
return [self initWithNetworkManager:[TSNetworkManager sharedManager]];
|
||||
}
|
||||
|
||||
- (void)requestProvisioningCodeWithSuccess:(void (^)(NSString *))successCallback
|
||||
failure:(void (^)(NSError *))failureCallback
|
||||
{
|
||||
[self.networkManager makeRequest:[OWSDeviceProvisioningCodeRequest new]
|
||||
success:^(NSURLSessionDataTask *task, id responseObject) {
|
||||
DDLogVerbose(@"ProvisioningCode request succeeded");
|
||||
if ([(NSObject *)responseObject isKindOfClass:[NSDictionary class]]) {
|
||||
NSDictionary *responseDict = (NSDictionary *)responseObject;
|
||||
NSString *provisioningCode =
|
||||
[responseDict objectForKey:OWSDeviceProvisioningCodeServiceProvisioningCodeKey];
|
||||
successCallback(provisioningCode);
|
||||
}
|
||||
}
|
||||
failure:^(NSURLSessionDataTask *task, NSError *error) {
|
||||
DDLogVerbose(@"ProvisioningCode request failed with error: %@", error);
|
||||
failureCallback(error);
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,18 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class TSNetworkManager;
|
||||
|
||||
@interface OWSDeviceProvisioningService : NSObject
|
||||
|
||||
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager;
|
||||
|
||||
- (void)provisionWithMessageBody:(NSData *)messageBody
|
||||
ephemeralDeviceId:(NSString *)deviceId
|
||||
success:(void (^)())successCallback
|
||||
failure:(void (^)(NSError *))failureCallback;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,55 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "OWSDeviceProvisioningService.h"
|
||||
#import "OWSDeviceProvisioningRequest.h"
|
||||
#import "TSNetworkManager.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSDeviceProvisioningService ()
|
||||
|
||||
@property (nonatomic, readonly) TSNetworkManager *networkManager;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSDeviceProvisioningService
|
||||
|
||||
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager
|
||||
{
|
||||
self = [super init];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
_networkManager = networkManager;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
return [self initWithNetworkManager:[TSNetworkManager sharedManager]];
|
||||
}
|
||||
|
||||
- (void)provisionWithMessageBody:(NSData *)messageBody
|
||||
ephemeralDeviceId:(NSString *)deviceId
|
||||
success:(void (^)())successCallback
|
||||
failure:(void (^)(NSError *))failureCallback
|
||||
{
|
||||
OWSDeviceProvisioningRequest *request =
|
||||
[[OWSDeviceProvisioningRequest alloc] initWithMessageBody:messageBody ephemeralDeviceId:deviceId];
|
||||
|
||||
[self.networkManager makeRequest:request
|
||||
success:^(NSURLSessionDataTask *task, id responseObject) {
|
||||
DDLogVerbose(@"Provisioning request succeeded");
|
||||
successCallback();
|
||||
}
|
||||
failure:^(NSURLSessionDataTask *task, NSError *error) {
|
||||
DDLogVerbose(@"Provisioning request failed with error: %@", error);
|
||||
failureCallback(error);
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,11 @@
|
|||
// Copyright (c) 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "TSRequest.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSDeviceProvisioningCodeRequest : TSRequest
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright (c) 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "OWSDeviceProvisioningCodeRequest.h"
|
||||
#import "TSConstants.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@implementation OWSDeviceProvisioningCodeRequest
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super initWithURL:[NSURL URLWithString:textSecureDeviceProvisioningCodeAPI]];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
[self setHTTPMethod:@"GET"];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,13 @@
|
|||
// Copyright (c) 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "TSRequest.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface OWSDeviceProvisioningRequest : TSRequest
|
||||
|
||||
- (instancetype)initWithMessageBody:(NSData *)messageBody ephemeralDeviceId:(NSString *)deviceId;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,27 @@
|
|||
// Copyright (c) 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "OWSDeviceProvisioningRequest.h"
|
||||
#import "TSConstants.h"
|
||||
#import <SignalServiceKit/NSData+Base64.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@implementation OWSDeviceProvisioningRequest
|
||||
|
||||
- (instancetype)initWithMessageBody:(NSData *)messageBody ephemeralDeviceId:(NSString *)deviceId
|
||||
{
|
||||
NSString *path = [NSString stringWithFormat:textSecureDeviceProvisioningAPIFormat, deviceId];
|
||||
self = [super initWithURL:[NSURL URLWithString:path]];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
self.HTTPMethod = @"PUT";
|
||||
[self.parameters addEntriesFromDictionary:@{ @"body" : [messageBody base64EncodedString] }];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,13 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import <25519/Curve25519.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface ECKeyPair (OWSPrivateKey)
|
||||
|
||||
- (NSData *)ows_privateKey;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,16 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "ECKeyPair+OWSPrivateKey.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@implementation ECKeyPair (OWSPrivateKey)
|
||||
|
||||
- (NSData *)ows_privateKey
|
||||
{
|
||||
return [NSData dataWithBytes:self->privateKey length:32];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -1,10 +1,5 @@
|
|||
//
|
||||
// TSStorageManager+IdentityKeyStore.m
|
||||
// TextSecureKit
|
||||
//
|
||||
// Created by Frederic Jacobs on 06/11/14.
|
||||
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TSAccountManager.h"
|
||||
#import "TSStorageManager+IdentityKeyStore.h"
|
||||
|
|
|
@ -36,7 +36,8 @@ typedef enum { kSMSVerification, kPhoneNumberVerification } VerificationTranspor
|
|||
#define textSecureSignedKeysAPI @"v2/keys/signed"
|
||||
#define textSecureDirectoryAPI @"v1/directory"
|
||||
#define textSecureAttachmentsAPI @"v1/attachments"
|
||||
|
||||
#define textSecureDeviceProvisioningCodeAPI @"v1/devices/provisioning/code"
|
||||
#define textSecureDeviceProvisioningAPIFormat @"v1/provisioning/%@"
|
||||
|
||||
typedef void (^successCompletionBlock)(void);
|
||||
typedef void (^failedRegistrationRequestBlock)(void);
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
// Copyright © 2016 Open Whisper Systems. All rights reserved.
|
||||
|
||||
#import "OWSDeviceProvisioner.h"
|
||||
#import "OWSDeviceProvisioningCodeService.h"
|
||||
#import "OWSDeviceProvisioningService.h"
|
||||
#import "TSNetworkManager.h"
|
||||
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
@interface OWSFakeDeviceProvisioningService : OWSDeviceProvisioningService
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSFakeDeviceProvisioningService
|
||||
|
||||
- (void)provisionWithMessageBody:(NSData *)messageBody
|
||||
ephemeralDeviceId:(NSString *)deviceId
|
||||
success:(void (^)())successCallback
|
||||
failure:(void (^)(NSError *))failureCallback
|
||||
{
|
||||
NSLog(@"faking successful provisioning");
|
||||
successCallback();
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface OWSFakeDeviceProvisioningCodeService : OWSDeviceProvisioningCodeService
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSFakeDeviceProvisioningCodeService
|
||||
|
||||
- (void)requestProvisioningCodeWithSuccess:(void (^)(NSString *))successCallback
|
||||
failure:(void (^)(NSError *))failureCallback
|
||||
{
|
||||
NSLog(@"faking successful provisioning code fetching");
|
||||
successCallback(@"fake-provisioning-code");
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface OWSDeviceProvisioner (Testing)
|
||||
|
||||
@property OWSDeviceProvisioningCodeService *provisioningCodeService;
|
||||
@property OWSDeviceProvisioningService *provisioningService;
|
||||
|
||||
@end
|
||||
|
||||
@interface OWSFakeNetworkManager : TSNetworkManager
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
- (instancetype)initFake;
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSFakeNetworkManager
|
||||
|
||||
- (instancetype)initFake
|
||||
{
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface OWSDeviceProvisionerTest : XCTestCase
|
||||
|
||||
@end
|
||||
|
||||
@implementation OWSDeviceProvisionerTest
|
||||
|
||||
- (void)testProvisioning
|
||||
{
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"Provisioning Success"];
|
||||
|
||||
NSData *nullKey = [[NSMutableData dataWithLength:32] copy];
|
||||
NSData *myPublicKey = [nullKey copy];
|
||||
NSData *myPrivateKey = [nullKey copy];
|
||||
NSData *theirPublicKey = [nullKey copy];
|
||||
NSString *accountIdentifier;
|
||||
NSString *theirEphemeralDeviceId;
|
||||
|
||||
OWSFakeNetworkManager *networkManager = [[OWSFakeNetworkManager alloc] initFake];
|
||||
OWSDeviceProvisioner *provisioner = [[OWSDeviceProvisioner alloc]
|
||||
initWithMyPublicKey:myPublicKey
|
||||
myPrivateKey:myPrivateKey
|
||||
theirPublicKey:theirPublicKey
|
||||
theirEphemeralDeviceId:theirEphemeralDeviceId
|
||||
accountIdentifier:accountIdentifier
|
||||
provisioningCodeService:[[OWSFakeDeviceProvisioningCodeService alloc] initWithNetworkManager:networkManager]
|
||||
provisioningService:[[OWSFakeDeviceProvisioningService alloc] initWithNetworkManager:networkManager]];
|
||||
|
||||
[provisioner provisionWithSuccess:^{
|
||||
[expectation fulfill];
|
||||
}
|
||||
failure:^(NSError *_Nonnull error) {
|
||||
XCTAssert(NO, @"Failed to provision with error: %@", error);
|
||||
}];
|
||||
|
||||
[self waitForExpectationsWithTimeout:5.0
|
||||
handler:^(NSError *error) {
|
||||
if (error) {
|
||||
NSLog(@"Timeout Error: %@", error);
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
Loading…
Reference in New Issue