1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2025-09-09 18:29:39 +02:00

Allow passing version number to key generator

This commit is contained in:
Paul Schaub 2025-01-29 11:13:46 +01:00
parent 69d65e763d
commit 626176cdad
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
4 changed files with 24 additions and 8 deletions

View file

@ -10,6 +10,7 @@ import org.bouncycastle.openpgp.PGPKeyRing
import org.bouncycastle.openpgp.PGPPublicKeyRing import org.bouncycastle.openpgp.PGPPublicKeyRing
import org.bouncycastle.openpgp.PGPSecretKeyRing import org.bouncycastle.openpgp.PGPSecretKeyRing
import org.bouncycastle.openpgp.PGPSignature import org.bouncycastle.openpgp.PGPSignature
import org.pgpainless.algorithm.OpenPGPKeyVersion
import org.pgpainless.decryption_verification.DecryptionBuilder import org.pgpainless.decryption_verification.DecryptionBuilder
import org.pgpainless.encryption_signing.EncryptionBuilder import org.pgpainless.encryption_signing.EncryptionBuilder
import org.pgpainless.key.certification.CertifyCertificate import org.pgpainless.key.certification.CertifyCertificate
@ -31,14 +32,20 @@ class PGPainless private constructor() {
* *
* @return templates * @return templates
*/ */
@JvmStatic fun generateKeyRing() = KeyRingTemplates() @JvmStatic
@JvmOverloads
fun generateKeyRing(version: OpenPGPKeyVersion = OpenPGPKeyVersion.v4) =
KeyRingTemplates(version)
/** /**
* Build a custom OpenPGP key ring. * Build a custom OpenPGP key ring.
* *
* @return builder * @return builder
*/ */
@JvmStatic fun buildKeyRing() = KeyRingBuilder() @JvmStatic
@JvmOverloads
fun buildKeyRing(version: OpenPGPKeyVersion = OpenPGPKeyVersion.v4) =
KeyRingBuilder(version)
/** /**
* Read an existing OpenPGP key ring. * Read an existing OpenPGP key ring.

View file

@ -0,0 +1,6 @@
package org.pgpainless.algorithm
enum class OpenPGPKeyVersion(val version: Int) {
v4(4),
v6(6),
}

View file

@ -16,6 +16,7 @@ import org.bouncycastle.openpgp.operator.PGPDigestCalculator
import org.bouncycastle.util.Strings import org.bouncycastle.util.Strings
import org.pgpainless.PGPainless import org.pgpainless.PGPainless
import org.pgpainless.algorithm.KeyFlag import org.pgpainless.algorithm.KeyFlag
import org.pgpainless.algorithm.OpenPGPKeyVersion
import org.pgpainless.algorithm.SignatureType import org.pgpainless.algorithm.SignatureType
import org.pgpainless.bouncycastle.extensions.unlock import org.pgpainless.bouncycastle.extensions.unlock
import org.pgpainless.implementation.ImplementationFactory import org.pgpainless.implementation.ImplementationFactory
@ -25,7 +26,8 @@ import org.pgpainless.signature.subpackets.SignatureSubpackets
import org.pgpainless.signature.subpackets.SignatureSubpacketsHelper import org.pgpainless.signature.subpackets.SignatureSubpacketsHelper
import org.pgpainless.util.Passphrase import org.pgpainless.util.Passphrase
class KeyRingBuilder : KeyRingBuilderInterface<KeyRingBuilder> { class KeyRingBuilder(private val version: OpenPGPKeyVersion) :
KeyRingBuilderInterface<KeyRingBuilder> {
private var primaryKeySpec: KeySpec? = null private var primaryKeySpec: KeySpec? = null
private val subKeySpecs = mutableListOf<KeySpec>() private val subKeySpecs = mutableListOf<KeySpec>()

View file

@ -7,6 +7,7 @@ package org.pgpainless.key.generation
import org.bouncycastle.openpgp.PGPSecretKeyRing import org.bouncycastle.openpgp.PGPSecretKeyRing
import org.pgpainless.PGPainless.Companion.buildKeyRing import org.pgpainless.PGPainless.Companion.buildKeyRing
import org.pgpainless.algorithm.KeyFlag import org.pgpainless.algorithm.KeyFlag
import org.pgpainless.algorithm.OpenPGPKeyVersion
import org.pgpainless.key.generation.KeySpec.Companion.getBuilder import org.pgpainless.key.generation.KeySpec.Companion.getBuilder
import org.pgpainless.key.generation.type.KeyType import org.pgpainless.key.generation.type.KeyType
import org.pgpainless.key.generation.type.eddsa_legacy.EdDSALegacyCurve import org.pgpainless.key.generation.type.eddsa_legacy.EdDSALegacyCurve
@ -14,7 +15,7 @@ import org.pgpainless.key.generation.type.rsa.RsaLength
import org.pgpainless.key.generation.type.xdh_legacy.XDHLegacySpec import org.pgpainless.key.generation.type.xdh_legacy.XDHLegacySpec
import org.pgpainless.util.Passphrase import org.pgpainless.util.Passphrase
class KeyRingTemplates { class KeyRingTemplates(private val version: OpenPGPKeyVersion) {
/** /**
* Generate an RSA OpenPGP key consisting of an RSA primary key used for certification, a * Generate an RSA OpenPGP key consisting of an RSA primary key used for certification, a
@ -31,7 +32,7 @@ class KeyRingTemplates {
length: RsaLength, length: RsaLength,
passphrase: Passphrase = Passphrase.emptyPassphrase() passphrase: Passphrase = Passphrase.emptyPassphrase()
): PGPSecretKeyRing = ): PGPSecretKeyRing =
buildKeyRing() buildKeyRing(version)
.apply { .apply {
setPrimaryKey(getBuilder(KeyType.RSA(length), KeyFlag.CERTIFY_OTHER)) setPrimaryKey(getBuilder(KeyType.RSA(length), KeyFlag.CERTIFY_OTHER))
addSubkey(getBuilder(KeyType.RSA(length), KeyFlag.SIGN_DATA)) addSubkey(getBuilder(KeyType.RSA(length), KeyFlag.SIGN_DATA))
@ -78,7 +79,7 @@ class KeyRingTemplates {
length: RsaLength, length: RsaLength,
passphrase: Passphrase = Passphrase.emptyPassphrase() passphrase: Passphrase = Passphrase.emptyPassphrase()
): PGPSecretKeyRing = ): PGPSecretKeyRing =
buildKeyRing() buildKeyRing(version)
.apply { .apply {
setPrimaryKey( setPrimaryKey(
getBuilder( getBuilder(
@ -125,7 +126,7 @@ class KeyRingTemplates {
userId: CharSequence?, userId: CharSequence?,
passphrase: Passphrase = Passphrase.emptyPassphrase() passphrase: Passphrase = Passphrase.emptyPassphrase()
): PGPSecretKeyRing = ): PGPSecretKeyRing =
buildKeyRing() buildKeyRing(version)
.apply { .apply {
setPrimaryKey( setPrimaryKey(
getBuilder( getBuilder(
@ -175,7 +176,7 @@ class KeyRingTemplates {
userId: CharSequence?, userId: CharSequence?,
passphrase: Passphrase = Passphrase.emptyPassphrase() passphrase: Passphrase = Passphrase.emptyPassphrase()
): PGPSecretKeyRing = ): PGPSecretKeyRing =
buildKeyRing() buildKeyRing(version)
.apply { .apply {
setPrimaryKey( setPrimaryKey(
getBuilder( getBuilder(