Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2812)

Unified Diff: content/renderer/webcrypto_impl_openssl.cc

Issue 23621050: Added WebCypto digest OpenSSL implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Trivial change to test cl upload Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/webcrypto_impl_openssl.cc
diff --git a/content/renderer/webcrypto_impl_openssl.cc b/content/renderer/webcrypto_impl_openssl.cc
index 343eb7251076093623182568b6ed3e75e02eddc0..b5b29c2fd7a6274b39a0379d8ec1869a32293eb2 100644
--- a/content/renderer/webcrypto_impl_openssl.cc
+++ b/content/renderer/webcrypto_impl_openssl.cc
@@ -4,9 +4,16 @@
#include "content/renderer/webcrypto_impl.h"
+#include <openssl/evp.h>
Bryan Eyler 2013/09/18 21:36:21 Following style of _nss.cc, leave a space between
Ryan Sleevi 2013/09/18 22:05:36 http://www.chromium.org/developers/coding-style#TO
padolph 2013/09/18 22:50:07 Done.
+#include "base/logging.h"
+#include "crypto/openssl_util.h"
+#include "third_party/WebKit/public/platform/WebArrayBuffer.h"
+#include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h"
+
namespace content {
void WebCryptoImpl::Init() {
+ crypto::EnsureOpenSSLInit();
}
bool WebCryptoImpl::DigestInternal(
@@ -14,9 +21,54 @@ bool WebCryptoImpl::DigestInternal(
const unsigned char* data,
unsigned data_size,
WebKit::WebArrayBuffer* buffer) {
- // TODO(bryaneyler): Placeholder for OpenSSL implementation.
- // Issue http://crbug.com/267888.
- return false;
+
+ crypto::OpenSSLErrStackTracer(FROM_HERE);
Bryan Eyler 2013/09/18 21:36:21 Two-space indentation throughout this function - h
padolph 2013/09/18 22:50:07 Done.
+
+ const EVP_MD * digAlg;
Ryan Sleevi 2013/09/18 22:05:36 STYLE: "const EVP_MD *" -> "const EVP_MD* " (see h
padolph 2013/09/18 22:50:07 Done.
+ switch (algorithm.id()) {
+ case WebKit::WebCryptoAlgorithmIdSha1:
+ digAlg = EVP_sha1();
+ break;
+ case WebKit::WebCryptoAlgorithmIdSha224:
+ digAlg = EVP_sha224();
+ break;
+ case WebKit::WebCryptoAlgorithmIdSha256:
+ digAlg = EVP_sha256();
+ break;
+ case WebKit::WebCryptoAlgorithmIdSha384:
+ digAlg = EVP_sha384();
+ break;
+ case WebKit::WebCryptoAlgorithmIdSha512:
+ digAlg = EVP_sha512();
+ break;
+ default:
+ // Not a digest algorithm.
+ return false;
+ }
+
+ crypto::ScopedOpenSSL<EVP_MD_CTX, EVP_MD_CTX_destroy>
+ digCtx(EVP_MD_CTX_create());
Bryan Eyler 2013/09/18 21:36:21 Naming: Don't abbreviate and use underscores to se
padolph 2013/09/18 22:50:07 Done.
+ if (!digCtx.get())
+ return false;
+
+ if (!EVP_DigestInit_ex(digCtx.get(), digAlg, NULL))
+ return false;
+
+ if (!EVP_DigestUpdate(digCtx.get(), data, data_size))
Ryan Sleevi 2013/09/18 22:05:36 STYLE NIT (eg: not critical, but perhaps more cons
padolph 2013/09/18 22:50:07 Done.
+ return false;
+
+ const size_t hashResultSize = EVP_MD_CTX_size(digCtx.get());
Ryan Sleevi 2013/09/18 22:05:36 CORRECTNESS: EVP_MD_CTX_size returns an int, not a
padolph 2013/09/18 22:50:07 Done.
+ DCHECK_LE(hashResultSize, static_cast<size_t>(EVP_MAX_MD_SIZE));
+
+ *buffer = WebKit::WebArrayBuffer::create(hashResultSize, 1);
+ unsigned char* const hashBuf =
Ryan Sleevi 2013/09/18 22:05:36 STYLE: hashBuf -> hash_buffer / result_buffer
padolph 2013/09/18 22:50:07 Done.
+ reinterpret_cast<unsigned char* const>(buffer->data());
+
+ unsigned int hashSize = 0;
Ryan Sleevi 2013/09/18 22:05:36 STYLE: hashSize -> hash_size
padolph 2013/09/18 22:50:07 Done.
+ if (!(EVP_DigestFinal_ex(digCtx.get(), hashBuf, &hashSize)))
Ryan Sleevi 2013/09/18 22:05:36 STYLE: unnecessary added () STYLE NIT (eg: not cri
padolph 2013/09/18 22:50:07 Done. Also, I realized I should release buffer (b
+ return false;
+
+ return hashResultSize == hashSize;
}
} // namespace content
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698