@@ -0,0 +1,1821 @@
+// Licensed under the Apache License, Version 2.0 (the %22License%22);%0A// you may not use this file except in compliance with the License.%0A// You may obtain a copy of the License at%0A//%0A//      http://www.apache.org/licenses/LICENSE-2.0%0A//%0A// Unless required by applicable law or agreed to in writing, software%0A// distributed under the License is distributed on an %22AS IS%22 BASIS,%0A// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A// See the License for the specific language governing permissions and%0A// limitations under the License.%0A//%0A////////////////////////////////////////////////////////////////////////////////%0A%0Apackage com.google.crypto.tink;%0A%0Aimport com.google.crypto.tink.annotations.Alpha;%0Aimport com.google.protobuf.MessageLite;%0Aimport java.security.GeneralSecurityException;%0A%0A/**%0A * A PrivateKeyManager is like an %7B@link InternalKeyManager%7D, but additionally has a method to%0A * create a public key.%0A */%0A@Alpha%0Apublic abstract class InternalPrivateKeyManager%3C%0A        KeyProtoT extends MessageLite, PublicKeyProtoT extends MessageLite%3E%0A    extends InternalKeyManager%3CKeyProtoT%3E %7B%0A%0A  @SafeVarargs // Safe because super() is marked as safe.%0A  protected InternalPrivateKeyManager(%0A      Class%3CKeyProtoT%3E clazz,%0A      Class%3CPublicKeyProtoT%3E publicKeyClazz,%0A      InternalKeyManager.PrimitiveFactory%3C?, KeyProtoT%3E... factories) %7B%0A    super(clazz, factories);%0A    this.publicKeyClazz = publicKeyClazz;%0A  %7D%0A%0A  private final Class%3CPublicKeyProtoT%3E publicKeyClazz;%0A%0A  /** Returns the class corresponding to the public key protobuffer. */%0A  public final Class%3CPublicKeyProtoT%3E getPublicKeyClass() %7B%0A    return publicKeyClazz;%0A  %7D%0A%0A  /** Creates a public key from the given private key. */%0A  public abstract PublicKeyProtoT getPublicKey(KeyProtoT keyProto)%0A      throws GeneralSecurityException;%0A%7D%0A

Add an abstract class "InternalPrivateKeyManager".