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 <string> |
| 32 |
| 33 #include "talk/app/webrtc/dtlsidentitystore.h" |
31 #include "talk/app/webrtc/peerconnectioninterface.h" | 34 #include "talk/app/webrtc/peerconnectioninterface.h" |
32 | 35 |
33 static const char kRSA_PRIVATE_KEY_PEM[] = | 36 static const char kRSA_PRIVATE_KEY_PEM[] = |
34 "-----BEGIN RSA PRIVATE KEY-----\n" | 37 "-----BEGIN RSA PRIVATE KEY-----\n" |
35 "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMYRkbhmI7kVA/rM\n" | 38 "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMYRkbhmI7kVA/rM\n" |
36 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" | 39 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" |
37 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" | 40 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" |
38 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAECgYAvgOs4FJcgvp+TuREx7YtiYVsH\n" | 41 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAECgYAvgOs4FJcgvp+TuREx7YtiYVsH\n" |
39 "mwQPTum2z/8VzWGwR8BBHBvIpVe1MbD/Y4seyI2aco/7UaisatSgJhsU46/9Y4fq\n" | 42 "mwQPTum2z/8VzWGwR8BBHBvIpVe1MbD/Y4seyI2aco/7UaisatSgJhsU46/9Y4fq\n" |
40 "2TwXH9QANf4at4d9n/R6rzwpAJOpgwZgKvdQjkfrKTtgLV+/dawvpxUYkRH4JZM1\n" | 43 "2TwXH9QANf4at4d9n/R6rzwpAJOpgwZgKvdQjkfrKTtgLV+/dawvpxUYkRH4JZM1\n" |
(...skipping 13 matching lines...) Expand all Loading... |
54 "ZWJSVEMwHhcNMTQwMTAyMTgyNDQ3WhcNMTQwMjAxMTgyNDQ3WjARMQ8wDQYDVQQD\n" | 57 "ZWJSVEMwHhcNMTQwMTAyMTgyNDQ3WhcNMTQwMjAxMTgyNDQ3WjARMQ8wDQYDVQQD\n" |
55 "EwZXZWJSVEMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYRkbhmI7kVA/rM\n" | 58 "EwZXZWJSVEMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYRkbhmI7kVA/rM\n" |
56 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" | 59 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" |
57 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" | 60 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" |
58 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAUflI\n" | 61 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAUflI\n" |
59 "VUe5Krqf5RVa5C3u/UTAOAUJBiDS3VANTCLBxjuMsvqOG0WvaYWP3HYPgrz0jXK2\n" | 62 "VUe5Krqf5RVa5C3u/UTAOAUJBiDS3VANTCLBxjuMsvqOG0WvaYWP3HYPgrz0jXK2\n" |
60 "LJE/mGw3MyFHEqi81jh95J+ypl6xKW6Rm8jKLR87gUvCaVYn/Z4/P3AqcQTB7wOv\n" | 63 "LJE/mGw3MyFHEqi81jh95J+ypl6xKW6Rm8jKLR87gUvCaVYn/Z4/P3AqcQTB7wOv\n" |
61 "UD0A8qfhfDM+LK6rPAnCsVN0NRDY3jvd6rzix9M=\n" | 64 "UD0A8qfhfDM+LK6rPAnCsVN0NRDY3jvd6rzix9M=\n" |
62 "-----END CERTIFICATE-----\n"; | 65 "-----END CERTIFICATE-----\n"; |
63 | 66 |
64 using webrtc::DTLSIdentityRequestObserver; | 67 class FakeDtlsIdentityStore : public webrtc::DtlsIdentityStoreInterface, |
| 68 public rtc::MessageHandler { |
| 69 public: |
| 70 typedef rtc::TypedMessageData<rtc::scoped_refptr< |
| 71 webrtc::DtlsIdentityRequestObserver> > MessageData; |
65 | 72 |
66 class FakeIdentityService : public webrtc::DTLSIdentityServiceInterface, | 73 FakeDtlsIdentityStore() : should_fail_(false) {} |
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 }; | |
77 typedef rtc::TypedMessageData<Request> MessageData; | |
78 | |
79 FakeIdentityService() : should_fail_(false) {} | |
80 | 74 |
81 void set_should_fail(bool should_fail) { | 75 void set_should_fail(bool should_fail) { |
82 should_fail_ = should_fail; | 76 should_fail_ = should_fail; |
83 } | 77 } |
84 | 78 |
85 // DTLSIdentityServiceInterface implemenation. | 79 void Initialize() override { } |
86 virtual bool RequestIdentity(const std::string& identity_name, | 80 |
87 const std::string& common_name, | 81 void RequestIdentity(rtc::KeyType key_type, |
88 DTLSIdentityRequestObserver* observer) { | 82 webrtc::DtlsIdentityRequestObserver* observer) override { |
89 MessageData* msg = new MessageData(Request(common_name, observer)); | 83 // TODO(hbos): Should be able to generate KT_ECDSA too. |
| 84 DCHECK(key_type == rtc::KT_RSA || should_fail_); |
| 85 MessageData* msg = new MessageData( |
| 86 rtc::scoped_refptr<webrtc::DtlsIdentityRequestObserver>(observer)); |
90 if (should_fail_) { | 87 if (should_fail_) { |
91 rtc::Thread::Current()->Post(this, MSG_FAILURE, msg); | 88 rtc::Thread::Current()->Post(this, MSG_FAILURE, msg); |
92 } else { | 89 } else { |
93 rtc::Thread::Current()->Post(this, MSG_SUCCESS, msg); | 90 rtc::Thread::Current()->Post(this, MSG_SUCCESS, msg); |
94 } | 91 } |
95 return true; | 92 } |
| 93 |
| 94 bool HasFreeIdentityForTesting() const override { |
| 95 return false; |
96 } | 96 } |
97 | 97 |
98 private: | 98 private: |
99 enum { | 99 enum { |
100 MSG_SUCCESS, | 100 MSG_SUCCESS, |
101 MSG_FAILURE, | 101 MSG_FAILURE, |
102 }; | 102 }; |
103 | 103 |
104 // rtc::MessageHandler implementation. | 104 // rtc::MessageHandler implementation. |
105 void OnMessage(rtc::Message* msg) { | 105 void OnMessage(rtc::Message* msg) { |
106 FakeIdentityService::MessageData* message_data = | 106 MessageData* message_data = static_cast<MessageData*>(msg->pdata); |
107 static_cast<FakeIdentityService::MessageData*>(msg->pdata); | 107 webrtc::DtlsIdentityRequestObserver* observer = |
108 DTLSIdentityRequestObserver* observer = message_data->data().observer.get(); | 108 message_data->data().get(); |
109 switch (msg->message_id) { | 109 switch (msg->message_id) { |
110 case MSG_SUCCESS: { | 110 case MSG_SUCCESS: { |
111 std::string cert, key; | 111 std::string cert; |
112 GenerateIdentity(message_data->data().common_name, &cert, &key); | 112 std::string key; |
| 113 rtc::SSLIdentity::PemToDer("CERTIFICATE", kCERT_PEM, &cert); |
| 114 rtc::SSLIdentity::PemToDer("RSA PRIVATE KEY", kRSA_PRIVATE_KEY_PEM, |
| 115 &key); |
113 observer->OnSuccess(cert, key); | 116 observer->OnSuccess(cert, key); |
114 break; | 117 break; |
115 } | 118 } |
116 case MSG_FAILURE: | 119 case MSG_FAILURE: |
117 observer->OnFailure(0); | 120 observer->OnFailure(0); |
118 break; | 121 break; |
119 } | 122 } |
120 delete message_data; | 123 delete message_data; |
121 } | 124 } |
122 | 125 |
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_; | 126 bool should_fail_; |
134 }; | 127 }; |
135 | 128 |
136 #endif // TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_ | 129 #endif // TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_ |
OLD | NEW |