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

#ifndef __gnu_javax_crypto_sasl_srp_KDF__
#define __gnu_javax_crypto_sasl_srp_KDF__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace util
        {
            class PRNG;
        }
      }
    }
    namespace javax
    {
      namespace crypto
      {
        namespace prng
        {
            class UMacGenerator;
        }
        namespace sasl
        {
          namespace srp
          {
              class KDF;
          }
        }
      }
    }
  }
}

class gnu::javax::crypto::sasl::srp::KDF : public ::java::lang::Object
{

  KDF(JArray< jbyte > *, jint);
public: // actually package-private
  static ::gnu::javax::crypto::sasl::srp::KDF * getInstance(JArray< jbyte > *);
private:
  static jint nextByte();
public:
  virtual JArray< jbyte > * derive(jint);
private:
  static const jint AES_BLOCK_SIZE = 16;
  static const jint AES_KEY_SIZE = 16;
  static JArray< jbyte > * buffer;
  static ::gnu::java::security::util::PRNG * prng;
  ::gnu::javax::crypto::prng::UMacGenerator * __attribute__((aligned(__alignof__( ::java::lang::Object)))) umac;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_sasl_srp_KDF__
