
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_security_KeyStoreSpi__
#define __java_security_KeyStoreSpi__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class Key;
        class KeyStoreSpi;
      namespace cert
      {
          class Certificate;
      }
    }
  }
}

class java::security::KeyStoreSpi : public ::java::lang::Object
{

public:
  KeyStoreSpi();
  virtual ::java::security::Key * engineGetKey(::java::lang::String *, JArray< jchar > *) = 0;
  virtual JArray< ::java::security::cert::Certificate * > * engineGetCertificateChain(::java::lang::String *) = 0;
  virtual ::java::security::cert::Certificate * engineGetCertificate(::java::lang::String *) = 0;
  virtual ::java::util::Date * engineGetCreationDate(::java::lang::String *) = 0;
  virtual void engineSetKeyEntry(::java::lang::String *, ::java::security::Key *, JArray< jchar > *, JArray< ::java::security::cert::Certificate * > *) = 0;
  virtual void engineSetKeyEntry(::java::lang::String *, JArray< jbyte > *, JArray< ::java::security::cert::Certificate * > *) = 0;
  virtual void engineSetCertificateEntry(::java::lang::String *, ::java::security::cert::Certificate *) = 0;
  virtual void engineDeleteEntry(::java::lang::String *) = 0;
  virtual ::java::util::Enumeration * engineAliases() = 0;
  virtual jboolean engineContainsAlias(::java::lang::String *) = 0;
  virtual jint engineSize() = 0;
  virtual jboolean engineIsKeyEntry(::java::lang::String *) = 0;
  virtual jboolean engineIsCertificateEntry(::java::lang::String *) = 0;
  virtual ::java::lang::String * engineGetCertificateAlias(::java::security::cert::Certificate *) = 0;
  virtual void engineStore(::java::io::OutputStream *, JArray< jchar > *) = 0;
  virtual void engineLoad(::java::io::InputStream *, JArray< jchar > *) = 0;
  static ::java::lang::Class class$;
};

#endif // __java_security_KeyStoreSpi__
