From e4bccaf58d70476100f163aaf4b5f437edad4516 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Thu, 7 Apr 2022 20:47:47 +0200 Subject: [PATCH] Add support for RegularExpression subpackets (fixes #246) --- .../subpackets/BaseSignatureSubpackets.java | 7 ++++++ .../subpackets/SignatureSubpackets.java | 22 +++++++++++++++++++ .../subpackets/SignatureSubpacketsHelper.java | 7 +++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/BaseSignatureSubpackets.java b/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/BaseSignatureSubpackets.java index 7e44b748..28e99b9e 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/BaseSignatureSubpackets.java +++ b/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/BaseSignatureSubpackets.java @@ -17,6 +17,7 @@ import org.bouncycastle.bcpg.sig.IssuerFingerprint; import org.bouncycastle.bcpg.sig.IssuerKeyID; import org.bouncycastle.bcpg.sig.NotationData; import org.bouncycastle.bcpg.sig.PolicyURI; +import org.bouncycastle.bcpg.sig.RegularExpression; import org.bouncycastle.bcpg.sig.Revocable; import org.bouncycastle.bcpg.sig.SignatureCreationTime; import org.bouncycastle.bcpg.sig.SignatureExpirationTime; @@ -96,6 +97,12 @@ public interface BaseSignatureSubpackets { BaseSignatureSubpackets setPolicyUrl(@Nullable PolicyURI policyUrl); + BaseSignatureSubpackets setRegularExpression(@Nonnull String regex); + + BaseSignatureSubpackets setRegularExpression(boolean isCritical, @Nonnull String regex); + + BaseSignatureSubpackets setRegularExpression(@Nullable RegularExpression regex); + BaseSignatureSubpackets setRevocable(boolean revocable); BaseSignatureSubpackets setRevocable(boolean isCritical, boolean isRevocable); diff --git a/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/SignatureSubpackets.java b/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/SignatureSubpackets.java index 914ff2ff..c622844f 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/SignatureSubpackets.java +++ b/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/SignatureSubpackets.java @@ -30,6 +30,7 @@ import org.bouncycastle.bcpg.sig.NotationData; import org.bouncycastle.bcpg.sig.PolicyURI; import org.bouncycastle.bcpg.sig.PreferredAlgorithms; import org.bouncycastle.bcpg.sig.PrimaryUserID; +import org.bouncycastle.bcpg.sig.RegularExpression; import org.bouncycastle.bcpg.sig.Revocable; import org.bouncycastle.bcpg.sig.RevocationKey; import org.bouncycastle.bcpg.sig.RevocationReason; @@ -72,6 +73,7 @@ public class SignatureSubpackets private KeyExpirationTime keyExpirationTime; private PolicyURI policyURI; private PrimaryUserID primaryUserId; + private RegularExpression regularExpression; private Revocable revocable; private RevocationReason revocationReason; private final List residualSubpackets = new ArrayList<>(); @@ -508,6 +510,26 @@ public class SignatureSubpackets return policyURI; } + @Override + public BaseSignatureSubpackets setRegularExpression(@Nonnull String regex) { + return setRegularExpression(false, regex); + } + + @Override + public BaseSignatureSubpackets setRegularExpression(boolean isCritical, @Nonnull String regex) { + return setRegularExpression(new RegularExpression(isCritical, regex)); + } + + @Override + public BaseSignatureSubpackets setRegularExpression(@Nullable RegularExpression regex) { + this.regularExpression = regex; + return this; + } + + public RegularExpression getRegularExpression() { + return regularExpression; + } + @Override public SignatureSubpackets setRevocable(boolean revocable) { return setRevocable(true, revocable); diff --git a/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/SignatureSubpacketsHelper.java b/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/SignatureSubpacketsHelper.java index 4bea3036..2def2af6 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/SignatureSubpacketsHelper.java +++ b/pgpainless-core/src/main/java/org/pgpainless/signature/subpackets/SignatureSubpacketsHelper.java @@ -15,6 +15,7 @@ import org.bouncycastle.bcpg.sig.NotationData; import org.bouncycastle.bcpg.sig.PolicyURI; import org.bouncycastle.bcpg.sig.PreferredAlgorithms; import org.bouncycastle.bcpg.sig.PrimaryUserID; +import org.bouncycastle.bcpg.sig.RegularExpression; import org.bouncycastle.bcpg.sig.Revocable; import org.bouncycastle.bcpg.sig.RevocationKey; import org.bouncycastle.bcpg.sig.RevocationReason; @@ -119,8 +120,11 @@ public class SignatureSubpacketsHelper { PolicyURI policyURI = (PolicyURI) subpacket; subpackets.setPolicyUrl(policyURI); break; - case regularExpression: + RegularExpression regex = (RegularExpression) subpacket; + subpackets.setRegularExpression(regex); + break; + case keyServerPreferences: case preferredKeyServers: case placeholder: @@ -140,6 +144,7 @@ public class SignatureSubpacketsHelper { addSubpacket(generator, subpackets.getSignatureExpirationTimeSubpacket()); addSubpacket(generator, subpackets.getExportableSubpacket()); addSubpacket(generator, subpackets.getPolicyURI()); + addSubpacket(generator, subpackets.getRegularExpression()); for (NotationData notationData : subpackets.getNotationDataSubpackets()) { addSubpacket(generator, notationData); }