package im.actor.core.modules.encryption; import im.actor.core.modules.encryption.entity.PrivateKey; import im.actor.core.modules.encryption.entity.PublicKey; import im.actor.core.modules.encryption.entity.UserKeys; import im.actor.runtime.actors.ActorInterface; import im.actor.runtime.actors.ActorRef; import im.actor.runtime.function.Function; import im.actor.runtime.function.Supplier; import im.actor.runtime.promise.Promise; import im.actor.runtime.promise.Promises; public class KeyManagerInt extends ActorInterface { public KeyManagerInt(ActorRef dest) { super(dest); } public Promise<KeyManagerActor.OwnIdentity> getOwnIdentity() { return ask(new KeyManagerActor.FetchOwnKey()); } public Promise<UserKeys> getUserKeyGroups(int uid) { return ask(new KeyManagerActor.FetchUserKeys(uid)); } public Promise<PublicKey> getUserRandomPreKey(int uid, int keyGroupId) { return ask(new KeyManagerActor.FetchUserPreKeyRandom(uid, keyGroupId)); } public Promise<PublicKey> getUserPreKey(int uid, int keyGroupId, long preKeyId) { return ask(new KeyManagerActor.FetchUserPreKey(uid, keyGroupId, preKeyId)); } public Promise<PrivateKey> getOwnRandomPreKey() { return ask(new KeyManagerActor.FetchOwnRandomPreKey()); } public Promise<PrivateKey> getOwnPreKey(long id) { return ask(new KeyManagerActor.FetchOwnPreKeyById(id)); } public Supplier<Promise<byte[]>> supplyUserPreKey(final int uid, final int keyGroupId) { return new Supplier<Promise<byte[]>>() { @Override public Promise<byte[]> get() { return getUserRandomPreKey(uid, keyGroupId) .map(new Function<PublicKey, byte[]>() { @Override public byte[] apply(PublicKey publicKey) { return publicKey.getPublicKey(); } }); } }; } }