aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/whispersystems/libaxolotl/state/SignedPreKeyRecord.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/whispersystems/libaxolotl/state/SignedPreKeyRecord.java')
-rw-r--r--src/main/java/org/whispersystems/libaxolotl/state/SignedPreKeyRecord.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main/java/org/whispersystems/libaxolotl/state/SignedPreKeyRecord.java b/src/main/java/org/whispersystems/libaxolotl/state/SignedPreKeyRecord.java
new file mode 100644
index 00000000..f11f5cf1
--- /dev/null
+++ b/src/main/java/org/whispersystems/libaxolotl/state/SignedPreKeyRecord.java
@@ -0,0 +1,61 @@
+package org.whispersystems.libaxolotl.state;
+
+import com.google.protobuf.ByteString;
+
+import org.whispersystems.libaxolotl.InvalidKeyException;
+import org.whispersystems.libaxolotl.ecc.Curve;
+import org.whispersystems.libaxolotl.ecc.ECKeyPair;
+import org.whispersystems.libaxolotl.ecc.ECPrivateKey;
+import org.whispersystems.libaxolotl.ecc.ECPublicKey;
+
+import java.io.IOException;
+
+import static org.whispersystems.libaxolotl.state.StorageProtos.SignedPreKeyRecordStructure;
+
+public class SignedPreKeyRecord {
+
+ private SignedPreKeyRecordStructure structure;
+
+ public SignedPreKeyRecord(int id, long timestamp, ECKeyPair keyPair, byte[] signature) {
+ this.structure = SignedPreKeyRecordStructure.newBuilder()
+ .setId(id)
+ .setPublicKey(ByteString.copyFrom(keyPair.getPublicKey()
+ .serialize()))
+ .setPrivateKey(ByteString.copyFrom(keyPair.getPrivateKey()
+ .serialize()))
+ .setSignature(ByteString.copyFrom(signature))
+ .setTimestamp(timestamp)
+ .build();
+ }
+
+ public SignedPreKeyRecord(byte[] serialized) throws IOException {
+ this.structure = SignedPreKeyRecordStructure.parseFrom(serialized);
+ }
+
+ public int getId() {
+ return this.structure.getId();
+ }
+
+ public long getTimestamp() {
+ return this.structure.getTimestamp();
+ }
+
+ public ECKeyPair getKeyPair() {
+ try {
+ ECPublicKey publicKey = Curve.decodePoint(this.structure.getPublicKey().toByteArray(), 0);
+ ECPrivateKey privateKey = Curve.decodePrivatePoint(this.structure.getPrivateKey().toByteArray());
+
+ return new ECKeyPair(publicKey, privateKey);
+ } catch (InvalidKeyException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ public byte[] getSignature() {
+ return this.structure.getSignature().toByteArray();
+ }
+
+ public byte[] serialize() {
+ return this.structure.toByteArray();
+ }
+}