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}