001// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org>
002//
003// SPDX-License-Identifier: Apache-2.0
004
005package org.pgpainless.signature.subpackets;
006
007import java.io.IOException;
008import java.util.Date;
009import javax.annotation.Nonnull;
010import javax.annotation.Nullable;
011
012import org.bouncycastle.bcpg.sig.EmbeddedSignature;
013import org.bouncycastle.bcpg.sig.Exportable;
014import org.bouncycastle.bcpg.sig.IntendedRecipientFingerprint;
015import org.bouncycastle.bcpg.sig.IssuerFingerprint;
016import org.bouncycastle.bcpg.sig.IssuerKeyID;
017import org.bouncycastle.bcpg.sig.NotationData;
018import org.bouncycastle.bcpg.sig.Revocable;
019import org.bouncycastle.bcpg.sig.SignatureCreationTime;
020import org.bouncycastle.bcpg.sig.SignatureExpirationTime;
021import org.bouncycastle.bcpg.sig.SignatureTarget;
022import org.bouncycastle.bcpg.sig.SignerUserID;
023import org.bouncycastle.bcpg.sig.TrustSignature;
024import org.bouncycastle.openpgp.PGPPublicKey;
025import org.bouncycastle.openpgp.PGPSignature;
026import org.pgpainless.algorithm.HashAlgorithm;
027import org.pgpainless.algorithm.PublicKeyAlgorithm;
028
029public interface BaseSignatureSubpackets {
030
031    interface Callback extends SignatureSubpacketCallback<BaseSignatureSubpackets> {
032
033    }
034
035    BaseSignatureSubpackets setIssuerFingerprintAndKeyId(PGPPublicKey key);
036
037    BaseSignatureSubpackets setIssuerKeyId(long keyId);
038
039    BaseSignatureSubpackets setIssuerKeyId(boolean isCritical, long keyId);
040
041    BaseSignatureSubpackets setIssuerKeyId(@Nullable IssuerKeyID issuerKeyID);
042
043    BaseSignatureSubpackets setIssuerFingerprint(@Nonnull PGPPublicKey key);
044
045    BaseSignatureSubpackets setIssuerFingerprint(boolean isCritical, @Nonnull PGPPublicKey key);
046
047    BaseSignatureSubpackets setIssuerFingerprint(@Nullable IssuerFingerprint fingerprint);
048
049    BaseSignatureSubpackets setSignatureCreationTime(@Nonnull Date creationTime);
050
051    BaseSignatureSubpackets setSignatureCreationTime(boolean isCritical, @Nonnull Date creationTime);
052
053    BaseSignatureSubpackets setSignatureCreationTime(@Nullable SignatureCreationTime signatureCreationTime);
054
055    BaseSignatureSubpackets setSignatureExpirationTime(@Nonnull Date creationTime, @Nonnull Date expirationTime);
056
057    BaseSignatureSubpackets setSignatureExpirationTime(boolean isCritical, @Nonnull Date creationTime, @Nonnull Date expirationTime);
058
059    BaseSignatureSubpackets setSignatureExpirationTime(boolean isCritical, long seconds);
060
061    BaseSignatureSubpackets setSignatureExpirationTime(@Nullable SignatureExpirationTime expirationTime);
062
063    BaseSignatureSubpackets setSignerUserId(@Nonnull String userId);
064
065    BaseSignatureSubpackets setSignerUserId(boolean isCritical, @Nonnull String userId);
066
067    BaseSignatureSubpackets setSignerUserId(@Nullable SignerUserID signerUserId);
068
069    BaseSignatureSubpackets addNotationData(boolean isCritical, @Nonnull String notationName, @Nonnull String notationValue);
070
071    BaseSignatureSubpackets addNotationData(boolean isCritical, boolean isHumanReadable, @Nonnull String notationName, @Nonnull String notationValue);
072
073    BaseSignatureSubpackets addNotationData(@Nonnull NotationData notationData);
074
075    BaseSignatureSubpackets clearNotationData();
076
077    BaseSignatureSubpackets addIntendedRecipientFingerprint(@Nonnull PGPPublicKey recipient);
078
079    BaseSignatureSubpackets addIntendedRecipientFingerprint(boolean isCritical, @Nonnull PGPPublicKey recipient);
080
081    BaseSignatureSubpackets addIntendedRecipientFingerprint(IntendedRecipientFingerprint intendedRecipientFingerprint);
082
083    BaseSignatureSubpackets clearIntendedRecipientFingerprints();
084
085    BaseSignatureSubpackets setExportable(boolean isCritical, boolean isExportable);
086
087    BaseSignatureSubpackets setExportable(@Nullable Exportable exportable);
088
089    BaseSignatureSubpackets setRevocable(boolean isCritical, boolean isRevocable);
090
091    BaseSignatureSubpackets setRevocable(@Nullable Revocable revocable);
092
093    BaseSignatureSubpackets setSignatureTarget(@Nonnull PublicKeyAlgorithm keyAlgorithm, @Nonnull HashAlgorithm hashAlgorithm, @Nonnull byte[] hashData);
094
095    BaseSignatureSubpackets setSignatureTarget(boolean isCritical, @Nonnull PublicKeyAlgorithm keyAlgorithm, @Nonnull HashAlgorithm hashAlgorithm, @Nonnull byte[] hashData);
096
097    BaseSignatureSubpackets setSignatureTarget(@Nullable SignatureTarget signatureTarget);
098
099    BaseSignatureSubpackets setTrust(int depth, int amount);
100
101    BaseSignatureSubpackets setTrust(boolean isCritical, int depth, int amount);
102
103    BaseSignatureSubpackets setTrust(@Nullable TrustSignature trust);
104
105    BaseSignatureSubpackets addEmbeddedSignature(@Nonnull PGPSignature signature) throws IOException;
106
107    BaseSignatureSubpackets addEmbeddedSignature(boolean isCritical, @Nonnull PGPSignature signature) throws IOException;
108
109    BaseSignatureSubpackets addEmbeddedSignature(@Nonnull EmbeddedSignature embeddedSignature);
110
111    BaseSignatureSubpackets clearEmbeddedSignatures();
112}