]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/identities/SignalIdentityKeyStore.java
0605087571bc1efb78222b6495598992060acd95
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / identities / SignalIdentityKeyStore.java
1 package org.asamk.signal.manager.storage.identities;
2
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;
8
9 import java.util.function.Supplier;
10
11 public class SignalIdentityKeyStore implements org.signal.libsignal.protocol.state.IdentityKeyStore {
12
13 private final RecipientResolver resolver;
14 private final Supplier<IdentityKeyPair> identityKeyPairSupplier;
15 private final int localRegistrationId;
16 private final IdentityKeyStore identityKeyStore;
17
18 public SignalIdentityKeyStore(
19 final RecipientResolver resolver,
20 final Supplier<IdentityKeyPair> identityKeyPairSupplier,
21 final int localRegistrationId,
22 final IdentityKeyStore identityKeyStore
23 ) {
24 this.resolver = resolver;
25 this.identityKeyPairSupplier = identityKeyPairSupplier;
26 this.localRegistrationId = localRegistrationId;
27 this.identityKeyStore = identityKeyStore;
28 }
29
30 @Override
31 public IdentityKeyPair getIdentityKeyPair() {
32 return identityKeyPairSupplier.get();
33 }
34
35 @Override
36 public int getLocalRegistrationId() {
37 return localRegistrationId;
38 }
39
40 @Override
41 public boolean saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
42 final var recipientId = resolveRecipient(address.getName());
43
44 return identityKeyStore.saveIdentity(recipientId, identityKey);
45 }
46
47 @Override
48 public boolean isTrustedIdentity(SignalProtocolAddress address, IdentityKey identityKey, Direction direction) {
49 var recipientId = resolveRecipient(address.getName());
50
51 return identityKeyStore.isTrustedIdentity(recipientId, identityKey, direction);
52 }
53
54 @Override
55 public IdentityKey getIdentity(SignalProtocolAddress address) {
56 var recipientId = resolveRecipient(address.getName());
57 return identityKeyStore.getIdentity(recipientId);
58 }
59
60 /**
61 * @param identifier can be either a serialized uuid or an e164 phone number
62 */
63 private RecipientId resolveRecipient(String identifier) {
64 return resolver.resolveRecipient(identifier);
65 }
66 }