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

#ifndef __gnu_javax_crypto_mode_CFB__
#define __gnu_javax_crypto_mode_CFB__

#pragma interface

#include <gnu/javax/crypto/mode/BaseMode.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace cipher
        {
            class IBlockCipher;
        }
        namespace mode
        {
            class CFB;
        }
      }
    }
  }
}

class gnu::javax::crypto::mode::CFB : public ::gnu::javax::crypto::mode::BaseMode
{

public: // actually package-private
  CFB(::gnu::javax::crypto::cipher::IBlockCipher *, jint);
private:
  CFB(::gnu::javax::crypto::mode::CFB *);
public:
  virtual ::java::lang::Object * clone();
  virtual void setup();
  virtual void teardown();
  virtual void encryptBlock(JArray< jbyte > *, jint, JArray< jbyte > *, jint);
  virtual void decryptBlock(JArray< jbyte > *, jint, JArray< jbyte > *, jint);
private:
  JArray< jbyte > * __attribute__((aligned(__alignof__( ::gnu::javax::crypto::mode::BaseMode)))) shiftRegister;
  JArray< jbyte > * scratch;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_mode_CFB__
