From 3bdffed8c990801cbe4f2e662ca4aba728d3e17d Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 16 Jun 2023 09:54:19 -0300 Subject: [PATCH] Add call link scrubbing for logs. --- .../org/signal/core/util/logging/Scrubber.java | 17 +++++++++++++++++ .../signal/core/util/logging/ScrubberTest.java | 12 ++++++++++++ 2 files changed, 29 insertions(+) diff --git a/core-util/src/main/java/org/signal/core/util/logging/Scrubber.java b/core-util/src/main/java/org/signal/core/util/logging/Scrubber.java index e46c2b8bd8..6ac9c3a994 100644 --- a/core-util/src/main/java/org/signal/core/util/logging/Scrubber.java +++ b/core-util/src/main/java/org/signal/core/util/logging/Scrubber.java @@ -89,6 +89,12 @@ public final class Scrubber { "mobi", "by", "cat", "wiki", "la", "ga", "xxx", "cf", "hr", "ng", "jobs", "online", "kz", "ug", "gq", "ae", "is", "lv", "pro", "fm", "tips", "ms", "sa", "app")); + /** + * Base16 Call Link Key Pattern + */ + private static final Pattern CALL_LINK_PATTERN = Pattern.compile("([bBcCdDfFgGhHkKmMnNpPqQrRsStTxXzZ]{4})(-[bBcCdDfFgGhHkKmMnNpPqQrRsStTxXzZ]{4}){7}"); + private static final String CALL_LINK_CENSOR_SUFFIX = "-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX"; + public static CharSequence scrub(@NonNull CharSequence in) { in = scrubE164(in); @@ -98,6 +104,7 @@ public final class Scrubber { in = scrubUuids(in); in = scrubDomains(in); in = scrubIpv4(in); + in = scrubCallLinkKeys(in); return in; } @@ -171,6 +178,16 @@ public final class Scrubber { (matcher, output) -> output.append(IPV4_CENSOR)); } + private static CharSequence scrubCallLinkKeys(@NonNull CharSequence in) { + return scrub(in, + CALL_LINK_PATTERN, + ((matcher, output) -> { + String match = matcher.group(1); + output.append(match); + output.append(CALL_LINK_CENSOR_SUFFIX); + })); + } + private static CharSequence scrub(@NonNull CharSequence in, @NonNull Pattern pattern, @NonNull ProcessMatch processMatch) { final StringBuilder output = new StringBuilder(in.length()); diff --git a/core-util/src/test/java/org/signal/core/util/logging/ScrubberTest.java b/core-util/src/test/java/org/signal/core/util/logging/ScrubberTest.java index b907dccb2f..6898fd3ddc 100644 --- a/core-util/src/test/java/org/signal/core/util/logging/ScrubberTest.java +++ b/core-util/src/test/java/org/signal/core/util/logging/ScrubberTest.java @@ -113,6 +113,18 @@ public final class ScrubberTest { { "Not an ipv4 3.141", "Not an ipv4 3.141" + }, + + { "A Call Link Root Key BCDF-FGHK-MNPQ-RSTX-ZRQH-BCDF-FGHM-STXZ", + "A Call Link Root Key BCDF-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX" + }, + + { "Not a Call Link Root Key (Invalid Characters) BCAF-FGHK-MNPQ-RSTX-ZRQH-BCDF-FGHM-STXZ", + "Not a Call Link Root Key (Invalid Characters) BCAF-FGHK-MNPQ-RSTX-ZRQH-BCDF-FGHM-STXZ" + }, + + { "Not a Call Link Root Key (Missing Quartet) BCAF-FGHK-MNPQ-RSTX-ZRQH-BCDF-STXZ", + "Not a Call Link Root Key (Missing Quartet) BCAF-FGHK-MNPQ-RSTX-ZRQH-BCDF-STXZ" } });