001/*
002 * Copyright 2018 Paul Schaub.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.pgpainless.key.generation;
017
018import javax.annotation.Nonnull;
019import java.security.InvalidAlgorithmParameterException;
020import java.security.NoSuchAlgorithmException;
021import java.security.NoSuchProviderException;
022
023import org.bouncycastle.openpgp.PGPException;
024import org.pgpainless.key.collection.PGPKeyRing;
025import org.pgpainless.util.Passphrase;
026
027public interface KeyRingBuilderInterface {
028
029    KeyRingBuilderInterface withSubKey(@Nonnull KeySpec keySpec);
030
031    WithPrimaryUserId withMasterKey(@Nonnull KeySpec keySpec);
032
033    interface WithPrimaryUserId {
034
035        WithPassphrase withPrimaryUserId(@Nonnull String userId);
036
037        WithPassphrase withPrimaryUserId(@Nonnull byte[] userId);
038
039    }
040
041    interface WithPassphrase {
042
043        Build withPassphrase(@Nonnull Passphrase passphrase);
044
045        Build withoutPassphrase();
046    }
047
048    interface Build {
049
050        PGPKeyRing build() throws NoSuchAlgorithmException, PGPException, NoSuchProviderException,
051                InvalidAlgorithmParameterException;
052
053    }
054}