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.util.Date;
008import java.util.List;
009import java.util.Set;
010import javax.annotation.Nonnull;
011import javax.annotation.Nullable;
012
013import org.bouncycastle.bcpg.sig.Features;
014import org.bouncycastle.bcpg.sig.KeyExpirationTime;
015import org.bouncycastle.bcpg.sig.KeyFlags;
016import org.bouncycastle.bcpg.sig.PreferredAlgorithms;
017import org.bouncycastle.bcpg.sig.PrimaryUserID;
018import org.bouncycastle.bcpg.sig.RevocationKey;
019import org.bouncycastle.openpgp.PGPPublicKey;
020import org.pgpainless.algorithm.CompressionAlgorithm;
021import org.pgpainless.algorithm.Feature;
022import org.pgpainless.algorithm.HashAlgorithm;
023import org.pgpainless.algorithm.KeyFlag;
024import org.pgpainless.algorithm.SymmetricKeyAlgorithm;
025
026public interface SelfSignatureSubpackets extends BaseSignatureSubpackets {
027
028    interface Callback extends SignatureSubpacketCallback<SelfSignatureSubpackets> {
029
030    }
031
032    SelfSignatureSubpackets setKeyFlags(KeyFlag... keyFlags);
033
034    default SelfSignatureSubpackets setKeyFlags(List<KeyFlag> keyFlags) {
035        KeyFlag[] flags = keyFlags.toArray(new KeyFlag[0]);
036        return setKeyFlags(flags);
037    }
038
039    SelfSignatureSubpackets setKeyFlags(boolean isCritical, KeyFlag... keyFlags);
040
041    SelfSignatureSubpackets setKeyFlags(@Nullable KeyFlags keyFlags);
042
043    SelfSignatureSubpackets setPrimaryUserId();
044
045    SelfSignatureSubpackets setPrimaryUserId(boolean isCritical);
046
047    SelfSignatureSubpackets setPrimaryUserId(@Nullable PrimaryUserID primaryUserId);
048
049    SelfSignatureSubpackets setKeyExpirationTime(@Nonnull PGPPublicKey key, @Nonnull Date keyExpirationTime);
050
051    SelfSignatureSubpackets setKeyExpirationTime(@Nonnull Date keyCreationTime, @Nonnull Date keyExpirationTime);
052
053    SelfSignatureSubpackets setKeyExpirationTime(boolean isCritical, @Nonnull Date keyCreationTime, @Nonnull Date keyExpirationTime);
054
055    SelfSignatureSubpackets setKeyExpirationTime(boolean isCritical, long secondsFromCreationToExpiration);
056
057    SelfSignatureSubpackets setKeyExpirationTime(@Nullable KeyExpirationTime keyExpirationTime);
058
059    SelfSignatureSubpackets setPreferredCompressionAlgorithms(CompressionAlgorithm... algorithms);
060
061    SelfSignatureSubpackets setPreferredCompressionAlgorithms(Set<CompressionAlgorithm> algorithms);
062
063    SelfSignatureSubpackets setPreferredCompressionAlgorithms(boolean isCritical, Set<CompressionAlgorithm> algorithms);
064
065    SelfSignatureSubpackets setPreferredCompressionAlgorithms(@Nullable PreferredAlgorithms algorithms);
066
067    SelfSignatureSubpackets setPreferredSymmetricKeyAlgorithms(SymmetricKeyAlgorithm... algorithms);
068
069    SelfSignatureSubpackets setPreferredSymmetricKeyAlgorithms(Set<SymmetricKeyAlgorithm> algorithms);
070
071    SelfSignatureSubpackets setPreferredSymmetricKeyAlgorithms(boolean isCritical, Set<SymmetricKeyAlgorithm> algorithms);
072
073    SelfSignatureSubpackets setPreferredSymmetricKeyAlgorithms(@Nullable PreferredAlgorithms algorithms);
074
075    SelfSignatureSubpackets setPreferredHashAlgorithms(HashAlgorithm... algorithms);
076
077    SelfSignatureSubpackets setPreferredHashAlgorithms(Set<HashAlgorithm> algorithms);
078
079    SelfSignatureSubpackets setPreferredHashAlgorithms(boolean isCritical, Set<HashAlgorithm> algorithms);
080
081    SelfSignatureSubpackets setPreferredHashAlgorithms(@Nullable PreferredAlgorithms algorithms);
082
083    SelfSignatureSubpackets addRevocationKey(@Nonnull PGPPublicKey revocationKey);
084
085    SelfSignatureSubpackets addRevocationKey(boolean isCritical, @Nonnull PGPPublicKey revocationKey);
086
087    SelfSignatureSubpackets addRevocationKey(boolean isCritical, boolean isSensitive, @Nonnull PGPPublicKey revocationKey);
088
089    SelfSignatureSubpackets addRevocationKey(@Nonnull RevocationKey revocationKey);
090
091    SelfSignatureSubpackets clearRevocationKeys();
092
093    SelfSignatureSubpackets setFeatures(Feature... features);
094
095    SelfSignatureSubpackets setFeatures(boolean isCritical, Feature... features);
096
097    SelfSignatureSubpackets setFeatures(@Nullable Features features);
098}