mirror of
https://github.com/telemt/telemt.git
synced 2026-04-16 18:14:10 +03:00
Flush-response experiments
Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
@@ -159,10 +159,13 @@ pub const MAX_TLS_CHUNK_SIZE: usize = 16384 + 256;
|
||||
/// Generate padding length for Secure Intermediate protocol.
|
||||
/// Total (data + padding) must not be divisible by 4 per MTProto spec.
|
||||
pub fn secure_padding_len(data_len: usize, rng: &SecureRandom) -> usize {
|
||||
if data_len % 4 == 0 {
|
||||
(rng.range(3) + 1) as usize // 1-3
|
||||
} else {
|
||||
rng.range(4) as usize // 0-3
|
||||
let rem = data_len % 4;
|
||||
match rem {
|
||||
0 => (rng.range(3) + 1) as usize, // {1, 2, 3}
|
||||
1 => rng.range(3) as usize, // {0, 1, 2}
|
||||
2 => [0usize, 1, 3][rng.range(3) as usize], // {0, 1, 3}
|
||||
3 => [0usize, 2, 3][rng.range(3) as usize], // {0, 2, 3}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,4 +335,24 @@ mod tests {
|
||||
assert_eq!(TG_DATACENTERS_V4.len(), 5);
|
||||
assert_eq!(TG_DATACENTERS_V6.len(), 5);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn secure_padding_never_produces_aligned_total() {
|
||||
let rng = SecureRandom::new();
|
||||
for data_len in 0..1000 {
|
||||
for _ in 0..100 {
|
||||
let padding = secure_padding_len(data_len, &rng);
|
||||
assert!(
|
||||
padding <= 3,
|
||||
"padding out of range: data_len={data_len}, padding={padding}"
|
||||
);
|
||||
assert_ne!(
|
||||
(data_len + padding) % 4,
|
||||
0,
|
||||
"invariant violated: data_len={data_len}, padding={padding}, total={}",
|
||||
data_len + padding
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user