summaryrefslogtreecommitdiffstats
path: root/subsurface-core/sha1.h
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-11-02 19:54:34 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-11-02 19:54:34 -0800
commit8ea7f404574c2ee571d2dde6bb6be3791e962150 (patch)
tree6a050178bfc71bf10558968f2a3bc0a12d8c525f /subsurface-core/sha1.h
parentb273c1b0ca7bfe933e7c83742f1610f6bbe3f4d3 (diff)
parentdf7818a9b8495285b4d9812e5d6d50d6f9c08813 (diff)
downloadsubsurface-8ea7f404574c2ee571d2dde6bb6be3791e962150.tar.gz
Merge branch 'cmakeAndPreferences'
Diffstat (limited to 'subsurface-core/sha1.h')
-rw-r--r--subsurface-core/sha1.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/subsurface-core/sha1.h b/subsurface-core/sha1.h
new file mode 100644
index 000000000..cab6ff77d
--- /dev/null
+++ b/subsurface-core/sha1.h
@@ -0,0 +1,38 @@
+/*
+ * SHA1 routine optimized to do word accesses rather than byte accesses,
+ * and to avoid unnecessary copies into the context array.
+ *
+ * This was initially based on the Mozilla SHA1 implementation, although
+ * none of the original Mozilla code remains.
+ */
+#ifndef SHA1_H
+#define SHA1_H
+
+typedef struct
+{
+ unsigned long long size;
+ unsigned int H[5];
+ unsigned int W[16];
+} blk_SHA_CTX;
+
+void blk_SHA1_Init(blk_SHA_CTX *ctx);
+void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *dataIn, unsigned long len);
+void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx);
+
+/* Make us use the standard names */
+#define SHA_CTX blk_SHA_CTX
+#define SHA1_Init blk_SHA1_Init
+#define SHA1_Update blk_SHA1_Update
+#define SHA1_Final blk_SHA1_Final
+
+/* Trivial helper function */
+static inline void SHA1(const void *dataIn, unsigned long len, unsigned char hashout[20])
+{
+ SHA_CTX ctx;
+
+ SHA1_Init(&ctx);
+ SHA1_Update(&ctx, dataIn, len);
+ SHA1_Final(hashout, &ctx);
+}
+
+#endif // SHA1_H