mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Update generation
This commit is contained in:
parent
862eb86cae
commit
3c466c337d
@ -423,28 +423,31 @@ static NSData *encryptRSALegacy(id<EncryptionProvider> encryptionProvider, NSDat
|
|||||||
return encryptedData;
|
return encryptedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NSData *reversedBytes(NSData *data) {
|
||||||
|
NSMutableData *result = [[NSMutableData alloc] initWithLength:data.length];
|
||||||
|
for (NSUInteger i = 0; i < result.length; i++) {
|
||||||
|
((uint8_t *)result.mutableBytes)[i] = ((uint8_t *)data.bytes)[result.length - i - 1];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static NSData *encryptRSAModernPadding(id<EncryptionProvider> encryptionProvider, NSData *pqInnerData, NSString *publicKey) {
|
static NSData *encryptRSAModernPadding(id<EncryptionProvider> encryptionProvider, NSData *pqInnerData, NSString *publicKey) {
|
||||||
NSMutableData *dataWithPadding = [[NSMutableData alloc] init];
|
NSMutableData *dataWithPadding = [[NSMutableData alloc] init];
|
||||||
[dataWithPadding appendData:pqInnerData];
|
[dataWithPadding appendData:pqInnerData];
|
||||||
if (dataWithPadding.length > 176) {
|
if (dataWithPadding.length > 192) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
if (dataWithPadding.length != 176) {
|
if (dataWithPadding.length != 192) {
|
||||||
int originalLength = (int)dataWithPadding.length;
|
int originalLength = (int)dataWithPadding.length;
|
||||||
int numPaddingBytes = 176 - originalLength;
|
int numPaddingBytes = 192 - originalLength;
|
||||||
[dataWithPadding setLength:176];
|
[dataWithPadding setLength:192];
|
||||||
int randomResult = SecRandomCopyBytes(kSecRandomDefault, numPaddingBytes, ((uint8_t *)dataWithPadding.mutableBytes) + originalLength);
|
int randomResult = SecRandomCopyBytes(kSecRandomDefault, numPaddingBytes, ((uint8_t *)dataWithPadding.mutableBytes) + originalLength);
|
||||||
if (randomResult != errSecSuccess) {
|
if (randomResult != errSecSuccess) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NSMutableData *dataWithHash = [[NSMutableData alloc] init];
|
NSData *dataWithPaddingReversed = reversedBytes(dataWithPadding);
|
||||||
[dataWithHash appendData:dataWithPadding];
|
|
||||||
[dataWithHash appendData:MTSha256(dataWithPadding)];
|
|
||||||
if (dataWithHash.length != 208) {
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
int randomResult = 0;
|
int randomResult = 0;
|
||||||
@ -454,33 +457,36 @@ static NSData *encryptRSAModernPadding(id<EncryptionProvider> encryptionProvider
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSMutableData *tempIv = [[NSMutableData alloc] initWithLength:16];
|
NSMutableData *tempKeyAndDataWithPadding = [[NSMutableData alloc] init];
|
||||||
randomResult = SecRandomCopyBytes(kSecRandomDefault, tempIv.length, tempIv.mutableBytes);
|
[tempKeyAndDataWithPadding appendData:tempKey];
|
||||||
if (randomResult != errSecSuccess) {
|
[tempKeyAndDataWithPadding appendData:dataWithPadding];
|
||||||
|
|
||||||
|
NSMutableData *dataWithHash = [[NSMutableData alloc] init];
|
||||||
|
[dataWithHash appendData:dataWithPaddingReversed];
|
||||||
|
[dataWithHash appendData:MTSha256(tempKeyAndDataWithPadding)];
|
||||||
|
if (dataWithHash.length != 224) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSData *aesEncrypted = aesCbcEncrypt(dataWithHash, tempKey, tempIv);
|
NSMutableData *zeroIv = [[NSMutableData alloc] initWithLength:32];
|
||||||
|
memset(zeroIv.mutableBytes, 0, zeroIv.length);
|
||||||
|
|
||||||
|
NSData *aesEncrypted = MTAesEncrypt(dataWithHash, tempKey, zeroIv);
|
||||||
if (aesEncrypted == nil) {
|
if (aesEncrypted == nil) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
NSData *shaAesEncrypted = MTSha256(aesEncrypted);
|
||||||
NSMutableData *tempIvPlusAesEncrypted = [[NSMutableData alloc] init];
|
|
||||||
[tempIvPlusAesEncrypted appendData:tempIv];
|
|
||||||
[tempIvPlusAesEncrypted appendData:aesEncrypted];
|
|
||||||
NSData *shaTempIvPlusAesEncrypted = MTSha256(tempIvPlusAesEncrypted);
|
|
||||||
|
|
||||||
NSMutableData *tempKeyXor = [[NSMutableData alloc] initWithLength:tempKey.length];
|
NSMutableData *tempKeyXor = [[NSMutableData alloc] initWithLength:tempKey.length];
|
||||||
if (tempKeyXor.length != shaTempIvPlusAesEncrypted.length) {
|
if (tempKeyXor.length != shaAesEncrypted.length) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
for (NSUInteger i = 0; i < tempKey.length; i++) {
|
for (NSUInteger i = 0; i < tempKey.length; i++) {
|
||||||
((uint8_t *)tempKeyXor.mutableBytes)[i] = ((uint8_t *)tempKey.bytes)[i] ^ ((uint8_t *)shaTempIvPlusAesEncrypted.bytes)[i];
|
((uint8_t *)tempKeyXor.mutableBytes)[i] = ((uint8_t *)tempKey.bytes)[i] ^ ((uint8_t *)shaAesEncrypted.bytes)[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSMutableData *keyAesEncrypted = [[NSMutableData alloc] init];
|
NSMutableData *keyAesEncrypted = [[NSMutableData alloc] init];
|
||||||
[keyAesEncrypted appendData:tempKeyXor];
|
[keyAesEncrypted appendData:tempKeyXor];
|
||||||
[keyAesEncrypted appendData:tempIv];
|
|
||||||
[keyAesEncrypted appendData:aesEncrypted];
|
[keyAesEncrypted appendData:aesEncrypted];
|
||||||
if (keyAesEncrypted.length != 256) {
|
if (keyAesEncrypted.length != 256) {
|
||||||
return nil;
|
return nil;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user