From 7633a9b07a073e763f2ad6d376780fc8d84fbbde Mon Sep 17 00:00:00 2001 From: Katherine Date: Mon, 4 Nov 2024 10:36:15 -0500 Subject: [PATCH] Replace `TreeSearchResponse` with `CondensedTreeSearchResponse` --- .../controllers/KeyTransparencyController.java | 5 +---- .../KeyTransparencyServiceClient.java | 14 +++++++------- .../src/main/proto/KeyTransparencyService.proto | 10 +++++----- .../controllers/KeyTransparencyControllerTest.java | 10 +++++----- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyController.java index 85a8d8003..5f48ab196 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyController.java @@ -121,10 +121,7 @@ public class KeyTransparencyController { request.lastTreeHeadSize(), request.distinguishedTreeHeadSize(), KEY_TRANSPARENCY_RPC_TIMEOUT) - .thenApply(searchResponse -> - new KeyTransparencySearchResponse( - searchResponse.toByteArray()) - ).join(); + .thenApply(KeyTransparencySearchResponse::new).join(); } catch (final CancellationException exception) { LOGGER.error("Unexpected cancellation from key transparency service", exception); throw new ServerErrorException(Response.Status.SERVICE_UNAVAILABLE, exception); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/keytransparency/KeyTransparencyServiceClient.java b/service/src/main/java/org/whispersystems/textsecuregcm/keytransparency/KeyTransparencyServiceClient.java index 95583a566..b7b58c4a5 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/keytransparency/KeyTransparencyServiceClient.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/keytransparency/KeyTransparencyServiceClient.java @@ -31,7 +31,6 @@ import org.signal.keytransparency.client.KeyTransparencyQueryServiceGrpc; import org.signal.keytransparency.client.MonitorKey; import org.signal.keytransparency.client.MonitorRequest; import org.signal.keytransparency.client.SearchRequest; -import org.signal.keytransparency.client.SearchResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.whispersystems.textsecuregcm.metrics.MetricsUtil; @@ -113,7 +112,7 @@ public class KeyTransparencyServiceClient implements Managed { } @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - public CompletableFuture search( + public CompletableFuture search( final ByteString aci, final ByteString aciIdentityKey, final Optional usernameHash, @@ -121,21 +120,22 @@ public class KeyTransparencyServiceClient implements Managed { final Optional lastTreeHeadSize, final long distinguishedTreeHeadSize, final Duration timeout) { - final SearchRequest.Builder searchKeysRequestBuilder = SearchRequest.newBuilder() + final SearchRequest.Builder searchRequestBuilder = SearchRequest.newBuilder() .setAci(aci) .setAciIdentityKey(aciIdentityKey); - usernameHash.ifPresent(searchKeysRequestBuilder::setUsernameHash); - e164SearchRequest.ifPresent(searchKeysRequestBuilder::setE164SearchRequest); + usernameHash.ifPresent(searchRequestBuilder::setUsernameHash); + e164SearchRequest.ifPresent(searchRequestBuilder::setE164SearchRequest); final ConsistencyParameters.Builder consistency = ConsistencyParameters.newBuilder() .setDistinguished(distinguishedTreeHeadSize); lastTreeHeadSize.ifPresent(consistency::setLast); - searchKeysRequestBuilder.setConsistency(consistency.build()); + searchRequestBuilder.setConsistency(consistency.build()); return CompletableFutureUtil.toCompletableFuture(stub.withDeadline(toDeadline(timeout)) - .search(searchKeysRequestBuilder.build()), callbackExecutor); + .search(searchRequestBuilder.build()), callbackExecutor) + .thenApply(AbstractMessageLite::toByteArray); } public CompletableFuture monitor(final List monitorKeys, diff --git a/service/src/main/proto/KeyTransparencyService.proto b/service/src/main/proto/KeyTransparencyService.proto index 75aa73863..a4ba7b8c9 100644 --- a/service/src/main/proto/KeyTransparencyService.proto +++ b/service/src/main/proto/KeyTransparencyService.proto @@ -89,7 +89,7 @@ message SearchResponse { /** * The ACI search response is always provided. */ - TreeSearchResponse aci = 2; + CondensedTreeSearchResponse aci = 2; /** * This response is only provided if all of the conditions are met: * - the E164 exists in the log @@ -97,12 +97,12 @@ message SearchResponse { * - the account associated with the ACI is discoverable * - the unidentified access key provided in E164SearchRequest matches the one on the account */ - optional TreeSearchResponse e164 = 3; + optional CondensedTreeSearchResponse e164 = 3; /** * This response is only provided if the username hash exists in the log and * its mapped ACI matches the one provided in the request. */ - optional TreeSearchResponse username_hash = 4; + optional CondensedTreeSearchResponse username_hash = 4; } /** @@ -152,10 +152,10 @@ message DistinguishedResponse { /** * This search response is always provided. */ - TreeSearchResponse distinguished = 2; + CondensedTreeSearchResponse distinguished = 2; } -message TreeSearchResponse { +message CondensedTreeSearchResponse { /** * A proof that is combined with the original requested identifier and the VRF public key * and outputs whether the proof is valid, and if so, the commitment index. diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyControllerTest.java index d5559bb20..f8d31fec7 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/KeyTransparencyControllerTest.java @@ -59,7 +59,7 @@ import org.signal.keytransparency.client.E164SearchRequest; import org.signal.keytransparency.client.FullTreeHead; import org.signal.keytransparency.client.SearchProof; import org.signal.keytransparency.client.SearchResponse; -import org.signal.keytransparency.client.TreeSearchResponse; +import org.signal.keytransparency.client.CondensedTreeSearchResponse; import org.signal.keytransparency.client.UpdateValue; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.ecc.Curve; @@ -140,7 +140,7 @@ public class KeyTransparencyControllerTest { @ParameterizedTest @MethodSource void searchSuccess(final Optional e164, final Optional usernameHash) { - final TreeSearchResponse aciSearchResponse = TreeSearchResponse.newBuilder() + final CondensedTreeSearchResponse aciSearchResponse = CondensedTreeSearchResponse.newBuilder() .setOpening(ByteString.copyFrom(TestRandomUtil.nextBytes(16))) .setSearch(SearchProof.getDefaultInstance()) .setValue(UpdateValue.newBuilder() @@ -152,11 +152,11 @@ public class KeyTransparencyControllerTest { .setTreeHead(FullTreeHead.getDefaultInstance()) .setAci(aciSearchResponse); - e164.ifPresent(ignored -> searchResponseBuilder.setE164(TreeSearchResponse.getDefaultInstance())); - usernameHash.ifPresent(ignored -> searchResponseBuilder.setUsernameHash(TreeSearchResponse.getDefaultInstance())); + e164.ifPresent(ignored -> searchResponseBuilder.setE164(CondensedTreeSearchResponse.getDefaultInstance())); + usernameHash.ifPresent(ignored -> searchResponseBuilder.setUsernameHash(CondensedTreeSearchResponse.getDefaultInstance())); when(keyTransparencyServiceClient.search(any(), any(), any(), any(), any(), anyLong(), any())) - .thenReturn(CompletableFuture.completedFuture(searchResponseBuilder.build())); + .thenReturn(CompletableFuture.completedFuture(searchResponseBuilder.build().toByteArray())); final Invocation.Builder request = resources.getJerseyTest() .target("/v1/key-transparency/search")