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

Pass version down in tests

This commit is contained in:
Paul Schaub 2025-01-29 11:27:02 +01:00
parent 5095e421c1
commit 5102c08e13
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
5 changed files with 33 additions and 18 deletions

View file

@ -1,6 +1,21 @@
// SPDX-FileCopyrightText: 2025 Paul Schaub <vanitasvitae@fsfe.org>
//
// SPDX-License-Identifier: Apache-2.0
package org.pgpainless.algorithm
enum class OpenPGPKeyVersion(val version: Int) {
enum class OpenPGPKeyVersion(val numeric: Int) {
@Deprecated("V3 keys are deprecated.") v3(3),
v4(4),
librePgp(5),
v6(6),
;
companion object {
@JvmStatic
fun from(numeric: Int): OpenPGPKeyVersion {
return values().find { numeric == it.numeric }
?: throw IllegalArgumentException("Unknown key version $numeric")
}
}
}

View file

@ -6,7 +6,6 @@ package org.pgpainless.key.generation
import java.io.IOException
import java.util.*
import org.bouncycastle.bcpg.PublicKeyPacket
import org.bouncycastle.openpgp.*
import org.bouncycastle.openpgp.api.OpenPGPImplementation
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor
@ -90,7 +89,7 @@ class KeyRingBuilder(private val version: OpenPGPKeyVersion) :
// generate primary key
requireNotNull(primaryKeySpec) { "Primary Key spec required." }
val certKey = generateKeyPair(primaryKeySpec!!)
val certKey = generateKeyPair(primaryKeySpec!!, version)
val signer = buildContentSigner(certKey)
val signatureGenerator = PGPSignatureGenerator(signer)
@ -174,7 +173,7 @@ class KeyRingBuilder(private val version: OpenPGPKeyVersion) :
private fun addSubKeys(primaryKey: PGPKeyPair, ringGenerator: PGPKeyRingGenerator) {
for (subKeySpec in subKeySpecs) {
val subKey = generateKeyPair(subKeySpec)
val subKey = generateKeyPair(subKeySpec, version)
if (subKeySpec.isInheritedSubPackets) {
ringGenerator.addSubKey(subKey)
} else {
@ -248,12 +247,13 @@ class KeyRingBuilder(private val version: OpenPGPKeyVersion) :
@JvmOverloads
fun generateKeyPair(
spec: KeySpec,
version: OpenPGPKeyVersion,
creationTime: Date = spec.keyCreationDate ?: Date()
): PGPKeyPair {
val gen =
OpenPGPImplementation.getInstance()
.pgpKeyPairGeneratorProvider()
.get(PublicKeyPacket.VERSION_4, creationTime)
.get(version.numeric, creationTime)
return spec.keyType.generateKeyPair(gen)
}

View file

@ -16,6 +16,7 @@ import org.pgpainless.PGPainless.Companion.inspectKeyRing
import org.pgpainless.algorithm.AlgorithmSuite
import org.pgpainless.algorithm.Feature
import org.pgpainless.algorithm.KeyFlag
import org.pgpainless.algorithm.OpenPGPKeyVersion
import org.pgpainless.algorithm.SignatureType
import org.pgpainless.algorithm.negotiation.HashAlgorithmNegotiator
import org.pgpainless.bouncycastle.extensions.getKeyExpirationDate
@ -244,7 +245,8 @@ class SecretKeyRingEditor(
callback: SelfSignatureSubpackets.Callback?,
protector: SecretKeyRingProtector
): SecretKeyRingEditorInterface {
val keyPair = KeyRingBuilder.generateKeyPair(keySpec, referenceTime)
val version = OpenPGPKeyVersion.from(secretKeyRing.getPublicKey().version)
val keyPair = KeyRingBuilder.generateKeyPair(keySpec, OpenPGPKeyVersion.v4, referenceTime)
val subkeyProtector =
PasswordBasedSecretKeyRingProtector.forKeyId(keyPair.keyID, subkeyPassphrase)
val keyFlags = KeyFlag.fromBitmask(keySpec.subpackets.keyFlags).toMutableList()