import org.asamk.signal.manager.storage.SignalAccount;
import org.asamk.signal.manager.storage.recipients.RecipientId;
import org.signal.libsignal.metadata.certificate.InvalidCertificateException;
import org.asamk.signal.manager.storage.SignalAccount;
import org.asamk.signal.manager.storage.recipients.RecipientId;
import org.signal.libsignal.metadata.certificate.InvalidCertificateException;
import java.util.stream.Collectors;
import static org.whispersystems.signalservice.internal.util.Util.getSecretBytes;
import java.util.stream.Collectors;
import static org.whispersystems.signalservice.internal.util.Util.getSecretBytes;
public class UnidentifiedAccessHelper {
private final static Logger logger = LoggerFactory.getLogger(UnidentifiedAccessHelper.class);
public class UnidentifiedAccessHelper {
private final static Logger logger = LoggerFactory.getLogger(UnidentifiedAccessHelper.class);
private final SignalAccount account;
private final SignalDependencies dependencies;
private final SelfProfileKeyProvider selfProfileKeyProvider;
private final ProfileProvider profileProvider;
private final SignalAccount account;
private final SignalDependencies dependencies;
private final SelfProfileKeyProvider selfProfileKeyProvider;
private final ProfileProvider profileProvider;
public UnidentifiedAccessHelper(
final SignalAccount account,
final SignalDependencies dependencies,
public UnidentifiedAccessHelper(
final SignalAccount account,
final SignalDependencies dependencies,
- // TODO cache for a day
+ if (privacySenderCertificate != null && System.currentTimeMillis() < (
+ privacySenderCertificate.getExpiration() - CERTIFICATE_EXPIRATION_BUFFER
+ )) {
+ return privacySenderCertificate.getSerialized();
+ }
- return dependencies.getAccountManager().getSenderCertificateForPhoneNumberPrivacy();
- } catch (IOException e) {
+ final var certificate = dependencies.getAccountManager().getSenderCertificateForPhoneNumberPrivacy();
+ privacySenderCertificate = new SenderCertificate(certificate);
+ return certificate;
+ } catch (IOException | InvalidCertificateException e) {
logger.warn("Failed to get sender certificate, ignoring: {}", e.getMessage());
return null;
}
}
private byte[] getSenderCertificate() {
logger.warn("Failed to get sender certificate, ignoring: {}", e.getMessage());
return null;
}
}
private byte[] getSenderCertificate() {
- // TODO cache for a day
+ if (senderCertificate != null && System.currentTimeMillis() < (
+ senderCertificate.getExpiration() - CERTIFICATE_EXPIRATION_BUFFER
+ )) {
+ return senderCertificate.getSerialized();
+ }
- return dependencies.getAccountManager().getSenderCertificate();
- } catch (IOException e) {
+ final var certificate = dependencies.getAccountManager().getSenderCertificate();
+ this.senderCertificate = new SenderCertificate(certificate);
+ return certificate;
+ } catch (IOException | InvalidCertificateException e) {