summaryrefslogtreecommitdiff
path: root/libs/sha1/sha1.h
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-08-01 19:01:10 +0200
committerClifford Wolf <clifford@clifford.at>2014-08-01 19:01:10 +0200
commitbd74ed7da467de11128c57c4c424febe4a7e2f39 (patch)
tree8c6f55776de2d385193c12a2cacfa2733be0b09d /libs/sha1/sha1.h
parent1e224506be6d824ea9ed1855fa46d039e5ffefd5 (diff)
Replaced sha1 implementation
Diffstat (limited to 'libs/sha1/sha1.h')
-rw-r--r--libs/sha1/sha1.h106
1 files changed, 57 insertions, 49 deletions
diff --git a/libs/sha1/sha1.h b/libs/sha1/sha1.h
index 540c156d..15edee12 100644
--- a/libs/sha1/sha1.h
+++ b/libs/sha1/sha1.h
@@ -1,49 +1,57 @@
-/*
- Copyright (c) 2011, Micael Hildenborg
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Micael Hildenborg nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY Micael Hildenborg ''AS IS'' AND ANY
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL Micael Hildenborg BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef SHA1_DEFINED
-#define SHA1_DEFINED
-
-namespace sha1
-{
-
- /**
- @param src points to any kind of data to be hashed.
- @param bytelength the number of bytes to hash from the src pointer.
- @param hash should point to a buffer of at least 20 bytes of size for storing the sha1 result in.
- */
- void calc(const void* src, const int bytelength, unsigned char* hash);
-
- /**
- @param hash is 20 bytes of sha1 hash. This is the same data that is the result from the calc function.
- @param hexstring should point to a buffer of at least 41 bytes of size for storing the hexadecimal representation of the hash. A zero will be written at position 40, so the buffer will be a valid zero ended string.
- */
- void toHexString(const unsigned char* hash, char* hexstring);
-
-} // namespace sha1
-
-#endif // SHA1_DEFINED
+/*
+ sha1.h - header of
+
+ ============
+ SHA-1 in C++
+ ============
+
+ 100% Public Domain.
+
+ Original C Code
+ -- Steve Reid <steve@edmweb.com>
+ Small changes to fit into bglibs
+ -- Bruce Guenter <bruce@untroubled.org>
+ Translation to simpler C++ Code
+ -- Volker Grabsch <vog@notjusthosting.com>
+*/
+
+#ifndef SHA1_HPP
+#define SHA1_HPP
+
+
+#include <iostream>
+#include <string>
+
+class SHA1
+{
+public:
+ SHA1();
+ void update(const std::string &s);
+ void update(std::istream &is);
+ std::string final();
+ static std::string from_file(const std::string &filename);
+
+private:
+ typedef unsigned long int uint32; /* just needs to be at least 32bit */
+ typedef unsigned long long uint64; /* just needs to be at least 64bit */
+
+ static const unsigned int DIGEST_INTS = 5; /* number of 32bit integers per SHA1 digest */
+ static const unsigned int BLOCK_INTS = 16; /* number of 32bit integers per SHA1 block */
+ static const unsigned int BLOCK_BYTES = BLOCK_INTS * 4;
+
+ uint32 digest[DIGEST_INTS];
+ std::string buffer;
+ uint64 transforms;
+
+ void reset();
+ void transform(uint32 block[BLOCK_BYTES]);
+
+ static void buffer_to_block(const std::string &buffer, uint32 block[BLOCK_BYTES]);
+ static void read(std::istream &is, std::string &s, int max);
+};
+
+std::string sha1(const std::string &string);
+
+
+
+#endif /* SHA1_HPP */