Add documentation-conforming checks

This commit is contained in:
Ali 2022-03-30 01:22:26 +04:00
parent 681d0891ed
commit 0e55dd7db7
2 changed files with 32 additions and 1 deletions

View File

@ -627,9 +627,24 @@ bool MTCheckIsSafeGAOrB(id<EncryptionProvider> provider, NSData *gAOrB, NSData *
[context subInto:bnPMinusOne a:bnP b:bnOne]; [context subInto:bnPMinusOne a:bnP b:bnOne];
if ([context compare:bnNumber with:bnPMinusOne] == -1) { if ([context compare:bnNumber with:bnPMinusOne] == -1) {
id<MTBignum> n2 = [context create];
[context assignWordTo:n2 value:2];
id<MTBignum> n2048_minus_64 = [context create];
[context assignWordTo:n2048_minus_64 value:2048 - 64];
id<MTBignum> n2_to_2048_minus_64 = [context create];
[context expInto:n2_to_2048_minus_64 a:n2 b:n2048_minus_64];
id<MTBignum> dh_prime_minus_n2_to_2048_minus_64 = [context create];
[context subInto:dh_prime_minus_n2_to_2048_minus_64 a:bnP b:n2_to_2048_minus_64];
if ([context compare:bnNumber with:n2_to_2048_minus_64] == 1 &&
[context compare:bnNumber with:dh_prime_minus_n2_to_2048_minus_64] == -1) {
result = true; result = true;
} }
} }
}
return result; return result;
} }

View File

@ -209,6 +209,10 @@ private func initialHandshakeAccept(postbox: Postbox, network: Network, peerId:
let gb = MTExp(network.encryptionProvider, g, bData, p)! let gb = MTExp(network.encryptionProvider, g, bData, p)!
if !MTCheckIsSafeGAOrB(network.encryptionProvider, gb, p) {
return .complete()
}
var key = MTExp(network.encryptionProvider, gA.makeData(), bData, p)! var key = MTExp(network.encryptionProvider, gA.makeData(), bData, p)!
if key.count > 256 { if key.count > 256 {
@ -284,6 +288,10 @@ private func pfsRequestKey(postbox: Postbox, network: Network, peerId: PeerId, l
let aData = a.makeData() let aData = a.makeData()
let ga = MTExp(network.encryptionProvider, g, aData, p)! let ga = MTExp(network.encryptionProvider, g, aData, p)!
if !MTCheckIsSafeGAOrB(network.encryptionProvider, ga, p) {
return .complete()
}
return postbox.transaction { transaction -> Signal<Void, NoError> in return postbox.transaction { transaction -> Signal<Void, NoError> in
if let state = transaction.getPeerChatState(peerId) as? SecretChatState { if let state = transaction.getPeerChatState(peerId) as? SecretChatState {
switch state.embeddedState { switch state.embeddedState {
@ -308,10 +316,18 @@ private func pfsAcceptKey(postbox: Postbox, network: Network, peerId: PeerId, la
let g = Data(bytes: &gValue, count: 4) let g = Data(bytes: &gValue, count: 4)
let p = config.p.makeData() let p = config.p.makeData()
if !MTCheckIsSafeGAOrB(network.encryptionProvider, gA.makeData(), p) {
return .complete()
}
let bData = b.makeData() let bData = b.makeData()
let gb = MTExp(network.encryptionProvider, g, bData, p)! let gb = MTExp(network.encryptionProvider, g, bData, p)!
if !MTCheckIsSafeGAOrB(network.encryptionProvider, gb, p) {
return .complete()
}
var key = MTExp(network.encryptionProvider, gA.makeData(), bData, p)! var key = MTExp(network.encryptionProvider, gA.makeData(), bData, p)!
if key.count > 256 { if key.count > 256 {