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

#ifndef __java_security_Security__
#define __java_security_Security__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class Provider;
        class Security;
    }
  }
}

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

  Security();
  static jboolean loadProviders(::java::lang::String *, ::java::lang::String *);
public:
  static ::java::lang::String * getAlgorithmProperty(::java::lang::String *, ::java::lang::String *);
  static jint insertProviderAt(::java::security::Provider *, jint);
  static jint addProvider(::java::security::Provider *);
  static void removeProvider(::java::lang::String *);
  static JArray< ::java::security::Provider * > * getProviders();
  static ::java::security::Provider * getProvider(::java::lang::String *);
  static ::java::lang::String * getProperty(::java::lang::String *);
  static void setProperty(::java::lang::String *, ::java::lang::String *);
  static ::java::util::Set * getAlgorithms(::java::lang::String *);
  static JArray< ::java::security::Provider * > * getProviders(::java::lang::String *);
  static JArray< ::java::security::Provider * > * getProviders(::java::util::Map *);
private:
  static void selectProviders(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::util::LinkedHashSet *, ::java::util::LinkedHashSet *);
  static jboolean provides(::java::security::Provider *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  static ::java::lang::String * ALG_ALIAS;
  static ::java::util::Vector * providers;
  static ::java::util::Properties * secprops;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_Security__
