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

#ifndef __gnu_javax_crypto_key_GnuSecretKey__
#define __gnu_javax_crypto_key_GnuSecretKey__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace key
        {
            class GnuSecretKey;
        }
      }
    }
  }
}

class gnu::javax::crypto::key::GnuSecretKey : public ::java::lang::Object
{

public:
  GnuSecretKey(JArray< jbyte > *, ::java::lang::String *);
  GnuSecretKey(JArray< jbyte > *, jint, jint, ::java::lang::String *);
  virtual ::java::lang::String * getAlgorithm();
  virtual JArray< jbyte > * getEncoded();
  virtual ::java::lang::String * getFormat();
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * toString();
private:
  JArray< jbyte > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) key;
  ::java::lang::String * algorithm;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_key_GnuSecretKey__
