mirror of
https://github.com/pgpainless/pgpainless.git
synced 2025-09-09 10:19:39 +02:00
Add new key types X25519, X448, Ed25519, Ed448
This commit is contained in:
parent
2a43d5704b
commit
c6dbc029d7
10 changed files with 76 additions and 18 deletions
|
@ -4,11 +4,14 @@
|
|||
|
||||
package org.pgpainless.key.generation.type
|
||||
|
||||
import java.security.spec.AlgorithmParameterSpec
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
import org.pgpainless.key.generation.type.ecc.Ed25519
|
||||
import org.pgpainless.key.generation.type.ecc.Ed448
|
||||
import org.pgpainless.key.generation.type.ecc.EllipticCurve
|
||||
import org.pgpainless.key.generation.type.ecc.X25519
|
||||
import org.pgpainless.key.generation.type.ecc.X448
|
||||
import org.pgpainless.key.generation.type.ecc.ecdh.ECDH
|
||||
import org.pgpainless.key.generation.type.ecc.ecdsa.ECDSA
|
||||
import org.pgpainless.key.generation.type.eddsa_legacy.EdDSALegacy
|
||||
|
@ -42,13 +45,6 @@ interface KeyType {
|
|||
*/
|
||||
val bitStrength: Int
|
||||
|
||||
/**
|
||||
* Return an implementation of [AlgorithmParameterSpec] that can be used to generate the key.
|
||||
*
|
||||
* @return algorithm parameter spec
|
||||
*/
|
||||
val algorithmSpec: AlgorithmParameterSpec
|
||||
|
||||
/**
|
||||
* Return true if the key that is generated from this type is able to carry the SIGN_DATA key
|
||||
* flag. See [org.pgpainless.algorithm.KeyFlag.SIGN_DATA].
|
||||
|
@ -107,5 +103,13 @@ interface KeyType {
|
|||
fun EDDSA_LEGACY(curve: EdDSALegacyCurve): EdDSALegacy = EdDSALegacy.fromCurve(curve)
|
||||
|
||||
@JvmStatic fun XDH_LEGACY(curve: XDHLegacySpec): XDHLegacy = XDHLegacy.fromSpec(curve)
|
||||
|
||||
@JvmStatic fun X25519(): X25519 = org.pgpainless.key.generation.type.ecc.X25519()
|
||||
|
||||
@JvmStatic fun X448(): X448 = org.pgpainless.key.generation.type.ecc.X448()
|
||||
|
||||
@JvmStatic fun Ed25519(): Ed25519 = org.pgpainless.key.generation.type.ecc.Ed25519()
|
||||
|
||||
@JvmStatic fun Ed448(): Ed448 = org.pgpainless.key.generation.type.ecc.Ed448()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package org.pgpainless.key.generation.type.ecc
|
||||
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
import org.pgpainless.key.generation.type.KeyType
|
||||
|
||||
class Ed25519 : KeyType {
|
||||
override val name: String = "Ed25519"
|
||||
override val algorithm: PublicKeyAlgorithm = PublicKeyAlgorithm.ED25519
|
||||
override val bitStrength: Int = 256
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return generator.generateEd25519KeyPair()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package org.pgpainless.key.generation.type.ecc
|
||||
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
import org.pgpainless.key.generation.type.KeyType
|
||||
|
||||
class Ed448 : KeyType {
|
||||
override val name: String = "Ed448"
|
||||
override val algorithm: PublicKeyAlgorithm = PublicKeyAlgorithm.ED448
|
||||
override val bitStrength: Int = 456
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return generator.generateEd448KeyPair()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package org.pgpainless.key.generation.type.ecc
|
||||
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
import org.pgpainless.key.generation.type.KeyType
|
||||
|
||||
class X25519 : KeyType {
|
||||
override val name: String = "X25519"
|
||||
override val algorithm: PublicKeyAlgorithm = PublicKeyAlgorithm.X25519
|
||||
override val bitStrength: Int = 256
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return generator.generateX25519KeyPair()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package org.pgpainless.key.generation.type.ecc
|
||||
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
import org.pgpainless.key.generation.type.KeyType
|
||||
|
||||
class X448 : KeyType {
|
||||
override val name: String = "X448"
|
||||
override val algorithm: PublicKeyAlgorithm = PublicKeyAlgorithm.X448
|
||||
override val bitStrength: Int = 448
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return generator.generateX448KeyPair()
|
||||
}
|
||||
}
|
|
@ -5,7 +5,6 @@
|
|||
package org.pgpainless.key.generation.type.ecc.ecdh
|
||||
|
||||
import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil
|
||||
import org.bouncycastle.jce.spec.ECNamedCurveGenParameterSpec
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
|
@ -16,7 +15,6 @@ class ECDH private constructor(val curve: EllipticCurve) : KeyType {
|
|||
override val name = "ECDH"
|
||||
override val algorithm = PublicKeyAlgorithm.ECDH
|
||||
override val bitStrength = curve.bitStrength
|
||||
override val algorithmSpec = ECNamedCurveGenParameterSpec(curve.curveName)
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return ECUtil.getNamedCurveOid(curve.curveName).let { generator.generateECDHKeyPair(it) }
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
package org.pgpainless.key.generation.type.ecc.ecdsa
|
||||
|
||||
import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil
|
||||
import org.bouncycastle.jce.spec.ECNamedCurveGenParameterSpec
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
|
@ -16,7 +15,6 @@ class ECDSA private constructor(val curve: EllipticCurve) : KeyType {
|
|||
override val name = "ECDSA"
|
||||
override val algorithm = PublicKeyAlgorithm.ECDSA
|
||||
override val bitStrength = curve.bitStrength
|
||||
override val algorithmSpec = ECNamedCurveGenParameterSpec(curve.curveName)
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return ECUtil.getNamedCurveOid(curve.curveName).let { generator.generateECDSAKeyPair(it) }
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
package org.pgpainless.key.generation.type.eddsa_legacy
|
||||
|
||||
import org.bouncycastle.jce.spec.ECNamedCurveGenParameterSpec
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
|
@ -14,7 +13,6 @@ class EdDSALegacy private constructor(val curve: EdDSALegacyCurve) : KeyType {
|
|||
override val name = "EdDSA"
|
||||
override val algorithm = PublicKeyAlgorithm.EDDSA_LEGACY
|
||||
override val bitStrength = curve.bitStrength
|
||||
override val algorithmSpec = ECNamedCurveGenParameterSpec(curve.curveName)
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return generator.generateLegacyEd25519KeyPair()
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
package org.pgpainless.key.generation.type.rsa
|
||||
|
||||
import java.security.spec.RSAKeyGenParameterSpec
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
|
@ -16,7 +15,6 @@ class RSA private constructor(length: RsaLength) : KeyType {
|
|||
override val name = "RSA"
|
||||
override val algorithm = PublicKeyAlgorithm.RSA_GENERAL
|
||||
override val bitStrength = length.length
|
||||
override val algorithmSpec = RSAKeyGenParameterSpec(length.length, RSAKeyGenParameterSpec.F4)
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return generator.generateRsaKeyPair(bitStrength)
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
package org.pgpainless.key.generation.type.xdh_legacy
|
||||
|
||||
import org.bouncycastle.jce.spec.ECNamedCurveGenParameterSpec
|
||||
import org.bouncycastle.openpgp.PGPKeyPair
|
||||
import org.bouncycastle.openpgp.operator.PGPKeyPairGenerator
|
||||
import org.pgpainless.algorithm.PublicKeyAlgorithm
|
||||
|
@ -14,7 +13,6 @@ class XDHLegacy private constructor(spec: XDHLegacySpec) : KeyType {
|
|||
override val name = "XDH"
|
||||
override val algorithm = PublicKeyAlgorithm.ECDH
|
||||
override val bitStrength = spec.bitStrength
|
||||
override val algorithmSpec = ECNamedCurveGenParameterSpec(spec.algorithmName)
|
||||
|
||||
override fun generateKeyPair(generator: PGPKeyPairGenerator): PGPKeyPair {
|
||||
return generator.generateLegacyX25519KeyPair()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue