cc-hash.c: New file containing hash-related code from hashsum and dsig.
[u/mdw/catacomb] / cc.h
diff --git a/cc.h b/cc.h
index b7a2b27..04ff17f 100644 (file)
--- a/cc.h
+++ b/cc.h
@@ -289,6 +289,97 @@ Options:\n\
 extern int cmd_encode(int /*argc*/, char */*argv*/[]);
 extern int cmd_decode(int /*argc*/, char */*argv*/[]);
 
+/*----- Hash encoding functions -------------------------------------------*/
+
+/* --- Table --- */
+
+#define ENCODINGS(_)                                                   \
+  _(HEX, hex)                                                          \
+  _(BASE64, base64)                                                    \
+  _(BASE32, base32)
+
+enum {
+#define ENUM(tag, name) ENC_##tag,
+  ENCODINGS(ENUM)
+#undef ENUM
+  ENC_LIMIT
+};
+
+typedef struct encodeops {
+  const char *name;
+  void (*put)(const octet *, size_t, FILE *);
+  size_t (*get)(const char *, octet *, size_t, char **);
+} encodeops;
+
+extern const encodeops encodingtab[];
+
+/* --- @getencoding@ --- *
+ *
+ * Arguments:  @const char *ename@ = encoding name
+ *
+ * Returns:    Pointer to encoding table entry, or null.
+ *
+ * Use:                Finds an encoding entry given its name.
+ */
+
+extern const encodeops *getencoding(const char */*ename*/);
+
+/*----- File hashing ------------------------------------------------------*/
+
+/* --- @fhash@ --- *
+ *
+ * Arguments:  @const gchash *gch@ = pointer to hash function to use
+ *             @unsigned f@ = flags to set
+ *             @const char *file@ = file name to be hashed (null for stdin)
+ *             @void *buf@ = pointer to hash output buffer
+ *
+ * Returns:    Zero if it worked, nonzero on error.
+ *
+ * Use:                Hashes a file.
+ */
+
+#define FHF_BINARY 256u
+#define FHF_PROGRESS 512u
+
+#define FHF_MASK 3840
+
+extern int fhash(const gchash */*gch*/, unsigned /*f*/,
+                const char */*file*/, void */*buf*/);
+
+/*----- String I/O --------------------------------------------------------*/
+
+#define GSF_RAW 4096u
+#define GSF_FILE 0u
+#define GSF_STRING 8192u
+
+#define GSF_MASK 61440u
+
+/* --- @getstring@ --- *
+ *
+ * Arguments:  @void *in@ = input source
+ *             @dstr *d@ = destination string
+ *             @unsigned f@ = input flags
+ *
+ * Returns:    Zero if OK, nonzero on end-of-file.
+ *
+ * Use:                Reads a filename (or something similar) from a stream.
+ */
+
+extern int getstring(void */*in*/, dstr */*d*/, unsigned /*f*/);
+
+/* --- @putstring@ --- *
+ *
+ * Arguments:  @FILE *fp@ = stream to write on
+ *             @const char *p@ = pointer to text
+ *             @unsigned f@ = output flags
+ *
+ * Returns:    ---
+ *
+ * Use:                Emits a string to a stream.
+ */
+
+extern void putstring(FILE */*fp*/, const char */*p*/, unsigned /*f*/);
+
 /*----- Lists of things ---------------------------------------------------*/
 
 /* --- @LIST(STRING, FP, END-TEST, NAME-EXPR)@ --- *