Compare commits

...

3 Commits

Author SHA1 Message Date
Hocuri
0dd4edd4e6 clippy 2026-05-07 12:18:32 +02:00
Hocuri
0df7cc2612 test: Adapt test_stats_key_creation_timestamp() 2026-05-05 23:10:36 +02:00
Hocuri
24876f92aa feat: Reduce resolution of key_create_timestamps in the statistics
Right now, I'm reducing the resolution to 4 weeks (i.e. the timestamp is
rounded to the next multiple of 4 weeks); we could change this.
2026-05-05 23:01:12 +02:00
2 changed files with 20 additions and 2 deletions

View File

@@ -29,6 +29,7 @@ const STATISTICS_BOT_VCARD: &str = include_str!("../assets/statistics-bot.vcf");
const SENDING_INTERVAL_SECONDS: i64 = 3600 * 24 * 7; // 1 week
// const SENDING_INTERVAL_SECONDS: i64 = 60; // 1 minute (for testing)
const MESSAGE_STATS_UPDATE_INTERVAL_SECONDS: i64 = 4 * 60; // 4 minutes (less than the lowest ephemeral messages timeout)
const KEY_CREATE_TIMESTAMP_RESOLUTION: u32 = 3600 * 24 * 7 * 4; // 4 weeks
#[derive(Serialize)]
struct Statistics {
@@ -348,7 +349,13 @@ async fn get_stats(context: &Context) -> Result<String> {
let key_create_timestamps: Vec<u32> = load_self_public_keyring(context)
.await?
.iter()
.map(|k| k.created_at().as_secs())
.map(|k| {
k.created_at()
.as_secs()
.div_ceil(KEY_CREATE_TIMESTAMP_RESOLUTION)
.checked_mul(KEY_CREATE_TIMESTAMP_RESOLUTION)
.unwrap_or(0)
})
.collect();
let sending_enabled_timestamps =

View File

@@ -486,6 +486,17 @@ async fn test_stats_key_creation_timestamp() -> Result<()> {
// Alice uses a pregenerated key. It was created at this timestamp:
const ALICE_KEY_CREATION_TIME: u128 = 1582855645;
// The key creation time's resolution is reduced in order to prevent deanonymization:
const CENSORED_KEY_CREATION_TIME: u128 = 1584576000;
assert!(CENSORED_KEY_CREATION_TIME.is_multiple_of(u128::from(KEY_CREATE_TIMESTAMP_RESOLUTION)));
const {
assert!(CENSORED_KEY_CREATION_TIME > ALICE_KEY_CREATION_TIME);
}
assert!(
CENSORED_KEY_CREATION_TIME - ALICE_KEY_CREATION_TIME
< u128::from(KEY_CREATE_TIMESTAMP_RESOLUTION)
);
let alice = &TestContext::new_alice().await;
alice.set_config_bool(Config::StatsSending, true).await?;
@@ -495,7 +506,7 @@ async fn test_stats_key_creation_timestamp() -> Result<()> {
assert_eq!(
key_create_timestamps,
&vec![Value::Number(
Number::from_u128(ALICE_KEY_CREATION_TIME).unwrap()
Number::from_u128(CENSORED_KEY_CREATION_TIME).unwrap()
)]
);