From 1a37058c66fd4832743a95a42b2999f3ae038309 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 17 May 2022 18:31:10 +0200 Subject: [PATCH] Add SignatureUtils.getSignaturesForUserIdBy(key, userId, keyId) --- .../pgpainless/signature/SignatureUtils.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) 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 f002d5cd..9b86f575 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/signature/SignatureUtils.java +++ b/pgpainless-core/src/main/java/org/pgpainless/signature/SignatureUtils.java @@ -9,7 +9,9 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; +import java.util.Iterator; import java.util.List; import java.util.Set; @@ -40,6 +42,8 @@ import org.pgpainless.key.util.RevocationAttributes; import org.pgpainless.signature.subpackets.SignatureSubpacketsUtil; import org.pgpainless.util.ArmorUtils; +import javax.annotation.Nonnull; + /** * Utility methods related to signatures. */ @@ -333,4 +337,36 @@ public final class SignatureUtils { return fp.equals(issuerFp); } + + /** + * Extract all signatures from the given
key
which were issued by
issuerKeyId
+ * over
userId
. + * + * @param key public key + * @param userId user-id + * @param issuerKeyId issuer key-id + * @return (potentially empty) list of signatures + */ + public static @Nonnull List getSignaturesOverUserIdBy( + @Nonnull PGPPublicKey key, + @Nonnull String userId, + long issuerKeyId) { + List signaturesByKeyId = new ArrayList<>(); + Iterator userIdSignatures = key.getSignaturesForID(userId); + + // getSignaturesForID() is nullable -.- + if (userIdSignatures == null) { + return signaturesByKeyId; + } + + // filter for signatures by key-id + while (userIdSignatures.hasNext()) { + PGPSignature signature = userIdSignatures.next(); + if (signature.getKeyID() == issuerKeyId) { + signaturesByKeyId.add(signature); + } + } + + return Collections.unmodifiableList(signaturesByKeyId); + } }