summaryrefslogtreecommitdiffabout
path: root/pwmanager/pwmanager/sha1.h
Side-by-side diff
Diffstat (limited to 'pwmanager/pwmanager/sha1.h') (more/less context) (ignore whitespace changes)
-rw-r--r--pwmanager/pwmanager/sha1.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/pwmanager/pwmanager/sha1.h b/pwmanager/pwmanager/sha1.h
new file mode 100644
index 0000000..29442a7
--- a/dev/null
+++ b/pwmanager/pwmanager/sha1.h
@@ -0,0 +1,75 @@
+/***************************************************************************
+ * *
+ * copyright (C) 2003 by Michael Buesch *
+ * email: mbuesch@freenet.de *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License version 2 *
+ * as published by the Free Software Foundation. *
+ * *
+ ***************************************************************************/
+
+/***************************************************************************
+ * copyright (C) 2004 by Ulf Schenk
+ * This file is originaly based on version 1.0.1 of pwmanager
+ * and was modified to run on embedded devices that run microkde
+ *
+ * $Id$
+ **************************************************************************/
+
+#ifndef SHA1_H
+#define SHA1_H
+
+#include <stdint.h>
+#include <string>
+using std::string;
+
+typedef uint8_t byte;
+
+#define SHA1_HASH_LEN_BIT 160
+#define SHA1_HASH_LEN_BYTE (SHA1_HASH_LEN_BIT / 8)
+
+/** sha1 hash algorithm.
+ * Derived from libgcrypt-1.1.12
+ */
+class Sha1
+{
+ struct SHA1_CONTEXT
+ {
+ uint32_t h0,h1,h2,h3,h4;
+ uint32_t nblocks;
+ byte buf[64];
+ int count;
+ };
+
+public:
+ Sha1() { sha1_init(); }
+ static bool selfTest();
+
+ void sha1_write(const byte *inbuf, uint32_t inlen);
+ string sha1_read();
+
+protected:
+ void sha1_init();
+ void sha1_final();
+ void burn_stack (int bytes);
+ void transform(const byte *data);
+
+ /** Rotate a 32 bit integer by n bytes */
+ uint32_t rol(uint32_t x, int n)
+ {
+#if defined(__GNUC__) && defined(__i386__)
+ __asm__("roll %%cl,%0"
+ :"=r" (x)
+ :"0" (x),"c" (n));
+ return x;
+#else
+ return ((x) << (n)) | ((x) >> (32-(n)));
+#endif
+ }
+
+protected:
+ struct SHA1_CONTEXT ctx;
+};
+
+#endif