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

#ifndef __gnu_javax_crypto_cipher_Square__
#define __gnu_javax_crypto_cipher_Square__

#pragma interface

#include <gnu/javax/crypto/cipher/BaseCipher.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace cipher
        {
            class Square;
        }
      }
    }
  }
}

class gnu::javax::crypto::cipher::Square : public ::gnu::javax::crypto::cipher::BaseCipher
{

public:
  Square();
private:
  static void square(JArray< jbyte > *, jint, JArray< jbyte > *, jint, JArray< JArray< jint > * > *, JArray< jint > *, JArray< jbyte > *);
  static void transform(JArray< jint > *, JArray< jint > *);
  static jint rot32L(jint, jint);
  static jint rot32R(jint, jint);
  static jint mul(jint, jint);
public:
  ::java::lang::Object * clone();
  ::java::util::Iterator * blockSizes();
  ::java::util::Iterator * keySizes();
  ::java::lang::Object * makeKey(JArray< jbyte > *, jint);
  void encrypt(JArray< jbyte > *, jint, JArray< jbyte > *, jint, ::java::lang::Object *, jint);
  void decrypt(JArray< jbyte > *, jint, JArray< jbyte > *, jint, ::java::lang::Object *, jint);
  jboolean selfTest();
private:
  static const jint DEFAULT_BLOCK_SIZE = 16;
  static const jint DEFAULT_KEY_SIZE = 16;
  static const jint ROUNDS = 8;
  static const jint ROOT = 501;
  static JArray< jint > * OFFSET;
  static ::java::lang::String * Sdata;
  static JArray< jbyte > * Se;
  static JArray< jbyte > * Sd;
  static JArray< jint > * Te;
  static JArray< jint > * Td;
  static JArray< jbyte > * KAT_KEY;
  static JArray< jbyte > * KAT_CT;
  static ::java::lang::Boolean * valid;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_cipher_Square__
