Use new zkgroup credential for numberless accounts.

This commit is contained in:
Greyson Parrelli
2026-09-02 16:11:27 -03:00
committed by Alex Hart
parent 01fae0aaf9
commit 483e7d24bd
2 changed files with 16 additions and 4 deletions
@@ -11,6 +11,7 @@ import org.signal.libsignal.zkgroup.calllinks.CallLinkAuthCredentialPresentation
import org.signal.libsignal.zkgroup.calllinks.CallLinkAuthCredentialResponse;
import org.signal.libsignal.zkgroup.calllinks.CallLinkSecretParams;
import org.signal.libsignal.zkgroup.groups.GroupSecretParams;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Api;
import org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString;
@@ -151,7 +152,7 @@ public class GroupsV2Authorization {
throw new NoCredentialForRedemptionTimeException();
}
return groupsV2Api.getGroupsV2AuthorizationString(serviceIds.getAci(), serviceIds.requirePni(), todaySeconds, groupSecretParams, authCredentialWithPniResponse);
return groupsV2Api.getGroupsV2AuthorizationString(serviceIds.getAci(), serviceIds.getPni(), SignalStore.account().getAuthCredentialSalt(), todaySeconds, groupSecretParams, authCredentialWithPniResponse);
}
public interface ValueCache {
@@ -39,6 +39,7 @@ import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import okio.ByteString;
@@ -63,16 +64,26 @@ public class GroupsV2Api {
/**
* Create an auth token from a credential response.
*
* @param authCredentialSalt required when the account has no PNI, provided by the server at registration/link time
*/
public GroupsV2AuthorizationString getGroupsV2AuthorizationString(ACI aci,
PNI pni,
@Nullable PNI pni,
@Nullable byte[] authCredentialSalt,
long redemptionTimeSeconds,
GroupSecretParams groupSecretParams,
AuthCredentialWithPniResponse authCredentialWithPniResponse)
throws VerificationFailedException
{
ClientZkAuthOperations authOperations = groupsOperations.getAuthOperations();
AuthCredentialWithPni authCredentialWithPni = authOperations.receiveAuthCredentialWithPniAsServiceId(aci.getLibSignalAci(), pni.getLibSignalPni(), redemptionTimeSeconds, authCredentialWithPniResponse);
ClientZkAuthOperations authOperations = groupsOperations.getAuthOperations();
AuthCredentialWithPni authCredentialWithPni;
if (pni != null) {
authCredentialWithPni = authOperations.receiveAuthCredentialWithPniAsServiceId(aci.getLibSignalAci(), pni.getLibSignalPni(), redemptionTimeSeconds, authCredentialWithPniResponse);
} else {
authCredentialWithPni = authOperations.receiveAuthCredentialWithoutPni(aci.getLibSignalAci(), Objects.requireNonNull(authCredentialSalt, "Missing auth credential salt for account without a PNI"), redemptionTimeSeconds, authCredentialWithPniResponse);
}
AuthCredentialPresentation authCredentialPresentation = authOperations.createAuthCredentialPresentation(new SecureRandom(), groupSecretParams, authCredentialWithPni);
return new GroupsV2AuthorizationString(groupSecretParams, authCredentialPresentation);