package im.actor.core.modules.encryption.entity;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import im.actor.runtime.bser.BserObject;
import im.actor.runtime.bser.BserValues;
import im.actor.runtime.bser.BserWriter;
public class SessionStorage extends BserObject {
private long sid;
private int uid;
private int ownKeyGroupId;
private int theirKeyGroupId;
private long ownPreKeyId;
private long theirPreKeyId;
private ArrayList<SessionEphemeralKey> theirKeys;
private ArrayList<SessionEphemeralKey> ownKeys;
public SessionStorage(long sid, int uid,
int theirKeyGroupId,
int ownKeyGroupId,
long ownPreKeyId,
long theirPreKeyId,
ArrayList<SessionEphemeralKey> theirKeys,
ArrayList<SessionEphemeralKey> ownKeys) {
this.sid = sid;
this.uid = uid;
this.theirKeyGroupId = theirKeyGroupId;
this.ownKeyGroupId = ownKeyGroupId;
this.ownPreKeyId = ownPreKeyId;
this.theirPreKeyId = theirPreKeyId;
this.theirKeys = new ArrayList<>(theirKeys);
this.ownKeys = new ArrayList<>(ownKeys);
}
public SessionStorage(byte[] data) throws IOException {
load(data);
}
public long getSid() {
return sid;
}
public int getUid() {
return uid;
}
public int getOwnKeyGroupId() {
return ownKeyGroupId;
}
public int getTheirKeyGroupId() {
return theirKeyGroupId;
}
public long getOwnPreKeyId() {
return ownPreKeyId;
}
public long getTheirPreKeyId() {
return theirPreKeyId;
}
public ArrayList<SessionEphemeralKey> getTheirKeys() {
return theirKeys;
}
public ArrayList<SessionEphemeralKey> getOwnKeys() {
return ownKeys;
}
@Override
public void parse(BserValues values) throws IOException {
sid = values.getLong(1);
uid = values.getInt(2);
ownKeyGroupId = values.getInt(3);
theirKeyGroupId = values.getInt(4);
ownPreKeyId = values.getLong(5);
theirPreKeyId = values.getLong(6);
theirKeys = new ArrayList<>();
List<byte[]> theirEphemeral = values.getRepeatedBytes(7);
for (byte[] b : theirEphemeral) {
theirKeys.add(new SessionEphemeralKey(b));
}
ownKeys = new ArrayList<>();
List<byte[]> ownEphemeral = values.getRepeatedBytes(8);
for (byte[] b : ownEphemeral) {
theirKeys.add(new SessionEphemeralKey(b));
}
}
@Override
public void serialize(BserWriter writer) throws IOException {
writer.writeLong(1, sid);
writer.writeInt(2, uid);
writer.writeInt(3, ownKeyGroupId);
writer.writeInt(4, theirKeyGroupId);
writer.writeLong(5, ownPreKeyId);
writer.writeLong(6, theirPreKeyId);
writer.writeRepeatedObj(7, theirKeys);
writer.writeRepeatedObj(8, ownKeys);
}
}