aboutsummaryrefslogtreecommitdiffstats
path: root/sshlib/src/test/java/com/trilead/ssh2/signature/Ed25519VerifyTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'sshlib/src/test/java/com/trilead/ssh2/signature/Ed25519VerifyTest.java')
-rw-r--r--sshlib/src/test/java/com/trilead/ssh2/signature/Ed25519VerifyTest.java70
1 files changed, 70 insertions, 0 deletions
diff --git a/sshlib/src/test/java/com/trilead/ssh2/signature/Ed25519VerifyTest.java b/sshlib/src/test/java/com/trilead/ssh2/signature/Ed25519VerifyTest.java
new file mode 100644
index 0000000..f256f91
--- /dev/null
+++ b/sshlib/src/test/java/com/trilead/ssh2/signature/Ed25519VerifyTest.java
@@ -0,0 +1,70 @@
+package com.trilead.ssh2.signature;
+
+import com.trilead.ssh2.crypto.key.Ed25519PrivateKey;
+import com.trilead.ssh2.crypto.key.Ed25519PublicKey;
+import net.i2p.crypto.eddsa.spec.EdDSANamedCurveSpec;
+import net.i2p.crypto.eddsa.spec.EdDSANamedCurveTable;
+import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec;
+import org.junit.Test;
+
+import javax.xml.bind.DatatypeConverter;
+import java.security.MessageDigest;
+
+import static org.junit.Assert.*;
+
+/**
+ * Created by kenny on 1/24/16.
+ */
+public class Ed25519VerifyTest {
+ /* Test vectors from draft-josefsson-eddsa-ed25519-03 */
+ private static final byte[] SECRET_KEY = toByteArray("833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42");
+ private static final byte[] PUBLIC_KEY = toByteArray("ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf");
+ private static final byte[] MESSAGE = toByteArray("616263");
+ private static final byte[] SIGNATURE = toByteArray("dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704");
+
+ private static byte[] toByteArray(String s) {
+ return DatatypeConverter.parseHexBinary(s);
+ }
+
+ @Test
+ public void verifies() throws Exception {
+ Ed25519PublicKey pubKey = Ed25519PublicKey.getInstance(PUBLIC_KEY);
+ MessageDigest md = MessageDigest.getInstance("SHA-512");
+ assertTrue(Ed25519Verify.verifySignature(md.digest(MESSAGE), SIGNATURE, pubKey));
+ }
+
+ @Test
+ public void noVerificationForInvalidData() throws Exception {
+ Ed25519PublicKey pubKey = Ed25519PublicKey.getInstance(PUBLIC_KEY);
+ MessageDigest md = MessageDigest.getInstance("SHA-512");
+ assertFalse(Ed25519Verify.verifySignature(md.digest(new byte[1]), SIGNATURE, pubKey));
+ }
+
+ @Test
+ public void signs() throws Exception {
+ Ed25519PrivateKey privKey = Ed25519PrivateKey.getInstance(SECRET_KEY);
+ MessageDigest md = MessageDigest.getInstance("SHA-512");
+ assertArrayEquals(SIGNATURE, Ed25519Verify.generateSignature(md.digest(MESSAGE), privKey));
+ }
+
+ @Test
+ public void publicKeyCalculatedCorrectly() throws Exception {
+ EdDSANamedCurveSpec spec = EdDSANamedCurveTable.getByName("ed25519-sha-512");
+ EdDSAPrivateKeySpec privKeySpec = new EdDSAPrivateKeySpec(SECRET_KEY, spec);
+ byte[] pubKeyBytes = privKeySpec.getA().toByteArray();
+ assertArrayEquals(PUBLIC_KEY, pubKeyBytes);
+ }
+
+ @Test
+ public void loopbackSuccess() throws Exception {
+ Ed25519PrivateKey privKey = Ed25519PrivateKey.getInstance(SECRET_KEY);
+ Ed25519PublicKey pubKey = Ed25519PublicKey.getInstance(PUBLIC_KEY);
+ MessageDigest md = MessageDigest.getInstance("SHA-512");
+
+ byte[] message = new byte[] { (byte) 0xA5, (byte) 0x5A };
+ byte[] digest = md.digest(message);
+
+ byte[] sig = Ed25519Verify.generateSignature(digest, privKey);
+ assertTrue(Ed25519Verify.verifySignature(digest, sig, pubKey));
+ }
+} \ No newline at end of file