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

#ifndef __java_security_KeyStore__
#define __java_security_KeyStore__

#pragma interface

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

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

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

public: // actually protected
  KeyStore(::java::security::KeyStoreSpi *, ::java::security::Provider *, ::java::lang::String *);
public:
  static ::java::security::KeyStore * getInstance(::java::lang::String *);
  static ::java::security::KeyStore * getInstance(::java::lang::String *, ::java::lang::String *);
  static ::java::security::KeyStore * getInstance(::java::lang::String *, ::java::security::Provider *);
  static ::java::lang::String * getDefaultType();
  virtual ::java::security::Provider * getProvider();
  virtual ::java::lang::String * getType();
  virtual ::java::security::Key * getKey(::java::lang::String *, JArray< jchar > *);
  virtual JArray< ::java::security::cert::Certificate * > * getCertificateChain(::java::lang::String *);
  virtual ::java::security::cert::Certificate * getCertificate(::java::lang::String *);
  virtual ::java::util::Date * getCreationDate(::java::lang::String *);
  virtual void setKeyEntry(::java::lang::String *, ::java::security::Key *, JArray< jchar > *, JArray< ::java::security::cert::Certificate * > *);
  virtual void setKeyEntry(::java::lang::String *, JArray< jbyte > *, JArray< ::java::security::cert::Certificate * > *);
  virtual void setCertificateEntry(::java::lang::String *, ::java::security::cert::Certificate *);
  virtual void deleteEntry(::java::lang::String *);
  virtual ::java::util::Enumeration * aliases();
  virtual jboolean containsAlias(::java::lang::String *);
  virtual jint size();
  virtual jboolean isKeyEntry(::java::lang::String *);
  virtual jboolean isCertificateEntry(::java::lang::String *);
  virtual ::java::lang::String * getCertificateAlias(::java::security::cert::Certificate *);
  virtual void store(::java::io::OutputStream *, JArray< jchar > *);
  virtual void load(::java::io::InputStream *, JArray< jchar > *);
private:
  static ::java::lang::String * KEY_STORE;
  ::java::security::KeyStoreSpi * __attribute__((aligned(__alignof__( ::java::lang::Object)))) keyStoreSpi;
  ::java::security::Provider * provider;
  ::java::lang::String * type;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_KeyStore__
