diff options
Diffstat (limited to 'boost/compute/detail/sha1.hpp')
-rw-r--r-- | boost/compute/detail/sha1.hpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/boost/compute/detail/sha1.hpp b/boost/compute/detail/sha1.hpp new file mode 100644 index 0000000000..5685fa4407 --- /dev/null +++ b/boost/compute/detail/sha1.hpp @@ -0,0 +1,53 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@gmail.com> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +// See http://boostorg.github.com/compute for more information. +//---------------------------------------------------------------------------// + +#ifndef BOOST_COMPUTE_DETAIL_SHA1_HPP +#define BOOST_COMPUTE_DETAIL_SHA1_HPP + +#include <sstream> +#include <iomanip> +#include <boost/uuid/sha1.hpp> + +namespace boost { +namespace compute { +namespace detail { + +// Accumulates SHA1 hash of the passed strings. +class sha1 { + public: + sha1(const std::string &s = "") { + if (!s.empty()) this->process(s); + } + + sha1& process(const std::string &s) { + h.process_bytes(s.c_str(), s.size()); + return *this; + } + + operator std::string() { + unsigned int digest[5]; + h.get_digest(digest); + + std::ostringstream buf; + for(int i = 0; i < 5; ++i) + buf << std::hex << std::setfill('0') << std::setw(8) << digest[i]; + + return buf.str(); + } + private: + boost::uuids::detail::sha1 h; +}; + +} // end detail namespace +} // end compute namespace +} // end boost namespace + + +#endif // BOOST_COMPUTE_DETAIL_SHA1_HPP |