Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / libjingle / source / talk / app / webrtc / test / fakedtlsidentityservice.h
1 /*
2  * libjingle
3  * Copyright 2013, Google Inc.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  *  1. Redistributions of source code must retain the above copyright notice,
9  *     this list of conditions and the following disclaimer.
10  *  2. Redistributions in binary form must reproduce the above copyright notice,
11  *     this list of conditions and the following disclaimer in the documentation
12  *     and/or other materials provided with the distribution.
13  *  3. The name of the author may not be used to endorse or promote products
14  *     derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
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,
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
25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  *
27  */
28
29 #ifndef TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_
30 #define TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_
31
32 #include "talk/app/webrtc/peerconnectioninterface.h"
33
34 static const char kRSA_PRIVATE_KEY_PEM[] =
35     "-----BEGIN RSA PRIVATE KEY-----\n"
36     "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMYRkbhmI7kVA/rM\n"
37     "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n"
38     "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n"
39     "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAECgYAvgOs4FJcgvp+TuREx7YtiYVsH\n"
40     "mwQPTum2z/8VzWGwR8BBHBvIpVe1MbD/Y4seyI2aco/7UaisatSgJhsU46/9Y4fq\n"
41     "2TwXH9QANf4at4d9n/R6rzwpAJOpgwZgKvdQjkfrKTtgLV+/dawvpxUYkRH4JZM1\n"
42     "CVGukMfKNrSVH4Ap4QJBAOJmGV1ASPnB4r4nc99at7JuIJmd7fmuVUwUgYi4XgaR\n"
43     "WhScBsgYwZ/JoywdyZJgnbcrTDuVcWG56B3vXbhdpMsCQQDf9zeJrjnPZ3Cqm79y\n"
44     "kdqANep0uwZciiNiWxsQrCHztywOvbFhdp8iYVFG9EK8DMY41Y5TxUwsHD+67zao\n"
45     "ZNqJAkEA1suLUP/GvL8IwuRneQd2tWDqqRQ/Td3qq03hP7e77XtF/buya3Ghclo5\n"
46     "54czUR89QyVfJEC6278nzA7n2h1uVQJAcG6mztNL6ja/dKZjYZye2CY44QjSlLo0\n"
47     "MTgTSjdfg/28fFn2Jjtqf9Pi/X+50LWI/RcYMC2no606wRk9kyOuIQJBAK6VSAim\n"
48     "1pOEjsYQn0X5KEIrz1G3bfCbB848Ime3U2/FWlCHMr6ch8kCZ5d1WUeJD3LbwMNG\n"
49     "UCXiYxSsu20QNVw=\n"
50     "-----END RSA PRIVATE KEY-----\n";
51
52 static const char kCERT_PEM[] =
53     "-----BEGIN CERTIFICATE-----\n"
54     "MIIBmTCCAQKgAwIBAgIEbzBSAjANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDEwZX\n"
55     "ZWJSVEMwHhcNMTQwMTAyMTgyNDQ3WhcNMTQwMjAxMTgyNDQ3WjARMQ8wDQYDVQQD\n"
56     "EwZXZWJSVEMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYRkbhmI7kVA/rM\n"
57     "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n"
58     "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n"
59     "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAUflI\n"
60     "VUe5Krqf5RVa5C3u/UTAOAUJBiDS3VANTCLBxjuMsvqOG0WvaYWP3HYPgrz0jXK2\n"
61     "LJE/mGw3MyFHEqi81jh95J+ypl6xKW6Rm8jKLR87gUvCaVYn/Z4/P3AqcQTB7wOv\n"
62     "UD0A8qfhfDM+LK6rPAnCsVN0NRDY3jvd6rzix9M=\n"
63     "-----END CERTIFICATE-----\n";
64
65 using webrtc::DTLSIdentityRequestObserver;
66
67 class FakeIdentityService : public webrtc::DTLSIdentityServiceInterface,
68                             public talk_base::MessageHandler {
69  public:
70   struct Request {
71     Request(const std::string& common_name,
72             DTLSIdentityRequestObserver* observer)
73         : common_name(common_name), observer(observer) {}
74
75     std::string common_name;
76     talk_base::scoped_refptr<DTLSIdentityRequestObserver> observer;
77   };
78   typedef talk_base::TypedMessageData<Request> MessageData;
79
80   FakeIdentityService() : should_fail_(false) {}
81
82   void set_should_fail(bool should_fail) {
83     should_fail_ = should_fail;
84   }
85
86   // DTLSIdentityServiceInterface implemenation.
87   virtual bool RequestIdentity(const std::string& identity_name,
88                                const std::string& common_name,
89                                DTLSIdentityRequestObserver* observer) {
90     MessageData* msg = new MessageData(Request(common_name, observer));
91     if (should_fail_) {
92       talk_base::Thread::Current()->Post(this, MSG_FAILURE, msg);
93     } else {
94       talk_base::Thread::Current()->Post(this, MSG_SUCCESS, msg);
95     }
96     return true;
97   }
98
99  private:
100   enum {
101     MSG_SUCCESS,
102     MSG_FAILURE,
103   };
104
105   // talk_base::MessageHandler implementation.
106   void OnMessage(talk_base::Message* msg) {
107     FakeIdentityService::MessageData* message_data =
108         static_cast<FakeIdentityService::MessageData*>(msg->pdata);
109     DTLSIdentityRequestObserver* observer = message_data->data().observer.get();
110     switch (msg->message_id) {
111       case MSG_SUCCESS: {
112         std::string cert, key;
113         GenerateIdentity(message_data->data().common_name, &cert, &key);
114         observer->OnSuccess(cert, key);
115         break;
116       }
117       case MSG_FAILURE:
118         observer->OnFailure(0);
119         break;
120     }
121     delete message_data;
122   }
123
124   void GenerateIdentity(
125       const std::string& common_name,
126       std::string* der_cert,
127       std::string* der_key) {
128     talk_base::SSLIdentity::PemToDer("CERTIFICATE", kCERT_PEM, der_cert);
129     talk_base::SSLIdentity::PemToDer("RSA PRIVATE KEY",
130                                      kRSA_PRIVATE_KEY_PEM,
131                                      der_key);
132   }
133
134   bool should_fail_;
135 };
136
137 #endif  // TALK_APP_WEBRTC_TEST_FAKEDTLSIDENTITYSERVICE_H_