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

#ifndef __gnu_java_security_util_Util__
#define __gnu_java_security_util_Util__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace util
        {
            class Util;
        }
      }
    }
  }
  namespace java
  {
    namespace math
    {
        class BigInteger;
    }
  }
}

class gnu::java::security::util::Util : public ::java::lang::Object
{

  Util();
public:
  static ::java::lang::String * toString(JArray< jbyte > *);
  static ::java::lang::String * toString(JArray< jbyte > *, jint, jint);
  static ::java::lang::String * toReversedString(JArray< jbyte > *);
  static ::java::lang::String * toReversedString(JArray< jbyte > *, jint, jint);
  static JArray< jbyte > * toBytesFromString(::java::lang::String *);
  static JArray< jbyte > * toReversedBytesFromString(::java::lang::String *);
  static jint fromDigit(jchar);
  static ::java::lang::String * toString(jint);
  static ::java::lang::String * toString(JArray< jint > *);
  static ::java::lang::String * toString(jlong);
  static ::java::lang::String * toUnicodeString(JArray< jbyte > *);
  static ::java::lang::String * toUnicodeString(JArray< jbyte > *, jint, jint);
  static ::java::lang::String * toUnicodeString(JArray< jint > *);
  static JArray< jbyte > * toBytesFromUnicode(::java::lang::String *);
  static ::java::lang::String * dumpString(JArray< jbyte > *, jint, jint, ::java::lang::String *);
  static ::java::lang::String * dumpString(JArray< jbyte > *);
  static ::java::lang::String * dumpString(JArray< jbyte > *, ::java::lang::String *);
  static ::java::lang::String * dumpString(JArray< jbyte > *, jint, jint);
  static ::java::lang::String * byteToString(jint);
  static ::java::lang::String * toBase64(JArray< jbyte > *);
  static JArray< jbyte > * fromBase64(::java::lang::String *);
  static JArray< jbyte > * trim(::java::math::BigInteger *);
  static ::java::lang::String * dump(::java::math::BigInteger *);
private:
  static JArray< jchar > * HEX_DIGITS;
  static ::java::lang::String * BASE64_CHARS;
  static JArray< jchar > * BASE64_CHARSET;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_util_Util__
