1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2025-12-10 14:21:09 +01:00

More tests

This commit is contained in:
Paul Schaub 2021-05-31 13:59:56 +02:00
parent b07cb2467b
commit 8618d1faea
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
15 changed files with 228 additions and 103 deletions

View file

@ -56,7 +56,7 @@ import org.pgpainless.implementation.ImplementationFactory;
import org.pgpainless.key.generation.type.KeyType;
import org.pgpainless.key.generation.type.eddsa.EdDSACurve;
import org.pgpainless.key.generation.type.rsa.RsaLength;
import org.pgpainless.key.generation.type.xdh.XDHCurve;
import org.pgpainless.key.generation.type.xdh.XDHSpec;
import org.pgpainless.key.protection.UnlockSecretKey;
import org.pgpainless.key.util.UserId;
import org.pgpainless.provider.ProviderFactory;
@ -201,7 +201,7 @@ public class KeyRingBuilder implements KeyRingBuilderInterface {
throws PGPException, NoSuchAlgorithmException, InvalidAlgorithmParameterException {
WithAdditionalUserIdOrPassphrase builder = this
.withSubKey(
KeySpec.getBuilder(KeyType.XDH(XDHCurve._X25519))
KeySpec.getBuilder(KeyType.XDH(XDHSpec._X25519))
.withKeyFlags(KeyFlag.ENCRYPT_STORAGE, KeyFlag.ENCRYPT_COMMS)
.withDefaultAlgorithms())
.withPrimaryKey(
@ -229,7 +229,7 @@ public class KeyRingBuilder implements KeyRingBuilderInterface {
throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, PGPException {
WithAdditionalUserIdOrPassphrase builder = this
.withSubKey(
KeySpec.getBuilder(KeyType.XDH(XDHCurve._X25519))
KeySpec.getBuilder(KeyType.XDH(XDHSpec._X25519))
.withKeyFlags(KeyFlag.ENCRYPT_STORAGE, KeyFlag.ENCRYPT_COMMS)
.withDefaultAlgorithms())
.withSubKey(

View file

@ -26,7 +26,7 @@ import org.pgpainless.key.generation.type.eddsa.EdDSACurve;
import org.pgpainless.key.generation.type.rsa.RsaLength;
import org.pgpainless.key.generation.type.rsa.RSA;
import org.pgpainless.key.generation.type.xdh.XDH;
import org.pgpainless.key.generation.type.xdh.XDHCurve;
import org.pgpainless.key.generation.type.xdh.XDHSpec;
public interface KeyType {
@ -117,7 +117,7 @@ public interface KeyType {
return EdDSA.fromCurve(curve);
}
static KeyType XDH(XDHCurve curve) {
return XDH.fromCurve(curve);
static KeyType XDH(XDHSpec curve) {
return XDH.fromSpec(curve);
}
}

View file

@ -17,11 +17,13 @@ package org.pgpainless.key.generation.type.ecc;
import javax.annotation.Nonnull;
import org.pgpainless.key.generation.type.xdh.XDHSpec;
/**
* Elliptic curves for use with
* {@link org.pgpainless.key.generation.type.ecc.ecdh.ECDH}/{@link org.pgpainless.key.generation.type.ecc.ecdsa.ECDSA}.
* For curve25519 related curve definitions see
* {@link org.pgpainless.key.generation.type.xdh.XDHCurve} and {@link org.pgpainless.key.generation.type.eddsa.EdDSACurve}.
* {@link XDHSpec} and {@link org.pgpainless.key.generation.type.eddsa.EdDSACurve}.
*/
public enum EllipticCurve {
_P256("prime256v1"), // prime256v1 is equivalent to P-256, see https://tools.ietf.org/search/rfc4492#page-32

View file

@ -23,14 +23,14 @@ import org.pgpainless.key.generation.type.KeyType;
public final class XDH implements KeyType {
private final XDHCurve curve;
private final XDHSpec spec;
private XDH(XDHCurve curve) {
this.curve = curve;
private XDH(XDHSpec spec) {
this.spec = spec;
}
public static XDH fromCurve(XDHCurve curve) {
return new XDH(curve);
public static XDH fromSpec(XDHSpec spec) {
return new XDH(spec);
}
@Override
@ -45,7 +45,7 @@ public final class XDH implements KeyType {
@Override
public AlgorithmParameterSpec getAlgorithmSpec() {
return new ECNamedCurveGenParameterSpec(curve.getName());
return new ECNamedCurveGenParameterSpec(spec.getName());
}
}

View file

@ -17,17 +17,23 @@ package org.pgpainless.key.generation.type.xdh;
import javax.annotation.Nonnull;
public enum XDHCurve {
_X25519("X25519"),
public enum XDHSpec {
_X25519("X25519", "curve25519"),
;
final String name;
final String curveName;
XDHCurve(@Nonnull String name) {
XDHSpec(@Nonnull String name, @Nonnull String curveName) {
this.name = name;
this.curveName = curveName;
}
public String getName() {
return name;
}
public String getCurveName() {
return curveName;
}
}

View file

@ -15,6 +15,7 @@
*/
package org.pgpainless.key.info;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.bcpg.ECDHPublicBCPGKey;
import org.bouncycastle.bcpg.ECDSAPublicBCPGKey;
import org.bouncycastle.bcpg.ECPublicBCPGKey;
@ -24,6 +25,7 @@ import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil;
import org.bouncycastle.openpgp.PGPPublicKey;
import org.bouncycastle.openpgp.PGPSecretKey;
import org.pgpainless.algorithm.PublicKeyAlgorithm;
import org.pgpainless.key.generation.type.eddsa.EdDSACurve;
public class KeyInfo {
@ -89,13 +91,20 @@ public class KeyInfo {
break;
}
default:
throw new IllegalArgumentException("Not a EC public key (" + algorithm + ")");
throw new IllegalArgumentException("Not an elliptic curve public key (" + algorithm + ")");
}
return getCurveName(key);
}
public static String getCurveName(ECPublicBCPGKey key) {
return ECUtil.getCurveName(key.getCurveOID());
ASN1ObjectIdentifier identifier = key.getCurveOID();
// Workaround for ECUtil not recognizing ed25519
if (identifier.getId().equals("1.3.6.1.4.1.11591.15.1")) {
return EdDSACurve._Ed25519.getName();
}
return ECUtil.getCurveName(identifier);
}
/**