001// SPDX-FileCopyrightText: 2018 Paul Schaub <vanitasvitae@fsfe.org>
002//
003// SPDX-License-Identifier: Apache-2.0
004
005package org.pgpainless.key.generation;
006
007import java.security.InvalidAlgorithmParameterException;
008import java.security.NoSuchAlgorithmException;
009import java.util.Date;
010import javax.annotation.Nonnull;
011
012import org.bouncycastle.openpgp.PGPException;
013import org.bouncycastle.openpgp.PGPSecretKeyRing;
014import org.pgpainless.key.util.UserId;
015import org.pgpainless.util.Passphrase;
016
017public interface KeyRingBuilderInterface<B extends KeyRingBuilderInterface<B>> {
018
019    B setPrimaryKey(@Nonnull KeySpec keySpec);
020
021    default B setPrimaryKey(@Nonnull KeySpecBuilder builder) {
022        return setPrimaryKey(builder.build());
023    }
024
025    B addSubkey(@Nonnull KeySpec keySpec);
026
027    default B addSubkey(@Nonnull KeySpecBuilder builder) {
028        return addSubkey(builder.build());
029    }
030
031    default B addUserId(UserId userId) {
032        return addUserId(userId.toString());
033    }
034
035    B addUserId(@Nonnull String userId);
036
037    B addUserId(@Nonnull byte[] userId);
038
039    B setExpirationDate(@Nonnull Date expirationDate);
040
041    B setPassphrase(@Nonnull Passphrase passphrase);
042
043    PGPSecretKeyRing build() throws NoSuchAlgorithmException, PGPException,
044                InvalidAlgorithmParameterException;
045}