Let SSLContext::setCipherList accept generic container type.
[folly.git] / folly / io / async / SSLOptions.cpp
1 /*
2  * Copyright 2004-present Facebook, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <folly/io/async/SSLOptions.h>
18 #include <folly/Format.h>
19 #include <folly/Logging.h>
20
21 namespace folly {
22 namespace ssl {
23
24 namespace ssl_options_detail {
25 void logDfatal(std::exception const& e) {
26   LOG(DFATAL) << exceptionStr(e);
27 }
28 }
29
30 constexpr std::array<const char*, 12> SSLCommonOptions::kCipherList;
31 constexpr std::array<const char*, 8> SSLCommonOptions::kSignatureAlgorithms;
32
33 void SSLCommonOptions::setClientOptions(SSLContext& ctx) {
34 #ifdef SSL_MODE_HANDSHAKE_CUTTHROUGH
35   ctx.enableFalseStart();
36 #endif
37
38   X509VerifyParam param(X509_VERIFY_PARAM_new());
39   X509_VERIFY_PARAM_set_flags(param.get(), X509_V_FLAG_X509_STRICT);
40   try {
41     ctx.setX509VerifyParam(param);
42   } catch (std::runtime_error const& e) {
43     LOG(DFATAL) << exceptionStr(e);
44   }
45
46   try {
47     ctx.setClientECCurvesList({"P-256", "P-384"});
48   } catch (std::runtime_error const& e) {
49     LOG(DFATAL) << exceptionStr(e);
50   }
51
52   setCipherSuites<SSLCommonOptions>(ctx);
53   setSignatureAlgorithms<SSLCommonOptions>(ctx);
54 }
55
56 } // namespace ssl
57 } // namespace folly