Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios

This commit is contained in:
Ilya Laktyushin 2021-07-09 20:02:53 +03:00
commit cae9dcd54d
4 changed files with 26 additions and 114 deletions

View File

@ -278,6 +278,8 @@ official_apple_pay_merchants = [
"merchant.privatbank.test.telergramios",
"merchant.privatbank.prod.telergram",
"merchant.paymaster.test.telegramios",
"merchant.smartglocal.prod.telegramios",
"merchant.smartglocal.test.telegramios",
]
official_bundle_ids = [

View File

@ -43,11 +43,12 @@
@end
static NSArray<MTDatacenterAuthPublicKey *> *defaultPublicKeys() {
static NSArray<MTDatacenterAuthPublicKey *> *serverPublicKeys = nil;
static NSArray<MTDatacenterAuthPublicKey *> *defaultPublicKeys(bool isProduction) {
static NSArray<MTDatacenterAuthPublicKey *> *testingPublicKeys = nil;
static NSArray<MTDatacenterAuthPublicKey *> *productionPublicKeys = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
serverPublicKeys = @[
testingPublicKeys = @[
[[MTDatacenterAuthPublicKey alloc] initWithPublicKey:@"-----BEGIN RSA PUBLIC KEY-----\n"
"MIIBCgKCAQEAyMEdY1aR+sCR3ZSJrtztKTKqigvO/vBfqACJLZtS7QMgCGXJ6XIR\n"
"yy7mx66W0/sOFa7/1mAZtEoIokDP3ShoqF4fVNb6XeqgQfaUHd8wJpDWHcR2OFwv\n"
@ -55,7 +56,10 @@ static NSArray<MTDatacenterAuthPublicKey *> *defaultPublicKeys() {
"j25sIWeYPHYeOrFp/eXaqhISP6G+q2IeTaWTXpwZj4LzXq5YOpk4bYEQ6mvRq7D1\n"
"aHWfYmlEGepfaYR8Q0YqvvhYtMte3ITnuSJs171+GDqpdKcSwHnd6FudwGO4pcCO\n"
"j4WcDuXc2CTHgH8gFTNhp/Y8/SpDOhvn9QIDAQAB\n"
"-----END RSA PUBLIC KEY-----"],
"-----END RSA PUBLIC KEY-----"]
];
productionPublicKeys = @[
[[MTDatacenterAuthPublicKey alloc] initWithPublicKey:@"-----BEGIN RSA PUBLIC KEY-----\n"
"MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\n"
"5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\n"
@ -66,7 +70,11 @@ static NSArray<MTDatacenterAuthPublicKey *> *defaultPublicKeys() {
"-----END RSA PUBLIC KEY-----"]
];
});
return serverPublicKeys;
if (isProduction) {
return productionPublicKeys;
} else {
return testingPublicKeys;
}
}
static MTDatacenterAuthPublicKey *selectPublicKey(id<EncryptionProvider> encryptionProvider, NSArray<NSNumber *> *fingerprints, NSArray<MTDatacenterAuthPublicKey *> *publicKeys) {
@ -170,7 +178,7 @@ typedef enum {
_stage = MTDatacenterAuthStagePQ;
}
} else {
_publicKeys = defaultPublicKeys();
_publicKeys = defaultPublicKeys(!mtProto.context.isTestingEnvironment);
_stage = MTDatacenterAuthStagePQ;
}
@ -184,6 +192,10 @@ typedef enum {
}
- (void)mtProtoPublicKeysUpdated:(MTProto *)mtProto datacenterId:(NSInteger)datacenterId publicKeys:(NSArray<NSDictionary *> *)publicKeys {
if (!mtProto.cdn) {
return;
}
if (_stage == MTDatacenterAuthStageWaitingForPublicKeys) {
if (mtProto.datacenterId == datacenterId) {
_publicKeys = [self convertPublicKeysFromDictionaries:publicKeys];
@ -281,77 +293,6 @@ typedef enum {
return nil;
}
static NSData *aesCbcEncrypt(NSData *data, NSData *key, NSData *iv) {
size_t keyLength = kCCKeySizeAES256;
if (key.length != keyLength) {
return nil;
}
if (iv.length != 16) {
return nil;
}
if (data.length % 16 != 0) {
return nil;
}
NSMutableData *outData = [[NSMutableData alloc] initWithLength:data.length];
CCOperation operation = kCCEncrypt;
CCAlgorithm algoritm = kCCAlgorithmAES128;
CCOptions options = 0; // No padding
size_t outDataActualSize = 0;
int status = CCCrypt(
operation,
algoritm,
options,
key.bytes,
keyLength,
iv.bytes,
data.bytes,
data.length,
outData.mutableBytes,
outData.length,
&outDataActualSize
);
if (status != kCCSuccess) {
return nil;
}
if (outDataActualSize != data.length) {
return nil;
}
return outData;
}
static NSData *encryptRSALegacy(id<EncryptionProvider> encryptionProvider, NSData *pqInnerData, NSString *publicKey) {
NSMutableData *dataWithHash = [[NSMutableData alloc] init];
[dataWithHash appendData:MTSha1(pqInnerData)];
[dataWithHash appendData:pqInnerData];
while (dataWithHash.length < 255) {
uint8_t random = 0;
arc4random_buf(&random, 1);
[dataWithHash appendBytes:&random length:1];
}
NSData *encryptedData = MTRsaEncrypt(encryptionProvider, publicKey, dataWithHash);
if (encryptedData.length < 256) {
NSMutableData *newEncryptedData = [[NSMutableData alloc] init];
for (int i = 0; i < 256 - (int)encryptedData.length; i++)
{
uint8_t random = 0;
arc4random_buf(&random, 1);
[newEncryptedData appendBytes:&random length:1];
}
[newEncryptedData appendData:encryptedData];
encryptedData = newEncryptedData;
}
return encryptedData;
}
static NSData *reversedBytes(NSData *data) {
NSMutableData *result = [[NSMutableData alloc] initWithLength:data.length];
for (NSUInteger i = 0; i < result.length; i++) {

View File

@ -601,44 +601,13 @@ public final class OngoingGroupCallContext {
mainView?.setOnIsMirroredUpdated { value in
f?(value)
}
}, setIsPaused: { [weak mainView] paused in
mainView?.setIsPaused(paused)
}, renderToSize: { [weak mainView] size, animated in
mainView?.render(to: size, animated: animated)
}
)
var cloneVideoView: OngoingCallContextPresentationCallVideoView?
if let cloneView = cloneView {
cloneVideoView = OngoingCallContextPresentationCallVideoView(
view: cloneView,
setOnFirstFrameReceived: { [weak cloneView] f in
cloneView?.setOnFirstFrameReceived(f)
},
getOrientation: { [weak cloneView] in
if let cloneView = cloneView {
return OngoingCallVideoOrientation(cloneView.orientation)
} else {
return .rotation0
}
},
getAspect: { [weak cloneView] in
if let cloneView = cloneView {
return cloneView.aspect
} else {
return 0.0
}
},
setOnOrientationUpdated: { [weak cloneView] f in
cloneView?.setOnOrientationUpdated { value, aspect in
f?(OngoingCallVideoOrientation(value), aspect)
}
}, setVideoContentMode: { [weak cloneView] mode in
cloneView?.setVideoContentMode(mode)
},
setOnIsMirroredUpdated: { [weak cloneView] f in
cloneView?.setOnIsMirroredUpdated { value in
f?(value)
}
}
)
}
completion(mainVideoView, cloneVideoView)
completion(mainVideoView, nil)
#endif
} else {
completion(nil, nil)

@ -1 +1 @@
Subproject commit 3cf1822a70e3b84f6a762755e5249b26e915d321
Subproject commit 1d00d49002333436bb9069558cd718dd770dade1