From fdd561c94272f1802796d6859052a216f99fe53c Mon Sep 17 00:00:00 2001 From: Ben Date: Sat, 18 Sep 2021 13:04:29 +0200 Subject: [PATCH 1/2] Make keys compatible with Java framework --- .../whispersystems/libsignal/ecc/Curve.java | 12 +++++----- .../libsignal/ecc/DjbECPrivateKey.java | 22 ++++++++++++++----- .../libsignal/ecc/DjbECPublicKey.java | 22 ++++++++++++++----- .../libsignal/ecc/ECKeyPair.java | 18 +++++++++------ .../libsignal/ecc/ECPrivateKey.java | 10 +++++---- .../libsignal/ecc/ECPublicKey.java | 12 +++++----- 6 files changed, 64 insertions(+), 32 deletions(-) diff --git a/java/src/main/java/org/whispersystems/libsignal/ecc/Curve.java b/java/src/main/java/org/whispersystems/libsignal/ecc/Curve.java index eebf9094..fdbab4d5 100644 --- a/java/src/main/java/org/whispersystems/libsignal/ecc/Curve.java +++ b/java/src/main/java/org/whispersystems/libsignal/ecc/Curve.java @@ -71,8 +71,8 @@ public static byte[] calculateAgreement(ECPublicKey publicKey, ECPrivateKey priv if (publicKey.getType() == DJB_TYPE) { return Curve25519.getInstance(BEST) - .calculateAgreement(((DjbECPublicKey) publicKey).getPublicKey(), - ((DjbECPrivateKey) privateKey).getPrivateKey()); + .calculateAgreement(((DjbECPublicKey) publicKey).getEncoded(), + ((DjbECPrivateKey) privateKey).getEncoded()); } else { throw new InvalidKeyException("Unknown type: " + publicKey.getType()); } @@ -87,7 +87,7 @@ public static boolean verifySignature(ECPublicKey signingKey, byte[] message, by if (signingKey.getType() == DJB_TYPE) { return Curve25519.getInstance(BEST) - .verifySignature(((DjbECPublicKey) signingKey).getPublicKey(), message, signature); + .verifySignature(((DjbECPublicKey) signingKey).getEncoded(), message, signature); } else { throw new InvalidKeyException("Unknown type: " + signingKey.getType()); } @@ -102,7 +102,7 @@ public static byte[] calculateSignature(ECPrivateKey signingKey, byte[] message) if (signingKey.getType() == DJB_TYPE) { return Curve25519.getInstance(BEST) - .calculateSignature(((DjbECPrivateKey) signingKey).getPrivateKey(), message); + .calculateSignature(((DjbECPrivateKey) signingKey).getEncoded(), message); } else { throw new InvalidKeyException("Unknown type: " + signingKey.getType()); } @@ -117,7 +117,7 @@ public static byte[] calculateVrfSignature(ECPrivateKey signingKey, byte[] messa if (signingKey.getType() == DJB_TYPE) { return Curve25519.getInstance(BEST) - .calculateVrfSignature(((DjbECPrivateKey)signingKey).getPrivateKey(), message); + .calculateVrfSignature(((DjbECPrivateKey)signingKey).getEncoded(), message); } else { throw new InvalidKeyException("Unknown type: " + signingKey.getType()); } @@ -132,7 +132,7 @@ public static byte[] verifyVrfSignature(ECPublicKey signingKey, byte[] message, if (signingKey.getType() == DJB_TYPE) { return Curve25519.getInstance(BEST) - .verifyVrfSignature(((DjbECPublicKey) signingKey).getPublicKey(), message, signature); + .verifyVrfSignature(((DjbECPublicKey) signingKey).getEncoded(), message, signature); } else { throw new InvalidKeyException("Unknown type: " + signingKey.getType()); } diff --git a/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPrivateKey.java b/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPrivateKey.java index c73ced4d..4cdda620 100644 --- a/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPrivateKey.java +++ b/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPrivateKey.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2013-2016 Open Whisper Systems * * Licensed according to the LICENSE file in this repository. @@ -14,9 +14,24 @@ public class DjbECPrivateKey implements ECPrivateKey { this.privateKey = privateKey; } + @Override + public String getAlgorithm() { + return "Curve25519"; + } + + @Override + public String getFormat() { + return "RAW"; + } + + @Override + public byte[] getEncoded() { + return this.privateKey; + } + @Override public byte[] serialize() { - return privateKey; + return this.privateKey; } @Override @@ -24,7 +39,4 @@ public int getType() { return Curve.DJB_TYPE; } - public byte[] getPrivateKey() { - return privateKey; - } } diff --git a/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPublicKey.java b/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPublicKey.java index 32aa435f..79d4162a 100644 --- a/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPublicKey.java +++ b/java/src/main/java/org/whispersystems/libsignal/ecc/DjbECPublicKey.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2013-2016 Open Whisper Systems * * Licensed according to the LICENSE file in this repository. @@ -19,10 +19,25 @@ public class DjbECPublicKey implements ECPublicKey { this.publicKey = publicKey; } + @Override + public String getAlgorithm() { + return "Curve25519"; + } + + @Override + public String getFormat() { + return "RAW"; + } + + @Override + public byte[] getEncoded() { + return this.publicKey; + } + @Override public byte[] serialize() { byte[] type = {Curve.DJB_TYPE}; - return ByteUtil.combine(type, publicKey); + return ByteUtil.combine(type, this.publicKey); } @Override @@ -49,7 +64,4 @@ public int compareTo(ECPublicKey another) { return new BigInteger(publicKey).compareTo(new BigInteger(((DjbECPublicKey)another).publicKey)); } - public byte[] getPublicKey() { - return publicKey; - } } diff --git a/java/src/main/java/org/whispersystems/libsignal/ecc/ECKeyPair.java b/java/src/main/java/org/whispersystems/libsignal/ecc/ECKeyPair.java index ee2f6010..4eb79269 100644 --- a/java/src/main/java/org/whispersystems/libsignal/ecc/ECKeyPair.java +++ b/java/src/main/java/org/whispersystems/libsignal/ecc/ECKeyPair.java @@ -1,25 +1,29 @@ -/** +/* * Copyright (C) 2013-2016 Open Whisper Systems * * Licensed according to the LICENSE file in this repository. */ package org.whispersystems.libsignal.ecc; +import java.security.KeyPair; + public class ECKeyPair { - private final ECPublicKey publicKey; - private final ECPrivateKey privateKey; + private final KeyPair keyPair; public ECKeyPair(ECPublicKey publicKey, ECPrivateKey privateKey) { - this.publicKey = publicKey; - this.privateKey = privateKey; + this.keyPair = new KeyPair(publicKey,privateKey); + } + + public KeyPair getKeyPair() { + return this.keyPair; } public ECPublicKey getPublicKey() { - return publicKey; + return (ECPublicKey) this.keyPair.getPublic(); } public ECPrivateKey getPrivateKey() { - return privateKey; + return (ECPrivateKey) this.keyPair.getPrivate(); } } diff --git a/java/src/main/java/org/whispersystems/libsignal/ecc/ECPrivateKey.java b/java/src/main/java/org/whispersystems/libsignal/ecc/ECPrivateKey.java index fb478b06..35ba509e 100644 --- a/java/src/main/java/org/whispersystems/libsignal/ecc/ECPrivateKey.java +++ b/java/src/main/java/org/whispersystems/libsignal/ecc/ECPrivateKey.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2013-2016 Open Whisper Systems * * Licensed according to the LICENSE file in this repository. @@ -6,7 +6,9 @@ package org.whispersystems.libsignal.ecc; -public interface ECPrivateKey { - public byte[] serialize(); - public int getType(); +import java.security.PrivateKey; + +public interface ECPrivateKey extends PrivateKey { + byte[] serialize(); + int getType(); } diff --git a/java/src/main/java/org/whispersystems/libsignal/ecc/ECPublicKey.java b/java/src/main/java/org/whispersystems/libsignal/ecc/ECPublicKey.java index ec9c9c9b..d13eedc3 100644 --- a/java/src/main/java/org/whispersystems/libsignal/ecc/ECPublicKey.java +++ b/java/src/main/java/org/whispersystems/libsignal/ecc/ECPublicKey.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2013-2016 Open Whisper Systems * * Licensed according to the LICENSE file in this repository. @@ -6,11 +6,13 @@ package org.whispersystems.libsignal.ecc; -public interface ECPublicKey extends Comparable { +import java.security.PublicKey; - public static final int KEY_SIZE = 33; +public interface ECPublicKey extends PublicKey, Comparable { - public byte[] serialize(); + int KEY_SIZE = 33; - public int getType(); + byte[] serialize(); + + int getType(); } From a58f85e3ddf88c3d1f0c2f0f7cdffc4d4dcd3e30 Mon Sep 17 00:00:00 2001 From: Ben Date: Sat, 18 Sep 2021 15:20:56 +0200 Subject: [PATCH 2/2] Update protobuf --- java/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/build.gradle b/java/build.gradle index 99455dd3..557c954d 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -34,14 +34,14 @@ sourceSets { dependencies { compile "org.whispersystems:curve25519-java:${curve25519_version}" - compile 'com.google.protobuf:protobuf-javalite:3.10.0' + compile 'com.google.protobuf:protobuf-java:3.17.3' testCompile ('junit:junit:3.8.2') } protobuf { protoc { - artifact = 'com.google.protobuf:protoc:3.10.0' + artifact = 'com.google.protobuf:protoc:3.17.3' } generateProtoTasks { all().each { task ->