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

#ifndef __gnu_javax_crypto_mac_OMAC__
#define __gnu_javax_crypto_mac_OMAC__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace cipher
        {
            class IBlockCipher;
        }
        namespace mac
        {
            class OMAC;
        }
        namespace mode
        {
            class IMode;
        }
      }
    }
  }
}

class gnu::javax::crypto::mac::OMAC : public ::java::lang::Object
{

public:
  OMAC(::gnu::javax::crypto::cipher::IBlockCipher *);
  virtual ::java::lang::Object * clone();
  virtual ::java::lang::String * name();
  virtual jint macSize();
  virtual void init(::java::util::Map *);
  virtual void update(jbyte);
  virtual void update(JArray< jbyte > *, jint, jint);
  virtual JArray< jbyte > * digest();
  virtual void digest(JArray< jbyte > *, jint);
  virtual void reset();
  virtual jboolean selfTest();
private:
  void process();
  static ::java::util::logging::Logger * log;
  static const jbyte C1 = -121;
  static const jbyte C2 = 27;
  static JArray< jbyte > * KEY0;
  static JArray< jbyte > * DIGEST0;
  static ::java::lang::Boolean * valid;
  ::gnu::javax::crypto::cipher::IBlockCipher * __attribute__((aligned(__alignof__( ::java::lang::Object)))) cipher;
  ::java::lang::String * name__;
  ::gnu::javax::crypto::mode::IMode * mode;
  jint blockSize;
  jint outputSize;
  JArray< jbyte > * Lu;
  JArray< jbyte > * Lu2;
  JArray< jbyte > * M;
  JArray< jbyte > * Y;
  jboolean init__;
  jint index;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_mac_OMAC__
