diff options
author | Kenny Root <kenny@the-b.org> | 2016-01-24 21:32:51 -0800 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2016-01-24 21:32:51 -0800 |
commit | 2141c2838692b2a25b80a10426ab4cca6a5213ef (patch) | |
tree | 7b24d08594569ab5a78c34be6f70496c86bbc337 /sshlib/src/test/java/com/trilead/ssh2/signature/Ed25519VerifyTest.java | |
parent | 4e80ba5fbec4e68749b395c489148fa5d704b87b (diff) | |
parent | 1538c32d65152d1792e6d2404f2018c9db29ab19 (diff) | |
download | sshlib-2141c2838692b2a25b80a10426ab4cca6a5213ef.tar.gz sshlib-2141c2838692b2a25b80a10426ab4cca6a5213ef.tar.bz2 sshlib-2141c2838692b2a25b80a10426ab4cca6a5213ef.zip |
Merge pull request #9 from kruton/25519-crypto
Add Ed25519 host key support
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.java | 70 |
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 |