From fc5b786fb72e4f774b8f0e2beee57973bbbd72a3 Mon Sep 17 00:00:00 2001
From: moiseev-signal <122060238+moiseev-signal@users.noreply.github.com>
Date: Thu, 5 Dec 2024 15:51:00 -0800
Subject: [PATCH] keytrans: Remove ChatSearchContext type
---
.../libsignal/net/KeyTransparencyClient.java | 37 ++------
.../org/signal/libsignal/internal/Native.java | 5 +-
rust/bridge/shared/src/net/keytrans.rs | 44 +++++-----
rust/bridge/shared/types/src/keytrans.rs | 3 +-
rust/net/src/keytrans.rs | 85 ++++++++-----------
5 files changed, 65 insertions(+), 109 deletions(-)
diff --git a/java/client/src/main/java/org/signal/libsignal/net/KeyTransparencyClient.java b/java/client/src/main/java/org/signal/libsignal/net/KeyTransparencyClient.java
index 4e06fd69e..b23b79584 100644
--- a/java/client/src/main/java/org/signal/libsignal/net/KeyTransparencyClient.java
+++ b/java/client/src/main/java/org/signal/libsignal/net/KeyTransparencyClient.java
@@ -7,7 +7,6 @@ package org.signal.libsignal.net;
import java.util.Optional;
import org.signal.libsignal.internal.CompletableFuture;
-import org.signal.libsignal.internal.FilterExceptions;
import org.signal.libsignal.internal.Native;
import org.signal.libsignal.internal.NativeHandleGuard;
import org.signal.libsignal.keytrans.SearchResult;
@@ -85,14 +84,12 @@ public class KeyTransparencyClient {
this.search(
aci, aciIdentityKey, e164, unidentifiedAccessKey, usernameHash, store));
}
- // Decoding of the last distinguished tree head happens "eagerly" while constructing the
- // SearchContext. It may result in an IllegalArgumentError.
- SearchContext searchContext =
- new SearchContext(store.getAccountData(aci).orElse(null), lastDistinguishedTreeHead.get());
+ // Decoding of the last distinguished tree head happens "eagerly" before making any network
+ // requests.
+ // It may result in an IllegalArgumentException.
try (NativeHandleGuard tokioContextGuard = this.tokioAsyncContext.guard();
NativeHandleGuard chatGuard = chat.guard();
- NativeHandleGuard identityKeyGuard = aciIdentityKey.getPublicKey().guard();
- NativeHandleGuard searchContextGuard = searchContext.guard()) {
+ NativeHandleGuard identityKeyGuard = aciIdentityKey.getPublicKey().guard()) {
return Native.KeyTransparency_Search(
tokioContextGuard.nativeHandle(),
chat.environment.value,
@@ -102,7 +99,8 @@ public class KeyTransparencyClient {
e164,
unidentifiedAccessKey,
usernameHash,
- searchContextGuard.nativeHandle())
+ store.getAccountData(aci).orElse(null),
+ lastDistinguishedTreeHead.get())
.thenApply(
(handle) -> {
SearchResult result = new SearchResult(handle);
@@ -154,27 +152,4 @@ public class KeyTransparencyClient {
});
}
}
-
- /**
- * Extra data accompanying the key transparency search request.
- *
- *
This is an implementation detail of the {@link
- * org.signal.libsignal.net.KeyTransparencyClient} and is not supposed to be used directly. The
- * context will be populated from the {@link Store}.
- */
- static final class SearchContext extends NativeHandleGuard.SimpleOwner {
- SearchContext(byte[] accountData, byte[] lastDistinguishedTreeHead) {
- super(
- FilterExceptions.filterExceptions(
- () ->
- // The only exception it can throw is an IllegalArgumentException, even though it
- // is bridged as throwing Exception.
- Native.KeyTransparency_NewSearchContext(accountData, lastDistinguishedTreeHead)));
- }
-
- @Override
- protected void release(long nativeHandle) {
- Native.ChatSearchContext_Destroy(nativeHandle);
- }
- }
}
diff --git a/java/shared/java/org/signal/libsignal/internal/Native.java b/java/shared/java/org/signal/libsignal/internal/Native.java
index 75531dfeb..8f1697f58 100644
--- a/java/shared/java/org/signal/libsignal/internal/Native.java
+++ b/java/shared/java/org/signal/libsignal/internal/Native.java
@@ -208,8 +208,6 @@ public final class Native {
public static native CompletableFuture CdsiLookup_new(long asyncRuntime, long connectionManager, String username, String password, long request);
public static native byte[] CdsiLookup_token(long lookup);
- public static native void ChatSearchContext_Destroy(long handle);
-
public static native void ChatService_SetListenerAuth(long runtime, long chat, BridgeChatListener listener);
public static native void ChatService_SetListenerUnauth(long runtime, long chat, BridgeChatListener listener);
public static native CompletableFuture