mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-12-10 14:21:09 +01:00
More tests
This commit is contained in:
parent
b07cb2467b
commit
8618d1faea
15 changed files with 228 additions and 103 deletions
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue