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

Unified Diff: talk/app/webrtc/java/jni/peerconnection_jni.cc

Issue 1312293003: Add option to enable ECDSA key for Java API. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Remove extra line Created 5 years, 4 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
Index: talk/app/webrtc/java/jni/peerconnection_jni.cc
diff --git a/talk/app/webrtc/java/jni/peerconnection_jni.cc b/talk/app/webrtc/java/jni/peerconnection_jni.cc
index 517d543da5f999675023225ea5af57c5ddf68abe..afb57eccc2657e8ff289d7b636b724983bbd99b7 100644
--- a/talk/app/webrtc/java/jni/peerconnection_jni.cc
+++ b/talk/app/webrtc/java/jni/peerconnection_jni.cc
@@ -125,6 +125,10 @@ namespace webrtc_jni {
// Field trials initialization string
static char *field_trials_init_string = NULL;
+// Passed to SSLIdentity::Generate, "WebRTC". Used for the certificates'
+// subject and issuer name.
+static const char kIdentityName[] = "WebRTC";
jiayl2 2015/08/31 19:47:42 a minor issue, but can you move it to a header fil
AlexG 2015/08/31 20:14:13 Done.
+
#if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD)
// Set in PeerConnectionFactory_initializeAndroidGlobals().
static bool factory_static_initialized = false;
@@ -1273,6 +1277,19 @@ JavaTcpCandidatePolicyToNativeType(
return PeerConnectionInterface::kTcpCandidatePolicyEnabled;
}
+static rtc::KeyType JavaKeyTypeToNativeType(JNIEnv* jni, jobject j_key_type) {
+ std::string enum_name = GetJavaEnumName(
+ jni, "org/webrtc/PeerConnection$KeyType", j_key_type);
+
+ if (enum_name == "RSA")
+ return rtc::KT_RSA;
+ if (enum_name == "ECDSA")
+ return rtc::KT_ECDSA;
+
+ CHECK(false) << "Unexpected KeyType enum_name " << enum_name;
+ return rtc::KT_ECDSA;
+}
+
static void JavaIceServersToJsepIceServers(
JNIEnv* jni, jobject j_ice_servers,
PeerConnectionInterface::IceServers* ice_servers) {
@@ -1345,17 +1362,21 @@ JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnection)(
jni, j_rtc_config, j_tcp_candidate_policy_id);
jfieldID j_ice_servers_id = GetFieldID(
- jni, j_rtc_config_class, "iceServers",
- "Ljava/util/List;");
+ jni, j_rtc_config_class, "iceServers", "Ljava/util/List;");
jobject j_ice_servers = GetObjectField(jni, j_rtc_config, j_ice_servers_id);
jfieldID j_audio_jitter_buffer_max_packets_id = GetFieldID(
- jni, j_rtc_config_class, "audioJitterBufferMaxPackets",
- "I");
+ jni, j_rtc_config_class, "audioJitterBufferMaxPackets", "I");
jfieldID j_audio_jitter_buffer_fast_accelerate_id = GetFieldID(
jni, j_rtc_config_class, "audioJitterBufferFastAccelerate", "Z");
- PeerConnectionInterface::RTCConfiguration rtc_config;
+ jfieldID j_key_type_id = GetFieldID(
+ jni, j_rtc_config_class, "keyType",
+ "Lorg/webrtc/PeerConnection$KeyType;");
+ jobject j_key_type = GetObjectField(
+ jni, j_rtc_config, j_key_type_id);
+
+ PeerConnectionInterface::RTCConfiguration rtc_config;
rtc_config.type =
JavaIceTransportsTypeToNativeType(jni, j_ice_transports_type);
rtc_config.bundle_policy = JavaBundlePolicyToNativeType(jni, j_bundle_policy);
@@ -1369,6 +1390,22 @@ JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnection)(
rtc_config.audio_jitter_buffer_fast_accelerate = GetBooleanField(
jni, j_rtc_config, j_audio_jitter_buffer_fast_accelerate_id);
+ // Create ECDSA certificate.
+ if (JavaKeyTypeToNativeType(jni, j_key_type) == rtc::KT_ECDSA) {
+ scoped_ptr<rtc::SSLIdentity> ssl_identity(
+ rtc::SSLIdentity::Generate(kIdentityName, rtc::KT_ECDSA));
+ if (ssl_identity.get()) {
+ rtc_config.certificates.push_back(
+ rtc::RTCCertificate::Create(ssl_identity.Pass()));
+ LOG(LS_INFO) << "ECDSA certificate created.";
+ } else {
+ // Failing to create certificate should not abort peer connection
+ // creation. Instead default encryption (currently RSA) will be used.
+ LOG(LS_WARNING) <<
+ "Failed to generate SSLIdentity. Default encryption will be used.";
+ }
+ }
+
PCOJava* observer = reinterpret_cast<PCOJava*>(observer_p);
observer->SetConstraints(new ConstraintsWrapper(jni, j_constraints));
rtc::scoped_refptr<PeerConnectionInterface> pc(f->CreatePeerConnection(
« no previous file with comments | « talk/app/webrtc/java/jni/classreferenceholder.cc ('k') | talk/app/webrtc/java/src/org/webrtc/PeerConnection.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698