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

Unified Diff: content/child/webcrypto/webcrypto_impl.cc

Issue 749183004: WebCrypto: Implement crypto.subtle.deriveKey (chromium-side). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ecdh
Patch Set: Created 6 years 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
Index: content/child/webcrypto/webcrypto_impl.cc
diff --git a/content/child/webcrypto/webcrypto_impl.cc b/content/child/webcrypto/webcrypto_impl.cc
index 8efd9de0fb141ab748065944c173899f72c3be38..9a3924b9aa9d9047654cf59e5e07dde5133a49a4 100644
--- a/content/child/webcrypto/webcrypto_impl.cc
+++ b/content/child/webcrypto/webcrypto_impl.cc
@@ -350,6 +350,32 @@ struct DeriveBitsState : public BaseState {
std::vector<uint8_t> derived_bytes;
};
+struct DeriveKeyState : public BaseState {
+ DeriveKeyState(const blink::WebCryptoAlgorithm& algorithm,
+ const blink::WebCryptoKey& base_key,
+ const blink::WebCryptoAlgorithm& import_algorithm,
+ const blink::WebCryptoAlgorithm& key_length_algorithm,
+ bool extractable,
+ blink::WebCryptoKeyUsageMask usages,
+ const blink::WebCryptoResult& result)
+ : BaseState(result),
+ algorithm(algorithm),
+ base_key(base_key),
+ import_algorithm(import_algorithm),
+ key_length_algorithm(key_length_algorithm),
+ extractable(extractable),
+ usages(usages) {}
+
+ const blink::WebCryptoAlgorithm algorithm;
+ const blink::WebCryptoKey base_key;
+ const blink::WebCryptoAlgorithm import_algorithm;
+ const blink::WebCryptoAlgorithm key_length_algorithm;
+ bool extractable;
+ blink::WebCryptoKeyUsageMask usages;
+
+ blink::WebCryptoKey derived_key;
+};
+
// --------------------------------------------------------------------
// Wrapper functions
// --------------------------------------------------------------------
@@ -552,6 +578,22 @@ void DoDeriveBits(scoped_ptr<DeriveBitsState> passed_state) {
FROM_HERE, base::Bind(DoDeriveBitsReply, Passed(&passed_state)));
}
+void DoDeriveKeyReply(scoped_ptr<DeriveKeyState> state) {
+ CompleteWithKeyOrError(state->status, state->derived_key, &state->result);
+}
+
+void DoDeriveKey(scoped_ptr<DeriveKeyState> passed_state) {
+ DeriveKeyState* state = passed_state.get();
+ if (state->cancelled())
+ return;
+ state->status = webcrypto::DeriveKey(
+ state->algorithm, state->base_key, state->import_algorithm,
+ state->key_length_algorithm, state->extractable, state->usages,
+ &state->derived_key);
+ state->origin_thread->PostTask(
+ FROM_HERE, base::Bind(DoDeriveKeyReply, Passed(&passed_state)));
+}
+
} // namespace
WebCryptoImpl::WebCryptoImpl() {
@@ -715,6 +757,23 @@ void WebCryptoImpl::deriveBits(const blink::WebCryptoAlgorithm& algorithm,
}
}
+void WebCryptoImpl::deriveKey(
+ const blink::WebCryptoAlgorithm& algorithm,
+ const blink::WebCryptoKey& base_key,
+ const blink::WebCryptoAlgorithm& import_algorithm,
+ const blink::WebCryptoAlgorithm& key_length_algorithm,
+ bool extractable,
+ blink::WebCryptoKeyUsageMask usages,
+ blink::WebCryptoResult result) {
+ scoped_ptr<DeriveKeyState> state(
+ new DeriveKeyState(algorithm, base_key, import_algorithm,
+ key_length_algorithm, extractable, usages, result));
+ if (!CryptoThreadPool::PostTask(FROM_HERE,
+ base::Bind(DoDeriveKey, Passed(&state)))) {
+ CompleteWithThreadPoolError(&result);
+ }
+}
+
blink::WebCryptoDigestor* WebCryptoImpl::createDigestor(
blink::WebCryptoAlgorithmId algorithm_id) {
return webcrypto::CreateDigestor(algorithm_id).release();
« content/child/webcrypto/test/ecdh_unittest.cc ('K') | « content/child/webcrypto/webcrypto_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698