chiark / gitweb /
496ea46aff675b9c5539d79897663019ad5db3a1
[secnet.git] / transform-common.h
1
2 #ifndef TRANSFORM_COMMON_H
3 #define TRANSFORM_COMMON_H
4
5 #include "magic.h"
6
7 #define KEYED_CHECK do{                         \
8         if (!ti->keyed) {                       \
9             *errmsg="transform unkeyed";        \
10             return 1;                           \
11         }                                       \
12     }while(0)
13
14 #define SEQNUM_CHECK(seqnum, p) do{                     \
15         uint32_t skew=seqnum-ti->lastrecvseq;           \
16         if (skew<0x8fffffff) {                          \
17             /* Ok */                                    \
18             ti->lastrecvseq=seqnum;                     \
19         } else if ((0-skew)<(p)->max_seq_skew) {        \
20             /* Ok */                                    \
21         } else {                                        \
22             /* Too much skew */                         \
23             *errmsg="seqnum: too much skew";            \
24             return 2;                                   \
25         }                                               \
26     }while(0)
27
28 #define SEQNUM_KEYED_FIELDS                                             \
29     uint32_t sendseq;                                                   \
30     uint32_t lastrecvseq;                                               \
31     bool_t keyed
32
33 #define SEQNUM_KEYED_INIT(initlastrecvseq,initsendseq)  \
34     (ti->lastrecvseq=(initlastrecvseq),                 \
35      ti->sendseq=(initsendseq),                         \
36      ti->keyed=True)
37
38 #define TRANSFORM_VALID                         \
39     static bool_t transform_valid(void *sst)    \
40     {                                           \
41         struct transform_inst *ti=sst;          \
42                                                 \
43         return ti->keyed;                       \
44     }
45
46 #define TRANSFORM_DESTROY                               \
47     static void transform_destroy(void *sst)            \
48     {                                                   \
49         struct transform_inst *st=sst;                  \
50                                                         \
51         FILLZERO(*st); /* Destroy key material */       \
52         free(st);                                       \
53     }
54
55 #define SET_CAPAB_TRANSFORMNUM(def) do{                                 \
56         st->ops.capab_transformnum=dict_read_number(dict, "capab-num",  \
57                                      False, "transform", loc, (def));   \
58         if (st->ops.capab_transformnum > CAPAB_TRANSFORMNUM_MAX)        \
59             cfgfatal(loc,"transform","capab-num out of range 0..%d\n",  \
60                      CAPAB_TRANSFORMNUM_MAX);                           \
61     }while(0)
62
63 #define TRANSFORM_CREATE_CORE                           \
64         struct transform_inst *ti;                      \
65         ti=safe_malloc(sizeof(*ti),"transform_create"); \
66         /* mlock XXX */                                 \
67         ti->ops.st=ti;                                  \
68         ti->ops.setkey=transform_setkey;                \
69         ti->ops.valid=transform_valid;                  \
70         ti->ops.delkey=transform_delkey;                \
71         ti->ops.forwards=transform_forward;             \
72         ti->ops.reverse=transform_reverse;              \
73         ti->ops.destroy=transform_destroy;              \
74         ti->keyed=False;
75
76 #define SEQNUM_PARAMS_FIELDS                    \
77     uint32_t max_seq_skew
78
79 #define SEQNUM_PARAMS_INIT(dict,p,desc,loc)                             \
80     (p)->max_seq_skew=dict_read_number((dict), "max-sequence-skew",     \
81                                         False, (desc), (loc), 10);
82
83
84 #endif /*TRANSFORM_COMMON_H*/