summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2011-08-12 18:55:52 (GMT)
committerRemko Tronçon <git@el-tramo.be>2011-08-12 18:55:52 (GMT)
commit7917a635fb1cd67100391a0787942288481fc47b (patch)
tree97f598b6b1bd65b2ea76c91cd050858701b8b6db /Swiften/StringCodecs/SHA256.h
parentc6ffcd27e94d2f90fd4a3bcb5d2d3c6550ead59c (diff)
downloadswift-7917a635fb1cd67100391a0787942288481fc47b.zip
swift-7917a635fb1cd67100391a0787942288481fc47b.tar.bz2
Added SHA256.
Diffstat (limited to 'Swiften/StringCodecs/SHA256.h')
-rw-r--r--Swiften/StringCodecs/SHA256.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/Swiften/StringCodecs/SHA256.h b/Swiften/StringCodecs/SHA256.h
new file mode 100644
index 0000000..28a0e05
--- /dev/null
+++ b/Swiften/StringCodecs/SHA256.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <vector>
+#include <boost/cstdint.hpp>
+
+#include <Swiften/Base/ByteArray.h>
+#include <Swiften/Base/SafeByteArray.h>
+
+namespace Swift {
+ class SHA256 {
+ public:
+ SHA256();
+
+ SHA256& update(const std::vector<unsigned char>& data);
+ std::vector<unsigned char> getHash() const;
+
+ /**
+ * Equivalent of:
+ * SHA256().update(data),getHash(), but slightly more efficient and
+ * convenient.
+ */
+ static ByteArray getHash(const ByteArray& data);
+ static ByteArray getHash(const SafeByteArray& data);
+
+ ByteArray operator()(const SafeByteArray& data) {
+ return getHash(data);
+ }
+
+ ByteArray operator()(const ByteArray& data) {
+ return getHash(data);
+ }
+
+ private:
+ struct State {
+ boost::uint64_t length;
+ boost::uint32_t state[8], curlen;
+ unsigned char buf[64];
+ };
+
+ static int init(State *md);
+ static int process(State * md, const unsigned char *in, unsigned int inlen);
+ static int compress(State *md, unsigned char *buf);
+ static int done(State * md, unsigned char *out);
+
+ template<typename Container> static ByteArray getHashInternal(const Container& input);
+
+ private:
+ State state;
+ };
+}