diff --git a/pgpainless-core/src/main/java/org/pgpainless/signature/SignatureUtils.java b/pgpainless-core/src/main/java/org/pgpainless/signature/SignatureUtils.java index 96429da1..420efc26 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/signature/SignatureUtils.java +++ b/pgpainless-core/src/main/java/org/pgpainless/signature/SignatureUtils.java @@ -33,6 +33,7 @@ import org.pgpainless.algorithm.SignatureType; import org.pgpainless.algorithm.negotiation.HashAlgorithmNegotiator; import org.pgpainless.implementation.ImplementationFactory; import org.pgpainless.key.OpenPgpFingerprint; +import org.pgpainless.key.OpenPgpV4Fingerprint; import org.pgpainless.key.util.OpenPgpKeyAttributeUtil; import org.pgpainless.key.util.RevocationAttributes; import org.pgpainless.signature.subpackets.SignatureSubpacketsUtil; @@ -310,4 +311,18 @@ public final class SignatureUtils { } return list; } + + public static boolean wasIssuedBy(byte[] fingerprint, PGPSignature signature) { + if (fingerprint.length != 20) { + // Unknown fingerprint length + return false; + } + OpenPgpV4Fingerprint fp = new OpenPgpV4Fingerprint(fingerprint); + OpenPgpFingerprint issuerFp = SignatureSubpacketsUtil.getIssuerFingerprintAsOpenPgpFingerprint(signature); + if (issuerFp == null) { + return fp.getKeyId() == signature.getKeyID(); + } + + return fp.equals(issuerFp); + } }