add more testst for EdEC in JDK
This commit is contained in:
parent
c912fbcb92
commit
14f5bb29e8
3 changed files with 54 additions and 3 deletions
|
@ -4,7 +4,13 @@ import java.nio.charset.StandardCharsets;
|
||||||
import java.security.KeyPair;
|
import java.security.KeyPair;
|
||||||
import java.security.KeyPairGenerator;
|
import java.security.KeyPairGenerator;
|
||||||
import java.security.Signature;
|
import java.security.Signature;
|
||||||
|
import java.security.interfaces.EdECPublicKey;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.xbib.net.security.eddsa.EdDSAPublicKey;
|
||||||
|
import org.xbib.net.security.eddsa.Utils;
|
||||||
|
import org.xbib.net.security.util.HexUtil;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
public class Ed25519KeyTest {
|
public class Ed25519KeyTest {
|
||||||
|
@ -21,4 +27,36 @@ public class Ed25519KeyTest {
|
||||||
sig.update("Hello Jörg".getBytes(StandardCharsets.UTF_8));
|
sig.update("Hello Jörg".getBytes(StandardCharsets.UTF_8));
|
||||||
assertTrue(sig.verify(s));
|
assertTrue(sig.verify(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPublicKeyPayload() throws Exception {
|
||||||
|
String TEST_KEY = "302a300506032b65700321007d3691f280f8c8e7be7380e12bf6004a380c13d8fc1d7fed14aef4f301e4ca36";
|
||||||
|
X509EncodedKeySpec encoded = new X509EncodedKeySpec(Utils.hexToBytes(TEST_KEY));
|
||||||
|
EdDSAPublicKey key = new EdDSAPublicKey(encoded);
|
||||||
|
assertEquals("7d3691f280f8c8e7be7380e12bf6004a380c13d8fc1d7fed14aef4f301e4ca36", HexUtil.toHex(key.getAbyte()));
|
||||||
|
java.security.KeyFactory keyFactory = java.security.KeyFactory.getInstance("EdDSA");
|
||||||
|
EdECPublicKey edECPublicKey = (EdECPublicKey) keyFactory.generatePublic(encoded);
|
||||||
|
byte[] b = edECPublicKey.getPoint().getY().toByteArray();
|
||||||
|
reverse(b);
|
||||||
|
if (edECPublicKey.getPoint().isXOdd()) {
|
||||||
|
b[b.length - 1] |= (byte) 0x80;
|
||||||
|
}
|
||||||
|
assertEquals("7d3691f280f8c8e7be7380e12bf6004a380c13d8fc1d7fed14aef4f301e4ca36", HexUtil.toHex(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void reverse(byte [] arr) {
|
||||||
|
int i = 0;
|
||||||
|
int j = arr.length - 1;
|
||||||
|
while (i < j) {
|
||||||
|
swap(arr, i, j);
|
||||||
|
i++;
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void swap(byte[] arr, int i, int j) {
|
||||||
|
byte tmp = arr[i];
|
||||||
|
arr[i] = arr[j];
|
||||||
|
arr[j] = tmp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ public class PrivateKeyReaderTest {
|
||||||
assertNotNull(publicKey);
|
assertNotNull(publicKey);
|
||||||
assertEquals("DSA", publicKey.getAlgorithm());
|
assertEquals("DSA", publicKey.getAlgorithm());
|
||||||
match("SHA1withDSA", privateKey, publicKey);
|
match("SHA1withDSA", privateKey, publicKey);
|
||||||
|
inputStream.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +49,7 @@ public class PrivateKeyReaderTest {
|
||||||
assertNotNull(publicKey);
|
assertNotNull(publicKey);
|
||||||
assertEquals("RSA", publicKey.getAlgorithm());
|
assertEquals("RSA", publicKey.getAlgorithm());
|
||||||
match("SHA256withRSA", privateKey, publicKey);
|
match("SHA256withRSA", privateKey, publicKey);
|
||||||
|
inputStream.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,6 +66,7 @@ public class PrivateKeyReaderTest {
|
||||||
assertNotNull(publicKey);
|
assertNotNull(publicKey);
|
||||||
assertEquals("EC", publicKey.getAlgorithm());
|
assertEquals("EC", publicKey.getAlgorithm());
|
||||||
match("SHA256withECDSA", privateKey, publicKey);
|
match("SHA256withECDSA", privateKey, publicKey);
|
||||||
|
inputStream.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,6 +83,7 @@ public class PrivateKeyReaderTest {
|
||||||
assertNotNull(publicKey);
|
assertNotNull(publicKey);
|
||||||
assertEquals("EdDSA", publicKey.getAlgorithm());
|
assertEquals("EdDSA", publicKey.getAlgorithm());
|
||||||
match("EdDSA", privateKey, publicKey);
|
match("EdDSA", privateKey, publicKey);
|
||||||
|
inputStream.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,16 +3,17 @@ package org.xbib.net.security.test.eddsa;
|
||||||
import static org.hamcrest.MatcherAssert.assertThat;
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.*;
|
||||||
|
|
||||||
|
import java.security.spec.InvalidKeySpecException;
|
||||||
import java.security.spec.X509EncodedKeySpec;
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.xbib.net.security.eddsa.EdDSAPublicKey;
|
import org.xbib.net.security.eddsa.EdDSAPublicKey;
|
||||||
import org.xbib.net.security.eddsa.Utils;
|
import org.xbib.net.security.eddsa.Utils;
|
||||||
import org.xbib.net.security.eddsa.spec.EdDSAPublicKeySpec;
|
import org.xbib.net.security.eddsa.spec.EdDSAPublicKeySpec;
|
||||||
|
import org.xbib.net.security.util.HexUtil;
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class EdDSAPublicKeyTest {
|
public class EdDSAPublicKeyTest {
|
||||||
/**
|
/**
|
||||||
* The example public key MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=
|
* The example public key MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=
|
||||||
|
@ -70,4 +71,12 @@ public class EdDSAPublicKeyTest {
|
||||||
// Check
|
// Check
|
||||||
assertThat(keyOut.getEncoded(), is(equalTo(TEST_PUBKEY)));
|
assertThat(keyOut.getEncoded(), is(equalTo(TEST_PUBKEY)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPublicKeyPayload() throws InvalidKeySpecException {
|
||||||
|
String TEST_KEY = "302a300506032b65700321007d3691f280f8c8e7be7380e12bf6004a380c13d8fc1d7fed14aef4f301e4ca36";
|
||||||
|
X509EncodedKeySpec encoded = new X509EncodedKeySpec(Utils.hexToBytes(TEST_KEY));
|
||||||
|
EdDSAPublicKey key = new EdDSAPublicKey(encoded);
|
||||||
|
Logger.getAnonymousLogger().log(Level.INFO, "a = " + HexUtil.toHex(key.getAbyte()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue