chiark / gitweb /
transform: split out transform-common.h
[secnet.git] / transform-common.h
diff --git a/transform-common.h b/transform-common.h
new file mode 100644 (file)
index 0000000..b3c70a8
--- /dev/null
@@ -0,0 +1,56 @@
+
+#ifndef TRANSFORM_COMMON_H
+#define TRANSFORM_COMMON_H
+
+#define KEYED_CHECK do{                                \
+       if (!ti->keyed) {                       \
+           *errmsg="transform unkeyed";        \
+           return 1;                           \
+       }                                       \
+    }while(0)
+
+#define SEQNUM_CHECK(seqnum, max_skew) do{     \
+       uint32_t skew=seqnum-ti->lastrecvseq;   \
+       if (skew<0x8fffffff) {                  \
+           /* Ok */                            \
+           ti->lastrecvseq=seqnum;             \
+       } else if ((0-skew)<max_skew) { \
+           /* Ok */                            \
+       } else {                                \
+           /* Too much skew */                 \
+           *errmsg="seqnum: too much skew";    \
+           return 2;                           \
+       }                                       \
+    }while(0)
+
+#define TRANSFORM_VALID                                \
+    static bool_t transform_valid(void *sst)   \
+    {                                          \
+       struct transform_inst *ti=sst;          \
+                                               \
+       return ti->keyed;                       \
+    }
+
+#define TRANSFORM_DESTROY                              \
+    static void transform_destroy(void *sst)           \
+    {                                                  \
+       struct transform_inst *st=sst;                  \
+                                                       \
+       FILLZERO(*st); /* Destroy key material */       \
+       free(st);                                       \
+    }
+
+#define TRANSFORM_CREATE_CORE                          \
+       struct transform_inst *ti;                      \
+       ti=safe_malloc(sizeof(*ti),"transform_create"); \
+       /* mlock XXX */                                 \
+       ti->ops.st=ti;                                  \
+       ti->ops.setkey=transform_setkey;                \
+       ti->ops.valid=transform_valid;                  \
+       ti->ops.delkey=transform_delkey;                \
+       ti->ops.forwards=transform_forward;             \
+       ti->ops.reverse=transform_reverse;              \
+       ti->ops.destroy=transform_destroy;              \
+       ti->keyed=False;
+
+#endif /*TRANSFORM_COMMON_H*/