/*
 * rxkad.h:
 * This file is automatically generated; please do not edit it.
 */
/* Including rxkad.p.h at beginning of rxkad.h file. */

/* The Kerberos Authenticated DES security object. */

/* Copyright (C) 1991, 1990 Transarc Corporation - All rights reserved */
/*
 * COPYRIGHT (C) IBM CORPORATION 1988
 * LICENSED MATERIALS - PROPERTY OF IBM
 * REFER TO COPYRIGHT INSTRUCTIONS FORM NUMBER G120-2083
 */

/* $Header: /afs/transarc.com/project/fs/dev/afs/rcs/rxkad/RCS/rxkad.p.h,v 2.10 1993/07/28 15:49:18 dws Exp $ */

#ifndef TRANSARC_RXKAD_RXKAD_H
#define TRANSARC_RXKAD_RXKAD_H

		/* no ticket good for longer than 30 days */
#define MAXKTCTICKETLIFETIME (30*24*3600)
#define MINKTCTICKETLEN	      32
#define	MAXKTCTICKETLEN	      344
#define	MAXKTCNAMELEN	      64	/* name & inst should be 256 */
#define MAXKTCREALMLEN	      64	/* should be 256 */
#define KTC_TIME_UNCERTAINTY (15*60)	/* max skew bet. machines' clocks */

/*
 * Define ticket types. For Kerberos V4 tickets, this is overloaded as
 * the server key version number, so class numbers 0 through 255 are reserved
 * for V4 tickets. For Kerberos V5, tickets have an in-the-clear portion
 * containing the server key version, so we only use a single type number to
 * identify those tickets. The ticket type is carried in the kvno field
 * passed to/from ktc_[SG]etToken.
 */
#define RXKAD_TKT_TYPE_KERBEROS_V5		256

/*
 * The AFS/DFS translator may also make use of additional ticket types in
 * the range 257 through 511. DO NOT USE THESE FOR ANY OTHER PURPOSE.
 */
#define RXKAD_TKT_TYPE_ADAPT_RESERVED_MIN	257
#define RXKAD_TKT_TYPE_ADAPT_RESERVED_MAX	511

struct ktc_encryptionKey {
    char data[8];
};

struct ktc_principal {
    char name[MAXKTCNAMELEN];
    char instance[MAXKTCNAMELEN];
    char cell[MAXKTCREALMLEN];
};

#ifndef NEVERDATE
#define NEVERDATE 0xffffffff
#endif

extern struct rx_securityClass *rxkad_NewServerSecurityObject();
extern struct rx_securityClass *rxkad_NewClientSecurityObject();

/* this function round a length to the correct encryption block size */
#define round_up_to_ebs(v) (((v) + 7) & (~7))

typedef char rxkad_type;
#define rxkad_client 1			/* bits definitions */
#define rxkad_server 2

typedef char rxkad_level;
#define rxkad_clear 0			/* send packets in the clear */
#define rxkad_auth 1			/* send encrypted sequence numbers */
#define rxkad_crypt 2			/* encrypt packet data */

/* many stats are kept per type and per level.  These are encoded into an index
 * from 0 to 5 by the StatIndex macro. */

#define rxkad_StatIndex(type,level) \
    (((((type) == 1) || ((type) == 2)) && ((level) >= 0) && ((level) <= 2)) \
     ? (((level)<<1)+(type)-1) : 0)
#define rxkad_LevelIndex(level) \
    ((((level) >= 0) && ((level) <= 2)) ? (level) : 0)
#define rxkad_TypeIndex(type) \
    ((((type) == 1) || ((type) == 2)) ? (type) : 0)

struct rxkad_stats {
    unsigned long connections[3];	/* client side only */
    unsigned long destroyObject;	/* client security objects */
    unsigned long destroyClient;	/* client connections */
    unsigned long destroyUnused;	/* unused server conn */
    unsigned long destroyUnauth;	/* unauthenticated server conn */
    unsigned long destroyConn[3];	/* server conn per level */
    unsigned long expired;		/* server packets rejected */
    unsigned long challengesSent;	/* server challenges sent */
    unsigned long challenges[3];	/* challenges seen by client */
    unsigned long responses[3];		/* responses seen by server */
    unsigned long preparePackets[6];
    unsigned long checkPackets[6];
    unsigned long bytesEncrypted[2];	/* index just by type */
    unsigned long bytesDecrypted[2];
    unsigned long fc_encrypts[2];	/* DECRYPT==0, ENCRYPT==1 */
    unsigned long fc_key_scheds;	/* key schedule creations */
    unsigned long des_encrypts[2];	/* DECRYPT==0, ENCRYPT==1 */
    unsigned long des_key_scheds;	/* key schedule creations */
    unsigned long des_randoms;		/* random blocks generated */
    unsigned long spares[10];
};

extern struct rxkad_stats rxkad_stats;

/* gak! using up spares already! */
#define rxkad_stats_clientObjects (rxkad_stats.spares[0])
#define rxkad_stats_serverObjects (rxkad_stats.spares[1])

extern int rxkad_EpochWasSet;		/* TRUE => we called rx_SetEpoch */

#endif /* TRANSARC_RXKAD_RXKAD_H */

/* End of prolog file rxkad.p.h. */

#define RXKADINCONSISTENCY                       (19270400L)
#define RXKADPACKETSHORT                         (19270401L)
#define RXKADLEVELFAIL                           (19270402L)
#define RXKADTICKETLEN                           (19270403L)
#define RXKADOUTOFSEQUENCE                       (19270404L)
#define RXKADNOAUTH                              (19270405L)
#define RXKADBADKEY                              (19270406L)
#define RXKADBADTICKET                           (19270407L)
#define RXKADUNKNOWNKEY                          (19270408L)
#define RXKADEXPIRED                             (19270409L)
#define RXKADSEALEDINCON                         (19270410L)
#define RXKADDATALEN                             (19270411L)
#define RXKADILLEGALLEVEL                        (19270412L)
extern void initialize_rxk_error_table ();
#define ERROR_TABLE_BASE_rxk (19270400L)

/* for compatibility with older versions... */
#define init_rxk_err_tbl initialize_rxk_error_table
#define rxk_err_base ERROR_TABLE_BASE_rxk
