Skip to content

Commit 40cd5fa

Browse files
author
gefeili
committed
#1844 Improve comparison logic during signature joining
2 parents 61dd2bb + 7292600 commit 40cd5fa

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

pg/src/main/java/org/bouncycastle/openpgp/PGPPublicKey.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1216,7 +1216,8 @@ private static void joinPgpSignatureList(List<PGPSignature> source,
12161216
for (int i = 0; isNotNull && i < rlt.size(); i++)
12171217
{
12181218
PGPSignature existingSubSig = (PGPSignature)rlt.get(i);
1219-
if (PGPSignature.isSignatureEncodingEqual(existingSubSig, copySubSig))
1219+
if (existingSubSig.getVersion() == copySubSig.getVersion() &&
1220+
PGPSignature.isSignatureEncodingEqual(existingSubSig, copySubSig))
12201221
{
12211222
found = true;
12221223
// join existing sig with copy to apply modifications in unhashed subpackets

pg/src/main/java/org/bouncycastle/openpgp/PGPSignature.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -923,7 +923,13 @@ public static boolean isSignatureEncodingEqual(PGPSignature sig1, PGPSignature s
923923
public static PGPSignature join(PGPSignature sig1, PGPSignature sig2)
924924
throws PGPException
925925
{
926-
if (!isSignatureEncodingEqual(sig1, sig2))
926+
if (sig1.getVersion() < SignaturePacket.VERSION_4) {
927+
// Version 2/3 signatures have no subpackets, so don't need to get merged.
928+
return sig1;
929+
}
930+
931+
if (sig1.getVersion() != sig2.getVersion() ||
932+
!isSignatureEncodingEqual(sig1, sig2))
927933
{
928934
throw new IllegalArgumentException("These are different signatures.");
929935
}

0 commit comments

Comments
 (0)