Treat OpenSSL as a non-portable include
[folly.git] / folly / ssl / OpenSSLCertUtils.h
1 /*
2  * Copyright 2017 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 #pragma once
17
18 #include <string>
19 #include <vector>
20
21 #include <folly/Optional.h>
22 #include <folly/portability/OpenSSL.h>
23
24 namespace folly {
25 namespace ssl {
26
27 class OpenSSLCertUtils {
28  public:
29   // Note: non-const until OpenSSL 1.1.0
30   static Optional<std::string> getCommonName(X509& x509);
31
32   static std::vector<std::string> getSubjectAltNames(X509& x509);
33
34   /*
35    * Return the subject name, if any, from the cert
36    * @param x509    Reference to an X509
37    * @return a folly::Optional<std::string>, or folly::none
38    */
39   static Optional<std::string> getSubject(X509& x509);
40
41   /*
42    * Return the issuer name, if any, from the cert
43    * @param x509    Reference to an X509
44    * @return a folly::Optional<std::string>, or folly::none
45    */
46   static Optional<std::string> getIssuer(X509& x509);
47
48   /*
49    * Get a string representation of the not-before time on the certificate
50    */
51   static std::string getNotBeforeTime(X509& x509);
52
53   /*
54    * Get a string representation of the not-after (expiration) time
55    */
56   static std::string getNotAfterTime(X509& x509);
57
58   /*
59    * Summarize the CN, Subject, Issuer, Validity, and extensions as a string
60    */
61   static folly::Optional<std::string> toString(X509& x509);
62
63  private:
64   static std::string getDateTimeStr(const ASN1_TIME* time);
65 };
66 }
67 }