summaryrefslogtreecommitdiff
path: root/genisoimage/checksum.h
diff options
context:
space:
mode:
Diffstat (limited to 'genisoimage/checksum.h')
-rw-r--r--genisoimage/checksum.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/genisoimage/checksum.h b/genisoimage/checksum.h
new file mode 100644
index 0000000..367fae2
--- /dev/null
+++ b/genisoimage/checksum.h
@@ -0,0 +1,74 @@
+/*
+ * checksum.h
+ *
+ * Copyright (c) 2008- Steve McIntyre <steve@einval.com>
+ *
+ * Definitions and prototypes for a generic checksum interface, used
+ * in JTE. Inspired heavily by the interface to the MD5 code we're
+ * using already.
+ *
+ * GNU GPL v2
+ */
+
+enum checksum_types
+{
+ CHECK_MD5 = 0,
+ CHECK_SHA1,
+ CHECK_SHA256,
+ CHECK_SHA512,
+ NUM_CHECKSUMS
+};
+
+#define CHECK_MD5_USED (1 << CHECK_MD5)
+#define CHECK_SHA1_USED (1 << CHECK_SHA1)
+#define CHECK_SHA256_USED (1 << CHECK_SHA256)
+#define CHECK_SHA512_USED (1 << CHECK_SHA512)
+#define CHECK_ALL_USED 0xFFFFFFFF
+
+typedef void checksum_context_t;
+
+struct checksum_info
+{
+ char *name;
+ char *prog;
+ int digest_size;
+};
+
+/* Ask the library for information about a particular checksum
+ * algorithm. Returns a pointer to internal memory - DO NOT
+ * MODIFY/FREE! */
+struct checksum_info *checksum_information(enum checksum_types which);
+
+/* Allocate / initialise a context for the chosen checksums. OR
+ * together the desired checksums as the parameter */
+checksum_context_t *checksum_init_context(int checksums, const char *owner);
+
+/* Cleanup and free a context when it's finished with */
+void checksum_free_context(checksum_context_t *context);
+
+/* Pass a new buffer full of data through the checksum code */
+void checksum_update(checksum_context_t *context,
+ unsigned char const *buf,
+ unsigned int len);
+
+/* Finish the current set of checksums */
+void checksum_final(checksum_context_t *context);
+
+/* Extract a particular algorithm's checksum once checksum_final() has
+ * been called. Use the details in checksum_information() above first
+ * to see how big the digest will be. Only valid once checksum_final()
+ * has been called, otherwise the digest returned will be all
+ * zeroes. */
+void checksum_copy(checksum_context_t *context,
+ enum checksum_types which,
+ unsigned char *digest);
+
+/* Helper function: return a pointer to a string containing the ASCII
+ * hexadecimal dump of a checksum. Only valid once checksum_final()
+ * has been called, otherwise will return NULL */
+const char * checksum_hex(checksum_context_t *context,
+ enum checksum_types which);
+
+
+extern int parse_checksum_algo(char *arg,
+ int *algo);