chiark / gitweb /
NOTES: Improve documentation of NAKs.
[secnet.git] / transform-common.h
1
2 #ifndef TRANSFORM_COMMON_H
3 #define TRANSFORM_COMMON_H
4
5 #define KEYED_CHECK do{                         \
6         if (!ti->keyed) {                       \
7             *errmsg="transform unkeyed";        \
8             return 1;                           \
9         }                                       \
10     }while(0)
11
12 #define SEQNUM_CHECK(seqnum, max_skew) do{      \
13         uint32_t skew=seqnum-ti->lastrecvseq;   \
14         if (skew<0x8fffffff) {                  \
15             /* Ok */                            \
16             ti->lastrecvseq=seqnum;             \
17         } else if ((0-skew)<max_skew) { \
18             /* Ok */                            \
19         } else {                                \
20             /* Too much skew */                 \
21             *errmsg="seqnum: too much skew";    \
22             return 2;                           \
23         }                                       \
24     }while(0)
25
26 #define TRANSFORM_VALID                         \
27     static bool_t transform_valid(void *sst)    \
28     {                                           \
29         struct transform_inst *ti=sst;          \
30                                                 \
31         return ti->keyed;                       \
32     }
33
34 #define TRANSFORM_DESTROY                               \
35     static void transform_destroy(void *sst)            \
36     {                                                   \
37         struct transform_inst *st=sst;                  \
38                                                         \
39         FILLZERO(*st); /* Destroy key material */       \
40         free(st);                                       \
41     }
42
43 #define TRANSFORM_CREATE_CORE                           \
44         struct transform_inst *ti;                      \
45         ti=safe_malloc(sizeof(*ti),"transform_create"); \
46         /* mlock XXX */                                 \
47         ti->ops.st=ti;                                  \
48         ti->ops.setkey=transform_setkey;                \
49         ti->ops.valid=transform_valid;                  \
50         ti->ops.delkey=transform_delkey;                \
51         ti->ops.forwards=transform_forward;             \
52         ti->ops.reverse=transform_reverse;              \
53         ti->ops.destroy=transform_destroy;              \
54         ti->keyed=False;
55
56 #endif /*TRANSFORM_COMMON_H*/