aboutsummaryrefslogtreecommitdiff
path: root/standalone
diff options
context:
space:
mode:
Diffstat (limited to 'standalone')
-rw-r--r--standalone/build.gradle.kts2
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java91
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java12
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java9
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/consts/SignatureIdent.java12
5 files changed, 81 insertions, 45 deletions
diff --git a/standalone/build.gradle.kts b/standalone/build.gradle.kts
index f8d7f9b..5ad3fb4 100644
--- a/standalone/build.gradle.kts
+++ b/standalone/build.gradle.kts
@@ -25,7 +25,7 @@ dependencies {
}
java {
- sourceCompatibility = JavaVersion.VERSION_11
+ sourceCompatibility = JavaVersion.VERSION_15
}
application {
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
index c702dee..ab7e45b 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
@@ -37,9 +37,6 @@ import cz.crcs.ectester.standalone.consts.KeyPairGeneratorIdent;
import cz.crcs.ectester.standalone.consts.SignatureIdent;
import cz.crcs.ectester.standalone.libs.*;
import cz.crcs.ectester.standalone.output.FileTestWriter;
-import cz.crcs.ectester.standalone.output.TextTestWriter;
-import cz.crcs.ectester.standalone.output.XMLTestWriter;
-import cz.crcs.ectester.standalone.output.YAMLTestWriter;
import cz.crcs.ectester.standalone.test.suites.*;
import org.apache.commons.cli.*;
@@ -55,8 +52,7 @@ import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.*;
-import java.security.interfaces.ECPrivateKey;
-import java.security.interfaces.ECPublicKey;
+import java.security.interfaces.*;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECParameterSpec;
@@ -306,19 +302,19 @@ public class ECTesterStandalone {
System.out.println(Colors.bold("\t\t- Supports native timing: ") + lib.getNativeTimingSupport().toString());
Set<KeyPairGeneratorIdent> kpgs = lib.getKPGs();
if (!kpgs.isEmpty()) {
- System.out.println(Colors.bold("\t\t- KeyPairGenerators: ") + kpgs.stream().map(KeyPairGeneratorIdent::getName).collect(Collectors.joining(", ")));
+ System.out.println(Colors.bold("\t\t- KeyPairGenerators: ") + kpgs.stream().map(KeyPairGeneratorIdent::getName).sorted().collect(Collectors.joining(", ")));
}
Set<KeyAgreementIdent> eckas = lib.getKAs();
if (!eckas.isEmpty()) {
- System.out.println(Colors.bold("\t\t- KeyAgreements: ") + eckas.stream().map(KeyAgreementIdent::getName).collect(Collectors.joining(", ")));
+ System.out.println(Colors.bold("\t\t- KeyAgreements: ") + eckas.stream().map(KeyAgreementIdent::getName).sorted().collect(Collectors.joining(", ")));
}
Set<SignatureIdent> sigs = lib.getSigs();
if (!sigs.isEmpty()) {
- System.out.println(Colors.bold("\t\t- Signatures: ") + sigs.stream().map(SignatureIdent::getName).collect(Collectors.joining(", ")));
+ System.out.println(Colors.bold("\t\t- Signatures: ") + sigs.stream().map(SignatureIdent::getName).sorted().collect(Collectors.joining(", ")));
}
Set<String> curves = lib.getCurves();
if (!curves.isEmpty()) {
- System.out.println(Colors.bold("\t\t- Curves: ") + String.join(", ", curves));
+ System.out.println(Colors.bold("\t\t- Curves: ") + curves.stream().sorted().collect(Collectors.joining(", ")));
}
System.out.println();
}
@@ -458,8 +454,8 @@ public class ECTesterStandalone {
other = kpg.genKeyPair();
}
- ECPrivateKey privkey = (ECPrivateKey) ECUtil.loadKey(EC_Consts.PARAMETER_S, cli.getOptionValue("ecdh.named-private"), cli.getOptionValue("ecdh.private"), spec);
- ECPublicKey pubkey = (ECPublicKey) ECUtil.loadKey(EC_Consts.PARAMETER_W, cli.getOptionValue("ecdh.named-public"), cli.getOptionValue("ecdh.public"), spec);
+ PrivateKey privkey = (ECPrivateKey) ECUtil.loadKey(EC_Consts.PARAMETER_S, cli.getOptionValue("ecdh.named-private"), cli.getOptionValue("ecdh.private"), spec);
+ PublicKey pubkey = (ECPublicKey) ECUtil.loadKey(EC_Consts.PARAMETER_W, cli.getOptionValue("ecdh.named-public"), cli.getOptionValue("ecdh.public"), spec);
int amount = Integer.parseInt(cli.getOptionValue("ecdh.amount", "1"));
for (int i = 0; i < amount || amount == 0; ++i) {
@@ -471,11 +467,11 @@ public class ECTesterStandalone {
}
if (!cli.hasOption("ecdh.named-private") && !cli.hasOption("ecdh.private")) {
- privkey = (ECPrivateKey) one.getPrivate();
+ privkey = one.getPrivate();
}
if (!cli.hasOption("ecdh.named-public") && !cli.hasOption("ecdh.public")) {
- pubkey = (ECPublicKey) other.getPublic();
+ pubkey = other.getPublic();
}
long elapsed = -System.nanoTime();
@@ -501,8 +497,8 @@ public class ECTesterStandalone {
}
ka = kaIdent.getInstance(lib.getProvider());
- String pub = ByteUtil.bytesToHex(ECUtil.toX962Uncompressed(pubkey.getW(), pubkey.getParams()), false);
- String priv = ByteUtil.bytesToHex(privkey.getS().toByteArray(), false);
+ String pub = ByteUtil.bytesToHex(ECUtil.pubkeyToBytes(pubkey), false);
+ String priv = ByteUtil.bytesToHex(ECUtil.privkeyToBytes(privkey), false);
String dh = ByteUtil.bytesToHex(result, false);
out.printf("%d;%d;%s;%s;%s%n", i, elapsed, pub, priv, dh);
}
@@ -605,17 +601,17 @@ public class ECTesterStandalone {
String hashAlgoOut = sigIdent.getHashAlgo() != null ? String.format("[%s]", sigIdent.getHashAlgo()) : "";
out.printf("index;signTime[%s];verifyTime[%s];data;pubW;privS;signature%s;nonce;verified%n", timeUnit, timeUnit, hashAlgoOut);
- ECPrivateKey privkey = (ECPrivateKey) ECUtil.loadKey(EC_Consts.PARAMETER_S, cli.getOptionValue("ecdsa.named-private"), cli.getOptionValue("ecdsa.private"), spec);
- ECPublicKey pubkey = (ECPublicKey) ECUtil.loadKey(EC_Consts.PARAMETER_W, cli.getOptionValue("ecdsa.named-public"), cli.getOptionValue("ecdsa.public"), spec);
+ PrivateKey privkey = (ECPrivateKey) ECUtil.loadKey(EC_Consts.PARAMETER_S, cli.getOptionValue("ecdsa.named-private"), cli.getOptionValue("ecdsa.private"), spec);
+ PublicKey pubkey = (ECPublicKey) ECUtil.loadKey(EC_Consts.PARAMETER_W, cli.getOptionValue("ecdsa.named-public"), cli.getOptionValue("ecdsa.public"), spec);
KeyPair one;
if (cli.hasOption("ecdsa.fixed")) {
one = kpg.genKeyPair();
if (!cli.hasOption("ecdsa.named-private")) {
- privkey = (ECPrivateKey) one.getPrivate();
+ privkey = one.getPrivate();
}
if (!cli.hasOption("ecdsa.named-public")) {
- pubkey = (ECPublicKey) one.getPublic();
+ pubkey = one.getPublic();
}
}
@@ -626,10 +622,10 @@ public class ECTesterStandalone {
one = kpg.genKeyPair();
if (!cli.hasOption("ecdsa.named-private")) {
- privkey = (ECPrivateKey) one.getPrivate();
+ privkey = one.getPrivate();
}
if (!cli.hasOption("ecdsa.named-public")) {
- pubkey = (ECPublicKey) one.getPublic();
+ pubkey = one.getPublic();
}
}
@@ -653,27 +649,31 @@ public class ECTesterStandalone {
verifyTime = lib.getLastNativeTiming();
}
- String pub = ByteUtil.bytesToHex(ECUtil.toX962Uncompressed(pubkey.getW(), pubkey.getParams()), false);
- String priv = ByteUtil.bytesToHex(privkey.getS().toByteArray(), false);
+ String pub = ByteUtil.bytesToHex(ECUtil.pubkeyToBytes(pubkey), false);
+ String priv = ByteUtil.bytesToHex(ECUtil.privkeyToBytes(privkey), false);
String sign = ByteUtil.bytesToHex(signature, false);
String k = "";
- ECParameterSpec kSpec = spec;
- if (kSpec == null) {
- kSpec = privkey.getParams();
- }
- if (kSpec != null) {
- // Parse the types out of SignatureIdent.
- String hashAlgo = sigIdent.getHashAlgo();
- String sigType = sigIdent.getSigType();
- if (sigType == null) {
- sigType = sigIdent.toString();
+ if (privkey instanceof ECPrivateKey) {
+ ECPrivateKey ecPrivateKey = (ECPrivateKey) privkey;
+ ECParameterSpec kSpec = spec;
+ if (kSpec == null) {
+ kSpec = ecPrivateKey.getParams();
}
+ if (kSpec != null) {
+ // Parse the types out of SignatureIdent.
+ String hashAlgo = sigIdent.getHashAlgo();
+ String sigType = sigIdent.getSigType();
+ if (sigType == null) {
+ sigType = sigIdent.toString();
+ }
- BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, privkey.getS(), kSpec, hashAlgo, sigType);
- if (kValue != null) {
- k = ByteUtil.bytesToHex(kValue.toByteArray(), false);
+ BigInteger kValue = ECUtil.recoverSignatureNonce(signature, data, ecPrivateKey.getS(), kSpec, hashAlgo, sigType);
+ if (kValue != null) {
+ k = ByteUtil.bytesToHex(kValue.toByteArray(), false);
+ }
}
}
+
out.printf("%d;%d;%d;%s;%s;%s;%s;%s;%d%n", i, signTime, verifyTime, dataString, pub, priv, sign, k, verified ? 1 : 0);
}
@@ -744,11 +744,17 @@ public class ECTesterStandalone {
if (!lib.getNativeTimingSupport().isEmpty()) {
elapsed = lib.getLastNativeTiming();
}
- ECPublicKey publicKey = (ECPublicKey) kp.getPublic();
- ECPrivateKey privateKey = (ECPrivateKey) kp.getPrivate();
-
- String pub = ByteUtil.bytesToHex(ECUtil.toX962Uncompressed(publicKey.getW(), publicKey.getParams()), false);
- String priv = ByteUtil.bytesToHex(privateKey.getS().toByteArray(), false);
+ PublicKey pubkey = kp.getPublic();
+ PrivateKey privkey = kp.getPrivate();
+ byte[] pubBytes = ECUtil.pubkeyToBytes(pubkey);
+ byte[] privBytes = ECUtil.privkeyToBytes(privkey);
+ String pub = ByteUtil.bytesToHex(pubBytes, false);
+ String priv = ByteUtil.bytesToHex(privBytes, false);
+ if (pubBytes == null || privBytes == null) {
+ System.err.println(pubkey.getClass().getCanonicalName());
+ System.err.println(privkey.getClass().getCanonicalName());
+ break;
+ }
out.printf("%d;%d;%s;%s%n", i, elapsed, pub, priv);
}
@@ -763,7 +769,6 @@ public class ECTesterStandalone {
private void test() throws TestException, ParserConfigurationException, FileNotFoundException {
TestWriter writer = new FileTestWriter(cli.getOptionValue("test.format", "text"), !cli.hasOption("test.quiet"), cli.getOptionValues("test.output"));
StandaloneTestSuite suite;
-
switch (cli.getArg(0).toLowerCase()) {
case "test-vectors":
suite = new StandaloneTestVectorSuite(writer, cfg, cli);
@@ -798,9 +803,9 @@ public class ECTesterStandalone {
case "performance":
suite = new StandalonePerformanceSuite(writer, cfg, cli);
break;
- case "default":
default:
suite = new StandaloneDefaultSuite(writer, cfg, cli);
+ break;
}
suite.run();
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java b/standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java
index 60c60e8..c0cf793 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyAgreementIdent.java
@@ -18,10 +18,11 @@ public class KeyAgreementIdent extends Ident {
private static final List<KeyAgreementIdent> ALL = new LinkedList<>();
static {
- //https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html
+ // https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html
// Basic ECDH and ECDHC (plain/raw)
ALL.add(new KeyAgreementIdent("ECDH"));
ALL.add(new KeyAgreementIdent("ECDHC", "ECCDH"));
+
// ECDH and ECDHC with SHA as KDF, OIDs from RFC 3278
ALL.add(new KeyAgreementIdent("ECDHwithSHA1KDF", true, "1.3.133.16.840.63.0.2"));
ALL.add(new KeyAgreementIdent("ECCDHwithSHA1KDF", true, "1.3.133.16.840.63.0.3"));
@@ -33,11 +34,13 @@ public class KeyAgreementIdent extends Ident {
ALL.add(new KeyAgreementIdent("ECCDHwithSHA384KDF", true, "1.3.132.1.14.2"));
ALL.add(new KeyAgreementIdent("ECDHwithSHA512KDF", true, "1.3.132.1.11.3"));
ALL.add(new KeyAgreementIdent("ECCDHwithSHA512KDF", true, "1.3.132.1.14.3"));
+
// Microsoft specific KDF
ALL.add(new KeyAgreementIdent("ECDHwithSHA1KDF(CNG)"));
ALL.add(new KeyAgreementIdent("ECDHwithSHA256KDF(CNG)"));
ALL.add(new KeyAgreementIdent("ECDHwithSHA384KDF(CNG)"));
ALL.add(new KeyAgreementIdent("ECDHwithSHA512KDF(CNG)"));
+
// CKDF requires custom AlgorithmParameterSpec (only BouncyCastle)
//ALL.add(new KeyAgreementIdent("ECDHwithSHA1CKDF", true));
//ALL.add(new KeyAgreementIdent("ECCDHwithSHA1CKDF", true));
@@ -47,6 +50,7 @@ public class KeyAgreementIdent extends Ident {
//ALL.add(new KeyAgreementIdent("ECCDHwithSHA384CKDF", true));
//ALL.add(new KeyAgreementIdent("ECDHwithSHA512CKDF", true));
//ALL.add(new KeyAgreementIdent("ECCDHwithSHA512CKDF", true));
+
// ECMQV - Disable for now as it needs diferent params(too different from DH)
//ALL.add(new KeyAgreementIdent("ECMQV"));
//ALL.add(new KeyAgreementIdent("ECMQVwithSHA1KDF", true));
@@ -59,10 +63,16 @@ public class KeyAgreementIdent extends Ident {
//ALL.add(new KeyAgreementIdent("ECMQVwithSHA256CKDF", true, "1.3.132.1.15.1"));
//ALL.add(new KeyAgreementIdent("ECMQVwithSHA384CKDF", true, "1.3.132.1.15.2"));
//ALL.add(new KeyAgreementIdent("ECMQVwithSHA512CKDF", true, "1.3.132.1.15.3"));
+
// ECVKO - Disable for now as it needs diferent params(too different from DH)
//ALL.add(new KeyAgreementIdent("ECVKO", "ECGOST3410", "1.2.643.2.2.19", "GOST-3410-2001", "1.2.643.2.2.96"));
//ALL.add(new KeyAgreementIdent("ECVKO256", "ECGOST3410-2012-256", "1.2.643.7.1.1.6.1", "1.2.643.7.1.1.1.1"));
//ALL.add(new KeyAgreementIdent("ECVKO512", "ECGOST3410-2012-512", "1.2.643.7.1.1.6.2", "1.2.643.7.1.1.1.2"));
+
+ // XDH (RFC 7748)
+ ALL.add(new KeyAgreementIdent("XDH"));
+ ALL.add(new KeyAgreementIdent("X25519"));
+ ALL.add(new KeyAgreementIdent("X448"));
}
public static KeyAgreementIdent get(String ident) {
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java b/standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java
index 83eef75..49b982b 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/consts/KeyPairGeneratorIdent.java
@@ -11,6 +11,7 @@ public class KeyPairGeneratorIdent extends Ident {
private static final List<KeyPairGeneratorIdent> ALL = new LinkedList<>();
static {
+ // Short-Weierstrass
ALL.add(new KeyPairGeneratorIdent("EC"));
ALL.add(new KeyPairGeneratorIdent("ECDH"));
ALL.add(new KeyPairGeneratorIdent("ECDSA"));
@@ -22,6 +23,14 @@ public class KeyPairGeneratorIdent extends Ident {
ALL.add(new KeyPairGeneratorIdent("ECKCDSA"));
// ECGDSA? Botan provides.
ALL.add(new KeyPairGeneratorIdent("ECGDSA"));
+ // Montgomery
+ ALL.add(new KeyPairGeneratorIdent("XDH"));
+ ALL.add(new KeyPairGeneratorIdent("X25519"));
+ ALL.add(new KeyPairGeneratorIdent("X448"));
+ // Twisted-Edwards
+ ALL.add(new KeyPairGeneratorIdent("EdDSA"));
+ ALL.add(new KeyPairGeneratorIdent("Ed25519"));
+ ALL.add(new KeyPairGeneratorIdent("Ed448"));
}
public static KeyPairGeneratorIdent get(String ident) {
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/consts/SignatureIdent.java b/standalone/src/main/java/cz/crcs/ectester/standalone/consts/SignatureIdent.java
index c3913b7..a65d0c5 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/consts/SignatureIdent.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/consts/SignatureIdent.java
@@ -30,17 +30,20 @@ public class SignatureIdent extends Ident {
ALL.add(new SignatureIdent("SHA3-384withECDSA", "SHA3-384/ECDSA", "2.16.840.1.101.3.4.3.11"));
ALL.add(new SignatureIdent("SHA3-512withECDSA", "SHA3-512/ECDSA", "2.16.840.1.101.3.4.3.12"));
ALL.add(new SignatureIdent("RIPEMD160withECDSA", "RIPEMD160/ECDSA", "1.3.36.3.3.2.2"));
+
// ECNR
ALL.add(new SignatureIdent("SHA1withECNR"));
ALL.add(new SignatureIdent("SHA224withECNR"));
ALL.add(new SignatureIdent("SHA256withECNR"));
ALL.add(new SignatureIdent("SHA512withECNR"));
+
// CVC-ECDSA
ALL.add(new SignatureIdent("SHA1withCVC-ECDSA", "SHA1/CVC-ECDSA", "0.4.0.127.0.7.2.2.2.2.1"));
ALL.add(new SignatureIdent("SHA224withCVC-ECDSA", "SHA224/CVC-ECDSA", "0.4.0.127.0.7.2.2.2.2.2"));
ALL.add(new SignatureIdent("SHA256withCVC-ECDSA", "SHA256/CVC-ECDSA", "0.4.0.127.0.7.2.2.2.2.3"));
ALL.add(new SignatureIdent("SHA384withCVC-ECDSA", "SHA384/CVC-ECDSA", "0.4.0.127.0.7.2.2.2.2.4"));
ALL.add(new SignatureIdent("SHA512withCVC-ECDSA", "SHA512/CVC-ECDSA", "0.4.0.127.0.7.2.2.2.2.5"));
+
// PLAIN-ECDSA
ALL.add(new SignatureIdent("SHA1withPLAIN-ECDSA", "SHA1/PLAIN-ECDSA", "0.4.0.127.0.7.1.1.4.1.1"));
ALL.add(new SignatureIdent("SHA224withPLAIN-ECDSA", "SHA224/PLAIN-ECDSA", "0.4.0.127.0.7.1.1.4.1.2"));
@@ -48,6 +51,7 @@ public class SignatureIdent extends Ident {
ALL.add(new SignatureIdent("SHA384withPLAIN-ECDSA", "SHA384/PLAIN-ECDSA", "0.4.0.127.0.7.1.1.4.1.4"));
ALL.add(new SignatureIdent("SHA512withPLAIN-ECDSA", "SHA512/PLAIN-ECDSA", "0.4.0.127.0.7.1.1.4.1.5"));
ALL.add(new SignatureIdent("RIPEMD160withPLAIN-ECDSA", "RIPEMD160/PLAIN-ECDSA", "0.4.0.127.0.7.1.1.4.1.6"));
+
// ECGOST
ALL.add(new SignatureIdent("ECGOST3410", "ECGOST-3410", "GOST-3410-2001"));
ALL.add(new SignatureIdent("GOST3411withECGOST3410", "GOST3411/ECGOST3410", "1.2.643.2.2.3"));
@@ -56,6 +60,7 @@ public class SignatureIdent extends Ident {
ALL.add(new SignatureIdent("ECGOST3410-2012-512", "GOST-3410-2012-512"));
ALL.add(new SignatureIdent("GOST3411-2012-512withECGOST3410-2012-512", "GOST3411-2012-512/ECGOST3410-2012-5120", "1.2.643.7.1.1.3.3"));
ALL.add(new SignatureIdent("SM3withSM2"));
+
// ECDDSA (rfc6979?)
ALL.add(new SignatureIdent("ECDDSA", "SHA1withECDDSA", "SHA1withDETECDSA", "DETECDSA", "ECDETDSA"));
ALL.add(new SignatureIdent("SHA224withECDDSA", "SHA224withDETECDSA"));
@@ -66,6 +71,7 @@ public class SignatureIdent extends Ident {
ALL.add(new SignatureIdent("SHA3-256withECDDSA", "SHA3-256withDETECDSA"));
ALL.add(new SignatureIdent("SHA3-384withECDDSA", "SHA3-384withDETECDSA"));
ALL.add(new SignatureIdent("SHA3-512withECDDSA", "SHA3-512withDETECDSA"));
+
// ECKCDSA? Botan provides.
ALL.add(new SignatureIdent("ECKCDSA", "SHA1withECKCDSA", "1.2.410.200004.1.100.4.3"));
ALL.add(new SignatureIdent("NONEwithECKCDSA"));
@@ -74,6 +80,7 @@ public class SignatureIdent extends Ident {
ALL.add(new SignatureIdent("SHA256withECKCDSA", "1.2.410.200004.1.100.4.5"));
ALL.add(new SignatureIdent("SHA384withECKCDSA"));
ALL.add(new SignatureIdent("SHA512withECKCDSA"));
+
// ECGDSA? Botan provides.
ALL.add(new SignatureIdent("ECGDSA", "SHA1withECGDSA", "1.3.36.3.3.2.5.4.2"));
ALL.add(new SignatureIdent("NONEwithECGDSA"));
@@ -82,6 +89,11 @@ public class SignatureIdent extends Ident {
ALL.add(new SignatureIdent("SHA224withECGDSA", "1.3.36.3.3.2.5.4.4"));
ALL.add(new SignatureIdent("SHA384withECGDSA", "1.3.36.3.3.2.5.4.5"));
ALL.add(new SignatureIdent("SHA512withECGDSA", "1.3.36.3.3.2.5.4.6"));
+
+ // EdDSA (RFC 8032)
+ ALL.add(new SignatureIdent("EdDSA"));
+ ALL.add(new SignatureIdent("Ed25519"));
+ ALL.add(new SignatureIdent("Ed448"));
}
public static SignatureIdent get(String ident) {