summaryrefslogtreecommitdiffstats
path: root/android_webview/native/token_binding_manager_bridge.cc
diff options
context:
space:
mode:
authorsgurun <sgurun@chromium.org>2016-01-25 18:39:04 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-26 02:41:02 +0000
commit0905e04fc78ee84151ef48171d275ae61adc040f (patch)
treedd17bec671ba2ff881d8ffffab97225171d52908 /android_webview/native/token_binding_manager_bridge.cc
parent5383b5d07fb0e418f13907874d801662e9668733 (diff)
downloadchromium_src-0905e04fc78ee84151ef48171d275ae61adc040f.zip
chromium_src-0905e04fc78ee84151ef48171d275ae61adc040f.tar.gz
chromium_src-0905e04fc78ee84151ef48171d275ae61adc040f.tar.bz2
The key conversion algorithm for Token binding
BUG=576874 Convert the keys from native format to Java. Review URL: https://codereview.chromium.org/1631123002 Cr-Commit-Position: refs/heads/master@{#371430}
Diffstat (limited to 'android_webview/native/token_binding_manager_bridge.cc')
-rw-r--r--android_webview/native/token_binding_manager_bridge.cc27
1 files changed, 24 insertions, 3 deletions
diff --git a/android_webview/native/token_binding_manager_bridge.cc b/android_webview/native/token_binding_manager_bridge.cc
index 07c690f..cf959f5 100644
--- a/android_webview/native/token_binding_manager_bridge.cc
+++ b/android_webview/native/token_binding_manager_bridge.cc
@@ -6,15 +6,19 @@
#include "android_webview/browser/net/token_binding_manager.h"
#include "base/android/jni_android.h"
+#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/bind.h"
#include "content/public/browser/browser_thread.h"
#include "crypto/ec_private_key.h"
#include "jni/AwTokenBindingManager_jni.h"
+#include "net/base/net_errors.h"
+#include "net/ssl/channel_id_service.h"
using base::android::ConvertJavaStringToUTF8;
using base::android::ScopedJavaGlobalRef;
using content::BrowserThread;
+using net::ChannelIDService;
namespace android_webview {
@@ -26,10 +30,27 @@ void OnKeyReady(const ScopedJavaGlobalRef<jobject>& callback,
crypto::ECPrivateKey* key) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- // TODO(sgurun) implement conversion and plumbing the keypair to java.
-
JNIEnv* env = base::android::AttachCurrentThread();
- Java_AwTokenBindingManager_onKeyReady(env, callback.obj());
+
+ if (status != net::OK || !key) {
+ Java_AwTokenBindingManager_onKeyReady(env, callback.obj(), nullptr,
+ nullptr);
+ return;
+ }
+
+ std::vector<uint8_t> private_key;
+ key->ExportEncryptedPrivateKey(ChannelIDService::kEPKIPassword, 1,
+ &private_key);
+ ScopedJavaLocalRef<jbyteArray> jprivate_key = base::android::ToJavaByteArray(
+ env, private_key.data(), private_key.size());
+
+ std::vector<uint8_t> public_key;
+ key->ExportPublicKey(&public_key);
+ ScopedJavaLocalRef<jbyteArray> jpublic_key = base::android::ToJavaByteArray(
+ env, public_key.data(), public_key.size());
+
+ Java_AwTokenBindingManager_onKeyReady(env, callback.obj(), jprivate_key.obj(),
+ jpublic_key.obj());
}
// Indicates webview client that key deletion is complete.