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

#ifndef __gnu_java_security_Properties__
#define __gnu_java_security_Properties__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
          class Properties;
      }
    }
  }
}

class gnu::java::security::Properties : public ::java::lang::Object
{

  Properties();
public:
  static ::java::lang::String * getProperty(::java::lang::String *);
  static void setProperty(::java::lang::String *, ::java::lang::String *);
  static jboolean isReproducible();
  static jboolean checkForWeakKeys();
  static jboolean doRSABlinding();
  static void setReproducible(jboolean);
  static void setCheckForWeakKeys(jboolean);
  static void setDoRSABlinding(jboolean);
private:
  static ::gnu::java::security::Properties * instance();
  void init();
  void handleBooleanProperty(::java::lang::String *);
  static ::java::util::logging::Logger * log;
public:
  static ::java::lang::String * VERSION;
  static ::java::lang::String * PROPERTIES_FILE;
  static ::java::lang::String * REPRODUCIBLE_PRNG;
  static ::java::lang::String * CHECK_WEAK_KEYS;
  static ::java::lang::String * DO_RSA_BLINDING;
private:
  static ::java::lang::String * TRUE;
  static ::java::lang::String * FALSE;
  static ::java::util::HashMap * props;
  static ::gnu::java::security::Properties * singleton;
  jboolean __attribute__((aligned(__alignof__( ::java::lang::Object)))) reproducible;
  jboolean checkForWeakKeys__;
  jboolean doRSABlinding__;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_Properties__
