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

#ifndef __gnu_javax_crypto_sasl_srp_CALG__
#define __gnu_javax_crypto_sasl_srp_CALG__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace assembly
        {
            class Assembly;
            class Direction;
        }
        namespace sasl
        {
          namespace srp
          {
              class CALG;
              class KDF;
          }
        }
      }
    }
  }
}

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

  CALG(jint, jint, ::java::lang::Object *, ::gnu::javax::crypto::assembly::Assembly *);
public: // actually package-private
  static ::gnu::javax::crypto::sasl::srp::CALG * getInstance(::java::lang::String *);
public:
  void init(::gnu::javax::crypto::sasl::srp::KDF *, JArray< jbyte > *, ::gnu::javax::crypto::assembly::Direction *);
  JArray< jbyte > * doFinal(JArray< jbyte > *);
  JArray< jbyte > * doFinal(JArray< jbyte > *, jint, jint);
private:
  ::gnu::javax::crypto::assembly::Assembly * __attribute__((aligned(__alignof__( ::java::lang::Object)))) assembly;
  ::java::lang::Object * modeNdx;
  jint blockSize;
  jint keySize;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_sasl_srp_CALG__
