OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 10 matching lines...) Expand all Loading... |
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; | 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 | 27 |
28 #ifndef TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_ | 28 #ifndef TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_ |
29 #define TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_ | 29 #define TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_ |
30 | 30 |
| 31 #include "talk/app/webrtc/dtlsidentitystore.h" |
31 #include "talk/app/webrtc/peerconnectioninterface.h" | 32 #include "talk/app/webrtc/peerconnectioninterface.h" |
32 | 33 |
33 static const char kRSA_PRIVATE_KEY_PEM[] = | 34 static const char kRSA_PRIVATE_KEY_PEM[] = |
34 "-----BEGIN RSA PRIVATE KEY-----\n" | 35 "-----BEGIN RSA PRIVATE KEY-----\n" |
35 "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMYRkbhmI7kVA/rM\n" | 36 "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMYRkbhmI7kVA/rM\n" |
36 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" | 37 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" |
37 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" | 38 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" |
38 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAECgYAvgOs4FJcgvp+TuREx7YtiYVsH\n" | 39 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAECgYAvgOs4FJcgvp+TuREx7YtiYVsH\n" |
39 "mwQPTum2z/8VzWGwR8BBHBvIpVe1MbD/Y4seyI2aco/7UaisatSgJhsU46/9Y4fq\n" | 40 "mwQPTum2z/8VzWGwR8BBHBvIpVe1MbD/Y4seyI2aco/7UaisatSgJhsU46/9Y4fq\n" |
40 "2TwXH9QANf4at4d9n/R6rzwpAJOpgwZgKvdQjkfrKTtgLV+/dawvpxUYkRH4JZM1\n" | 41 "2TwXH9QANf4at4d9n/R6rzwpAJOpgwZgKvdQjkfrKTtgLV+/dawvpxUYkRH4JZM1\n" |
(...skipping 13 matching lines...) Expand all Loading... |
54 "ZWJSVEMwHhcNMTQwMTAyMTgyNDQ3WhcNMTQwMjAxMTgyNDQ3WjARMQ8wDQYDVQQD\n" | 55 "ZWJSVEMwHhcNMTQwMTAyMTgyNDQ3WhcNMTQwMjAxMTgyNDQ3WjARMQ8wDQYDVQQD\n" |
55 "EwZXZWJSVEMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYRkbhmI7kVA/rM\n" | 56 "EwZXZWJSVEMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYRkbhmI7kVA/rM\n" |
56 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" | 57 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" |
57 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" | 58 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" |
58 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAUflI\n" | 59 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAUflI\n" |
59 "VUe5Krqf5RVa5C3u/UTAOAUJBiDS3VANTCLBxjuMsvqOG0WvaYWP3HYPgrz0jXK2\n" | 60 "VUe5Krqf5RVa5C3u/UTAOAUJBiDS3VANTCLBxjuMsvqOG0WvaYWP3HYPgrz0jXK2\n" |
60 "LJE/mGw3MyFHEqi81jh95J+ypl6xKW6Rm8jKLR87gUvCaVYn/Z4/P3AqcQTB7wOv\n" | 61 "LJE/mGw3MyFHEqi81jh95J+ypl6xKW6Rm8jKLR87gUvCaVYn/Z4/P3AqcQTB7wOv\n" |
61 "UD0A8qfhfDM+LK6rPAnCsVN0NRDY3jvd6rzix9M=\n" | 62 "UD0A8qfhfDM+LK6rPAnCsVN0NRDY3jvd6rzix9M=\n" |
62 "-----END CERTIFICATE-----\n"; | 63 "-----END CERTIFICATE-----\n"; |
63 | 64 |
64 using webrtc::DTLSIdentityRequestObserver; | 65 class FakeDtlsIdentityStoreRSA : public webrtc::DtlsIdentityStoreInterface, |
| 66 public rtc::MessageHandler { |
| 67 public: |
| 68 // TODO(hbos): pointless class |
| 69 struct Request { |
| 70 Request(webrtc::DtlsIdentityRequestObserver* observer) |
| 71 : observer(observer) {} |
65 | 72 |
66 class FakeIdentityService : public webrtc::DTLSIdentityServiceInterface, | 73 rtc::scoped_refptr<webrtc::DtlsIdentityRequestObserver> observer; |
67 public rtc::MessageHandler { | |
68 public: | |
69 struct Request { | |
70 Request(const std::string& common_name, | |
71 DTLSIdentityRequestObserver* observer) | |
72 : common_name(common_name), observer(observer) {} | |
73 | |
74 std::string common_name; | |
75 rtc::scoped_refptr<DTLSIdentityRequestObserver> observer; | |
76 }; | 74 }; |
77 typedef rtc::TypedMessageData<Request> MessageData; | 75 typedef rtc::TypedMessageData<Request> MessageData; |
78 | 76 |
79 FakeIdentityService() : should_fail_(false) {} | 77 FakeDtlsIdentityStoreRSA() : should_fail_(false) {} |
80 | 78 |
81 void set_should_fail(bool should_fail) { | 79 void set_should_fail(bool should_fail) { |
82 should_fail_ = should_fail; | 80 should_fail_ = should_fail; |
83 } | 81 } |
84 | 82 |
85 // DTLSIdentityServiceInterface implemenation. | 83 void Initialize() override { } |
86 virtual bool RequestIdentity(const std::string& identity_name, | 84 |
87 const std::string& common_name, | 85 void RequestIdentity(rtc::KeyType key_type, |
88 DTLSIdentityRequestObserver* observer) { | 86 webrtc::DtlsIdentityRequestObserver* observer) override { |
89 MessageData* msg = new MessageData(Request(common_name, observer)); | 87 // TODO(hbos): Should be able to generate KT_ECDSA too. |
| 88 DCHECK(key_type == rtc::KT_RSA || should_fail_); |
| 89 MessageData* msg = new MessageData(Request(observer)); |
90 if (should_fail_) { | 90 if (should_fail_) { |
91 rtc::Thread::Current()->Post(this, MSG_FAILURE, msg); | 91 rtc::Thread::Current()->Post(this, MSG_FAILURE, msg); |
92 } else { | 92 } else { |
93 rtc::Thread::Current()->Post(this, MSG_SUCCESS, msg); | 93 rtc::Thread::Current()->Post(this, MSG_SUCCESS, msg); |
94 } | 94 } |
95 return true; | 95 } |
| 96 |
| 97 bool HasFreeIdentityForTesting() const override { |
| 98 return false; |
96 } | 99 } |
97 | 100 |
98 private: | 101 private: |
99 enum { | 102 enum { |
100 MSG_SUCCESS, | 103 MSG_SUCCESS, |
101 MSG_FAILURE, | 104 MSG_FAILURE, |
102 }; | 105 }; |
103 | 106 |
104 // rtc::MessageHandler implementation. | 107 // rtc::MessageHandler implementation. |
105 void OnMessage(rtc::Message* msg) { | 108 void OnMessage(rtc::Message* msg) { |
106 FakeIdentityService::MessageData* message_data = | 109 MessageData* message_data = static_cast<MessageData*>(msg->pdata); |
107 static_cast<FakeIdentityService::MessageData*>(msg->pdata); | 110 webrtc::DtlsIdentityRequestObserver* observer = message_data->data().observe
r.get(); |
108 DTLSIdentityRequestObserver* observer = message_data->data().observer.get(); | |
109 switch (msg->message_id) { | 111 switch (msg->message_id) { |
110 case MSG_SUCCESS: { | 112 case MSG_SUCCESS: { |
111 std::string cert, key; | 113 std::string cert; |
112 GenerateIdentity(message_data->data().common_name, &cert, &key); | 114 std::string key; |
| 115 rtc::SSLIdentity::PemToDer("CERTIFICATE", kCERT_PEM, &cert); |
| 116 rtc::SSLIdentity::PemToDer("RSA PRIVATE KEY", kRSA_PRIVATE_KEY_PEM, |
| 117 &key); |
113 observer->OnSuccess(cert, key); | 118 observer->OnSuccess(cert, key); |
114 break; | 119 break; |
115 } | 120 } |
116 case MSG_FAILURE: | 121 case MSG_FAILURE: |
117 observer->OnFailure(0); | 122 observer->OnFailure(0); |
118 break; | 123 break; |
119 } | 124 } |
120 delete message_data; | 125 delete message_data; |
121 } | 126 } |
122 | 127 |
123 void GenerateIdentity( | |
124 const std::string& common_name, | |
125 std::string* der_cert, | |
126 std::string* der_key) { | |
127 rtc::SSLIdentity::PemToDer("CERTIFICATE", kCERT_PEM, der_cert); | |
128 rtc::SSLIdentity::PemToDer("RSA PRIVATE KEY", | |
129 kRSA_PRIVATE_KEY_PEM, | |
130 der_key); | |
131 } | |
132 | |
133 bool should_fail_; | 128 bool should_fail_; |
134 }; | 129 }; |
135 | 130 |
136 #endif // TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_ | 131 #endif // TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_ |
OLD | NEW |