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

Fix: Do not set IssuerKeyId on v6 key-signatures

This commit is contained in:
Paul Schaub 2025-03-05 10:57:06 +01:00
parent 3a71ff0135
commit 2be4c28a52
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
3 changed files with 28 additions and 3 deletions

View file

@ -97,7 +97,7 @@ class KeyRingBuilder(
val signatureGenerator = PGPSignatureGenerator(signer, certKey.publicKey)
val hashedSubPacketGenerator = primaryKeySpec!!.subpacketGenerator
hashedSubPacketGenerator.setIssuerFingerprintAndKeyId(certKey.publicKey)
hashedSubPacketGenerator.setAppropriateIssuerInfo(certKey.publicKey, version)
expirationDate?.let { hashedSubPacketGenerator.setKeyExpirationTime(certKey.publicKey, it) }
if (userIds.isNotEmpty()) {
hashedSubPacketGenerator.setPrimaryUserId()

View file

@ -11,12 +11,25 @@ import org.bouncycastle.bcpg.sig.*
import org.bouncycastle.openpgp.PGPPublicKey
import org.bouncycastle.openpgp.PGPSignature
import org.pgpainless.algorithm.HashAlgorithm
import org.pgpainless.algorithm.OpenPGPKeyVersion
import org.pgpainless.algorithm.PublicKeyAlgorithm
interface BaseSignatureSubpackets {
interface Callback : SignatureSubpacketCallback<BaseSignatureSubpackets>
fun setAppropriateIssuerInfo(key: PGPPublicKey): BaseSignatureSubpackets
/**
* Depending on the given [version], use the appropriate means of setting issuer information.
* V6 signatures for example MUST NOT contain an [IssuerKeyID] packet.
*
* @param key issuer key
* @param version signature version
* @return this
*/
fun setAppropriateIssuerInfo(key: PGPPublicKey, version: OpenPGPKeyVersion): BaseSignatureSubpackets
/**
* Add both an [IssuerKeyID] and [IssuerFingerprint] subpacket pointing to the given key.
*

View file

@ -72,7 +72,7 @@ class SignatureSubpackets :
issuer: PGPPublicKey,
base: PGPSignatureSubpacketVector
): SignatureSubpackets {
return createSubpacketsFrom(base).apply { setIssuerFingerprintAndKeyId(issuer) }
return createSubpacketsFrom(base).apply { setAppropriateIssuerInfo(issuer) }
}
@JvmStatic
@ -82,7 +82,7 @@ class SignatureSubpackets :
@JvmStatic
fun createHashedSubpackets(issuer: PGPPublicKey): SignatureSubpackets {
return createEmptySubpackets().setIssuerFingerprintAndKeyId(issuer)
return createEmptySubpackets().setAppropriateIssuerInfo(issuer)
}
@JvmStatic
@ -352,6 +352,18 @@ class SignatureSubpackets :
this.featuresSubpacket = features
}
override fun setAppropriateIssuerInfo(key: PGPPublicKey) = apply {
setAppropriateIssuerInfo(key, OpenPGPKeyVersion.from(key.version))
}
override fun setAppropriateIssuerInfo(key: PGPPublicKey, version: OpenPGPKeyVersion) = apply {
when (version) {
OpenPGPKeyVersion.v3 -> setIssuerKeyId(key.keyID)
OpenPGPKeyVersion.v4 -> setIssuerFingerprintAndKeyId(key)
OpenPGPKeyVersion.librePgp, OpenPGPKeyVersion.v6 -> setIssuerFingerprint(key)
}
}
override fun setIssuerFingerprintAndKeyId(key: PGPPublicKey): SignatureSubpackets = apply {
setIssuerKeyId(key.keyID)
setIssuerFingerprint(key)