/* $Id: IKeystoreManager.java 988245 2010-08-23 18:39:35Z kwright $ */

/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.manifoldcf.connectorcommon.interfaces;

import org.apache.manifoldcf.core.interfaces.*;
import javax.net.ssl.TrustManager;
import java.io.*;

/** This interface describes a class that manages keys and certificates in a secure manner.
* It's built on top of the JDK 1.4+ JSSE integration, and provides all the necessary logic
* to work well within the ManifoldCF java environment.
*/
public interface IKeystoreManager extends ISSLSocketFactoryProducer
{
  public static final String _rcsid = "@(#)$Id: IKeystoreManager.java 988245 2010-08-23 18:39:35Z kwright $";

  /** Get a unique hashstring for this keystore.  The hashcode depends only on the certificates
  * in the store.
  *@return the hash string for this keystore.
  */
  public String getHashString()
    throws ManifoldCFException;

  /** Grab a list of the aliases in the key store.
  *@return the list, as a string array.
  */
  public String[] getContents()
    throws ManifoldCFException;

  /** For an alias, get some descriptive information from the object in the keystore.
  *@param alias is the alias name.
  *@return a description of what's in the alias.
  */
  public String getDescription(String alias)
    throws ManifoldCFException;

  /** Import a certificate or key into the list.  The data must be added as binary.
  *@param alias is the name of the certificate.
  *@param certData is the binary data for the certificate.
  */
  public void importCertificate(String alias, InputStream certData)
    throws ManifoldCFException;

  /** Remove a certificate.
  *@param alias is the name of the certificate to remove.
  */
  public void remove(String alias)
    throws ManifoldCFException;

  /** Convert to a base64 string.
  *@return the base64-encoded string.  This differs every time it is called, and thus
  * CANNOT be used for hashing.
  */
  public String getString()
    throws ManifoldCFException;

  /** Read a certificate from the keystore.
  */
  public java.security.cert.Certificate getCertificate(String alias)
    throws ManifoldCFException;

  /** Add a certificate to the keystore.
  */
  public void addCertificate(String alias, java.security.cert.Certificate certificate)
    throws ManifoldCFException;

  /** Get the trust stores for this keystore manager.
  */
  public TrustManager[] getTrustManagers()
    throws ManifoldCFException;
}
