Index: base/sha2.cc |
diff --git a/base/sha2.cc b/base/sha2.cc |
index c0fd0ab5d596eb7cd2e1202e32707bdd04f9cae6..709c29ef01a6fb7306f829c5be2cbea625482597 100644 |
--- a/base/sha2.cc |
+++ b/base/sha2.cc |
@@ -11,7 +11,7 @@ |
namespace base { |
void SHA256HashString(const std::string& str, void* output, size_t len) { |
- SHA256Context ctx; |
+ ::SHA256Context ctx; |
SHA256_Begin(&ctx); |
SHA256_Update(&ctx, reinterpret_cast<const unsigned char*>(str.data()), |
@@ -26,4 +26,36 @@ std::string SHA256HashString(const std::string& str) { |
return output; |
} |
+namespace { |
+ |
+class SHA256ContextNSS : public SHA256Context { |
+ public: |
+ SHA256ContextNSS() { |
+ SHA256_Begin(&ctx_); |
+ } |
+ |
+ virtual ~SHA256ContextNSS() { |
+ } |
+ |
+ virtual void Update(const std::string& str) { |
+ SHA256_Update(&ctx_, reinterpret_cast<const unsigned char*>(str.data()), |
+ static_cast<unsigned int>(str.length())); |
+ |
+ } |
+ |
+ virtual void Finish(void* output, size_t len) { |
+ SHA256_End(&ctx_, static_cast<unsigned char*>(output), NULL, |
+ static_cast<unsigned int>(len)); |
+ } |
+ |
+ private: |
+ ::SHA256Context ctx_; |
+}; |
+ |
+} // namespace |
+ |
+SHA256Context* SHA256Context::Create() { |
+ return new SHA256ContextNSS(); |
+} |
+ |
} // namespace base |