/* DES.H - header file for DESC.C
 */

#ifndef _DES_H_
#define _DES_H_ 1


typedef struct {
  UINT4 subkeys[32];                                             /* subkeys */
  UINT4 iv[2];                                       /* initializing vector */
  UINT4 originalIV[2];                        /* for restarting the context */
  int encrypt;                                               /* encrypt flag */
} DES_CBC_CTX;

typedef struct {
  UINT4 subkeys[32];                                             /* subkeys */
  UINT4 iv[2];                                       /* initializing vector */
  UINT4 inputWhitener[2];                                 /* input whitener */
  UINT4 outputWhitener[2];                               /* output whitener */
  UINT4 originalIV[2];                        /* for restarting the context */
  int encrypt;                                              /* encrypt flag */
} DESX_CBC_CTX;

typedef struct {
  UINT4 subkeys[3][32];                     /* subkeys for three operations */
  UINT4 iv[2];                                       /* initializing vector */
  UINT4 originalIV[2];                        /* for restarting the context */
  int encrypt;                                              /* encrypt flag */
} DES3_CBC_CTX;

void __fastcall DES_CBCInit(DES_CBC_CTX *, unsigned char *, unsigned char *, int);
int  __fastcall DES_CBCUpdate(DES_CBC_CTX *, unsigned char *, unsigned char *, unsigned int);
void __fastcall DES_CBCRestart(DES_CBC_CTX *);

void __fastcall DESX_CBCInit(DESX_CBC_CTX *, unsigned char *, unsigned char *, int);
int  __fastcall DESX_CBCUpdate(DESX_CBC_CTX *, unsigned char *, unsigned char *, unsigned int);
void __fastcall DESX_CBCRestart(DESX_CBC_CTX *);

void __fastcall DES3_CBCInit(DES3_CBC_CTX *, unsigned char *, unsigned char *, int);
int  __fastcall DES3_CBCUpdate(DES3_CBC_CTX *, unsigned char *, unsigned char *, unsigned int);
void __fastcall DES3_CBCRestart(DES3_CBC_CTX *);


#endif
