Initial import from FreeBSD RELENG_4:
[games.git] / crypto / kerberosIV / lib / krb / krb-archaeology.h
1 /*
2  * $Id: krb-archaeology.h,v 1.2 1997/12/05 02:04:44 joda Exp $
3  *
4  * Most of the cruft in this file is probably:
5  *
6  * Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute
7  * of Technology.
8  *
9  * For copying and distribution information, please see the file
10  * <mit-copyright.h>.
11  */
12
13 #ifndef __KRB_ARCHAEOLOGY_H__
14 #define __KRB_ARCHAEOLOGY_H__
15
16 /* Compare x and y in VAX byte order, result is -1, 0 or 1. */
17
18 #define krb_lsb_antinet_ulong_less(x, y) (((x) == (y)) ? 0 :  krb_lsb_antinet_ulong_cmp(x, y))
19
20 #define krb_lsb_antinet_ushort_less(x, y) (((x) == (y)) ? 0 : krb_lsb_antinet_ushort_cmp(x, y))
21
22 int krb_lsb_antinet_ulong_cmp(u_int32_t x, u_int32_t y);
23 int krb_lsb_antinet_ushort_cmp(u_int16_t x, u_int16_t y);
24 u_int32_t lsb_time(time_t t, struct sockaddr_in *src, struct sockaddr_in *dst);
25
26 /* Macro's to obtain various fields from a packet */
27
28 #define pkt_version(packet)  (unsigned int) *(packet->dat)
29 #define pkt_msg_type(packet) (unsigned int) *(packet->dat+1)
30 #define pkt_a_name(packet)   (packet->dat+2)
31 #define pkt_a_inst(packet)   \
32         (packet->dat+3+strlen((char *)pkt_a_name(packet)))
33 #define pkt_a_realm(packet)  \
34         (pkt_a_inst(packet)+1+strlen((char *)pkt_a_inst(packet)))
35
36 /* Macro to obtain realm from application request */
37 #define apreq_realm(auth)     (auth->dat + 3)
38
39 #define pkt_time_ws(packet) (char *) \
40         (packet->dat+5+strlen((char *)pkt_a_name(packet)) + \
41          strlen((char *)pkt_a_inst(packet)) + \
42          strlen((char *)pkt_a_realm(packet)))
43
44 #define pkt_no_req(packet) (unsigned short) \
45         *(packet->dat+9+strlen((char *)pkt_a_name(packet)) + \
46           strlen((char *)pkt_a_inst(packet)) + \
47           strlen((char *)pkt_a_realm(packet)))
48 #define pkt_x_date(packet) (char *) \
49         (packet->dat+10+strlen((char *)pkt_a_name(packet)) + \
50          strlen((char *)pkt_a_inst(packet)) + \
51          strlen((char *)pkt_a_realm(packet)))
52 #define pkt_err_code(packet) ( (char *) \
53         (packet->dat+9+strlen((char *)pkt_a_name(packet)) + \
54          strlen((char *)pkt_a_inst(packet)) + \
55          strlen((char *)pkt_a_realm(packet))))
56 #define pkt_err_text(packet) \
57         (packet->dat+13+strlen((char *)pkt_a_name(packet)) + \
58          strlen((char *)pkt_a_inst(packet)) + \
59          strlen((char *)pkt_a_realm(packet)))
60
61 /*
62  * macros for byte swapping; also scratch space
63  * u_quad  0-->7, 1-->6, 2-->5, 3-->4, 4-->3, 5-->2, 6-->1, 7-->0
64  * u_int32_t  0-->3, 1-->2, 2-->1, 3-->0
65  * u_int16_t 0-->1, 1-->0
66  */
67
68 #define     swap_u_16(x) {\
69  u_int32_t   _krb_swap_tmp[4];\
70  swab(((char *) x) +0, ((char *)  _krb_swap_tmp) +14 ,2); \
71  swab(((char *) x) +2, ((char *)  _krb_swap_tmp) +12 ,2); \
72  swab(((char *) x) +4, ((char *)  _krb_swap_tmp) +10 ,2); \
73  swab(((char *) x) +6, ((char *)  _krb_swap_tmp) +8  ,2); \
74  swab(((char *) x) +8, ((char *)  _krb_swap_tmp) +6 ,2); \
75  swab(((char *) x) +10,((char *)  _krb_swap_tmp) +4 ,2); \
76  swab(((char *) x) +12,((char *)  _krb_swap_tmp) +2 ,2); \
77  swab(((char *) x) +14,((char *)  _krb_swap_tmp) +0 ,2); \
78  memcpy(x, _krb_swap_tmp, 16);\
79                             }
80
81 #define     swap_u_12(x) {\
82  u_int32_t   _krb_swap_tmp[4];\
83  swab(( char *) x,     ((char *)  _krb_swap_tmp) +10 ,2); \
84  swab(((char *) x) +2, ((char *)  _krb_swap_tmp) +8 ,2); \
85  swab(((char *) x) +4, ((char *)  _krb_swap_tmp) +6 ,2); \
86  swab(((char *) x) +6, ((char *)  _krb_swap_tmp) +4 ,2); \
87  swab(((char *) x) +8, ((char *)  _krb_swap_tmp) +2 ,2); \
88  swab(((char *) x) +10,((char *)  _krb_swap_tmp) +0 ,2); \
89  memcpy(x, _krb_swap_tmp, 12);\
90                             }
91
92 #define     swap_C_Block(x) {\
93  u_int32_t   _krb_swap_tmp[4];\
94  swab(( char *) x,    ((char *)  _krb_swap_tmp) +6 ,2); \
95  swab(((char *) x) +2,((char *)  _krb_swap_tmp) +4 ,2); \
96  swab(((char *) x) +4,((char *)  _krb_swap_tmp) +2 ,2); \
97  swab(((char *) x) +6,((char *)  _krb_swap_tmp)    ,2); \
98  memcpy(x, _krb_swap_tmp, 8);\
99                             }
100 #define     swap_u_quad(x) {\
101  u_int32_t   _krb_swap_tmp[4];\
102  swab(( char *) &x,    ((char *)  _krb_swap_tmp) +6 ,2); \
103  swab(((char *) &x) +2,((char *)  _krb_swap_tmp) +4 ,2); \
104  swab(((char *) &x) +4,((char *)  _krb_swap_tmp) +2 ,2); \
105  swab(((char *) &x) +6,((char *)  _krb_swap_tmp)    ,2); \
106  memcpy(x, _krb_swap_tmp, 8);\
107                             }
108
109 #define     swap_u_long(x) {\
110  u_int32_t   _krb_swap_tmp[4];\
111  swab((char *)  &x,    ((char *)  _krb_swap_tmp) +2 ,2); \
112  swab(((char *) &x) +2,((char *)  _krb_swap_tmp),2); \
113  x = _krb_swap_tmp[0];   \
114                            }
115
116 #define     swap_u_short(x) {\
117  u_int16_t      _krb_swap_sh_tmp; \
118  swab((char *)  &x,    ( &_krb_swap_sh_tmp) ,2); \
119  x = (u_int16_t) _krb_swap_sh_tmp; \
120                             }
121 /* Kerberos ticket flag field bit definitions */
122 #define K_FLAG_ORDER    0       /* bit 0 --> lsb */
123 #define K_FLAG_1                /* reserved */
124 #define K_FLAG_2                /* reserved */
125 #define K_FLAG_3                /* reserved */
126 #define K_FLAG_4                /* reserved */
127 #define K_FLAG_5                /* reserved */
128 #define K_FLAG_6                /* reserved */
129 #define K_FLAG_7                /* reserved, bit 7 --> msb */
130
131 #endif /* __KRB_ARCHAEOLOGY_H__ */