1 package org
.asamk
.signal
.manager
.storage
.identities
;
3 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientId
;
4 import org
.asamk
.signal
.manager
.storage
.recipients
.RecipientResolver
;
5 import org
.signal
.libsignal
.protocol
.IdentityKey
;
6 import org
.signal
.libsignal
.protocol
.IdentityKeyPair
;
7 import org
.signal
.libsignal
.protocol
.SignalProtocolAddress
;
9 import java
.util
.function
.Supplier
;
11 public class SignalIdentityKeyStore
implements org
.signal
.libsignal
.protocol
.state
.IdentityKeyStore
{
13 private final RecipientResolver resolver
;
14 private final Supplier
<IdentityKeyPair
> identityKeyPairSupplier
;
15 private final int localRegistrationId
;
16 private final IdentityKeyStore identityKeyStore
;
18 public SignalIdentityKeyStore(
19 final RecipientResolver resolver
,
20 final Supplier
<IdentityKeyPair
> identityKeyPairSupplier
,
21 final int localRegistrationId
,
22 final IdentityKeyStore identityKeyStore
24 this.resolver
= resolver
;
25 this.identityKeyPairSupplier
= identityKeyPairSupplier
;
26 this.localRegistrationId
= localRegistrationId
;
27 this.identityKeyStore
= identityKeyStore
;
31 public IdentityKeyPair
getIdentityKeyPair() {
32 return identityKeyPairSupplier
.get();
36 public int getLocalRegistrationId() {
37 return localRegistrationId
;
41 public boolean saveIdentity(SignalProtocolAddress address
, IdentityKey identityKey
) {
42 final var recipientId
= resolveRecipient(address
.getName());
44 return identityKeyStore
.saveIdentity(recipientId
, identityKey
);
48 public boolean isTrustedIdentity(SignalProtocolAddress address
, IdentityKey identityKey
, Direction direction
) {
49 var recipientId
= resolveRecipient(address
.getName());
51 return identityKeyStore
.isTrustedIdentity(recipientId
, identityKey
, direction
);
55 public IdentityKey
getIdentity(SignalProtocolAddress address
) {
56 var recipientId
= resolveRecipient(address
.getName());
57 return identityKeyStore
.getIdentity(recipientId
);
61 * @param identifier can be either a serialized uuid or an e164 phone number
63 private RecipientId
resolveRecipient(String identifier
) {
64 return resolver
.resolveRecipient(identifier
);